summaryrefslogtreecommitdiff
path: root/libs/geometry
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-06-25 22:59:01 +0000
committer <>2013-09-27 11:49:28 +0000
commit8c4528713d907ee2cfd3bfcbbad272c749867f84 (patch)
treec09e2ce80f47b90c85cc720f5139089ad9c8cfff /libs/geometry
downloadboost-tarball-8c4528713d907ee2cfd3bfcbbad272c749867f84.tar.gz
Imported from /home/lorry/working-area/delta_boost-tarball/boost_1_54_0.tar.bz2.boost_1_54_0baserock/morph
Diffstat (limited to 'libs/geometry')
-rw-r--r--libs/geometry/doc/Jamfile.v245
-rw-r--r--libs/geometry/doc/about_documentation.qbk116
-rw-r--r--libs/geometry/doc/acknowledgments.qbk43
-rw-r--r--libs/geometry/doc/compiling.qbk136
-rw-r--r--libs/geometry/doc/concept/box.qbk42
-rw-r--r--libs/geometry/doc/concept/linestring.qbk45
-rw-r--r--libs/geometry/doc/concept/multi_linestring.qbk31
-rw-r--r--libs/geometry/doc/concept/multi_point.qbk31
-rw-r--r--libs/geometry/doc/concept/multi_polygon.qbk44
-rw-r--r--libs/geometry/doc/concept/point.qbk49
-rw-r--r--libs/geometry/doc/concept/polygon.qbk71
-rw-r--r--libs/geometry/doc/concept/ring.qbk46
-rw-r--r--libs/geometry/doc/concept/segment.qbk35
-rw-r--r--libs/geometry/doc/copyright_note_policy.txt41
-rw-r--r--libs/geometry/doc/design_rationale.qbk651
-rw-r--r--libs/geometry/doc/doxy/Doxyfile318
-rwxr-xr-xlibs/geometry/doc/doxy/doxygen_enhance.py33
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_footer.html23
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_header.html24
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp68
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/07_graph_route_example_svg.pngbin0 -> 74909 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/07_graph_route_example_text.pngbin0 -> 33354 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/centroid_polygon.pngbin0 -> 11860 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/centroid_ring.pngbin0 -> 9504 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/clip_linestring.pngbin0 -> 12485 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/clip_polygon.pngbin0 -> 15628 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/clip_segment_segment.pngbin0 -> 9015 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/combine_box_box.pngbin0 -> 2378 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/combine_box_point.pngbin0 -> 1872 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/convexhull_polygon_polygon.pngbin0 -> 14674 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/envelope_polygon.pngbin0 -> 12212 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/linestring.pngbin0 -> 8095 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/multi_polygon.pngbin0 -> 18629 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/output_main.pngbin0 -> 1289 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/polygon.pngbin0 -> 16173 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/robust_float.pngbin0 -> 33394 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/robust_stars.pngbin0 -> 119498 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/robust_triangle_box.pngbin0 -> 15119 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/robust_triangles.pngbin0 -> 32323 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/set_a_ac.pngbin0 -> 15798 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/set_adapt_turns.pngbin0 -> 11468 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/set_int_right_union_left.pngbin0 -> 23900 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/simplify_example.pngbin0 -> 13453 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/simplify_linestring.pngbin0 -> 10037 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/centroid_polygon.svg107
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/centroid_ring.svg105
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/clip_linestring.svg132
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/clip_polygon.svg115
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/clip_polygon_2.svg88
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/combine_box_box.svg114
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/combine_box_point.svg111
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/convexhull_polygon_polygon.svg100
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/envelope_polygon.svg100
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/geometries.svg90
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/intersection_results.svg495
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/intersection_segment_segment.svg152
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/linestring_example.svg108
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/polygon_example.svg121
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/polygon_example1.svg111
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/ring.svg92
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/simplify_example.svg81
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/simplify_linestring.svg100
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/union_box_box.svg107
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/within_polygon.svg125
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/within_polygon_example.svg106
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/source/within_ring.svg127
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/speed_comparison.pngbin0 -> 10229 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_convex_hull_cities.pngbin0 -> 11707 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_convex_hull_country.pngbin0 -> 17179 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_countries.pngbin0 -> 90377 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_polygon_box.pngbin0 -> 15835 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_polygon_ring.pngbin0 -> 28128 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_ring_box.pngbin0 -> 11951 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_ring_ring.pngbin0 -> 24320 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_roads.pngbin0 -> 36509 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_simplify_country.pngbin0 -> 27598 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_simplify_road.pngbin0 -> 9998 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_union_polygon_box.pngbin0 -> 17850 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_union_polygon_ring.pngbin0 -> 29070 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_union_ring_box.pngbin0 -> 14070 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/svg_union_ring_ring.pngbin0 -> 25725 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/union_box_box.pngbin0 -> 1698 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/within_polygon.pngbin0 -> 12341 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/within_polygon_example.pngbin0 -> 16116 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/within_ring.pngbin0 -> 10074 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/x01_qt_example_output.pngbin0 -> 8445 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/images/x02_numeric_adaptor_example_output.pngbin0 -> 8828 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/pages/doxygen_b_sets.hpp214
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/pages/doxygen_c_strategy_rationale.hpp79
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/pages/doxygen_d_robustness.hpp150
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/pages/doxygen_examples.hpp235
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/pages/doxygen_mainpage.hpp105
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/pages/doxygen_pages.hpp436
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/pages/doxygen_z_article09.hpp238
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/boost.vsprops20
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_1.cpp469
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_1.vcproj194
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_2.cpp155
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_2.vcproj182
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_3.cpp74
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_3.vcproj182
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.cpp329
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.vcproj182
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_5.cpp138
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_5.vcproj182
-rw-r--r--libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_examples.sln43
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/07_graph_route_example_svg.pngbin0 -> 74909 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/07_graph_route_example_text.pngbin0 -> 33354 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/centroid_polygon.pngbin0 -> 11860 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/centroid_ring.pngbin0 -> 9504 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/clip_linestring.pngbin0 -> 12485 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/clip_polygon.pngbin0 -> 15628 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/combine_box_box.pngbin0 -> 2378 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/combine_box_point.pngbin0 -> 1872 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/doxygen.css1184
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/doxygen.pngbin0 -> 3779 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/envelope_polygon.pngbin0 -> 12212 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/images/accepted_by_boost.pngbin0 -> 23066 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/images/draft.pngbin0 -> 17454 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/images/ggl-logo-big.pngbin0 -> 10540 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/images/proposed_boost.pngbin0 -> 7253 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/output_main.pngbin0 -> 1289 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/set_a_ac.pngbin0 -> 15798 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/set_adapt_turns.pngbin0 -> 11468 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/set_int_right_union_left.pngbin0 -> 23900 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/simplify_linestring.pngbin0 -> 10037 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_convex_hull_cities.pngbin0 -> 11707 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_convex_hull_country.pngbin0 -> 17179 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_countries.pngbin0 -> 90377 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_polygon_box.pngbin0 -> 15835 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_polygon_ring.pngbin0 -> 28128 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_ring_box.pngbin0 -> 11951 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_ring_ring.pngbin0 -> 24320 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_roads.pngbin0 -> 36509 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_simplify_country.pngbin0 -> 27598 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_simplify_road.pngbin0 -> 9998 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_union_polygon_box.pngbin0 -> 17850 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_union_polygon_ring.pngbin0 -> 29070 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_union_ring_box.pngbin0 -> 14070 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/svg_union_ring_ring.pngbin0 -> 25725 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/tab_b.gifbin0 -> 35 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/tab_l.gifbin0 -> 706 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/tab_r.gifbin0 -> 2585 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/tabs.css60
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/within_polygon.pngbin0 -> 12341 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/within_ring.pngbin0 -> 10074 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/x01_qt_example_output.pngbin0 -> 8445 bytes
-rw-r--r--libs/geometry/doc/doxy/doxygen_output/html/x02_numeric_adaptor_example_output.pngbin0 -> 8828 bytes
-rw-r--r--libs/geometry/doc/doxy/make_documentation.bat17
-rw-r--r--libs/geometry/doc/example_adapting_a_legacy_geometry_object_model.qbk587
-rw-r--r--libs/geometry/doc/generated/append_status.qbk14
-rw-r--r--libs/geometry/doc/generated/area_status.qbk13
-rw-r--r--libs/geometry/doc/generated/boost-no-inspect1
-rw-r--r--libs/geometry/doc/generated/buffer_status.qbk13
-rw-r--r--libs/geometry/doc/generated/centroid_status.qbk13
-rw-r--r--libs/geometry/doc/generated/clear_status.qbk13
-rw-r--r--libs/geometry/doc/generated/convert_status.qbk13
-rw-r--r--libs/geometry/doc/generated/convex_hull_status.qbk13
-rw-r--r--libs/geometry/doc/generated/correct_status.qbk13
-rw-r--r--libs/geometry/doc/generated/covered_by_status.qbk13
-rw-r--r--libs/geometry/doc/generated/disjoint_status.qbk13
-rw-r--r--libs/geometry/doc/generated/distance_status.qbk13
-rw-r--r--libs/geometry/doc/generated/envelope_status.qbk13
-rw-r--r--libs/geometry/doc/generated/equals_status.qbk13
-rw-r--r--libs/geometry/doc/generated/expand_status.qbk13
-rw-r--r--libs/geometry/doc/generated/for_each_point_status.qbk13
-rw-r--r--libs/geometry/doc/generated/for_each_segment_status.qbk13
-rw-r--r--libs/geometry/doc/generated/length_status.qbk13
-rw-r--r--libs/geometry/doc/generated/num_geometries_status.qbk13
-rw-r--r--libs/geometry/doc/generated/num_interior_rings_status.qbk13
-rw-r--r--libs/geometry/doc/generated/num_points_status.qbk13
-rw-r--r--libs/geometry/doc/generated/overlaps_status.qbk13
-rw-r--r--libs/geometry/doc/generated/perimeter_status.qbk13
-rw-r--r--libs/geometry/doc/generated/reverse_status.qbk13
-rw-r--r--libs/geometry/doc/generated/simplify_status.qbk13
-rw-r--r--libs/geometry/doc/generated/transform_status.qbk13
-rw-r--r--libs/geometry/doc/generated/unique_status.qbk13
-rw-r--r--libs/geometry/doc/generated/within_status.qbk13
-rw-r--r--libs/geometry/doc/generated/wkt_status.qbk13
-rw-r--r--libs/geometry/doc/geometry.qbk145
-rw-r--r--libs/geometry/doc/html/geometry/aboutdoc.html281
-rw-r--r--libs/geometry/doc/html/geometry/acknowledgments.html75
-rw-r--r--libs/geometry/doc/html/geometry/compilation.html259
-rw-r--r--libs/geometry/doc/html/geometry/design.html843
-rw-r--r--libs/geometry/doc/html/geometry/examples.html49
-rw-r--r--libs/geometry/doc/html/geometry/examples/example__adapting_a_legacy_geometry_object_model.html256
-rw-r--r--libs/geometry/doc/html/geometry/examples/example_source_code__adapting_a_legacy_geometry_object_model.html536
-rw-r--r--libs/geometry/doc/html/geometry/indexes.html47
-rw-r--r--libs/geometry/doc/html/geometry/indexes/alphabetical_index.html483
-rw-r--r--libs/geometry/doc/html/geometry/indexes/matrix.html714
-rw-r--r--libs/geometry/doc/html/geometry/introduction.html111
-rw-r--r--libs/geometry/doc/html/geometry/quickstart.html232
-rw-r--r--libs/geometry/doc/html/geometry/reference.html234
-rw-r--r--libs/geometry/doc/html/geometry/reference/access.html49
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/exterior_ring.html48
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/exterior_ring/exterior_ring_1.html136
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/exterior_ring/exterior_ring_1_const_version.html137
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/get.html49
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/get/get_1.html275
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/get/get_1_with_index.html292
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/get/get_as_radian.html167
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/interior_rings.html48
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/interior_rings/interior_rings_1.html136
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/interior_rings/interior_rings_1_const_version.html137
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/set.html49
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/set/set_2.html298
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/set/set_2_with_index.html302
-rw-r--r--libs/geometry/doc/html/geometry/reference/access/set/set_from_radian.html180
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted.html52
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_array.html123
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_fusion.html130
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_polygon.html53
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/point_data.html108
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/polygon_data.html108
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/polygon_with_holes_data.html108
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/rectangle_data.html108
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_range.html53
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_range/filtered.html150
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_range/reversed.html129
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_range/sliced.html136
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_range/strided.html142
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/boost_tuple.html134
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/c_array.html113
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register.html64
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box.html189
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box_2d_4values.html214
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box_templated.html174
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_linestring.html154
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_linestring_templated.html150
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_linestring.html151
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_linestring_templated.html117
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_point.html147
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_point_templated.html150
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_polygon.html151
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_polygon_templated.html117
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d.html240
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d_const.html157
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d_get_set.html182
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d.html168
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d_const.html169
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d_get_set.html206
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring.html157
-rw-r--r--libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring_templated.html152
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms.html79
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/append.html543
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/area.html48
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/area/area_1.html448
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/area/area_2_with_strategy.html481
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/assign.html55
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/assign/assign.html227
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_inverse.html186
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_points.html264
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_3_2_coordinate_values.html237
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_4_3_coordinate_values.html229
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_5_4_coordinate_values.html211
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_zero.html137
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/buffer.html47
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/buffer/buffer.html262
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/buffer/return_buffer.html216
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/centroid.html51
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/centroid/centroid_2.html515
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/centroid/centroid_3_with_strategy.html501
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/centroid/return_centroid_1.html474
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/centroid/return_centroid_2_with_strategy.html509
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/clear.html481
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/convert.html802
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/convex_hull.html357
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/correct.html431
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/covered_by.html48
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/covered_by/covered_by_2.html762
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/covered_by/covered_by_3_with_strategy.html786
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/difference.html388
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/disjoint.html168
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/distance.html49
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/distance/comparable_distance.html257
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/distance/distance_2.html784
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/distance/distance_3_with_strategy.html220
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/envelope.html47
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/envelope/envelope.html217
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/envelope/return_envelope.html233
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/equals.html779
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/expand.html286
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/for_each.html47
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/for_each/for_each_point.html273
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/for_each/for_each_segment.html261
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/intersection.html339
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/intersects.html49
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/intersects/intersects_1_one_geometry.html188
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/intersects/intersects_2_two_geometries.html212
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/length.html48
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/length/length_1.html256
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/length/length_2_with_strategy.html292
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/make.html51
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/make/make_2_2_coordinate_values.html249
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/make/make_3_3_coordinate_values.html242
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/make/make_inverse.html195
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/make/make_zero.html144
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/num_geometries.html249
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/num_interior_rings.html270
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/num_points.html341
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/overlaps.html156
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/perimeter.html48
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/perimeter/perimeter_1.html229
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/perimeter/perimeter_2_with_strategy.html254
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/reverse.html357
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/simplify.html48
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/simplify/simplify_3.html291
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/simplify/simplify_4_with_strategy.html200
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/sym_difference.html376
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/touches.html49
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/touches/touches_1_one_geometry.html158
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/touches/touches_2_two_geometries.html183
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/transform.html48
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/transform/transform_2.html297
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/transform/transform_3_with_strategy.html247
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/union_.html322
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/unique.html323
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/within.html48
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/within/within_2.html812
-rw-r--r--libs/geometry/doc/html/geometry/reference/algorithms/within/within_3_with_strategy.html817
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic.html56
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/add_point.html155
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/add_value.html147
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/assign_point.html174
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/assign_value.html147
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/divide_point.html155
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/divide_value.html147
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/dot_product.html154
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/multiply_point.html155
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/multiply_value.html147
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/subtract_point.html155
-rw-r--r--libs/geometry/doc/html/geometry/reference/arithmetic/subtract_value.html147
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts.html60
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts/concept_box.html113
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts/concept_linestring.html120
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts/concept_multi_linestring.html84
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts/concept_multi_point.html84
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts/concept_multi_polygon.html106
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts/concept_point.html137
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts/concept_polygon.html172
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts/concept_ring.html138
-rw-r--r--libs/geometry/doc/html/geometry/reference/concepts/concept_segment.html111
-rw-r--r--libs/geometry/doc/html/geometry/reference/constants.html47
-rw-r--r--libs/geometry/doc/html/geometry/reference/constants/max_corner.html149
-rw-r--r--libs/geometry/doc/html/geometry/reference/constants/min_corner.html149
-rw-r--r--libs/geometry/doc/html/geometry/reference/core.html59
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/closure.html168
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/coordinate_system.html147
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/coordinate_type.html147
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/cs_tag.html109
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/degree.html125
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/dimension.html153
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/interior_type.html163
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/is_radian.html110
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/point_order.html168
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/point_type.html148
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/radian.html125
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/ring_type.html170
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/tag.html270
-rw-r--r--libs/geometry/doc/html/geometry/reference/core/tag_cast.html317
-rw-r--r--libs/geometry/doc/html/geometry/reference/cs.html49
-rw-r--r--libs/geometry/doc/html/geometry/reference/cs/cs_cartesian.html85
-rw-r--r--libs/geometry/doc/html/geometry/reference/cs/cs_geographic.html117
-rw-r--r--libs/geometry/doc/html/geometry/reference/cs/cs_spherical.html117
-rw-r--r--libs/geometry/doc/html/geometry/reference/cs/cs_spherical_equatorial.html119
-rw-r--r--libs/geometry/doc/html/geometry/reference/enumerations.html47
-rw-r--r--libs/geometry/doc/html/geometry/reference/enumerations/closure_selector.html147
-rw-r--r--libs/geometry/doc/html/geometry/reference/enumerations/order_selector.html145
-rw-r--r--libs/geometry/doc/html/geometry/reference/exceptions.html47
-rw-r--r--libs/geometry/doc/html/geometry/reference/exceptions/centroid_exception.html183
-rw-r--r--libs/geometry/doc/html/geometry/reference/exceptions/exception.html76
-rw-r--r--libs/geometry/doc/html/geometry/reference/io.html47
-rw-r--r--libs/geometry/doc/html/geometry/reference/io/svg.html47
-rw-r--r--libs/geometry/doc/html/geometry/reference/io/svg/svg.html161
-rw-r--r--libs/geometry/doc/html/geometry/reference/io/svg/svg_mapper.html421
-rw-r--r--libs/geometry/doc/html/geometry/reference/io/wkt.html41
-rw-r--r--libs/geometry/doc/html/geometry/reference/iterators.html47
-rw-r--r--libs/geometry/doc/html/geometry/reference/iterators/closing_iterator.html243
-rw-r--r--libs/geometry/doc/html/geometry/reference/iterators/ever_circling_iterator.html231
-rw-r--r--libs/geometry/doc/html/geometry/reference/models.html56
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_box.html277
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_d2_point_xy.html332
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_linestring.html234
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_multi_linestring.html156
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_multi_point.html225
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_multi_polygon.html156
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_point.html386
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_polygon.html339
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_referring_segment.html168
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_ring.html269
-rw-r--r--libs/geometry/doc/html/geometry/reference/models/model_segment.html181
-rw-r--r--libs/geometry/doc/html/geometry/reference/spatial_indexes.html49
-rw-r--r--libs/geometry/doc/html/geometry/reference/spatial_indexes/observers.html42
-rw-r--r--libs/geometry/doc/html/geometry/reference/spatial_indexes/parameters.html42
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies.html67
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_area_huiller.html310
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_area_surveyor.html225
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_centroid_average.html207
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_centroid_bashein_detmer.html300
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_convex_hull_graham_andrew.html190
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_cross_track.html331
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_haversine.html295
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_projected_point.html240
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_pythagoras.html235
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_side_side_by_cross_track.html174
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_side_side_by_triangle.html174
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_side_spherical_side_formula.html174
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_simplify_douglas_peucker.html183
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_inverse_transformer.html163
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_map_transformer.html273
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_rotate_transformer.html182
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_scale_transformer.html168
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_translate_transformer.html165
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_ublas_transformer.html146
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_within_crossings_multiply.html228
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_within_franklin.html237
-rw-r--r--libs/geometry/doc/html/geometry/reference/strategies/strategy_within_winding.html237
-rw-r--r--libs/geometry/doc/html/geometry/reference/views.html50
-rw-r--r--libs/geometry/doc/html/geometry/reference/views/box_view.html262
-rw-r--r--libs/geometry/doc/html/geometry/reference/views/closeable_view.html130
-rw-r--r--libs/geometry/doc/html/geometry/reference/views/identity_view.html235
-rw-r--r--libs/geometry/doc/html/geometry/reference/views/reversible_view.html117
-rw-r--r--libs/geometry/doc/html/geometry/reference/views/segment_view.html235
-rw-r--r--libs/geometry/doc/html/geometry/release_notes.html491
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes.html68
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/creation_and_modification.html353
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/introduction.html416
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/queries.html412
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples.html60
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_iterators_of_a_map_storing_variant_geometries.html178
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_polygons_stored_in_vector.html131
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_shared_pointers_to_polygons.html123
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html147
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/quick_start.html107
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html126
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html133
-rw-r--r--libs/geometry/doc/html/geometry/spatial_indexes/rtree_quickstart.html178
-rw-r--r--libs/geometry/doc/html/geometry_HTML.manifest258
-rw-r--r--libs/geometry/doc/html/img/algorithms/centroid.pngbin0 -> 12242 bytes
-rw-r--r--libs/geometry/doc/html/img/algorithms/convex_hull.pngbin0 -> 19017 bytes
-rw-r--r--libs/geometry/doc/html/img/algorithms/difference_a.pngbin0 -> 29657 bytes
-rw-r--r--libs/geometry/doc/html/img/algorithms/difference_b.pngbin0 -> 36608 bytes
-rw-r--r--libs/geometry/doc/html/img/algorithms/envelope.pngbin0 -> 13414 bytes
-rw-r--r--libs/geometry/doc/html/img/algorithms/intersection.pngbin0 -> 29613 bytes
-rw-r--r--libs/geometry/doc/html/img/algorithms/return_envelope.pngbin0 -> 11572 bytes
-rw-r--r--libs/geometry/doc/html/img/algorithms/sym_difference.pngbin0 -> 46047 bytes
-rw-r--r--libs/geometry/doc/html/img/algorithms/union.pngbin0 -> 32033 bytes
-rw-r--r--libs/geometry/doc/html/img/algorithms/within.pngbin0 -> 12181 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/build_non_ovl.pngbin0 -> 13759 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/build_ovl.pngbin0 -> 11785 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/bulk.pngbin0 -> 2046 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/disjoint.pngbin0 -> 2223 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/intersects.pngbin0 -> 2228 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/intersects_mpoly.pngbin0 -> 2687 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/intersects_poly.pngbin0 -> 2654 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/intersects_ring.pngbin0 -> 2641 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/knn.pngbin0 -> 2774 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/linear.pngbin0 -> 2204 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/overlaps.pngbin0 -> 2209 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/path.pngbin0 -> 2840 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/quadratic.pngbin0 -> 2096 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/query_non_ovl.pngbin0 -> 18225 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/query_ovl.pngbin0 -> 17247 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/rstar.pngbin0 -> 2079 bytes
-rw-r--r--libs/geometry/doc/html/img/index/rtree/within.pngbin0 -> 2208 bytes
-rw-r--r--libs/geometry/doc/html/img/io/svg_mapper.pngbin0 -> 12582 bytes
-rw-r--r--libs/geometry/doc/html/img/nyi.pngbin0 -> 854 bytes
-rw-r--r--libs/geometry/doc/html/img/ok.pngbin0 -> 872 bytes
-rw-r--r--libs/geometry/doc/html/index.html132
-rw-r--r--libs/geometry/doc/html/svg_simplify_country.pngbin0 -> 27598 bytes
-rw-r--r--libs/geometry/doc/html/svg_simplify_road.pngbin0 -> 9998 bytes
-rw-r--r--libs/geometry/doc/imports.qbk110
-rw-r--r--libs/geometry/doc/index/Doxyfile332
-rw-r--r--libs/geometry/doc/index/Jamfile.v232
-rw-r--r--libs/geometry/doc/index/imports.qbk17
-rw-r--r--libs/geometry/doc/index/index.qbk43
-rw-r--r--libs/geometry/doc/index/introduction.qbk114
-rwxr-xr-xlibs/geometry/doc/index/make_qbk.py39
-rw-r--r--libs/geometry/doc/index/rtree.qbk21
-rw-r--r--libs/geometry/doc/index/rtree/creation.qbk219
-rw-r--r--libs/geometry/doc/index/rtree/examples.qbk41
-rw-r--r--libs/geometry/doc/index/rtree/exception_safety.qbk57
-rw-r--r--libs/geometry/doc/index/rtree/experimental.qbk111
-rw-r--r--libs/geometry/doc/index/rtree/introduction.qbk68
-rw-r--r--libs/geometry/doc/index/rtree/query.qbk207
-rw-r--r--libs/geometry/doc/index/rtree/quickstart.qbk59
-rw-r--r--libs/geometry/doc/index/rtree/reference.qbk40
-rw-r--r--libs/geometry/doc/index/src/examples/Jamfile.v219
-rw-r--r--libs/geometry/doc/index/src/examples/rtree/Jamfile.v225
-rw-r--r--libs/geometry/doc/index/src/examples/rtree/interprocess.cpp112
-rw-r--r--libs/geometry/doc/index/src/examples/rtree/polygons_shared_ptr.cpp88
-rw-r--r--libs/geometry/doc/index/src/examples/rtree/polygons_vector.cpp96
-rw-r--r--libs/geometry/doc/index/src/examples/rtree/quick_start.cpp87
-rw-r--r--libs/geometry/doc/index/src/examples/rtree/value_index.cpp97
-rw-r--r--libs/geometry/doc/index/src/examples/rtree/value_shared_ptr.cpp91
-rw-r--r--libs/geometry/doc/index/src/examples/rtree/variants_map.cpp143
-rw-r--r--libs/geometry/doc/introduction.qbk70
-rwxr-xr-xlibs/geometry/doc/make_qbk.py159
-rw-r--r--libs/geometry/doc/matrix.qbk15
-rw-r--r--libs/geometry/doc/quickref.xml752
-rw-r--r--libs/geometry/doc/quickstart.qbk95
-rw-r--r--libs/geometry/doc/readme.txt45
-rw-r--r--libs/geometry/doc/reference.qbk319
-rw-r--r--libs/geometry/doc/reference/algorithms/append.qbk39
-rw-r--r--libs/geometry/doc/reference/algorithms/area.qbk33
-rw-r--r--libs/geometry/doc/reference/algorithms/buffer.qbk26
-rw-r--r--libs/geometry/doc/reference/algorithms/centroid.qbk45
-rw-r--r--libs/geometry/doc/reference/algorithms/centroid_strategies.qbk14
-rw-r--r--libs/geometry/doc/reference/algorithms/clear.qbk41
-rw-r--r--libs/geometry/doc/reference/algorithms/comparable_distance.qbk29
-rw-r--r--libs/geometry/doc/reference/algorithms/convert.qbk33
-rw-r--r--libs/geometry/doc/reference/algorithms/convex_hull.qbk24
-rw-r--r--libs/geometry/doc/reference/algorithms/correct.qbk36
-rw-r--r--libs/geometry/doc/reference/algorithms/covered_by.qbk35
-rw-r--r--libs/geometry/doc/reference/algorithms/difference.qbk26
-rw-r--r--libs/geometry/doc/reference/algorithms/difference_behavior.qbk21
-rw-r--r--libs/geometry/doc/reference/algorithms/difference_inserter.qbk22
-rw-r--r--libs/geometry/doc/reference/algorithms/disjoint.qbk15
-rw-r--r--libs/geometry/doc/reference/algorithms/distance.qbk26
-rw-r--r--libs/geometry/doc/reference/algorithms/envelope.qbk15
-rw-r--r--libs/geometry/doc/reference/algorithms/equals.qbk25
-rw-r--r--libs/geometry/doc/reference/algorithms/expand.qbk35
-rw-r--r--libs/geometry/doc/reference/algorithms/for_each_point.qbk16
-rw-r--r--libs/geometry/doc/reference/algorithms/for_each_segment.qbk16
-rw-r--r--libs/geometry/doc/reference/algorithms/geometry_rules.qbk12
-rw-r--r--libs/geometry/doc/reference/algorithms/intersection.qbk34
-rw-r--r--libs/geometry/doc/reference/algorithms/intersects.qbk21
-rw-r--r--libs/geometry/doc/reference/algorithms/length.qbk29
-rw-r--r--libs/geometry/doc/reference/algorithms/num_geometries.qbk31
-rw-r--r--libs/geometry/doc/reference/algorithms/num_interior_rings.qbk33
-rw-r--r--libs/geometry/doc/reference/algorithms/num_points.qbk38
-rw-r--r--libs/geometry/doc/reference/algorithms/overlaps.qbk15
-rw-r--r--libs/geometry/doc/reference/algorithms/perimeter.qbk31
-rw-r--r--libs/geometry/doc/reference/algorithms/reverse.qbk40
-rw-r--r--libs/geometry/doc/reference/algorithms/simplify.qbk35
-rw-r--r--libs/geometry/doc/reference/algorithms/simplify_inserter.qbk16
-rw-r--r--libs/geometry/doc/reference/algorithms/sym_difference.qbk29
-rw-r--r--libs/geometry/doc/reference/algorithms/touches.qbk19
-rw-r--r--libs/geometry/doc/reference/algorithms/transform.qbk32
-rw-r--r--libs/geometry/doc/reference/algorithms/transform_with_strategy.qbk19
-rw-r--r--libs/geometry/doc/reference/algorithms/union.qbk33
-rw-r--r--libs/geometry/doc/reference/algorithms/unique.qbk39
-rw-r--r--libs/geometry/doc/reference/algorithms/within.qbk35
-rw-r--r--libs/geometry/doc/reference/core/closure.qbk23
-rw-r--r--libs/geometry/doc/reference/core/coordinate_dimension.qbk16
-rw-r--r--libs/geometry/doc/reference/core/coordinate_system.qbk16
-rw-r--r--libs/geometry/doc/reference/core/coordinate_type.qbk16
-rw-r--r--libs/geometry/doc/reference/core/degree_radian.qbk14
-rw-r--r--libs/geometry/doc/reference/core/get_box.qbk23
-rw-r--r--libs/geometry/doc/reference/core/get_point.qbk25
-rw-r--r--libs/geometry/doc/reference/core/interior_type.qbk17
-rw-r--r--libs/geometry/doc/reference/core/max_corner.qbk26
-rw-r--r--libs/geometry/doc/reference/core/min_corner.qbk25
-rw-r--r--libs/geometry/doc/reference/core/min_max_corner.qbk31
-rw-r--r--libs/geometry/doc/reference/core/point_order.qbk24
-rw-r--r--libs/geometry/doc/reference/core/point_type.qbk17
-rw-r--r--libs/geometry/doc/reference/core/ring_type.qbk17
-rw-r--r--libs/geometry/doc/reference/core/set_box.qbk23
-rw-r--r--libs/geometry/doc/reference/core/set_point.qbk26
-rw-r--r--libs/geometry/doc/reference/core/tag.qbk29
-rw-r--r--libs/geometry/doc/reference/core/tag_cast.qbk26
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_array.qbk38
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_fusion.qbk35
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_polygon/point_data.qbk36
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_polygon/polygon_data.qbk36
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_polygon/polygon_with_holes_data.qbk37
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_polygon/rectangle_data.qbk36
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_range/adapts_model.qbk19
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_range/filtered.qbk36
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_range/reversed.qbk36
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_range/sliced.qbk36
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_range/strided.qbk37
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_range/uniqued.qbk36
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/boost_tuple.qbk47
-rw-r--r--libs/geometry/doc/reference/geometries/adapted/c_array.qbk40
-rw-r--r--libs/geometry/doc/reference/geometries/point.qbk18
-rw-r--r--libs/geometry/doc/reference/geometries/point_assign_warning.qbk16
-rw-r--r--libs/geometry/doc/reference/geometries/register/point.qbk17
-rw-r--r--libs/geometry/doc/reference/io/svg.qbk16
-rw-r--r--libs/geometry/doc/reference/views/box_view.qbk16
-rw-r--r--libs/geometry/doc/reference/views/segment_view.qbk16
-rw-r--r--libs/geometry/doc/release_notes.qbk205
-rw-r--r--libs/geometry/doc/src/copyright_block.qbk11
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/Jamfile.v230
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/boost.vsprops20
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/configuration.hpp39
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/license.txt52
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html406
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml.hpp2596
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_iterators.hpp174
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_print.hpp421
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_utils.hpp122
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/readme.txt5
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/deployment_path.vsprops12
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp188
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp243
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.sln20
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.vcproj226
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp740
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/file_to_string.hpp36
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/for_debugger.ini13
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp61
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp1389
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp69
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/Jamfile.v232
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/apple.qbk55
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/eat.qbk31
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/fruit.dox263
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/fruit.qbk35
-rwxr-xr-xlibs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/make_qbk.py26
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/examples/apple_example.cpp31
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.cpp24
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.hpp113
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.sln19
-rw-r--r--libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.vcproj176
-rw-r--r--libs/geometry/doc/src/docutils/tools/implementation_status/Jamfile.v226
-rw-r--r--libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.cpp402
-rw-r--r--libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.hpp14
-rw-r--r--libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.sln19
-rw-r--r--libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.vcproj177
-rw-r--r--libs/geometry/doc/src/docutils/tools/implementation_status/tmp/Jamfile.v218
-rw-r--r--libs/geometry/doc/src/docutils/tools/support_status/qbk_outputter.hpp110
-rw-r--r--libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp289
-rw-r--r--libs/geometry/doc/src/docutils/tools/support_status/support_status.sln19
-rw-r--r--libs/geometry/doc/src/docutils/tools/support_status/support_status.vcxproj85
-rw-r--r--libs/geometry/doc/src/docutils/tools/support_status/text_outputter.hpp36
-rw-r--r--libs/geometry/doc/src/examples/Jamfile.v221
-rw-r--r--libs/geometry/doc/src/examples/algorithms/Jamfile.v278
-rw-r--r--libs/geometry/doc/src/examples/algorithms/append.cpp61
-rw-r--r--libs/geometry/doc/src/examples/algorithms/area.cpp50
-rw-r--r--libs/geometry/doc/src/examples/algorithms/area_with_strategy.cpp50
-rw-r--r--libs/geometry/doc/src/examples/algorithms/assign.cpp66
-rw-r--r--libs/geometry/doc/src/examples/algorithms/assign_2d_point.cpp62
-rw-r--r--libs/geometry/doc/src/examples/algorithms/assign_3d_point.cpp39
-rw-r--r--libs/geometry/doc/src/examples/algorithms/assign_box_corners.cpp60
-rw-r--r--libs/geometry/doc/src/examples/algorithms/assign_inverse.cpp46
-rw-r--r--libs/geometry/doc/src/examples/algorithms/assign_point_from_index.cpp52
-rw-r--r--libs/geometry/doc/src/examples/algorithms/assign_point_to_index.cpp46
-rw-r--r--libs/geometry/doc/src/examples/algorithms/assign_points.cpp73
-rw-r--r--libs/geometry/doc/src/examples/algorithms/centroid.cpp52
-rw-r--r--libs/geometry/doc/src/examples/algorithms/clear.cpp65
-rw-r--r--libs/geometry/doc/src/examples/algorithms/comparable_distance.cpp67
-rw-r--r--libs/geometry/doc/src/examples/algorithms/convert.cpp64
-rw-r--r--libs/geometry/doc/src/examples/algorithms/convex_hull.cpp57
-rw-r--r--libs/geometry/doc/src/examples/algorithms/correct.cpp68
-rw-r--r--libs/geometry/doc/src/examples/algorithms/create_svg_overlay.hpp60
-rw-r--r--libs/geometry/doc/src/examples/algorithms/create_svg_two.hpp55
-rw-r--r--libs/geometry/doc/src/examples/algorithms/difference.cpp90
-rw-r--r--libs/geometry/doc/src/examples/algorithms/difference_inserter.cpp88
-rw-r--r--libs/geometry/doc/src/examples/algorithms/distance.cpp68
-rw-r--r--libs/geometry/doc/src/examples/algorithms/envelope.cpp55
-rw-r--r--libs/geometry/doc/src/examples/algorithms/equals.cpp61
-rw-r--r--libs/geometry/doc/src/examples/algorithms/expand.cpp48
-rw-r--r--libs/geometry/doc/src/examples/algorithms/for_each_point.cpp69
-rw-r--r--libs/geometry/doc/src/examples/algorithms/for_each_point_const.cpp50
-rw-r--r--libs/geometry/doc/src/examples/algorithms/for_each_segment_const.cpp95
-rw-r--r--libs/geometry/doc/src/examples/algorithms/intersection_ls_ls_point.cpp55
-rw-r--r--libs/geometry/doc/src/examples/algorithms/intersection_poly_poly.cpp66
-rw-r--r--libs/geometry/doc/src/examples/algorithms/intersection_segment.cpp51
-rw-r--r--libs/geometry/doc/src/examples/algorithms/intersects_linestring.cpp46
-rw-r--r--libs/geometry/doc/src/examples/algorithms/intersects_segment.cpp46
-rw-r--r--libs/geometry/doc/src/examples/algorithms/length.cpp42
-rw-r--r--libs/geometry/doc/src/examples/algorithms/length_with_strategy.cpp43
-rw-r--r--libs/geometry/doc/src/examples/algorithms/make_2d_point.cpp63
-rw-r--r--libs/geometry/doc/src/examples/algorithms/make_3d_point.cpp36
-rw-r--r--libs/geometry/doc/src/examples/algorithms/make_inverse.cpp47
-rw-r--r--libs/geometry/doc/src/examples/algorithms/make_with_range.cpp51
-rw-r--r--libs/geometry/doc/src/examples/algorithms/num_geometries.cpp48
-rw-r--r--libs/geometry/doc/src/examples/algorithms/num_interior_rings.cpp48
-rw-r--r--libs/geometry/doc/src/examples/algorithms/num_points.cpp49
-rw-r--r--libs/geometry/doc/src/examples/algorithms/return_envelope.cpp63
-rw-r--r--libs/geometry/doc/src/examples/algorithms/reverse.cpp67
-rw-r--r--libs/geometry/doc/src/examples/algorithms/simplify.cpp54
-rw-r--r--libs/geometry/doc/src/examples/algorithms/simplify_insert.cpp52
-rw-r--r--libs/geometry/doc/src/examples/algorithms/simplify_insert_with_strategy.cpp72
-rw-r--r--libs/geometry/doc/src/examples/algorithms/sym_difference.cpp80
-rw-r--r--libs/geometry/doc/src/examples/algorithms/transform.cpp54
-rw-r--r--libs/geometry/doc/src/examples/algorithms/transform_with_strategy.cpp63
-rw-r--r--libs/geometry/doc/src/examples/algorithms/union.cpp66
-rw-r--r--libs/geometry/doc/src/examples/algorithms/unique.cpp41
-rw-r--r--libs/geometry/doc/src/examples/algorithms/within.cpp52
-rw-r--r--libs/geometry/doc/src/examples/core/Jamfile.v233
-rw-r--r--libs/geometry/doc/src/examples/core/closure.cpp45
-rw-r--r--libs/geometry/doc/src/examples/core/coordinate_dimension.cpp46
-rw-r--r--libs/geometry/doc/src/examples/core/coordinate_system.cpp42
-rw-r--r--libs/geometry/doc/src/examples/core/coordinate_type.cpp42
-rw-r--r--libs/geometry/doc/src/examples/core/degree_radian.cpp47
-rw-r--r--libs/geometry/doc/src/examples/core/get_box.cpp46
-rw-r--r--libs/geometry/doc/src/examples/core/get_point.cpp42
-rw-r--r--libs/geometry/doc/src/examples/core/interior_type.cpp49
-rw-r--r--libs/geometry/doc/src/examples/core/point_order.cpp45
-rw-r--r--libs/geometry/doc/src/examples/core/point_type.cpp44
-rw-r--r--libs/geometry/doc/src/examples/core/ring_type.cpp56
-rw-r--r--libs/geometry/doc/src/examples/core/rings.cpp77
-rw-r--r--libs/geometry/doc/src/examples/core/set_box.cpp44
-rw-r--r--libs/geometry/doc/src/examples/core/set_point.cpp42
-rw-r--r--libs/geometry/doc/src/examples/core/tag.cpp110
-rw-r--r--libs/geometry/doc/src/examples/core/tag_cast.cpp46
-rw-r--r--libs/geometry/doc/src/examples/geometries/Jamfile.v219
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/Jamfile.v222
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_array.cpp51
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_fusion.cpp62
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_polygon.cpp38
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_range/Jamfile.v222
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_range/filtered.cpp64
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_range/reversed.cpp43
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_range/sliced.cpp50
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_range/strided.cpp56
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_range/uniqued.cpp64
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/boost_tuple.cpp54
-rw-r--r--libs/geometry/doc/src/examples/geometries/adapted/c_array.cpp38
-rw-r--r--libs/geometry/doc/src/examples/geometries/point.cpp42
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/Jamfile.v230
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/box.cpp51
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/box_2d_4values.cpp51
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/box_templated.cpp46
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/linestring.cpp54
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/linestring_templated.cpp47
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/multi_linestring.cpp51
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/multi_point.cpp47
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/multi_point_templated.cpp47
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/multi_polygon.cpp51
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/point.cpp52
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/ring.cpp51
-rw-r--r--libs/geometry/doc/src/examples/geometries/register/ring_templated.cpp49
-rw-r--r--libs/geometry/doc/src/examples/io/svg.cpp65
-rw-r--r--libs/geometry/doc/src/examples/quick_start.cpp167
-rw-r--r--libs/geometry/doc/src/examples/views/Jamfile.v217
-rw-r--r--libs/geometry/doc/src/examples/views/box_view.cpp58
-rw-r--r--libs/geometry/doc/src/examples/views/segment_view.cpp57
-rw-r--r--libs/geometry/example/01_point_example.cpp135
-rw-r--r--libs/geometry/example/02_linestring_example.cpp232
-rw-r--r--libs/geometry/example/03_polygon_example.cpp141
-rw-r--r--libs/geometry/example/04_boost_example.cpp94
-rw-r--r--libs/geometry/example/05_a_overlay_polygon_example.cpp89
-rw-r--r--libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp98
-rw-r--r--libs/geometry/example/06_a_transformation_example.cpp56
-rw-r--r--libs/geometry/example/06_b_transformation_example.cpp170
-rw-r--r--libs/geometry/example/07_a_graph_route_example.cpp391
-rw-r--r--libs/geometry/example/07_b_graph_route_example.cpp377
-rw-r--r--libs/geometry/example/Jamfile.v238
-rw-r--r--libs/geometry/example/boost.vsprops20
-rw-r--r--libs/geometry/example/c01_custom_point_example.cpp160
-rw-r--r--libs/geometry/example/c02_custom_box_example.cpp78
-rw-r--r--libs/geometry/example/c03_custom_linestring_example.cpp87
-rw-r--r--libs/geometry/example/c04_a_custom_triangle_example.cpp83
-rw-r--r--libs/geometry/example/c04_b_custom_triangle_example.cpp71
-rw-r--r--libs/geometry/example/c05_custom_point_pointer_example.cpp120
-rw-r--r--libs/geometry/example/c06_custom_polygon_example.cpp141
-rw-r--r--libs/geometry/example/c07_custom_ring_pointer_example.cpp146
-rw-r--r--libs/geometry/example/c08_custom_non_std_example.cpp296
-rw-r--r--libs/geometry/example/c09_custom_fusion_example.cpp62
-rw-r--r--libs/geometry/example/c10_custom_cs_example.cpp106
-rw-r--r--libs/geometry/example/c11_custom_cs_transform_example.cpp132
-rw-r--r--libs/geometry/example/data/cities.sql21
-rw-r--r--libs/geometry/example/data/cities.wkt10
-rw-r--r--libs/geometry/example/data/roads.wkt1331
-rw-r--r--libs/geometry/example/data/world.wkt203
-rw-r--r--libs/geometry/example/ml01_multipolygon_simplify.cpp67
-rw-r--r--libs/geometry/example/ml01_multipolygon_simplify.vcproj171
-rw-r--r--libs/geometry/example/ml02_distance_strategy.cpp36
-rw-r--r--libs/geometry/example/ml02_distance_strategy.vcproj171
-rw-r--r--libs/geometry/example/with_external_libs/contrib/gd-2.0.35/boost_geometry_readme.txt20
-rw-r--r--libs/geometry/example/with_external_libs/contrib/shapelib-1.3.0b2/boost_geometry_readme.txt24
-rw-r--r--libs/geometry/example/with_external_libs/contrib/soci-3.1.0/boost_geometry_readme.txt18
-rw-r--r--libs/geometry/example/with_external_libs/gd.vsprops16
-rw-r--r--libs/geometry/example/with_external_libs/postgresql.vsprops20
-rw-r--r--libs/geometry/example/with_external_libs/qt.vsprops22
-rw-r--r--libs/geometry/example/with_external_libs/shapelib.vsprops15
-rw-r--r--libs/geometry/example/with_external_libs/soci.vsprops16
-rw-r--r--libs/geometry/example/with_external_libs/wxwidgets.vsprops20
-rw-r--r--libs/geometry/example/with_external_libs/x01_qt_example.cpp81
-rw-r--r--libs/geometry/example/with_external_libs/x01_qt_example.sln19
-rw-r--r--libs/geometry/example/with_external_libs/x01_qt_example.vcproj176
-rw-r--r--libs/geometry/example/with_external_libs/x02_gd_example.cpp144
-rw-r--r--libs/geometry/example/with_external_libs/x02_gd_example.sln20
-rw-r--r--libs/geometry/example/with_external_libs/x02_gd_example.vcproj236
-rw-r--r--libs/geometry/example/with_external_libs/x03_a_soci_example.cpp78
-rw-r--r--libs/geometry/example/with_external_libs/x03_a_soci_example.vcproj744
-rw-r--r--libs/geometry/example/with_external_libs/x03_b_soci_example.cpp100
-rw-r--r--libs/geometry/example/with_external_libs/x03_b_soci_example.vcproj744
-rw-r--r--libs/geometry/example/with_external_libs/x03_c_soci_example.cpp118
-rw-r--r--libs/geometry/example/with_external_libs/x03_c_soci_example.vcproj744
-rw-r--r--libs/geometry/example/with_external_libs/x03_d_soci_example.cpp84
-rw-r--r--libs/geometry/example/with_external_libs/x03_d_soci_example.vcproj744
-rw-r--r--libs/geometry/example/with_external_libs/x03_soci_examples.sln37
-rw-r--r--libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.cpp389
-rw-r--r--libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.sln19
-rw-r--r--libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.vcproj217
-rw-r--r--libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper_readme.txt31
-rw-r--r--libs/geometry/example/with_external_libs/x05_shapelib_example.cpp118
-rw-r--r--libs/geometry/example/with_external_libs/x05_shapelib_example.sln19
-rw-r--r--libs/geometry/example/with_external_libs/x05_shapelib_example.vcproj202
-rw-r--r--libs/geometry/example/with_external_libs/x06_qt_world_mapper.cpp162
-rw-r--r--libs/geometry/example/with_external_libs/x06_qt_world_mapper.sln19
-rw-r--r--libs/geometry/example/with_external_libs/x06_qt_world_mapper.vcproj180
-rw-r--r--libs/geometry/example/with_external_libs/x06_qt_world_mapper_readme.txt31
-rw-r--r--libs/geometry/index.html16
-rw-r--r--libs/geometry/index/example/3d_benchmark.cpp161
-rw-r--r--libs/geometry/index/example/Jamfile.v254
-rw-r--r--libs/geometry/index/example/benchmark.cpp157
-rw-r--r--libs/geometry/index/example/benchmark2.cpp85
-rw-r--r--libs/geometry/index/example/benchmark3.cpp98
-rw-r--r--libs/geometry/index/example/benchmark_experimental.cpp407
-rw-r--r--libs/geometry/index/example/glut_vis.cpp722
-rw-r--r--libs/geometry/index/example/random_test.cpp183
-rw-r--r--libs/geometry/index/test/Jamfile.v227
-rw-r--r--libs/geometry/index/test/algorithms/Jamfile.v220
-rw-r--r--libs/geometry/index/test/algorithms/content.cpp71
-rw-r--r--libs/geometry/index/test/algorithms/intersection_content.cpp70
-rw-r--r--libs/geometry/index/test/algorithms/is_valid.cpp110
-rw-r--r--libs/geometry/index/test/algorithms/margin.cpp66
-rw-r--r--libs/geometry/index/test/algorithms/minmaxdist.cpp101
-rw-r--r--libs/geometry/index/test/algorithms/path_intersection.cpp133
-rw-r--r--libs/geometry/index/test/algorithms/segment_intersection.cpp129
-rw-r--r--libs/geometry/index/test/algorithms/test_content.hpp49
-rw-r--r--libs/geometry/index/test/algorithms/test_intersection_content.hpp47
-rw-r--r--libs/geometry/index/test/algorithms/test_margin.hpp48
-rw-r--r--libs/geometry/index/test/algorithms/test_union_content.hpp47
-rw-r--r--libs/geometry/index/test/algorithms/union_content.cpp70
-rw-r--r--libs/geometry/index/test/geometry_index_test_common.hpp28
-rw-r--r--libs/geometry/index/test/movable.hpp92
-rw-r--r--libs/geometry/index/test/rtree/Jamfile.v211
-rw-r--r--libs/geometry/index/test/rtree/exceptions/Jamfile.v221
-rw-r--r--libs/geometry/index/test/rtree/exceptions/rtree_exceptions_lin.cpp20
-rw-r--r--libs/geometry/index/test/rtree/exceptions/rtree_exceptions_qua.cpp20
-rw-r--r--libs/geometry/index/test/rtree/exceptions/rtree_exceptions_rst.cpp20
-rw-r--r--libs/geometry/index/test/rtree/exceptions/test_exceptions.hpp193
-rw-r--r--libs/geometry/index/test/rtree/exceptions/test_throwing.hpp138
-rw-r--r--libs/geometry/index/test/rtree/exceptions/test_throwing_node.hpp325
-rw-r--r--libs/geometry/index/test/rtree/generated/Jamfile.v222
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_add_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_add_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_add_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_add_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_mod_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_mod_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_mod_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_mod_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_que_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_que_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_que_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dlin_que_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_add_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_add_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_add_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_add_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_mod_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_mod_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_mod_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_mod_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_que_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_que_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_que_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_dqua_que_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_add_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_add_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_add_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_add_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_mod_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_mod_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_mod_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_mod_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_que_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_que_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_que_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_drst_que_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_add_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_add_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_add_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_add_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_mod_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_mod_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_mod_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_mod_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_que_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_que_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_que_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_lin_que_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_add_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_add_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_add_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_add_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_mod_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_mod_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_mod_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_mod_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_que_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_que_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_que_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_qua_que_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_add_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_add_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_add_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_add_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_mod_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_mod_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_mod_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_mod_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_que_b2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_que_b3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_que_p2d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/generated/rtree_rst_que_p3d.cpp20
-rw-r--r--libs/geometry/index/test/rtree/interprocess/Jamfile.v229
-rw-r--r--libs/geometry/index/test/rtree/interprocess/rtree_interprocess_linear.cpp20
-rw-r--r--libs/geometry/index/test/rtree/interprocess/rtree_interprocess_linear_dyn.cpp20
-rw-r--r--libs/geometry/index/test/rtree/interprocess/rtree_interprocess_quadratic.cpp20
-rw-r--r--libs/geometry/index/test/rtree/interprocess/rtree_interprocess_quadratic_dyn.cpp20
-rw-r--r--libs/geometry/index/test/rtree/interprocess/rtree_interprocess_rstar.cpp20
-rw-r--r--libs/geometry/index/test/rtree/interprocess/rtree_interprocess_rstar_dyn.cpp20
-rw-r--r--libs/geometry/index/test/rtree/interprocess/test_interprocess.hpp84
-rw-r--r--libs/geometry/index/test/rtree/rtree_test_generator.cpp99
-rw-r--r--libs/geometry/index/test/rtree/test_rtree.hpp1760
-rw-r--r--libs/geometry/index/test/varray.cpp774
-rw-r--r--libs/geometry/index/test/varray_old.cpp490
-rw-r--r--libs/geometry/index/test/varray_test.hpp97
-rw-r--r--libs/geometry/test/Jamfile.v232
-rw-r--r--libs/geometry/test/algorithms/Jamfile.v250
-rw-r--r--libs/geometry/test/algorithms/algorithms_tests.sln193
-rw-r--r--libs/geometry/test/algorithms/append.cpp105
-rw-r--r--libs/geometry/test/algorithms/append.vcproj174
-rw-r--r--libs/geometry/test/algorithms/area.cpp274
-rw-r--r--libs/geometry/test/algorithms/area.vcproj174
-rw-r--r--libs/geometry/test/algorithms/assign.cpp273
-rw-r--r--libs/geometry/test/algorithms/assign.vcproj174
-rw-r--r--libs/geometry/test/algorithms/buffer.cpp55
-rw-r--r--libs/geometry/test/algorithms/buffer.vcproj174
-rw-r--r--libs/geometry/test/algorithms/centroid.cpp149
-rw-r--r--libs/geometry/test/algorithms/centroid.vcproj174
-rw-r--r--libs/geometry/test/algorithms/comparable_distance.cpp146
-rw-r--r--libs/geometry/test/algorithms/comparable_distance.vcproj174
-rw-r--r--libs/geometry/test/algorithms/convert.cpp323
-rw-r--r--libs/geometry/test/algorithms/convert.vcproj174
-rw-r--r--libs/geometry/test/algorithms/convex_hull.cpp66
-rw-r--r--libs/geometry/test/algorithms/convex_hull.vcproj174
-rw-r--r--libs/geometry/test/algorithms/correct.cpp182
-rw-r--r--libs/geometry/test/algorithms/correct.vcproj174
-rw-r--r--libs/geometry/test/algorithms/covered_by.cpp149
-rw-r--r--libs/geometry/test/algorithms/covered_by.vcproj174
-rw-r--r--libs/geometry/test/algorithms/detail/Jamfile.v216
-rw-r--r--libs/geometry/test/algorithms/detail/detail.sln19
-rw-r--r--libs/geometry/test/algorithms/detail/partition.cpp476
-rw-r--r--libs/geometry/test/algorithms/detail/partition.vcproj174
-rw-r--r--libs/geometry/test/algorithms/detail/sections/Jamfile.v215
-rw-r--r--libs/geometry/test/algorithms/detail/sections/range_by_section.cpp102
-rw-r--r--libs/geometry/test/algorithms/detail/sections/range_by_section.vcproj174
-rw-r--r--libs/geometry/test/algorithms/detail/sections/sectionalize.cpp341
-rw-r--r--libs/geometry/test/algorithms/detail/sections/sectionalize.sln25
-rw-r--r--libs/geometry/test/algorithms/detail/sections/sectionalize.vcproj174
-rw-r--r--libs/geometry/test/algorithms/difference.cpp518
-rw-r--r--libs/geometry/test/algorithms/difference.vcproj174
-rw-r--r--libs/geometry/test/algorithms/disjoint.cpp237
-rw-r--r--libs/geometry/test/algorithms/disjoint.vcproj174
-rw-r--r--libs/geometry/test/algorithms/distance.cpp317
-rw-r--r--libs/geometry/test/algorithms/distance.vcproj174
-rw-r--r--libs/geometry/test/algorithms/envelope.cpp80
-rw-r--r--libs/geometry/test/algorithms/envelope.vcproj174
-rw-r--r--libs/geometry/test/algorithms/equals.cpp162
-rw-r--r--libs/geometry/test/algorithms/equals.vcproj174
-rw-r--r--libs/geometry/test/algorithms/expand.cpp153
-rw-r--r--libs/geometry/test/algorithms/expand.vcproj174
-rw-r--r--libs/geometry/test/algorithms/for_each.cpp81
-rw-r--r--libs/geometry/test/algorithms/for_each.vcproj174
-rw-r--r--libs/geometry/test/algorithms/intersection.cpp535
-rw-r--r--libs/geometry/test/algorithms/intersection.vcproj176
-rw-r--r--libs/geometry/test/algorithms/intersection_segment.cpp134
-rw-r--r--libs/geometry/test/algorithms/intersects.cpp168
-rw-r--r--libs/geometry/test/algorithms/intersects.vcproj174
-rw-r--r--libs/geometry/test/algorithms/length.cpp55
-rw-r--r--libs/geometry/test/algorithms/length.vcproj174
-rw-r--r--libs/geometry/test/algorithms/make.cpp137
-rw-r--r--libs/geometry/test/algorithms/make.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlaps.cpp59
-rw-r--r--libs/geometry/test/algorithms/overlaps.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/Jamfile.v221
-rw-r--r--libs/geometry/test/algorithms/overlay/assemble.cpp199
-rw-r--r--libs/geometry/test/algorithms/overlay/assemble.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/ccw_traverse.cpp346
-rw-r--r--libs/geometry/test/algorithms/overlay/ccw_traverse.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/dissolver.cpp219
-rw-r--r--libs/geometry/test/algorithms/overlay/dissolver.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/enrich_intersection_points.cpp186
-rw-r--r--libs/geometry/test/algorithms/overlay/enrich_intersection_points.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/get_turn_info.cpp859
-rw-r--r--libs/geometry/test/algorithms/overlay/get_turn_info.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/get_turn_info.xlsbin0 -> 133120 bytes
-rw-r--r--libs/geometry/test/algorithms/overlay/get_turns.cpp385
-rw-r--r--libs/geometry/test/algorithms/overlay/get_turns.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/merge_intersection_points.vcproj173
-rw-r--r--libs/geometry/test/algorithms/overlay/overlay.sln61
-rw-r--r--libs/geometry/test/algorithms/overlay/overlay_cases.hpp711
-rw-r--r--libs/geometry/test/algorithms/overlay/overlay_common.hpp464
-rw-r--r--libs/geometry/test/algorithms/overlay/relative_order.cpp207
-rw-r--r--libs/geometry/test/algorithms/overlay/relative_order.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/interior_triangles.cpp163
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/interior_triangles.vcproj223
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/intersection_pies.cpp300
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/intersection_pies.vcproj223
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/intersection_stars.cpp182
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/intersection_stars.vcproj223
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/intersects.cpp174
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/intersects.vcproj223
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.cpp252
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.vcproj223
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.cpp217
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.vcproj223
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/robustness.sln55
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/star_comb.cpp146
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/star_comb.hpp130
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/star_comb.vcproj223
-rw-r--r--libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp210
-rw-r--r--libs/geometry/test/algorithms/overlay/select_rings.cpp130
-rw-r--r--libs/geometry/test/algorithms/overlay/select_rings.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/self_intersection_points.cpp247
-rw-r--r--libs/geometry/test/algorithms/overlay/self_intersection_points.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/split_rings.cpp155
-rw-r--r--libs/geometry/test/algorithms/overlay/split_rings.vcproj173
-rw-r--r--libs/geometry/test/algorithms/overlay/traverse.cpp1030
-rw-r--r--libs/geometry/test/algorithms/overlay/traverse.vcproj174
-rw-r--r--libs/geometry/test/algorithms/overlay/traverse_gmp.cpp209
-rw-r--r--libs/geometry/test/algorithms/perimeter.cpp63
-rw-r--r--libs/geometry/test/algorithms/perimeter.vcproj174
-rw-r--r--libs/geometry/test/algorithms/reverse.cpp75
-rw-r--r--libs/geometry/test/algorithms/reverse.vcproj174
-rw-r--r--libs/geometry/test/algorithms/simplify.cpp107
-rw-r--r--libs/geometry/test/algorithms/simplify.vcproj174
-rw-r--r--libs/geometry/test/algorithms/test_area.hpp84
-rw-r--r--libs/geometry/test/algorithms/test_centroid.hpp99
-rw-r--r--libs/geometry/test/algorithms/test_convert.hpp69
-rw-r--r--libs/geometry/test/algorithms/test_convex_hull.hpp127
-rw-r--r--libs/geometry/test/algorithms/test_covered_by.hpp123
-rw-r--r--libs/geometry/test/algorithms/test_difference.hpp310
-rw-r--r--libs/geometry/test/algorithms/test_distance.hpp158
-rw-r--r--libs/geometry/test/algorithms/test_envelope.hpp107
-rw-r--r--libs/geometry/test/algorithms/test_equals.hpp58
-rw-r--r--libs/geometry/test/algorithms/test_expand.hpp56
-rw-r--r--libs/geometry/test/algorithms/test_for_each.hpp277
-rw-r--r--libs/geometry/test/algorithms/test_intersection.hpp241
-rw-r--r--libs/geometry/test/algorithms/test_intersects.hpp67
-rw-r--r--libs/geometry/test/algorithms/test_length.hpp64
-rw-r--r--libs/geometry/test/algorithms/test_overlaps.hpp44
-rw-r--r--libs/geometry/test/algorithms/test_overlay.hpp161
-rw-r--r--libs/geometry/test/algorithms/test_perimeter.hpp64
-rw-r--r--libs/geometry/test/algorithms/test_relate.hpp33
-rw-r--r--libs/geometry/test/algorithms/test_reverse.hpp38
-rw-r--r--libs/geometry/test/algorithms/test_simplify.hpp96
-rw-r--r--libs/geometry/test/algorithms/test_touches.hpp61
-rw-r--r--libs/geometry/test/algorithms/test_union.hpp174
-rw-r--r--libs/geometry/test/algorithms/test_unique.hpp39
-rw-r--r--libs/geometry/test/algorithms/test_within.hpp126
-rw-r--r--libs/geometry/test/algorithms/touches.cpp154
-rw-r--r--libs/geometry/test/algorithms/touches.vcproj174
-rw-r--r--libs/geometry/test/algorithms/transform.cpp140
-rw-r--r--libs/geometry/test/algorithms/transform.vcproj174
-rw-r--r--libs/geometry/test/algorithms/union.cpp442
-rw-r--r--libs/geometry/test/algorithms/union.vcproj176
-rw-r--r--libs/geometry/test/algorithms/unique.cpp60
-rw-r--r--libs/geometry/test/algorithms/unique.vcproj174
-rw-r--r--libs/geometry/test/algorithms/within.cpp271
-rw-r--r--libs/geometry/test/algorithms/within.vcproj174
-rw-r--r--libs/geometry/test/arithmetic/Jamfile.v215
-rw-r--r--libs/geometry/test/arithmetic/arithmetic.cpp144
-rw-r--r--libs/geometry/test/arithmetic/arithmetic.vcproj169
-rw-r--r--libs/geometry/test/arithmetic/arithmetic_tests.sln25
-rw-r--r--libs/geometry/test/arithmetic/dot_product.cpp53
-rw-r--r--libs/geometry/test/arithmetic/dot_product.vcproj169
-rw-r--r--libs/geometry/test/boost.vsprops21
-rw-r--r--libs/geometry/test/concepts/Jamfile.v215
-rw-r--r--libs/geometry/test/concepts/concepts_tests.sln25
-rw-r--r--libs/geometry/test/concepts/linestring_concept.cpp77
-rw-r--r--libs/geometry/test/concepts/linestring_concept.vcproj172
-rw-r--r--libs/geometry/test/core/Jamfile.v226
-rw-r--r--libs/geometry/test/core/access.cpp133
-rw-r--r--libs/geometry/test/core/access.vcproj174
-rw-r--r--libs/geometry/test/core/coordinate_dimension.cpp74
-rw-r--r--libs/geometry/test/core/coordinate_system.cpp101
-rw-r--r--libs/geometry/test/core/coordinate_type.cpp78
-rw-r--r--libs/geometry/test/core/core.sln37
-rw-r--r--libs/geometry/test/core/geometry_id.cpp73
-rw-r--r--libs/geometry/test/core/point_type.cpp82
-rw-r--r--libs/geometry/test/core/radian_access.cpp110
-rw-r--r--libs/geometry/test/core/radian_access.vcproj174
-rw-r--r--libs/geometry/test/core/reverse_dispatch.cpp65
-rw-r--r--libs/geometry/test/core/reverse_dispatch.vcproj174
-rw-r--r--libs/geometry/test/core/ring.cpp74
-rw-r--r--libs/geometry/test/core/ring.vcproj174
-rw-r--r--libs/geometry/test/core/tag.cpp74
-rw-r--r--libs/geometry/test/core/topological_dimension.cpp73
-rw-r--r--libs/geometry/test/geometries/Jamfile.v228
-rw-r--r--libs/geometry/test/geometries/adapted.cpp112
-rw-r--r--libs/geometry/test/geometries/boost_array_as_point.cpp36
-rw-r--r--libs/geometry/test/geometries/boost_array_as_point.vcproj174
-rw-r--r--libs/geometry/test/geometries/boost_fusion.cpp71
-rw-r--r--libs/geometry/test/geometries/boost_fusion.vcproj174
-rw-r--r--libs/geometry/test/geometries/boost_polygon.cpp174
-rw-r--r--libs/geometry/test/geometries/boost_polygon.vcproj174
-rw-r--r--libs/geometry/test/geometries/boost_polygon_overlay.cpp122
-rw-r--r--libs/geometry/test/geometries/boost_polygon_overlay.vcproj174
-rw-r--r--libs/geometry/test/geometries/boost_range.cpp116
-rw-r--r--libs/geometry/test/geometries/boost_range.vcproj174
-rw-r--r--libs/geometry/test/geometries/boost_tuple.cpp39
-rw-r--r--libs/geometry/test/geometries/box.cpp105
-rw-r--r--libs/geometry/test/geometries/box.vcproj174
-rw-r--r--libs/geometry/test/geometries/concepts/check.cpp76
-rw-r--r--libs/geometry/test/geometries/concepts/check.sln19
-rw-r--r--libs/geometry/test/geometries/concepts/check.vcproj173
-rw-r--r--libs/geometry/test/geometries/custom_linestring.cpp128
-rw-r--r--libs/geometry/test/geometries/custom_linestring.vcproj174
-rw-r--r--libs/geometry/test/geometries/geometries_tests.sln61
-rw-r--r--libs/geometry/test/geometries/segment.cpp101
-rw-r--r--libs/geometry/test/geometries/segment.vcproj174
-rw-r--r--libs/geometry/test/geometry_test_common.hpp165
-rw-r--r--libs/geometry/test/io/Jamfile.v211
-rw-r--r--libs/geometry/test/io/wkt/Jamfile.v215
-rw-r--r--libs/geometry/test/io/wkt/io_wkt_tests.sln19
-rw-r--r--libs/geometry/test/io/wkt/wkt.cpp248
-rw-r--r--libs/geometry/test/io/wkt/wkt.vcproj174
-rw-r--r--libs/geometry/test/iterators/Jamfile.v215
-rw-r--r--libs/geometry/test/iterators/closing_iterator.cpp119
-rw-r--r--libs/geometry/test/iterators/closing_iterator.vcproj178
-rw-r--r--libs/geometry/test/iterators/ever_circling_iterator.cpp97
-rw-r--r--libs/geometry/test/iterators/ever_circling_iterator.vcproj178
-rw-r--r--libs/geometry/test/iterators/iterators.sln25
-rw-r--r--libs/geometry/test/multi/Jamfile.v212
-rw-r--r--libs/geometry/test/multi/algorithms/Jamfile.v242
-rw-r--r--libs/geometry/test/multi/algorithms/multi_area.cpp39
-rw-r--r--libs/geometry/test/multi/algorithms/multi_area.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_centroid.cpp122
-rw-r--r--libs/geometry/test/multi/algorithms/multi_centroid.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_clear.cpp69
-rw-r--r--libs/geometry/test/multi/algorithms/multi_convert.cpp102
-rw-r--r--libs/geometry/test/multi/algorithms/multi_convert.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_convex_hull.cpp92
-rw-r--r--libs/geometry/test/multi/algorithms/multi_convex_hull.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_correct.cpp63
-rw-r--r--libs/geometry/test/multi/algorithms/multi_correct.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_covered_by.cpp59
-rw-r--r--libs/geometry/test/multi/algorithms/multi_covered_by.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_difference.cpp216
-rw-r--r--libs/geometry/test/multi/algorithms/multi_difference.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_disjoint.cpp157
-rw-r--r--libs/geometry/test/multi/algorithms/multi_disjoint.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_distance.cpp171
-rw-r--r--libs/geometry/test/multi/algorithms/multi_distance.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_envelope.cpp71
-rw-r--r--libs/geometry/test/multi/algorithms/multi_envelope.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_equals.cpp57
-rw-r--r--libs/geometry/test/multi/algorithms/multi_equals.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_for_each.cpp84
-rw-r--r--libs/geometry/test/multi/algorithms/multi_for_each.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_intersection.cpp227
-rw-r--r--libs/geometry/test/multi/algorithms/multi_intersection.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_intersects.cpp51
-rw-r--r--libs/geometry/test/multi/algorithms/multi_length.cpp38
-rw-r--r--libs/geometry/test/multi/algorithms/multi_length.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_num_geometries.cpp62
-rw-r--r--libs/geometry/test/multi/algorithms/multi_num_geometries.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_num_interior_rings.cpp55
-rw-r--r--libs/geometry/test/multi/algorithms/multi_num_interior_rings.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_num_points.cpp72
-rw-r--r--libs/geometry/test/multi/algorithms/multi_num_points.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_perimeter.cpp39
-rw-r--r--libs/geometry/test/multi/algorithms/multi_perimeter.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_reverse.cpp57
-rw-r--r--libs/geometry/test/multi/algorithms/multi_reverse.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_simplify.cpp68
-rw-r--r--libs/geometry/test/multi/algorithms/multi_simplify.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_touches.cpp80
-rw-r--r--libs/geometry/test/multi/algorithms/multi_touches.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_transform.cpp97
-rw-r--r--libs/geometry/test/multi/algorithms/multi_transform.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_union.cpp149
-rw-r--r--libs/geometry/test/multi/algorithms/multi_union.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_unique.cpp60
-rw-r--r--libs/geometry/test/multi/algorithms/multi_unique.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/multi_within.cpp59
-rw-r--r--libs/geometry/test/multi/algorithms/multi_within.vcproj174
-rw-r--r--libs/geometry/test/multi/algorithms/overlay/Jamfile.v214
-rw-r--r--libs/geometry/test/multi/algorithms/overlay/multi_overlay.sln19
-rw-r--r--libs/geometry/test/multi/algorithms/overlay/multi_overlay_cases.hpp446
-rw-r--r--libs/geometry/test/multi/algorithms/overlay/multi_overlay_common.hpp40
-rw-r--r--libs/geometry/test/multi/algorithms/overlay/multi_traverse.cpp447
-rw-r--r--libs/geometry/test/multi/algorithms/overlay/multi_traverse.vcproj174
-rw-r--r--libs/geometry/test/multi/io/Jamfile.v212
-rw-r--r--libs/geometry/test/multi/io/dsv/Jamfile.v215
-rw-r--r--libs/geometry/test/multi/io/dsv/dsv.cpp100
-rw-r--r--libs/geometry/test/multi/io/dsv/dsv.sln19
-rw-r--r--libs/geometry/test/multi/io/dsv/dsv.vcproj174
-rw-r--r--libs/geometry/test/multi/io/wkt/Jamfile.v215
-rw-r--r--libs/geometry/test/multi/io/wkt/io_wkt_tests.sln27
-rw-r--r--libs/geometry/test/multi/io/wkt/wkt.cpp103
-rw-r--r--libs/geometry/test/multi/io/wkt/wkt.vcproj174
-rw-r--r--libs/geometry/test/multi/multi_tests.sln163
-rw-r--r--libs/geometry/test/point_concept/Jamfile.v222
-rw-r--r--libs/geometry/test/point_concept/array_point.cpp29
-rw-r--r--libs/geometry/test/point_concept/concept_checker.cpp76
-rw-r--r--libs/geometry/test/point_concept/function_asserting_a_point.hpp30
-rw-r--r--libs/geometry/test/point_concept/function_requiring_a_point.hpp32
-rw-r--r--libs/geometry/test/point_concept/point_with_incorrect_dimension.cpp58
-rw-r--r--libs/geometry/test/point_concept/point_without_coordinate_type.cpp53
-rw-r--r--libs/geometry/test/point_concept/point_without_dimension.cpp55
-rw-r--r--libs/geometry/test/point_concept/point_without_getter.cpp51
-rw-r--r--libs/geometry/test/point_concept/point_without_setter.cpp51
-rw-r--r--libs/geometry/test/point_concept/well_formed_point.cpp34
-rw-r--r--libs/geometry/test/point_concept/well_formed_point_traits.cpp88
-rw-r--r--libs/geometry/test/policies/Jamfile.v214
-rw-r--r--libs/geometry/test/policies/compare.cpp245
-rw-r--r--libs/geometry/test/policies/compare.vcproj174
-rw-r--r--libs/geometry/test/policies/policy_tests.sln19
-rw-r--r--libs/geometry/test/robustness/common/common_settings.hpp32
-rw-r--r--libs/geometry/test/robustness/common/make_square_polygon.hpp46
-rw-r--r--libs/geometry/test/robustness/convex_hull/Jamfile.v218
-rw-r--r--libs/geometry/test/robustness/convex_hull/random_multi_points.cpp225
-rw-r--r--libs/geometry/test/robustness/convex_hull/random_multi_points.sln20
-rw-r--r--libs/geometry/test/robustness/convex_hull/random_multi_points.vcproj223
-rw-r--r--libs/geometry/test/robustness/overlay/buffer/Jamfile.v219
-rw-r--r--libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.cpp352
-rw-r--r--libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.sln20
-rw-r--r--libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.vcproj222
-rw-r--r--libs/geometry/test/robustness/overlay/linear_areal/Jamfile.v219
-rw-r--r--libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.cpp501
-rw-r--r--libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.sln20
-rw-r--r--libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.vcproj223
-rw-r--r--libs/geometry/test/strategies/Jamfile.v221
-rw-r--r--libs/geometry/test/strategies/cross_track.cpp151
-rw-r--r--libs/geometry/test/strategies/cross_track.vcproj174
-rw-r--r--libs/geometry/test/strategies/haversine.cpp274
-rw-r--r--libs/geometry/test/strategies/haversine.vcproj174
-rw-r--r--libs/geometry/test/strategies/projected_point.cpp188
-rw-r--r--libs/geometry/test/strategies/projected_point.vcproj174
-rw-r--r--libs/geometry/test/strategies/pythagoras.cpp362
-rw-r--r--libs/geometry/test/strategies/pythagoras.vcproj174
-rw-r--r--libs/geometry/test/strategies/segment_intersection.cpp374
-rw-r--r--libs/geometry/test/strategies/segment_intersection.vcproj174
-rw-r--r--libs/geometry/test/strategies/segment_intersection_collinear.cpp256
-rw-r--r--libs/geometry/test/strategies/segment_intersection_collinear.vcproj174
-rw-r--r--libs/geometry/test/strategies/spherical_side.cpp142
-rw-r--r--libs/geometry/test/strategies/spherical_side.vcproj174
-rw-r--r--libs/geometry/test/strategies/strategies_tests.sln73
-rw-r--r--libs/geometry/test/strategies/transform_cs.cpp149
-rw-r--r--libs/geometry/test/strategies/transform_cs.vcproj174
-rw-r--r--libs/geometry/test/strategies/transformer.cpp113
-rw-r--r--libs/geometry/test/strategies/transformer.vcproj174
-rw-r--r--libs/geometry/test/strategies/within.cpp194
-rw-r--r--libs/geometry/test/strategies/within.vcproj174
-rw-r--r--libs/geometry/test/test_common/test_point.hpp94
-rw-r--r--libs/geometry/test/test_common/with_pointer.hpp87
-rw-r--r--libs/geometry/test/test_geometries/all_custom_container.hpp137
-rw-r--r--libs/geometry/test/test_geometries/all_custom_linestring.hpp137
-rw-r--r--libs/geometry/test/test_geometries/all_custom_polygon.hpp130
-rw-r--r--libs/geometry/test/test_geometries/all_custom_ring.hpp142
-rw-r--r--libs/geometry/test/test_geometries/custom_segment.hpp58
-rw-r--r--libs/geometry/test/test_geometries/wrapped_boost_array.hpp151
-rw-r--r--libs/geometry/test/ttmath.vsprops15
-rw-r--r--libs/geometry/test/util/Jamfile.v218
-rw-r--r--libs/geometry/test/util/as_range.cpp79
-rw-r--r--libs/geometry/test/util/as_range.vcproj174
-rw-r--r--libs/geometry/test/util/calculation_type.cpp206
-rw-r--r--libs/geometry/test/util/calculation_type.vcproj174
-rw-r--r--libs/geometry/test/util/for_each_coordinate.cpp84
-rw-r--r--libs/geometry/test/util/for_each_coordinate.vcproj174
-rw-r--r--libs/geometry/test/util/rational.cpp61
-rw-r--r--libs/geometry/test/util/rational.vcproj174
-rw-r--r--libs/geometry/test/util/select_most_precise.cpp69
-rw-r--r--libs/geometry/test/util/select_most_precise.vcproj174
-rw-r--r--libs/geometry/test/util/util_tests.sln49
-rw-r--r--libs/geometry/test/util/write_dsv.cpp73
-rw-r--r--libs/geometry/test/util/write_dsv.vcproj174
-rw-r--r--libs/geometry/test/views/Jamfile.v218
-rw-r--r--libs/geometry/test/views/box_view.cpp81
-rw-r--r--libs/geometry/test/views/box_view.vcproj178
-rw-r--r--libs/geometry/test/views/closeable_view.cpp134
-rw-r--r--libs/geometry/test/views/closeable_view.vcproj176
-rw-r--r--libs/geometry/test/views/reversible_closeable.cpp165
-rw-r--r--libs/geometry/test/views/reversible_closeable.vcproj176
-rw-r--r--libs/geometry/test/views/reversible_view.cpp81
-rw-r--r--libs/geometry/test/views/reversible_view.vcproj176
-rw-r--r--libs/geometry/test/views/segment_view.cpp86
-rw-r--r--libs/geometry/test/views/segment_view.vcproj178
-rw-r--r--libs/geometry/test/views/views.sln43
1280 files changed, 156733 insertions, 0 deletions
diff --git a/libs/geometry/doc/Jamfile.v2 b/libs/geometry/doc/Jamfile.v2
new file mode 100644
index 000000000..1deb3fd94
--- /dev/null
+++ b/libs/geometry/doc/Jamfile.v2
@@ -0,0 +1,45 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project geometry/doc ;
+
+# Auto-index, experimental. Commented otherwise does not build without.
+#using auto-index ;
+
+using quickbook ;
+
+path-constant here : . ;
+path-constant images_location : html ;
+
+
+boostbook geometry
+ : geometry.qbk
+ : <dependency>Jamfile.v2
+ <dependency>quickref.xml
+ <dependency>generated/point.qbk
+ <xsl:param>chunk.section.depth=4
+# <auto-index>off
+# <auto-index-internal>on
+# <auto-index-verbose>off
+# <xsl:param>index.on.type=1
+# <format>html
+ <xsl:param>chunk.first.sections=1
+ <xsl:param>toc.section.depth=3
+ <xsl:param>toc.max.depth=2
+ <xsl:param>generate.section.toc.level=4
+ <xsl:param>boost.root=../../../..
+ <quickbook-define>enable_index
+ <include>$(here)
+ <format>pdf:<xsl:param>img.src.path=$(images_location)/
+;
+
+install pdfinstall : geometry/<format>pdf : <location>. <name>geometry.pdf <install-type>PDF ;
+explicit pdfinstall ;
diff --git a/libs/geometry/doc/about_documentation.qbk b/libs/geometry/doc/about_documentation.qbk
new file mode 100644
index 000000000..e2b277851
--- /dev/null
+++ b/libs/geometry/doc/about_documentation.qbk
@@ -0,0 +1,116 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:aboutdoc About this Documentation]
+
+Within the Boost community there are several styles of documenting. Most libraries nowadays are using QuickBook, the WikiWiki style documentation.
+
+Boost.Geometry started with Doxygen, and during review it was decided to go to QuickBook. However, it was convenient to keep Doxygen also there: it does a good job of connecting descriptions to function and class declarations.
+
+Doxygen is able to generate XML (besides the normal HTML output), containing all documentation.
+
+So the challenge was to translate the XML generated by doxygen to QuickBook. At least, translate parts of it. Boost contains currently two tools using XSLT to go from Doxygen-XML to BoostBook, or to QuickBook. These tools are used within Boost.Random and Boost.Asio (and maybe more). However, this XSLT process was quite hard, did not deliver (yet) the wished results, and we are all C++ programmers. So another tool was born, this time in C++ using RapidXML, going from Doxygen-XML to QuickBook with the ability to mix both.
+
+[heading The chain]
+The process is as following:
+
+# call doxygen to go from C++ to XML
+# call ['doxygen_xml2qbk] to go from XML to QuickBook
+# call bjam to from QuickBook to HTML
+ # bjam translates QuickBook to BoostBook
+ # bjam then translates from BoostBook to DocBook
+ # bjam then translates from DocBook to HTML
+
+This chain is currently called by "make_qbk.py", a Python script which calls the chain above in the right order. Python ensures that the chain can be handled in both Windows and Linux environments (it is probably possible to call all parts with bjam too).
+
+[heading The reference matrix]
+There reference matrix is the only thing written in BoostBook. It is an XML file with an overview of all Boost.Geometry functionality. Presenting it like this is not possible within QuickBook, therefore BoostBook XML is used here. It is included by the QuickBook code. The Boost.Asio documentation contains a similar reference matrix.
+
+
+[heading Mixing QuickBook into C++ code]
+With Doxygen it is possible to define aliases. Specificly for ['doxygen_xml2qbk], the alias [*\qbk{...}] was defined. This alias [*\qbk{...}] add some XML-tags around the text inside the alias, such that that included part is recognizable by the converter.
+
+So the C++ code might look like this:
+
+[pre
+/*!
+\brief Some explanation
+\ingroup some_group
+\details Some details
+\tparam Geometry Description of the template parameter
+\param geometry Description of the variable
+
+\qbk{ \[include reference/more_documentation.qbk\] }
+ */
+]
+
+First you see normal Doxygen comments. The last line uses the alias \qbk{...} to include a QuickBook file. So most of the documentation can be written in that QuickBook file: behaviour, complexity, examples, related pages, etc.
+
+In the example above a QuickBook include statement is used. But any QuickBook code can be used, the QuickBook code does not have to be stored in a separate file. Two more samples:
+
+[pre
+/*!
+...
+\qbk{
+\[heading Example\]
+\[area_with_strategy\]
+\[area_with_strategy_output\]
+
+\[heading Available Strategies\]
+\[link geometry.reference.strategies.strategy_area_surveyor Surveyor (cartesian)\]
+}
+ */
+]
+
+In this example pieces of QuickBook are included, two headers, two examples (this is the QuickBook way - the examples are defined elsewhere), and a link.
+
+[heading QuickBook within C++ issues]
+There are two issues: the comma and the asterisk. If within the [*\qbk] alias a comma is used, it is recognized by Doxygen as another parameter, and therefore will not deliver the correct results, or result into errors. This is easily solvable by escaping comma's (by putting a backslash directly before the comma, \\, ). It within the [*\qbk] alias an asterisk is used on the first line, it is interpreted by Doxygen as well. This asterisk can be escaped as well, and this time it is ['doxygen_qbk2xml] which handles this escape and translates it back into an asterisk.
+
+[heading Overloads]
+Boost.Geometry contains a lot of overloads, two functions with the same name and, for example, a different number of parameters. Or, as another example, a const and a non-const version. They can be marked specificly to the ['doxygen_xml2qbk] tool with the \qbk alias, by adding a specific description for the overload. So, for example, [*\qbk{distinguish,with strategy}] will result in another page where the text "with strategy" is added, and it is processed as "_with_strategy" within the QuickBook section name.
+
+[heading Overloads and sharing documentation]
+With overloads, part of the documentation must be shared, and other part must not. The descriptions are often the same. But the examples are usually not. So it is a balance between sharing documentation, including shared documentation, avoiding too much separate QuickBook files containing pieces of documentation and avoiding including too much QuickBook code within the C++ code...
+
+[heading Doxygen aliases]
+While documenting a large library, it is unavoidable that you have to document the same parameters in different places. For example, the template parameter [*Geometry], and the variable [*geometry], occur at least 100 times in our library.
+
+To avoid repeating the same text again and again, Doxygen aliases are used. So \tparam_geometry means that the generic description for a template parameter geometry is inserted. \param_geometry does the same for a parameter. This is all handled by Doxygen itself. The aliases can also be parameterized, for example: [*\return_calc{area}] is expanded to: ['The calculated area]
+
+This is for Doxygen alone and is not related to ['doxygen_xml2qbk] or QuickBook.
+
+[heading QuickBook macros]
+QuickBook has the same functionality for the same purpose: macro's or templates can be defined. Within Boost.Geometry this is used in the QuickBook parts of the documentation. So the general rule would be: where it is possible to use a Doxygen alias, we use a Doxygen alias. If we are outside the scope of Doxygen and we want to define a macro, we use a QuickBook macro.
+
+Stated otherwise, we don't use the generated Doxygen documentation, but if we would, it would look correct and would not be unreadable by unexpanded QuickBook macro's.
+
+[heading Code examples]
+We favour the use of code examples within the generated documentation. Example code must be correct, so examples must compile, run, and produce the correct results. QuickBook has a nice solution to include and present C++ source code, including syntax highlighting. So we generally present the example (a complete example including necessary headerfiles) and the output. Asserts are not used here, these are examples and no tests.
+
+So this is why we did enclose in the \qbk alias above:
+
+[pre
+\[heading Example\]
+\[area_with_strategy\]
+\[area_with_strategy_output\]
+]
+
+We define a heading, we include the example (here denoted by the name "area_with_strategy") and we include the output of the sample "area_with_strategy_output". Note that we simulate that the output is C++ code, a trick giving the appropriate formatting (there might be other ways to get the same effect).
+
+All these QuickBook examples are included in the doc\/src\/examples\/* folders, where also a Jamfile is present. Running bjam there ensures that nothing is broken in the examples.
+
+Some examples, if relevant, are accompagnied by images. The images are generated by the example themselves (though marked as commented out for QuickBook), deliver an SVG file which can be manually converted to a PNG (I'm using InkScape for that which is quite convenient).
+
+
+
+[endsect]
diff --git a/libs/geometry/doc/acknowledgments.qbk b/libs/geometry/doc/acknowledgments.qbk
new file mode 100644
index 000000000..929fa8d2a
--- /dev/null
+++ b/libs/geometry/doc/acknowledgments.qbk
@@ -0,0 +1,43 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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 Acknowledgments]
+
+We like to thank all the people who helped to develop this library.
+
+First of all we are grateful to Hartmut Kaiser for managing the formal review
+of this library. Hartmut is an excellent review manager, who intervented when
+necessary and produced the review report quickly.
+
+We thank the 14 reviewers of our library, reviewed from November 5, 2009 to
+November 22, 2009. Reviews have been written by: Brandon Kohn, Christophe
+Henry, Fabio Fracassi, Gordon Woodhull, Joachim Faulhaber, Jonathan Franklin,
+Jose, Lucanus Simonson, Michael Caisse, Michael Fawcett, Paul Bristow, Phil
+Endecott, Thomas Klimpel, Tom Brinkman.
+
+We also thank all people who discussed on the mailing lists (either at boost,
+or at osgeo) about __boost_geometry__, in preview stage, or in review stage,
+or after that.
+
+Furthermore we are thankful to people supplying patches: Arnold Metselaar,
+Aleksey Tulinov, Christophe Henry
+
+Finally I (Barend) would like to thank my former employer, Geodan. They
+allowed me to start a geographic library in 1995, which after a number of
+incarnations, redesigns, refactorings, previews, a review and even more
+refactorings have led to the now released __boost_geometry__. And with them I
+want to thank the team initially involved in developing the library, Valik
+Solorzano Barboza, Maarten Hilferink, Anne Blankert, and later Sjoerd
+Schreuder, Steven Fruijtier, Paul den Dulk, and Joris Sierman.
+
+[endsect]
+
diff --git a/libs/geometry/doc/compiling.qbk b/libs/geometry/doc/compiling.qbk
new file mode 100644
index 000000000..f549fabd0
--- /dev/null
+++ b/libs/geometry/doc/compiling.qbk
@@ -0,0 +1,136 @@
+[/==============================================================================
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK., London, UK
+
+ 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 Compilation]
+
+[def __msvc__ MSVC]
+[def __stlport__ [@http://sourceforge.net/projects/stlport STLport]]
+
+__boost_geometry__ is a headers-only library. Users only need to include the
+library headers in their programs in order to be able to access definitions
+and algorithms provided by the __boost_geometry__ library. No linking against
+any binaries is required.
+
+__boost_geometry__ is only dependant on headers-only __boost__ libraries.
+It does not introduce indirect dependencies on any binary libraries.
+
+In order to be able to use __boost_geometry__, the only thing users need to do
+is to download and/or install Boost and specify location to include
+directories, so `include` directives of this scheme will work:
+
+ #include <boost/...>
+
+[heading Supported Compilers]
+
+__boost_geometry__ library has been successfully tested with the following
+compilers:
+
+* __msvc__ (including Express Editions)
+ * 10.0 (__msvc__ 2010) [/reported by Trunk report May 8, 2011]
+ * 9.0 (__msvc__ 2008) [/reported by Trunk report May 8, 2011]
+ * 8.0 (__msvc__ 2005) [/reported by Trunk report May 8, 2011]
+* gcc
+ * gcc 4.7.0 [/reported by Trunk report February 12, 2012]
+ * gcc 4.6.2 [/reported by Trunk report February 12, 2012]
+ * gcc 4.6.1 [/reported by Trunk report May 8, 2011]
+ * gcc 4.6.0 [/reported by Trunk report May 8, 2011]
+ * gcc 4.5.2 [/reported by Trunk report May 8, 2011]
+ * gcc 4.4.0 [/reported by Trunk report May 8, 2011]
+ * gcc 4.3.4 [/reported by Trunk report March 26, 2011]
+ * gcc 4.2.1 [/reported by Trunk report May 8, 2011]
+ * gcc 3.4.6 [/reported by Trunk report March 26, 2011]
+* clang
+ * clang x.x [/reported by Trunk report March 26, 2011]
+* darwin
+ * darwin 4.0.1 [/reported by Trunk report March 26, 2011]
+ * darwin 4.4 [/reported by Trunk report March 26, 2011]
+* intel
+ * intel 11.1 [/reported by Trunk report March 26, 2011]
+ * intel 11.0 [/reported by Trunk report March 26, 2011]
+ * intel 10.1 [/reported by Trunk report March 26, 2011]
+* pathscale
+ * pathscale 4.0.8 [/reported by Trunk report March 26, 2011]
+
+__boost_geometry__ uses __boost_bb__, a text-based system for developing and
+testing software, to configure, build and execute unit tests and example
+programs. The build configuration is provided as a collection of `Jamfile.v2`
+files.
+
+For gcc, flag [^-Wno-long-long] can be used to surpress some warnings
+originating from Boost.
+
+[heading Includes]
+
+The most convenient headerfile including all algorithms and strategies is
+`geometry.hpp`:
+
+ #include <boost/geometry.hpp>
+
+This is the main header of the __boost_geometry__ library and it is
+recommended to include this file.
+
+Alternatively, it is possible to include __boost_geometry__ header files
+separately. However, this may be inconvenient as header files might be renamed
+or moved occasionaly in future.
+
+Another often used header is `geometries.hpp`:
+
+ #include <boost/geometry/geometries/geometries.hpp>
+
+This includes definitions of all provided geometry types: point,
+linestring, polygon, ring, box. The file `geometries.hpp` is not included in
+the `geometry.hpp` headerfile because users should be given the liberty to use
+their own geometries and not the provided ones. However, for the
+__boost_geometry__ users who want to use the provided geometries it is useful
+to include.
+
+For users using multi-geometries:
+
+ #include <boost/geometry/multi/geometries/multi_geometries.hpp>
+
+[heading Advanced Includes]
+
+Users who have their own geometries and want to use algorithms from
+__boost_geometry__ might include the files containing registration
+macro's, like:
+
+ #include <boost/geometry/geometries/register/point.hpp>
+
+[heading Performance]
+
+The enumeration below is not exhaustive but can contain hints to improve the
+performance:
+
+* For Microsoft __msvc__, set define `_SECURE_SCL=0` for preprocessor.
+* For Microsoft __msvc__, set define `_HAS_ITERATOR_DEBUGGING=0` for preprocessor.
+* Use of __stlport__, a popular open-source implementation of the STL, may result in
+ significantly faster code than use of the C++ standard library provided by __msvc__.
+* Turn on compiler optimizations, compile in release mode.
+
+[heading Problems with Intellisense]
+
+Both versions of __msvc__, 2005 and 2008 (including Express Editions) can hang
+trying to resolve symbols and give [@http://en.wikipedia.org/wiki/IntelliSense
+IntelliSense] suggestions while typing in a bracket or angle bracket.
+This is not directly related to __boost_geometry__, but is caused by problems
+with handling by this IDE large C++ code base with intensively used templates,
+such as Boost and __boost_geometry__. If this is inconvenient, IntelliSense
+can be turned off:
+
+[:['["(...)disabling IntelliSense in VC++. There is a file called `feacp.dll` in
+`<VS8INSTALL>/VC/vcpackages` folder. Renaming this file will disable Intellisense feature.]]
+
+-- [@http://blogs.msdn.com/yash/archive/2007/09/19/intellisense-issues-in-visual-c-2005.aspx Intellisense issues in Visual C++ 2005]
+]
+
+
+[endsect] [/ end of Compilation]
diff --git a/libs/geometry/doc/concept/box.qbk b/libs/geometry/doc/concept/box.qbk
new file mode 100644
index 000000000..2f1ec9ed7
--- /dev/null
+++ b/libs/geometry/doc/concept/box.qbk
@@ -0,0 +1,42 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:concept_box Box Concept]
+
+[heading Description]
+[concept Box..box]
+
+A box is a geometry with (usually) two or three dimensions, having its axis aligned to the coordinate system.
+
+The box is not one of the basic types in Boost.Geometry (point, linestring, polygon) but it is a ['helper type].
+The main reasons for the box existance are its usefulness for indexing (a spatial index, or splitting a geometry
+into monotonic sections) and it is the output of the [link geometry.reference.algorithms.envelope envelope] algorithm.
+
+Therefore, a box is axis aligned (the envelope is also called aabb, axis aligned bounding box).
+
+[heading Concept Definition]
+
+The Box Concept is defined as following:
+
+* there must be a specialization of `traits::tag`, defining `box_tag` as type
+* there must be a specialization of `traits::point_type` to define the underlying point type
+ (even if it does not consist of points, it should define this type, to indicate the points it can work with)
+* there must be a specialization of `traits::indexed_access`, per index (`min_corner`, `max_corner`) and per dimension, with two functions:
+ * `get` to get a coordinate value
+ * `set` to set a coordinate value (this one is not checked for ConstBox)
+
+
+[heading Available Models]
+* [link geometry.reference.models.model_box model::box]
+
+[endsect]
+
diff --git a/libs/geometry/doc/concept/linestring.qbk b/libs/geometry/doc/concept/linestring.qbk
new file mode 100644
index 000000000..0cf21b723
--- /dev/null
+++ b/libs/geometry/doc/concept/linestring.qbk
@@ -0,0 +1,45 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:concept_linestring Linestring Concept]
+
+[heading Description]
+[concept Linestring..linestring]
+
+A linestring is ['a Curve with linear interpolation between Points].
+(__ogc_sf__).
+
+[heading Concept Definition]
+
+The Linestring Concept is defined as following:
+
+* there must be a specialization of `traits::tag` defining `linestring_tag` as type
+* it must behave like a Boost.Range Random Access Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill
+ the [link geometry.reference.concepts.concept_point Point Concept]
+
+[heading Rules]
+
+Besides the Concepts, which are checks on compile-time, there are rules that
+valid linestrings must fulfill. Most algorithms work on any linestring, so either
+self-crossing or not. However, for correct results using the overlay algorithms
+(intersection and difference algorithms in combination with a polygon)
+self-intersections can disturb the process and result in incorrect results.
+
+[heading Available Models]
+* [link geometry.reference.models.model_linestring model::linestring]
+* a std::vector (requires registration)
+* a std::deque (requires registration)
+
+[see_boost_range_sample Linestring]
+
+[endsect]
diff --git a/libs/geometry/doc/concept/multi_linestring.qbk b/libs/geometry/doc/concept/multi_linestring.qbk
new file mode 100644
index 000000000..c331ede2c
--- /dev/null
+++ b/libs/geometry/doc/concept/multi_linestring.qbk
@@ -0,0 +1,31 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:concept_multi_linestring MultiLinestring Concept]
+
+[heading Description]
+[concept MultiLinestring..multi linestring]
+
+[heading Concept Definition]
+
+The MultiLinestring Concept is defined as following:
+
+* There must be a specialization of the metafunction `traits::tag`, defining `multi_linestring_tag` as type
+* It must behave like a Boost.Range Random Access Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill
+ the [link geometry.reference.concepts.concept_linestring Linestring Concept]
+
+[heading Available Models]
+* [link geometry.reference.models.model_multi_linestring model::multi_linestring]
+
+
+[endsect]
diff --git a/libs/geometry/doc/concept/multi_point.qbk b/libs/geometry/doc/concept/multi_point.qbk
new file mode 100644
index 000000000..54dce1f80
--- /dev/null
+++ b/libs/geometry/doc/concept/multi_point.qbk
@@ -0,0 +1,31 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:concept_multi_point MultiPoint Concept]
+
+[heading Description]
+[concept MultiPoint..multi point]
+
+
+[heading Concept Definition]
+
+The MultiPoint Concept is defined as following:
+
+* There must be a specialization of the metafunction `traits::tag`, defining `multi_point_tag` as type
+* It must behave like a Boost.Range Random Access Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill the [link geometry.reference.concepts.concept_point Point Concept]
+
+[heading Available Models]
+* [link geometry.reference.models.model_multi_point model::multi_point]
+
+
+[endsect]
diff --git a/libs/geometry/doc/concept/multi_polygon.qbk b/libs/geometry/doc/concept/multi_polygon.qbk
new file mode 100644
index 000000000..a206a4356
--- /dev/null
+++ b/libs/geometry/doc/concept/multi_polygon.qbk
@@ -0,0 +1,44 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:concept_multi_polygon MultiPolygon Concept]
+
+[heading Description]
+[concept MultiPolygon..multi polygon]
+
+[heading Concept Definition]
+
+The MultiPolygon Concept is defined as following:
+
+* There must be a specialization of the metafunction `traits::tag`, defining `multi_polygon_tag` as type
+* It must behave like a Boost.Range Random Access Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill
+ the [link geometry.reference.concepts.concept_polygon Polygon Concept]
+
+[heading Rules]
+
+Besides the Concepts, which are checks on compile-time, there are
+rules that valid MultiPolygons must fulfill. See the
+[link geometry.reference.concepts.concept_polygon Polygon Concept] for more information
+on the rules a polygon (and also a multi polygon) must fulfill.
+
+Additionally:
+
+* Individual polygons making up a multi-polygon may not intersect each other,
+ but tangencies are allowed.
+* One polygon might be located within the interior ring of another polygon.
+
+[heading Available Models]
+* [link geometry.reference.models.model_multi_polygon model::multi_polygon]
+
+
+[endsect]
diff --git a/libs/geometry/doc/concept/point.qbk b/libs/geometry/doc/concept/point.qbk
new file mode 100644
index 000000000..070aa81f6
--- /dev/null
+++ b/libs/geometry/doc/concept/point.qbk
@@ -0,0 +1,49 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:concept_point Point Concept]
+
+[heading Description]
+[concept Point..point]
+
+A point is ['an entity that has a location in space or on a plane, but has no extent] ([@http://en.wikipedia.org/wiki/Point_(geometry) wiki]).
+The point is the most basic geometry of Boost.Geometry, most other geometries consist of points.
+['(Exceptions are box and segment, which might consist of two points but that is not necessarily the case.)]
+
+[heading Concept Definition]
+
+The Point Concept is defined as following:
+
+* there must be a specialization of `traits::tag`, defining `point_tag` as type
+* there must be a specialization of `traits::coordinate_type`, defining the type of its coordinates
+* there must be a specialization of `traits::coordinate_system`, defining its coordinate system
+ (cartesian, spherical, etc)
+* there must be a specialization of `traits::dimension`, defining its number of dimensions (2, 3, ...)
+ (hint: derive it conveniently from `boost::mpl::int_<X>` for X Dimensional)
+* there must be a specialization of `traits::access`, per dimension, with two functions:
+ * `get` to get a coordinate value
+ * `set` to set a coordinate value (this one is not checked for ConstPoint)
+
+[heading Available Models]
+* [link geometry.reference.models.model_point model::point]
+* [link geometry.reference.models.model_d2_point_xy model::d2::point_xy]
+* a lat long point (currently in an extension)
+* [link geometry.reference.adapted.c_array C array]
+* [link geometry.reference.adapted.boost_array Boost.Array]
+* [link geometry.reference.adapted.boost_fusion Boost.Fusion]
+* [link geometry.reference.adapted.boost_polygon Boost.Polygon]
+* [link geometry.reference.adapted.boost_tuple Boost.Tuple]
+* other point types, adapted e.g. using one of the [link geometry.reference.adapted registration macro's]
+
+[endsect]
+
+
diff --git a/libs/geometry/doc/concept/polygon.qbk b/libs/geometry/doc/concept/polygon.qbk
new file mode 100644
index 000000000..a2de9fd6a
--- /dev/null
+++ b/libs/geometry/doc/concept/polygon.qbk
@@ -0,0 +1,71 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:concept_polygon Polygon Concept]
+
+[heading Description]
+[concept Polygon..polygon]
+
+A polygon is ['A polygon is a planar surface defined by one exterior boundary and zero or more interior boundaries]
+(__ogc_sf__).
+
+So the definition of a Boost.Geometry polygon differs a bit from e.g. Wiki, where a polygon does not have holes. A
+polygon of Boost.Geometry is a polygon with or without holes.
+['(A polygon without holes is a ['helper geometry] within Boost.Geometry, and referred to as a ring.)]
+
+[heading Concept Definition]
+
+The Polygon Concept is defined as following:
+
+* there must be a specialization of `traits::tag` defining `polygon_tag` as type
+* there must be a specialization of `traits::ring_type` defining the type of its exterior ring and interior rings as type
+* this type defined by `ring_type` must fulfill the [link geometry.reference.concepts.concept_ring Ring Concept]
+* there must be a specialization of `traits::interior_type` defining the type of the collection of its interior rings as type;
+ this collection itself must fulfill a Boost.Range Random Access Range Concept
+* there must be a specialization of `traits::exterior_ring` with two functions named `get`, returning the exterior ring, one being const, the other being non const
+* there must be a specialization of `traits::interior_rings` with two functions named `get`, returning the interior rings, one being const, the other being non const
+
+[heading Rules]
+
+Besides the Concepts, which are checks on compile-time, there are some other
+rules that valid polygons must fulfill. This follows the opengeospatial rules (see link
+above).
+
+* Polygons are simple geometric objects (See also [@http://en.wikipedia.org/wiki/Simple_polygon wiki]
+ but holes are allowed in __boost_geometry__ polygons).
+* If the polygons underlying `ring_type` is defined as clockwise, the exterior
+ ring must have the clockwise orientation, and any interior ring must be
+ reversed w.r.t. the defined orientation (so: counter clockwise for clockwise exterior rings).
+ If the `ring_type` is defined counter clockwise, it is vice versa.
+* If the polygons underlying `ring_type` is defined as closed, all rings must be
+ closed: the first point must be spatially equal to the last point.
+* The interior is a connected point set.
+* There should be no self intersections, but self tangencies (between
+ exterior/interior rings) are allowed (as long as the interior is a connected
+ point set.
+* There should be no cut lines, spikes or punctures.
+* The interior rings should be located within the exterior ring. Interior rings
+ may not be located within each other.
+
+The algorithms such as intersection, area, centroid, union, etc. do not check
+validity. There will be an algorithm is_valid which checks for
+validity against these rules, at runtime, and which can be called (by the library
+user) before.
+
+If the input is invalid, the output might be invalid too. For example: if a polygon
+which should be closed is not closed, the area will be incorrect.
+
+[heading Available Models]
+* [link geometry.reference.models.model_polygon polygon]
+* a Boost.Polygon polygon_with_holes_data (requires `#include boost/geometry/geometries/adapted/boost_polygon/polygon.hpp>`)
+
+[endsect]
diff --git a/libs/geometry/doc/concept/ring.qbk b/libs/geometry/doc/concept/ring.qbk
new file mode 100644
index 000000000..67bc2d0cb
--- /dev/null
+++ b/libs/geometry/doc/concept/ring.qbk
@@ -0,0 +1,46 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:concept_ring Ring Concept]
+
+[heading Description]
+[concept Ring..ring]
+
+[note Also called linear ring, but we explicitly refer to a filled feature here]
+
+[heading Concept Definition]
+
+The Ring Concept is defined as following:
+
+* there must be a specialization of `traits::tag` defining `ring_tag` as type
+* it must behave like a Boost.Range Random Access Range
+* The type defined by the metafunction `range_value<...>::type` must fulfill
+ the [link geometry.reference.concepts.concept_point Point Concept]
+* there might be a specialization of `traits::point_order` defining the order or orientation of its points, `clockwise` or `counterclockwise`
+* there might be a specialization of `traits::closure` defining the closure, `open` or `closed`
+
+[heading Rules]
+
+Besides the Concepts, which are checks on compile-time, there are
+rules that valid rings must fulfill. See the
+[link geometry.reference.concepts.concept_polygon Polygon Concept] for more information
+on the rules a polygon (and also a ring) must fulfill.
+
+[heading Available Models]
+* [link geometry.reference.models.model_ring ring]
+* a Boost.Polygon polygon_data (requires `#include boost/geometry/geometries/adapted/boost_polygon/ring.hpp>`)
+* a std::vector (requires `#include boost/geometry/geometries/adapted/std_as_ring.hpp>`)
+* a std::deque (requires `#include boost/geometry/geometries/adapted/std_as_ring.hpp>`)
+
+[see_boost_range_sample Ring]
+
+[endsect]
diff --git a/libs/geometry/doc/concept/segment.qbk b/libs/geometry/doc/concept/segment.qbk
new file mode 100644
index 000000000..48c3af45f
--- /dev/null
+++ b/libs/geometry/doc/concept/segment.qbk
@@ -0,0 +1,35 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:concept_segment Segment Concept]
+
+[heading Description]
+[concept Segment..segment]
+
+
+[heading Concept Definition]
+
+* there must be a specialization of `traits::tag` defining `segment_tag` as type
+* there must be a specialization of `traits::point_type` to define the underlying point type
+ (even if it does not consist of points, it should define this type, to indicate the points it can work with)
+* there must be a specialization of `traits::indexed_access`, per index and per dimension, with two functions:
+ * `get` to get a coordinate value
+ * `set` to set a coordinate value (this one is not checked for ConstSegment)
+
+[note The segment concept is similar to the box concept, defining using another tag.
+However, the box concept assumes the index as `min_corner`, `max_corner`, while for the segment concept, there is no assumption.]
+
+[heading Available Models]
+* [link geometry.reference.models.model_segment model::segment]
+* [link geometry.reference.models.model_referring_segment referring segment]
+
+[endsect]
diff --git a/libs/geometry/doc/copyright_note_policy.txt b/libs/geometry/doc/copyright_note_policy.txt
new file mode 100644
index 000000000..9964da4fb
--- /dev/null
+++ b/libs/geometry/doc/copyright_note_policy.txt
@@ -0,0 +1,41 @@
+===========================================================================
+ Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2011 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2011 Mateusz Loskot, London, UK.
+
+ 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)
+============================================================================
+
+The default copyright note for C++ source files reads:
+
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2011 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2011 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+Exceptions:
+1) Major work of any author -> might change order, change date
+2) Exclusive work of one author including design -> might take sole copyright
+ Examples:
+ - adapted geometry types e.g. array, Boost.Polygon
+ - implemented file-format e.g. WKB
+ - implemented specific strategy or algorithm e.g. intersections
+3) Examples -> might take sole copyright
+4) Tests -> might take sole copyright
+5) Docs -> might take sole copyright
+6) Utilities e.g. converters -> might take sole copyright
+
+
+
+The copyright note for other (source) files as .py, Jamfiles, etc is similar
+and comments are changed accordingly.
diff --git a/libs/geometry/doc/design_rationale.qbk b/libs/geometry/doc/design_rationale.qbk
new file mode 100644
index 000000000..301a9ee81
--- /dev/null
+++ b/libs/geometry/doc/design_rationale.qbk
@@ -0,0 +1,651 @@
+[/==============================================================================
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK., London, UK
+
+ 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)
+===============================================================================/]
+
+[/ note the source code in this QBK is the only not (yet) checked by a compiler]
+
+[section:design Design Rationale]
+
+Suppose you need a C++ program to calculate the distance between two points.
+You might define a struct:
+
+ struct mypoint
+ {
+ double x, y;
+ };
+
+and a function, containing the algorithm:
+
+ double distance(mypoint const& a, mypoint const& b)
+ {
+ double dx = a.x - b.x;
+ double dy = a.y - b.y;
+ return sqrt(dx * dx + dy * dy);
+ }
+
+Quite simple, and it is usable, but not generic. For a library it has to be
+designed way further. The design above can only be used for 2D points, for the
+struct [*mypoint] (and no other struct), in a Cartesian coordinate system. A
+generic library should be able to calculate the distance:
+
+* for any point class or struct, not on just this [*mypoint] type
+* in more than two dimensions
+* for other coordinate systems, e.g. over the earth or on a sphere
+* between a point and a line or between other geometry combinations
+* in higher precision than ['double]
+* avoiding the square root: often we don't want to do that because it is a relatively expensive
+ function, and for comparing distances it is not necessary
+
+In this and following sections we will make the design step by step more generic.
+
+[heading Using Templates]
+
+The distance function can be changed into a template function. This is trivial and allows
+calculating the distance between other point types than just [*mypoint]. We add two template
+parameters, allowing input of two different point types.
+
+ template <typename P1, typename P2>
+ double distance(P1 const& a, P2 const& b)
+ {
+ double dx = a.x - b.x;
+ double dy = a.y - b.y;
+ return std::sqrt(dx * dx + dy * dy);
+ }
+
+This template version is slightly better, but not much.
+
+Consider a C++ class where member variables are protected...
+Such a class does not allow to access `x` and `y` members directly. So, this paragraph is short
+and we just move on.
+
+[heading Using Traits]
+
+We need to take a generic approach and allow any point type as input to the distance function.
+Instead of accessing `x` and `y` members, we will add a few levels of indirection, using a
+traits system. The function then becomes:
+
+ template <typename P1, typename P2>
+ double distance(P1 const& a, P2 const& b)
+ {
+ double dx = get<0>(a) - get<0>(b);
+ double dy = get<1>(a) - get<1>(b);
+ return std::sqrt(dx * dx + dy * dy);
+ }
+
+This adapted distance function uses a generic get function, with dimension as a template parameter,
+to access the coordinates of a point. This get forwards to the traits system, defined as following:
+
+ namespace traits
+ {
+ template <typename P, int D>
+ struct access {};
+ }
+
+which is then specialized for our [*mypoint] type, implementing a static method called `get`:
+
+ namespace traits
+ {
+ template <>
+ struct access<mypoint, 0>
+ {
+ static double get(mypoint const& p)
+ {
+ return p.x;
+ }
+ };
+ // same for 1: p.y
+ ...
+ }
+
+Calling `traits::access<mypoint, 0>::get(a)` now returns us our `x` coordinate. Nice, isn't it?
+It is too verbose for a function like this, used so often in the library. We can shorten the syntax
+by adding an extra free function:
+
+ template <int D, typename P>
+ inline double get(P const& p)
+ {
+ return traits::access<P, D>::get(p);
+ }
+
+This enables us to call `get<0>(a)`, for any point having the traits::access specialization,
+as shown in the distance algorithm at the start of this paragraph. So we wanted to enable classes
+with methods like `x()`, and they are supported as long as there is a specialization of the access
+`struct` with a static `get` function returning `x()` for dimension 0, and similar for 1 and `y()`.
+
+[heading Dimension Agnosticism]
+
+Now we can calculate the distance between points in 2D, points of any structure or class.
+However, we wanted to have 3D as well. So we have to make it dimension agnostic. This complicates
+our distance function. We can use a `for` loop to walk through dimensions, but for loops have
+another performance than the straightforward coordinate addition which was there originally.
+However, we can make more usage of templates and make the distance algorithm as following,
+more complex but attractive for template fans:
+
+ template <typename P1, typename P2, int D>
+ struct pythagoras
+ {
+ static double apply(P1 const& a, P2 const& b)
+ {
+ double d = get<D-1>(a) - get<D-1>(b);
+ return d * d + pythagoras<P1, P2, D-1>::apply(a, b);
+ }
+ };
+
+ template <typename P1, typename P2 >
+ struct pythagoras<P1, P2, 0>
+ {
+ static double apply(P1 const&, P2 const&)
+ {
+ return 0;
+ }
+ };
+
+The distance function is calling that `pythagoras` structure, specifying the number of dimensions:
+
+ template <typename P1, typename P2>
+ double distance(P1 const& a, P2 const& b)
+ {
+ BOOST_STATIC_ASSERT(( dimension<P1>::value == dimension<P2>::value ));
+
+ return sqrt(pythagoras<P1, P2, dimension<P1>::value>::apply(a, b));
+ }
+
+The dimension which is referred to is defined using another traits class:
+
+``
+ namespace traits
+ {
+ template <typename P>
+ struct dimension {};
+ }
+``
+
+which has to be specialized again for the `struct mypoint`.
+
+Because it only has to publish a value, we conveniently derive it from the
+__boost_mpl__ `class boost::mpl::int_`:
+
+``
+namespace traits
+{
+ template <>
+ struct dimension<mypoint> : boost::mpl::int_<2>
+ {};
+}
+``
+
+Like the free get function, the library also contains a dimension meta-function.
+
+ template <typename P>
+ struct dimension : traits::dimension<P>
+ {};
+
+Below is explained why the extra declaration is useful. Now we have agnosticism in the number of
+dimensions. Our more generic distance function now accepts points of three or more dimensions.
+The compile-time assertion will prevent point a having two dimension and point b having
+three dimensions.
+
+[heading Coordinate Type]
+
+We assumed double above. What if our points are in integer?
+
+We can easily add a traits class, and we will do that. However, the distance between two integer
+coordinates can still be a fractionized value. Besides that, a design goal was to avoid square
+roots. We handle these cases below, in another paragraph. For the moment we keep returning double,
+but we allow integer coordinates for our point types. To define the coordinate type, we add
+another traits class, `coordinate_type`, which should be specialized by the library user:
+
+ namespace traits
+ {
+ template <typename P>
+ struct coordinate_type{};
+
+ // specialization for our mypoint
+ template <>
+ struct coordinate_type<mypoint>
+ {
+ typedef double type;
+ };
+ }
+
+Like the access function, where we had a free get function, we add a proxy here as well.
+A longer version is presented later on, the short function would look like this:
+
+ template <typename P>
+ struct coordinate_type : traits::coordinate_type<P> {};
+
+We now can modify our distance algorithm again. Because it still returns double, we only
+modify the `pythagoras` computation class. It should return the coordinate type of its input.
+But, it has two input, possibly different, point types. They might also differ in their
+coordinate types. Not that that is very likely, but we’re designing a generic library and we
+should handle those strange cases. We have to choose one of the coordinate types and of course
+we select the one with the highest precision. This is not worked out here, it would be too long,
+and it is not related to geometry. We just assume that there is a meta-function `select_most_precise`
+selecting the best type.
+
+So our computation class becomes:
+
+ template <typename P1, typename P2, int D>
+ struct pythagoras
+ {
+ typedef typename select_most_precise
+ <
+ typename coordinate_type<P1>::type,
+ typename coordinate_type<P2>::type
+ >::type computation_type;
+
+ static computation_type apply(P1 const& a, P2 const& b)
+ {
+ computation_type d = get<D-1>(a) - get<D-1>(b);
+ return d * d + pythagoras <P1, P2, D-1> ::apply(a, b);
+ }
+ };
+
+[heading Different Geometries]
+
+We have designed a dimension agnostic system supporting any point type of any
+coordinate type. There are still some tweaks but they will be worked out later.
+Now we will see how we calculate the distance between a point and a polygon, or
+between a point and a line-segment. These formulae are more complex, and the
+influence on design is even larger. We don’t want to add a function with another
+name:
+
+ template <typename P, typename S>
+ double distance_point_segment(P const& p, S const& s)
+
+We want to be generic, the distance function has to be called from code not
+knowing the type of geometry it handles, so it has to be named distance. We also
+cannot create an overload because that would be ambiguous, having the same
+template signature. There are two solutions:
+
+* tag dispatching
+* SFINAE
+
+We select tag dispatching because it fits into the traits system. The earlier
+versions (previews) of Boost.Geometry used SFINAE but we found it had several
+drawbacks for such a big design, so the switch to tag dispatching was made.
+
+With tag dispatching the distance algorithm inspects the type of geometry of the
+input parameters. The distance function will be changed into this:
+
+ template <typename G1, typename G2>
+ double distance(G1 const& g1, G2 const& g2)
+ {
+ return dispatch::distance
+ <
+ typename tag<G1>::type,
+ typename tag<G2>::type,
+ G1, G2
+ >::apply(g1, g2);
+ }
+
+It is referring to the tag meta-function and forwarding the call to the [*apply] method of
+a ['dispatch::distance] structure. The [*tag] meta-function is another traits class, and should
+be specialized for per point type, both shown here:
+
+ namespace traits
+ {
+ template <typename G>
+ struct tag {};
+
+ // specialization
+ template <>
+ struct tag<mypoint>
+ {
+ typedef point_tag type;
+ };
+ }
+
+Free meta-function, like coordinate_system and get:
+
+ template <typename G>
+ struct tag : traits::tag<G> {};
+
+[*Tags] (`point_tag`, `segment_tag`, etc) are empty structures with the purpose to specialize a
+dispatch struct. The dispatch struct for distance, and its specializations, are all defined
+in a separate namespace and look like the following:
+
+ namespace dispatch {
+ template < typename Tag1, typename Tag2, typename G1, typename G2 >
+ struct distance
+ {};
+
+ template <typename P1, typename P2>
+ struct distance < point_tag, point_tag, P1, P2 >
+ {
+ static double apply(P1 const& a, P2 const& b)
+ {
+ // here we call pythagoras
+ // exactly like we did before
+ ...
+ }
+ };
+
+ template <typename P, typename S>
+ struct distance
+ <
+ point_tag, segment_tag, P, S
+ >
+ {
+ static double apply(P const& p, S const& s)
+ {
+ // here we refer to another function
+ // implementing point-segment
+ // calculations in 2 or 3
+ // dimensions...
+ ...
+ }
+ };
+
+ // here we might have many more
+ // specializations,
+ // for point-polygon, box-circle, etc.
+
+ } // namespace
+
+So yes, it is possible; the distance algorithm is generic now in the sense that it also
+supports different geometry types. One drawback: we have to define two dispatch specializations
+for point - segment and for segment - point separately. That will also be solved, in the paragraph
+reversibility below. The example below shows where we are now: different point types,
+geometry types, dimensions.
+
+ point a(1,1);
+ point b(2,2);
+ std::cout << distance(a,b) << std::endl;
+ segment s1(0,0,5,3);
+ std::cout << distance(a, s1) << std::endl;
+ rgb red(255, 0, 0);
+ rbc orange(255, 128, 0);
+ std::cout << "color distance: " << distance(red, orange) << std::endl;
+
+[heading Kernel Revisited]
+
+We described above that we had a traits class `coordinate_type`, defined in namespace traits,
+and defined a separate `coordinate_type` class as well. This was actually not really necessary
+before, because the only difference was the namespace clause. But now that we have another
+geometry type, a segment in this case, it is essential. We can call the `coordinate_type`
+meta-function for any geometry type, point, segment, polygon, etc, implemented again by tag dispatching:
+
+ template <typename G>
+ struct coordinate_type
+ {
+ typedef typename dispatch::coordinate_type
+ <
+ typename tag<G>::type, G
+ >::type type;
+ };
+
+Inside the dispatch namespace this meta-function is implemented twice: a generic version and
+one specialization for points. The specialization for points calls the traits class.
+The generic version calls the point specialization, as a sort of recursive meta-function definition:
+
+ namespace dispatch
+ {
+
+ // Version for any geometry:
+ template <typename GeometryTag, typename G>
+ struct coordinate_type
+ {
+ typedef typename point_type
+ <
+ GeometryTag, G
+ >::type point_type;
+
+ // Call specialization on point-tag
+ typedef typename coordinate_type < point_tag, point_type >::type type;
+ };
+
+ // Specialization for point-type:
+ template <typename P>
+ struct coordinate_type<point_tag, P>
+ {
+ typedef typename
+ traits::coordinate_type<P>::type
+ type;
+ };
+ }
+
+So it calls another meta-function point_type. This is not elaborated in here but realize that it
+is available for all geometry types, and typedefs the point type which makes up the geometry,
+calling it type.
+
+The same applies for the meta-function dimension and for the upcoming meta-function coordinate system.
+
+[heading Coordinate System]
+
+Until here we assumed a Cartesian system. But we know that the Earth is not flat.
+Calculating a distance between two GPS-points with the system above would result in nonsense.
+So we again extend our design. We define for each point type a coordinate system type
+using the traits system again. Then we make the calculation dependant on that coordinate system.
+
+Coordinate system is similar to coordinate type, a meta-function, calling a dispatch function
+to have it for any geometry-type, forwarding to its point specialization, and finally calling
+a traits class, defining a typedef type with a coordinate system. We don’t show that all here again.
+We only show the definition of a few coordinate systems:
+
+ struct cartesian {};
+
+ template<typename DegreeOrRadian>
+ struct geographic
+ {
+ typedef DegreeOrRadian units;
+ };
+
+So Cartesian is simple, for geographic we can also select if its coordinates are stored in degrees
+or in radians.
+
+The distance function will now change: it will select the computation method for the corresponding
+coordinate system and then call the dispatch struct for distance. We call the computation method
+specialized for coordinate systems a strategy. So the new version of the distance function is:
+
+ template <typename G1, typename G2>
+ double distance(G1 const& g1, G2 const& g2)
+ {
+ typedef typename strategy_distance
+ <
+ typename coordinate_system<G1>::type,
+ typename coordinate_system<G2>::type,
+ typename point_type<G1>::type,
+ typename point_type<G2>::type,
+ dimension<G1>::value
+ >::type strategy;
+
+ return dispatch::distance
+ <
+ typename tag<G1>::type,
+ typename tag<G2>::type,
+ G1, G2, strategy
+ >::apply(g1, g2, strategy());
+ }
+
+The strategy_distance mentioned here is a struct with specializations for different coordinate
+systems.
+
+ template <typename T1, typename T2, typename P1, typename P2, int D>
+ struct strategy_distance
+ {
+ typedef void type;
+ };
+
+ template <typename P1, typename P2, int D>
+ struct strategy_distance<cartesian, cartesian, P1, P2, D>
+ {
+ typedef pythagoras<P1, P2, D> type;
+ };
+
+So, here is our `pythagoras` again, now defined as a strategy. The distance dispatch function just
+calls its apply method.
+
+So this is an important step: for spherical or geographical coordinate systems, another
+strategy (computation method) can be implemented. For spherical coordinate systems
+have the haversine formula. So the dispatching traits struct is specialized like this
+
+ template <typename P1, typename P2, int D = 2>
+ struct strategy_distance<spherical, spherical, P1, P2, D>
+ {
+ typedef haversine<P1, P2> type;
+ };
+
+ // struct haversine with apply function
+ // is omitted here
+
+For geography, we have some alternatives for distance calculation. There is the Andoyer method,
+fast and precise, and there is the Vincenty method, slower and more precise, and there are some
+less precise approaches as well.
+
+Per coordinate system, one strategy is defined as the default strategy. To be able to use
+another strategy as well, we modify our design again and add an overload for the distance
+algorithm, taking a strategy object as a third parameter.
+
+This new overload distance function also has the advantage that the strategy can be constructed
+outside the distance function. Because it was constructed inside above, it could not have
+construction parameters. But for Andoyer or Vincenty, or the haversine formula, it certainly
+makes sense to have a constructor taking the radius of the earth as a parameter.
+
+So, the distance overloaded function is:
+
+ template <typename G1, typename G2, typename S>
+ double distance(G1 const& g1, G2 const& g2, S const& strategy)
+ {
+ return dispatch::distance
+ <
+ typename tag<G1>::type,
+ typename tag<G2>::type,
+ G1, G2, S
+ >::apply(g1, g2, strategy);
+ }
+
+The strategy has to have a method apply taking two points as arguments (for points). It is not
+required that it is a static method. A strategy might define a constructor, where a configuration
+value is passed and stored as a member variable. In those cases a static method would be
+inconvenient. It can be implemented as a normal method (with the const qualifier).
+
+We do not list all implementations here, Vincenty would cover half a page of mathematics,
+but you will understand the idea. We can call distance like this:
+
+ distance(c1, c2)
+
+where `c1` and `c2` are Cartesian points, or like this:
+
+ distance(g1, g2)
+
+where `g1` and `g2` are Geographic points, calling the default strategy for Geographic
+points (e.g. Andoyer), and like this:
+
+ distance(g1, g2, vincenty<G1, G2>(6275))
+
+where a strategy is specified explicitly and constructed with a radius.
+
+[/ 'TODO: What to do with this section? We have concepts already --mloskot]
+[heading Point Concept]
+The five traits classes mentioned in the previous sections form together the
+Point Concept. Any point type for which specializations are implemented in
+the traits namespace should be accepted a as valid type. So the Point Concept
+consists of:
+
+* a specialization for `traits::tag`
+* a specialization for `traits::coordinate_system`
+* a specialization for `traits::coordinate_type`
+* a specialization for `traits::dimension`
+* a specialization for `traits::access`
+
+The last one is a class, containing the method get and the (optional) method
+set, the first four are metafunctions, either defining type or declaring a
+value (conform MPL conventions).
+
+So we now have agnosticism for the number of dimensions, agnosticism for
+coordinate systems; the design can handle any coordinate type, and it can
+handle different geometry types. Furthermore we can specify our own
+strategies, the code will not compile in case of two points with different
+dimensions (because of the assertion), and it will not compile for two points
+with different coordinate systems (because there is no specialization).
+A library can check if a point type fulfills the requirements imposed by the
+concepts. This is handled in the upcoming section Concept Checking.
+
+[heading Return Type]
+
+We promised that calling `std::sqrt` was not always necessary. So we define a distance result `struct`
+that contains the squared value and is convertible to a double value. This, however, only has to
+be done for `pythagoras`. The spherical distance functions do not take the square root so for them
+it is not necessary to avoid the expensive square root call; they can just return their distance.
+
+So the distance result struct is dependant on strategy, therefore made a member type of
+the strategy. The result struct looks like this:
+
+ template<typename T = double>
+ struct cartesian_distance
+ {
+ T sq;
+ explicit cartesian_distance(T const& v) : sq (v) {}
+
+ inline operator T() const
+ {
+ return std::sqrt(sq);
+ }
+ };
+
+It also has operators defined to compare itself to other results without taking the square root.
+
+Each strategy should define its return type, within the strategy class, for example:
+
+ typedef cartesian_distance<T> return_type;
+
+or:
+
+ typedef double return_type;
+
+for cartesian (pythagoras) and spherical, respectively.
+
+Again our distance function will be modified, as expected, to reflect the new return type.
+For the overload with a strategy it is not complex:
+
+ template < typename G1, typename G2, typename Strategy >
+ typename Strategy::return_type distance( G1 const& G1 , G2 const& G2 , S const& strategy)
+
+But for the one without strategy we have to select strategy, coordinate type, etc.
+It would be spacious to do it in one line so we add a separate meta-function:
+
+ template <typename G1, typename G2 = G1>
+ struct distance_result
+ {
+ typedef typename point_type<G1>::type P1;
+ typedef typename point_type<G2>::type P2;
+ typedef typename strategy_distance
+ <
+ typename cs_tag<P1>::type,
+ typename cs_tag<P2>::type,
+ P1, P2
+ >::type S;
+
+ typedef typename S::return_type type;
+ };
+
+and modify our distance function:
+
+ template <typename G1, typename G2>
+ inline typename distance_result<G1, G2>::type distance(G1 const& g1, G2 const& g2)
+ {
+ // ...
+ }
+
+Of course also the apply functions in the dispatch specializations will return a result like this.
+They have a strategy as a template parameter everywhere, making the less verbose version possible.
+
+[heading Summary]
+
+In this design rationale, __boost_geometry__ is step by step designed using tag dispatching,
+concepts, traits, and metaprogramming. We used the well-known distance function
+to show the design.
+
+__boost_geometry__ is designed like described here, with
+some more techniques as automatically reversing template arguments, tag casting,
+and reusing implementation classes or dispatch classes as policies in other
+dispatch classes.
+
+[endsect] [/ end of section Design Rationale]
diff --git a/libs/geometry/doc/doxy/Doxyfile b/libs/geometry/doc/doxy/Doxyfile
new file mode 100644
index 000000000..880e69b0c
--- /dev/null
+++ b/libs/geometry/doc/doxy/Doxyfile
@@ -0,0 +1,318 @@
+# Doxyfile 1.5.5
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
+PROJECT_NAME = "Boost.Geometry (aka GGL)"
+PROJECT_NUMBER =
+OUTPUT_DIRECTORY = ./doxygen_output
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF =
+ALWAYS_DETAILED_SEC = YES
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = YES
+STRIP_FROM_PATH = c:/_svn/boost/trunk/boost/geometry \
+ c:/_svn/boost/trunk/libs/geometry/doc/doxygen_input/pages
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+QT_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 8
+
+# The aliases are shortcuts for Doxygen documentation.
+# Within Boost.Geometry they are used in the top section, so for both
+# Doxygen documentation and QuickBook documentation.
+# They avoid repetations and make the documentation more structured.
+# There are also qbk expressions, which might qbk defines and templates.
+
+# There are sections for
+# \brief* for various brief descriptions
+# \tparam* for various template parameters
+# \param* for various parameters
+# \return* for various return cases
+ALIASES = qbk{1}="\xmlonly <qbk>\1</qbk> \endxmlonly" \
+ qbk{2}="\xmlonly <qbk.\1>\2</qbk.\1> \endxmlonly" \
+ brief_calc{1}="Calculates the \1 of a geometry" \
+ brief_calc2{1}="Calculate the \1 of two geometries" \
+ brief_calc2{2}="Calculate the \1 \2 two geometries" \
+ brief_check{1}="Checks if a geometry \1" \
+ brief_check2{1}="Checks if two geometries \1" \
+ brief_check12{1}="Checks if the first geometry \1 the second geometry" \
+ brief_strategy="using the specified strategy" \
+ brief_macro{1}="Macro to register a \1" \
+ brief_macro_const=" (const version)" \
+ brief_macro_getset=" (having separate get/set methods)" \
+ brief_meta{3}="Metafunction defining [*\1] as the \2 of the \3" \
+ tparam_allocator="container-allocator-type" \
+ tparam_box="Any type fulfilling a Box Concept" \
+ tparam_box_or_segment="Any type fulfilling a Box Concept or a Segment Concept" \
+ tparam_calculation="numeric type for calculation (e.g. high precision); if [*void] then it is extracted automatically from the coordinate type and (if necessary) promoted to floating point" \
+ tparam_container="container type, for example std::vector, std::deque" \
+ tparam_dimension_required="Dimension, this template parameter is required. Should contain \\[0 .. n-1\\] for an n-dimensional geometry" \
+ tparam_first_point="first point type" \
+ tparam_functor="Function or class with operator()" \
+ tparam_output_collection="output collection, either a multi-geometry, or a std::vector<Geometry> / std::deque<Geometry> etc" \
+ tparam_geometry="Any type fulfilling a Geometry Concept" \
+ tparam_geometry{1}="A type fulfilling the \1 Concept" \
+ tparam_index_required="Index, this template parameter is required. For a Box: either min_corner or max_corner. For a Segment: either 0 or 1 for first or last point." \
+ tparam_numeric="numerical type (int, double, ttmath, ...)" \
+ tparam_out{1}="A valid output iterator type, accepting geometries of \1 Concept" \
+ tparam_point="Any type fulfilling a Point Concept" \
+ tparam_range_point="Any type fulfilling a Range Concept where it range_value type fulfills the Point Concept" \
+ tparam_first_point="point type" \
+ tparam_second_point="second point type" \
+ tparam_segment_point="segment point type" \
+ tparam_strategy{1}="Any type fulfilling a \1 Strategy Concept" \
+ tparam_strategy_overlay="Compound strategy for segment intersection" \
+ param_box="A model of the specified Box Concept" \
+ param_box_or_segment="A box modelling the specified Box Concept or segment modelling the specified Segment Concept" \
+ param_geometry="A model of the specified concept" \
+ param_out{1}="The output iterator, to which \1 geometries are feeded" \
+ param_point="A model of the specified Point Concept" \
+ param_set{1}="which is set to the \1" \
+ param_strategy{1}="The strategy which will be used for \1 calculations" \
+ param_macro_type{1}="\1 type to be registered" \
+ param_macro_coortype{1}="Type of the coordinates of the \1 (e.g. double)" \
+ param_macro_coorsystem="Coordinate system (e.g. cs::cartesian)" \
+ param_macro_member{1}="Member containing \1 coordinate" \
+ param_macro_getset{2}="Method to \1 the \2 coordinate" \
+ param_range_point="A range containg points fulfilling range and point concepts" \
+ param_x="First coordinate (usually x-coordinate)" \
+ param_y="Second coordinate (usually y-coordinate)" \
+ param_z="Third coordinate (usually z-coordinate)" \
+ constructor_default{1}="Default constructor, creating an empty \1" \
+ constructor_begin_end{1}="Constructor with begin and end, filling the \1" \
+ details_calc{2}="The free function \1 calculates the \2 of a geometry" \
+ details_calc{1}="The free function \1 calculates the \1 of a geometry" \
+ details_calc2{2}="The free function \1 calculates the \2 of two geometries" \
+ details_calc2{1}="The free function \1 calculates the \1 of two geometries" \
+ details_check12{2}="The free function \1 checks if the first geometry \2 the second geometry" \
+ details_macro{2}="The macro \1 registers a \2 such that it is recognized by Boost.Geometry and that Boost.Geometry functionality can used with the specified type." \
+ details_macro_const="The const version registers only read access to the fields, the point type is therefore read-only" \
+ details_macro_getset="The get/set version registers get and set methods separately and can be used for classes with protected member variables and get/set methods to change coordinates" \
+ details_macro_templated{2}="The type must have one template parameter, which should be a \2 type, and should not be specified. Boost.Geometry takes care of inserting the template parameter. Hence all types of this templated \1 are registered, regardless of their point type." \
+ details_default_strategy="It uses the default strategy, based on the coordinate system of the geometry." \
+ details_strategy_reasons="Reasons to specify a strategy include: use another coordinate system for calculations; construct the strategy beforehand (e.g. with the radius of the Earth); select a strategy when there are more than one available for a calculation." \
+ details_return{1}="This version with the return_ prefix returns the \1, and a template parameter must therefore be specified in the call." \
+ details_insert{1}="This version with the _insert suffix outputs the \1 to an output iterator, and a template parameter must therefore be specified in the call." \
+ details_get_set="The free functions [*get] and [*set] are two of the most important functions of Boost.Geometry, both within the library, as also for the library user. With these two functions you normally get and set coordinate values from and for a point, box, segment or sphere." \
+ details_make="Boost.Geometry uses concepts for all its geometries. It does not rely on constructors. The "make" functions are object generators creating geometries. There are overloads, currently with two or three coordinate values or ranges, to construct geometry instances" \
+ return_calc{1}="The calculated \1" \
+ return_check{1}="Returns true if the geometry \1" \
+ return_check2{1}="Returns true if two geometries \1" \
+ return_out="The output iterator" \
+ meta_geometry_type="specified geometry type" \
+ meta_point_type="point type making up the specified geometry type" \
+ brf_for_each{1}="Applies function [*f] to each \1" \
+ det_envelope="envelope (also known as axis aligned bounding box, aabb, or minimum bounding rectangle, mbr)" \
+ det_buffer="buffer (a polygon being the spatial point set collection within a specified maximum distance from a geometry)" \
+ det_for_each{1}="Applies a function [*f] (functor, having operator() defined) to each \1 making up the geometry" \
+ par_for_each_f{1}="Unary function, taking a \1 as argument" \
+ macro_x="first (usually x)" \
+ macro_y="second (usually y)" \
+ macro_z="third (usually z)" \
+ p_l_or_c="Point, LineString or Polygon"
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+BUILTIN_STL_SUPPORT = YES
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+DISTRIBUTE_GROUP_DOC = NO
+SUBGROUPING = YES
+TYPEDEF_HIDES_STRUCT = NO
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = YES
+EXTRACT_PRIVATE = NO
+EXTRACT_STATIC = YES
+EXTRACT_LOCAL_CLASSES = NO
+EXTRACT_LOCAL_METHODS = NO
+EXTRACT_ANON_NSPACES = NO
+HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_CLASSES = NO
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = NO
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = NO
+INLINE_INFO = NO
+SORT_MEMBER_DOCS = NO
+SORT_BRIEF_DOCS = YES
+SORT_GROUP_NAMES = YES
+SORT_BY_SCOPE_NAME = YES
+GENERATE_TODOLIST = NO
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = NO
+FILE_VERSION_FILTER =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = YES
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = . .. ../../../../boost/geometry/core \
+ ../../../../boost/geometry/algorithms \
+ ../../../../boost/geometry/algorithms/detail \
+ ../../../../boost/geometry/algorithms/detail/overlay \
+ ../../../../boost/geometry/algorithms/detail/equals \
+ ../../../../boost/geometry/algorithms/detail/sections \
+ ../../../../boost/geometry/arithmetic \
+ ../../../../boost/geometry/geometries/concepts \
+ ../../../../boost/geometry/geometries \
+ ../../../../boost/geometry/geometries/adapted \
+ ../../../../boost/geometry/geometries/register \
+ ../../../../boost/geometry/iterators \
+ ../../../../boost/geometry/io/wkt \
+ ../../../../boost/geometry/io/svg \
+ ../../../../boost/geometry/multi/algorithms \
+ ../../../../boost/geometry/multi/algorithms/detail \
+ ../../../../boost/geometry/multi/core \
+ ../../../../boost/geometry/multi/geometries \
+ ../../../../boost/geometry/multi/geometries/register \
+ ../../../../boost/geometry/multi/geometries/concepts \
+ ../../../../boost/geometry/multi/strategies/cartesian \
+ ../../../../boost/geometry/policies \
+ ../../../../boost/geometry/policies/relate \
+ ../../../../boost/geometry/strategies \
+ ../../../../boost/geometry/strategies/concepts \
+ ../../../../boost/geometry/strategies/agnostic \
+ ../../../../boost/geometry/strategies/cartesian \
+ ../../../../boost/geometry/strategies/spherical \
+ ../../../../boost/geometry/strategies/transform \
+ ../../../../boost/geometry/util \
+ ../../../../boost/geometry/views \
+ ./doxygen_input/pages \
+ ./doxygen_input/groups
+INPUT_ENCODING = UTF-8
+FILE_PATTERNS = *.hpp
+RECURSIVE = NO
+EXCLUDE = ../../../../boost/geometry/util/builder.hpp \
+ ../../../../boost/geometry/algorithms/parse.hpp \
+ ../../../../boost/geometry/algorithms/point_on_line.hpp \
+ ../../../../boost/geometry/strategies/cartesian/cart_intersect.hpp \
+ ../../../../boost/geometry/util/distance_sort.hpp \
+ ./doxygen_extension_examples.hpp
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH = . .. ../../example ../../example/with_external_libs \
+ doxygen_input/sourcecode \
+ ../../../../boost/geometry/geometries \
+ ../../../../boost/geometry/strategies \
+ ../../../../boost/geometry/strategies/cartesian \
+ ../../../../boost/geometry/algorithms
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH = doxygen_input/images
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = YES
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION = NO
+REFERENCES_LINK_SOURCE = NO
+USE_HTAGS = NO
+VERBATIM_HEADERS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+COLS_IN_ALPHA_INDEX = 3
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER = doxygen_input/ggl_doxygen_header.html
+HTML_FOOTER = doxygen_input/ggl_doxygen_footer.html
+HTML_STYLESHEET =
+GENERATE_HTMLHELP = NO
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Generated documentation, by Doxygen"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+HTML_DYNAMIC_SECTIONS = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+BINARY_TOC = NO
+TOC_EXPAND = NO
+DISABLE_INDEX = NO
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = NO
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = YES
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options turned off
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+GENERATE_MAN = NO
+GENERATE_RTF = NO
+GENERATE_AUTOGEN_DEF = NO
+GENERATE_PERLMOD = NO
+
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = YES
+EXPAND_ONLY_PREDEF = YES
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED = BOOST_CONCEPT_REQUIRES(x)= \
+ BOOST_CONCEPT_ASSERT(x) = \
+ BOOST_STATIC_ASSERT(x) = \
+ DOXYGEN_SHOULD_SKIP_THIS \
+ DOXYGEN_NO_DISPATCH \
+ DOXYGEN_NO_IMPL \
+ DOXYGEN_NO_DETAIL \
+ DOXYGEN_NO_CONCEPT_MEMBERS \
+ DOXYGEN_NO_TRAITS_SPECIALIZATIONS \
+ DOXYGEN_NO_STRATEGY_SPECIALIZATIONS \
+ DOXYGEN_NO_SPECIALIZATIONS
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = NO
diff --git a/libs/geometry/doc/doxy/doxygen_enhance.py b/libs/geometry/doc/doxy/doxygen_enhance.py
new file mode 100755
index 000000000..af892be98
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_enhance.py
@@ -0,0 +1,33 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+# ===========================================================================
+# Copyright (c) 2010 Barend Gehrels, Amsterdam, the Netherlands.
+#
+# 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)9
+# ============================================================================
+
+import sys
+
+args = sys.argv[1:]
+if len(args) != 1:
+ raise SystemExit("Usage: doxygen_enhance <html filename>")
+
+
+# 1) set variable for doxygen_contents to be posted
+file_in = open(args[0], 'r')
+doxygen_contents = file_in.read()
+
+doxygen_contents = doxygen_contents.replace('<span>Modules</span>', '<span>Function overview</span>')
+doxygen_contents = doxygen_contents.replace('<span>Related&nbsp;Pages</span>', '<span>Main pages</span>')
+doxygen_contents = doxygen_contents.replace('<span>Main&nbsp;Page</span>', '<span>Introduction</span>')
+doxygen_contents = doxygen_contents.replace('<li><a href="namespaces.html"><span>Namespaces</span></a></li>', '')
+
+doxygen_contents = doxygen_contents.replace('<h1>Modules</h1>Here is a list of all modules:<ul>', '<h1>Function overview</h1>Here is a list of all functions:<ul>')
+doxygen_contents = doxygen_contents.replace('<h1>Related Pages</h1>Here is a list of all related documentation pages:<ul>', '<h1>Main pages</h1>The following pages give backgrounds on Boost.Geometry:<ul>')
+
+
+file_out = file (args[0], 'w')
+file_out.write(doxygen_contents)
+file_out.close()
diff --git a/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_footer.html b/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_footer.html
new file mode 100644
index 000000000..277d8c692
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_footer.html
@@ -0,0 +1,23 @@
+<hr size="1">
+<table width="100%">
+<tbody>
+<tr>
+<td align="left"><small>
+<p>April 2, 2011</p>
+</small></td>
+<td align="right">
+<small>
+Copyright &copy; 2007-2011 Barend Gehrels, Amsterdam, the Netherlands<br>
+Copyright &copy; 2008-2011 Bruno Lalande, Paris, France<br>
+Copyright &copy; 2009-2010 Mateusz Loskot, London, UK<br>
+</small>
+</td>
+</tr>
+</tbody>
+</table>
+
+<address style="text-align: right;"><small>
+Documentation is generated by&nbsp;<a href="http://www.doxygen.org/index.html">Doxygen</a>
+</small></address>
+</body>
+</html> \ No newline at end of file
diff --git a/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_header.html b/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_header.html
new file mode 100644
index 000000000..3f42facb1
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_header.html
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Boost.Geometry (aka GGL, Generic Geometry Library)</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head>
+
+<table cellpadding="2" width="100%">
+<tbody>
+<tr>
+<td valign="top">
+<img alt="Boost.Geometry" src="images/ggl-logo-big.png" height="80" width="200">
+&nbsp;&nbsp;
+</td>
+<td valign="top" align="right">
+<a href="http://www.boost.org">
+<img alt="Boost C++ Libraries" src="images/accepted_by_boost.png" height="80" width="230" border="0">
+</a>
+</td>
+</tr>
+</tbody>
+</table>
diff --git a/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp b/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp
new file mode 100644
index 000000000..6128a44e8
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/groups/groups.hpp
@@ -0,0 +1,68 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+// File defining groups for Doxygen.
+// Note that group descriptions are (currently) not used.
+
+/*!
+\defgroup access access: get/set coordinate values, make objects, clear geometries, append point(s)
+\defgroup append append: append points to geometries
+\defgroup area area: calculate area of a Geometry
+\defgroup arithmetic arithmetic: arithmetic operations on points
+\defgroup assign assign: assign values to geometries
+\defgroup buffer buffer: calculate buffer of a geometry
+\defgroup centroid centroid: calculate centroid (center of gravity) of a geometry
+\defgroup clear clear: clear geometries
+\defgroup compare compare: define compare functors for points
+\defgroup concepts geometry concepts: defines and checks concepts for geometries
+\defgroup convert convert: convert geometries from one type to another
+\defgroup convex_hull convex hull: calculate the convex hull of a geometry
+\defgroup core core: meta-functions for geometry types
+\defgroup correct correct: correct geometries
+\defgroup covered_by covered_by: detect if a geometry is inside or on the border of another geometry, a.o. point-in-polygon (border included)
+\defgroup cs coordinate systems
+\defgroup difference difference: difference of two geometries
+\defgroup disjoint disjoint: detect if geometries are not spatially related
+\defgroup distance distance: calculate distance between two geometries
+\defgroup enum enum: enumerations
+\defgroup envelope envelope: calculate envelope (minimum bounding rectangle) of a geometry
+\defgroup equals equals: detect if two geometries are spatially equal
+\defgroup expand expand: add a geometry to a bounding box
+\defgroup exterior_ring exterior_ring: exterior_ring
+\defgroup for_each for_each: apply a functor to each point or segment of a geometry
+\defgroup geometries geometries: geometries provided by default
+\defgroup get get: get geometries
+\defgroup interior_rings interior_rings: interior_rings
+\defgroup intersection intersection: calculate new geometry
+\defgroup intersects intersects: detect if a geometry self-intersects or if two geometries intersect
+\defgroup iterators iterators: iterators
+\defgroup length length: calculate length of a linear geometry
+\defgroup make make: construct geometries
+\defgroup num_geometries number of geometries: calculate the number of geometries in a multi-geometry
+\defgroup num_interior_rings number of interior rings: calculate the number of interior rings
+\defgroup num_points number of points: calculate number of points of a geometry
+\defgroup overlaps overlaps: detect overlap between two geometries
+\defgroup perimeter perimeter: calculate perimeter of a geometry
+\defgroup projection projection: Projection struct's, classes
+\defgroup projections projections: Projections
+\defgroup ranges ranges: ranges
+\defgroup register register: Macros for registration
+\defgroup reverse reverse: reverse a geometry
+\defgroup selected selection: check if a geometry is "selected" by a point
+\defgroup set set: set geometries
+\defgroup simplify simplify: remove points from a geometry, keeping shape (simplification or generalization)
+\defgroup strategies strategies: strategies
+\defgroup svg svg: Stream SVG (Scalable Vector Graphics)
+\defgroup sym_difference sym_difference: sym_difference of two geometries
+\defgroup touches touches: detect if a geometry self-touches or if two geometries touch
+\defgroup traits traits: adapt geometries
+\defgroup transform transform: apply transformations on geometries
+\defgroup union union: calculate new geometry containing geometries A or B
+\defgroup unique unique: make a geometry unique w.r.t. points,
+\defgroup within within: detect if a geometry is inside another geometry, a.o. point-in-polygon
+\defgroup wkt wkt: parse and stream WKT (Well-Known Text)
+*/
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/07_graph_route_example_svg.png b/libs/geometry/doc/doxy/doxygen_input/images/07_graph_route_example_svg.png
new file mode 100644
index 000000000..3bf38fa46
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/07_graph_route_example_svg.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/07_graph_route_example_text.png b/libs/geometry/doc/doxy/doxygen_input/images/07_graph_route_example_text.png
new file mode 100644
index 000000000..b51e9268d
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/07_graph_route_example_text.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/centroid_polygon.png b/libs/geometry/doc/doxy/doxygen_input/images/centroid_polygon.png
new file mode 100644
index 000000000..a6426e8f7
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/centroid_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/centroid_ring.png b/libs/geometry/doc/doxy/doxygen_input/images/centroid_ring.png
new file mode 100644
index 000000000..d2d014813
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/centroid_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/clip_linestring.png b/libs/geometry/doc/doxy/doxygen_input/images/clip_linestring.png
new file mode 100644
index 000000000..f02d19ed0
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/clip_linestring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/clip_polygon.png b/libs/geometry/doc/doxy/doxygen_input/images/clip_polygon.png
new file mode 100644
index 000000000..e94792e74
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/clip_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/clip_segment_segment.png b/libs/geometry/doc/doxy/doxygen_input/images/clip_segment_segment.png
new file mode 100644
index 000000000..a65b68135
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/clip_segment_segment.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/combine_box_box.png b/libs/geometry/doc/doxy/doxygen_input/images/combine_box_box.png
new file mode 100644
index 000000000..807c39504
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/combine_box_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/combine_box_point.png b/libs/geometry/doc/doxy/doxygen_input/images/combine_box_point.png
new file mode 100644
index 000000000..17b22aa80
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/combine_box_point.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/convexhull_polygon_polygon.png b/libs/geometry/doc/doxy/doxygen_input/images/convexhull_polygon_polygon.png
new file mode 100644
index 000000000..e1ae38acc
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/convexhull_polygon_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/envelope_polygon.png b/libs/geometry/doc/doxy/doxygen_input/images/envelope_polygon.png
new file mode 100644
index 000000000..404f4d7e7
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/envelope_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/linestring.png b/libs/geometry/doc/doxy/doxygen_input/images/linestring.png
new file mode 100644
index 000000000..5d243eed1
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/linestring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/multi_polygon.png b/libs/geometry/doc/doxy/doxygen_input/images/multi_polygon.png
new file mode 100644
index 000000000..7565ee501
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/multi_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/output_main.png b/libs/geometry/doc/doxy/doxygen_input/images/output_main.png
new file mode 100644
index 000000000..184ba5965
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/output_main.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/polygon.png b/libs/geometry/doc/doxy/doxygen_input/images/polygon.png
new file mode 100644
index 000000000..b90f1506c
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/robust_float.png b/libs/geometry/doc/doxy/doxygen_input/images/robust_float.png
new file mode 100644
index 000000000..c43237c2a
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/robust_float.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/robust_stars.png b/libs/geometry/doc/doxy/doxygen_input/images/robust_stars.png
new file mode 100644
index 000000000..4278ea56a
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/robust_stars.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/robust_triangle_box.png b/libs/geometry/doc/doxy/doxygen_input/images/robust_triangle_box.png
new file mode 100644
index 000000000..73ae5744b
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/robust_triangle_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/robust_triangles.png b/libs/geometry/doc/doxy/doxygen_input/images/robust_triangles.png
new file mode 100644
index 000000000..17fc46ef3
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/robust_triangles.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/set_a_ac.png b/libs/geometry/doc/doxy/doxygen_input/images/set_a_ac.png
new file mode 100644
index 000000000..2ba18a700
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/set_a_ac.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/set_adapt_turns.png b/libs/geometry/doc/doxy/doxygen_input/images/set_adapt_turns.png
new file mode 100644
index 000000000..cfa3375e7
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/set_adapt_turns.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/set_int_right_union_left.png b/libs/geometry/doc/doxy/doxygen_input/images/set_int_right_union_left.png
new file mode 100644
index 000000000..9c2bc84f4
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/set_int_right_union_left.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/simplify_example.png b/libs/geometry/doc/doxy/doxygen_input/images/simplify_example.png
new file mode 100644
index 000000000..cf5a4a6b2
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/simplify_example.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/simplify_linestring.png b/libs/geometry/doc/doxy/doxygen_input/images/simplify_linestring.png
new file mode 100644
index 000000000..51df7a305
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/simplify_linestring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/centroid_polygon.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/centroid_polygon.svg
new file mode 100644
index 000000000..15a2a2793
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/centroid_polygon.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="centroid_polygon.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\centroid_polygon.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.2048876"
+ inkscape:cx="130.8455"
+ inkscape:cy="65.287038"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z M 194,910 L 209,921 L 187,939 L 180,917 L 194,910 z "
+ id="path2161"
+ sodipodi:nodetypes="ccccccccccccccccc"
+ inkscape:export-xdpi="300.36429"
+ inkscape:export-ydpi="300.36429" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.60352423;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path2232"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163,699.51318 A 1.7753623,1.9726247 0 1 1 70.225439,699.51318 A 1.7753623,1.9726247 0 1 1 73.776163,699.51318 z"
+ transform="translate(108.37139,230.51026)" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/centroid_ring.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/centroid_ring.svg
new file mode 100644
index 000000000..fd5e5f5a2
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/centroid_ring.svg
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="centroid_ring.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\centroid_ring.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.2048876"
+ inkscape:cx="121.5635"
+ inkscape:cy="65.287038"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z"
+ id="path2161"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.60352423;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.70866141999999999;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path2232"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163,699.51318 A 1.7753623,1.9726247 0 1 1 70.225439,699.51318 A 1.7753623,1.9726247 0 1 1 73.776163,699.51318 z"
+ transform="translate(108.37139,230.10832)" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/clip_linestring.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/clip_linestring.svg
new file mode 100644
index 000000000..6378e34c6
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/clip_linestring.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images"
+ sodipodi:docname="clip_linestring.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\clip_linestring.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective12" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8.7985531"
+ inkscape:cx="106.64411"
+ inkscape:cy="74.188153"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="778"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598425;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 77.875125,949.43639 L 127.09591,913.61656 L 148.44123,878.87028 L 211.8907,949.65413 L 148.63089,920.85381"
+ id="linestring"
+ sodipodi:nodetypes="ccccc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <rect
+ style="opacity:0.35031846;fill:#0092ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.46545494px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2234"
+ width="106.77697"
+ height="35.16954"
+ x="108.55672"
+ y="899.84406"
+ transform="matrix(1,0,-1.8627311e-2,0.9998265,0,0)"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\intersection_linestring_example.png"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.53149605;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 97.769224,935.05 L 126.66298,914.05939 L 135.62394,899.70437"
+ id="path2163"
+ sodipodi:nodetypes="ccc"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\intersection_linestring_example.png"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.53149605;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 167.04355,899.69241 L 198.34254,934.68557"
+ id="path2165"
+ sodipodi:nodetypes="cc"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\intersection_linestring_example.png"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.53149611;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 180.38949,935.15059 L 148.72841,920.86884"
+ id="path2167"
+ sodipodi:nodetypes="cc"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\intersection_linestring_example.png"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/clip_polygon.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/clip_polygon.svg
new file mode 100644
index 000000000..3437c2aac
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/clip_polygon.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images"
+ sodipodi:docname="clip_polygon.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\clip_polygon.png"
+ inkscape:export-xdpi="199.51997"
+ inkscape:export-ydpi="199.51997">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective13" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.1707054"
+ inkscape:cx="151.57677"
+ inkscape:cy="65.287038"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <rect
+ style="opacity:0.35031846;fill:#0092ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.46545494px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2234"
+ width="106.77697"
+ height="35.16954"
+ x="108.55672"
+ y="899.84406"
+ transform="matrix(1,0,-1.8627311e-2,0.9998265,0,0)"
+ inkscape:export-xdpi="311.54001"
+ inkscape:export-ydpi="311.54001" />
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z M 194,910 L 209,921 L 187,939 L 180,917 L 194,910 z "
+ id="path2161"
+ sodipodi:nodetypes="ccccccccccccccccc"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\rect2234.png"
+ inkscape:export-xdpi="311.54001"
+ inkscape:export-ydpi="311.54001" />
+ <path
+ style="opacity:0.60352418;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 171.68397,899.63498 L 158.96522,917.94748 L 169.96522,931.94748 L 167.71522,934.82248 L 185.65272,934.82248 L 179.96522,916.94748 L 193.96522,909.94748 L 198.27772,913.10373 L 198.52772,899.63498 L 171.68397,899.63498 z M 137.80897,924.41623 L 123.65272,928.04123 L 117.02773,934.82248 L 148.02772,934.82248 L 137.80897,924.41623 z M 197.96522,929.94748 L 191.99647,934.82248 L 197.87147,934.82248 L 197.96522,929.94748 z"
+ id="path2183"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\rect2234.png"
+ inkscape:export-xdpi="311.54001"
+ inkscape:export-ydpi="311.54001" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/clip_polygon_2.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/clip_polygon_2.svg
new file mode 100644
index 000000000..87c177e73
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/clip_polygon_2.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images"
+ sodipodi:docname="clip_polygon_2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\clip_polygon_example.png"
+ inkscape:export-xdpi="311.54001"
+ inkscape:export-ydpi="311.54001">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.1707054"
+ inkscape:cx="164.93056"
+ inkscape:cy="66.088471"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridspacingx="1mm"
+ gridspacingy="1mm"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ transform="matrix(0.9999775,-6.7081431e-3,-1.1919911e-2,0.999929,0,0)"
+ style="opacity:0.35031846;fill:#0092ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.46545497px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 102.42033,900.9873 L 208.81047,900.9873 C 208.72652,901.17943 209.0039,901.07357 209.0039,901.18074 L 209.0039,935.96341 C 209.0039,936.07057 209.11796,936.73842 209.0108,936.73842 L 102.42033,936.15684 C 102.31317,936.15684 102.2269,936.07057 102.2269,935.96341 L 102.2269,901.18074 C 102.2269,901.07357 102.31317,900.9873 102.42033,900.9873 z "
+ id="rect2234"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-width:0.99921262;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 145.375 248.625 L 120.375 284.625 L 131.375 298.625 L 120.375 312.625 L 99.21875 291.09375 L 85.0625 294.71875 L 71.34375 308.78125 L 103.375 330.625 L 173.375 326.625 L 190.375 312.625 L 188.375 262.625 L 145.375 248.625 z M 176.96875 269.78125 L 184.0625 276.8125 L 177.15625 284.3125 L 169.46875 276.34375 L 176.96875 269.78125 z M 155.375 276.625 L 170.375 287.625 L 148.375 305.625 L 141.375 283.625 L 155.375 276.625 z M 131.1875 280.125 L 134.625 280.21875 L 137.90625 290.53125 L 127.59375 287 L 131.1875 280.125 z M 170.03125 297.75 L 177.09375 311.8125 L 159.46875 319.03125 L 152.15625 308.78125 L 170.03125 297.75 z "
+ transform="translate(38.639912,633.95635)"
+ id="path2161" />
+ <path
+ transform="translate(38.639912,633.95635)"
+ style="opacity:0.75555558;fill:#f40000;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 211.38314,299.79268 L 200.9365,300.63343 L 200.58326,291.1513 L 213.81172,289.59753 L 211.38314,299.79268 z "
+ id="path2187"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/combine_box_box.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/combine_box_box.svg
new file mode 100644
index 000000000..14da5a1c9
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/combine_box_box.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="union_box_box_box.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\union_box_box_box.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.1538903"
+ inkscape:cx="97.174303"
+ inkscape:cy="66.955465"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <rect
+ style="opacity:0.75;fill:#0092ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.70867687000000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2234"
+ width="53.801872"
+ height="35.451065"
+ x="99.877876"
+ y="899.72723"
+ transform="matrix(1,0,-9.3464798e-3,0.9999563,0,0)" />
+ <rect
+ style="opacity:0.75000000000000000;fill:#1eff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.70867687000000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3237"
+ width="53.801872"
+ height="35.451065"
+ x="139.34093"
+ y="882.00989"
+ transform="matrix(1,0,-9.3464804e-3,0.9999563,0,0)" />
+ <rect
+ style="opacity:0.53744495000000003;fill:#aead97;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:2.12604548;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3239"
+ width="93.288498"
+ height="53.523342"
+ x="101.25739"
+ y="882.03864"
+ transform="matrix(1,0,-1.0734082e-2,0.9999424,0,0)" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/combine_box_point.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/combine_box_point.svg
new file mode 100644
index 000000000..de0a67e2f
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/combine_box_point.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="union_box_point_box.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\union_box_point_box.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.314871"
+ inkscape:cx="95.527705"
+ inkscape:cy="75.995428"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ transform="matrix(1,0,-9.3464798e-3,0.9999563,0,0)"
+ style="opacity:0.75;fill:#0092ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.70867687;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 100.19895,899.74368 L 153.67975,899.72723 L 153.67975,935.1783 L 100.53014,935.1783 L 100.19895,899.74368 z"
+ id="rect2234"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:0.53744495;fill:#aead97;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 92.263165,888.70424 L 177.35302,888.70367 L 176.82889,935.13743 L 92.313648,934.76666 L 92.263165,888.70424 z"
+ id="rect3239"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.75;fill:#1eff00;fill-opacity:1;stroke:#140707;stroke-width:1.57480264;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2383"
+ sodipodi:cx="131.10236"
+ sodipodi:cy="262.20471"
+ sodipodi:rx="3.5433071"
+ sodipodi:ry="3.5433071"
+ d="M 134.64566,262.20471 A 3.5433071,3.5433071 0 1 1 127.55905,262.20471 A 3.5433071,3.5433071 0 1 1 134.64566,262.20471 z"
+ transform="matrix(0.4500001,0,0,0.4500003,117.23833,772.08224)" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/convexhull_polygon_polygon.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/convexhull_polygon_polygon.svg
new file mode 100644
index 000000000..8017f9c1d
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/convexhull_polygon_polygon.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="convexhull_polygon_polygon.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\convexhull_polygon_polygon.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.1077853"
+ inkscape:cx="131.59676"
+ inkscape:cy="66.127004"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z M 194,910 L 209,921 L 187,939 L 180,917 L 194,910 z "
+ id="path2161"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+ <path
+ style="opacity:0.75;fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:2.12598419000000010;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 184.09498,882.00774 L 123.79207,928.09899 L 110.06581,942.1592 L 142.09498,964.00774 L 212.09498,960.00774 L 229.09498,946.00774 L 227.09498,896.00774 L 184.09498,882.00774 z"
+ id="path2387"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/envelope_polygon.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/envelope_polygon.svg
new file mode 100644
index 000000000..c7cef36dd
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/envelope_polygon.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="envelope_polygon.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\envelope_polygon.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.1034197"
+ inkscape:cx="130.75063"
+ inkscape:cy="65.269798"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z M 194,910 L 209,921 L 187,939 L 180,917 L 194,910 z "
+ id="path2161"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+ <path
+ style="opacity:0.75;fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:2.12598419000000010;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 109.50605,881.98783 L 109.64674,964.04665 L 229.27504,964.04665 L 229.27504,881.98783 L 109.50605,881.98783 z"
+ id="path2387"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/geometries.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/geometries.svg
new file mode 100644
index 000000000..5eb7ea84a
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/geometries.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images"
+ sodipodi:docname="geometries.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.5659491"
+ inkscape:cx="138.5704"
+ inkscape:cy="88.308109"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridspacingx="1mm"
+ gridspacingy="1mm"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-width:0.77897316;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 120.33185,903.34589 L 99.405785,929.4846 L 108.61325,939.64965 L 99.405785,949.81471 L 81.701116,934.17232 L 69.855741,936.8116 L 58.366285,947.02038 L 85.176065,962.88406 L 143.76904,959.97976 L 157.99877,949.81471 L 156.32468,913.51094 L 120.33185,903.34589 z M 128.70228,923.676 L 141.25791,931.66282 L 122.84298,944.73218 L 116.98368,928.75852 L 128.70228,923.676 z "
+ id="polygon"
+ sodipodi:nodetypes="ccccccccccccccccc"
+ inkscape:export-xdpi="358.51999"
+ inkscape:export-ydpi="358.51999"
+ inkscape:label="#polygon" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.76607335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 53.850036,887.0878 L 94.600989,861.69708 L 112.27324,837.06735 L 164.80444,887.24214 L 112.43027,866.82717"
+ id="linestring"
+ sodipodi:nodetypes="ccccc"
+ inkscape:export-xdpi="321.54922"
+ inkscape:export-ydpi="321.54922" />
+ <path
+ id="multi_polygon"
+ style="opacity:0.6;fill:#ffff00;fill-opacity:1;stroke:#121518;stroke-width:0.77897316;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 227.42894,904.22244 L 251.55526,915.99743 L 250.31718,936.58397 L 259.52464,946.74903 L 277.22931,931.10664 L 295.42604,931.11777 L 300.56414,943.9547 L 273.75436,959.81838 L 221.29374,959.98026 L 200.93166,946.74903 L 202.60575,910.44526 L 227.42894,904.22244 z M 230.22815,920.61032 L 214.16832,934.29147 L 227.75604,934.69379 L 232.58325,947.36083 L 241.0707,929.63507 L 230.22815,920.61032 z M 273.76878,929.18869 L 255.59973,916.5631 L 253.60434,933.88422 L 261.16939,941.08381 L 273.76878,929.18869 z "
+ sodipodi:nodetypes="ccccccccccccccccccccccc"
+ inkscape:export-xdpi="358.51999"
+ inkscape:export-ydpi="358.51999" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/intersection_results.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/intersection_results.svg
new file mode 100644
index 000000000..d83e694cb
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/intersection_results.svg
@@ -0,0 +1,495 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images"
+ sodipodi:docname="intersection_results.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\clip_segment_segment.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective12" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.6989779"
+ inkscape:cx="177.16534"
+ inkscape:cy="177.16534"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="778"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Century Gothic;-inkscape-font-specification:Century Gothic Bold"
+ x="229.9785"
+ y="792.94293"
+ id="text2434"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2454"
+ x="229.9785"
+ y="792.94293">is_parallel</tspan></text>
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 84.961739,768.08993 L 134.18252,732.2701"
+ id="linestring"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 109.50605,775.68861 L 87.080805,742.6099"
+ id="path2385"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 148.86795,771.89431 L 198.08873,736.07444"
+ id="path3157"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598443;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 201.00251,769.74382 L 174.97083,765.4223"
+ id="path3161"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517"
+ inkscape:transform-center-x="13.869227"
+ inkscape:transform-center-y="2.4991609" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 97.034634,852.86192 L 146.25545,817.04205"
+ id="path3163"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 72.231448,870.57844 L 121.4523,834.75858"
+ id="path3167"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:#fb0000;fill-opacity:1;stroke:#000000;stroke-width:0.35771862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path3169"
+ sodipodi:cx="65.551178"
+ sodipodi:cy="310.03934"
+ sodipodi:rx="1.7716535"
+ sodipodi:ry="1.7716535"
+ d="M 67.322832,310.03934 A 1.7716535,1.7716535 0 1 1 63.779524,310.03934 A 1.7716535,1.7716535 0 1 1 67.322832,310.03934 z"
+ transform="matrix(0.9800207,0,0,1.0011502,33.474012,448.48418)" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.41732287;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 96.263395,853.11381 L 121.38018,834.77167"
+ id="path3165"
+ sodipodi:nodetypes="cc"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\intersection_linestring_example.png"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 226.82071,771.89431 L 276.04149,736.07444"
+ id="path2388"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598443;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 276.04149,746.70436 L 251.23834,764.4209"
+ id="path2390"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517"
+ inkscape:transform-center-x="13.869227"
+ inkscape:transform-center-y="2.4991609" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 192.9155,838.94058 L 217.71865,821.22405"
+ id="path2392"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 200.80004,833.50115 L 215.80527,822.36374"
+ id="path2398"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 169.23694,858.13778 L 192.9155,838.94058"
+ id="path2400"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 264.53846,847.45911 L 296.42823,854.54572"
+ id="path2402"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 242.51523,864.01531 L 283.85147,833.63492"
+ id="path2404"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:#fb0000;fill-opacity:1;stroke:#000000;stroke-width:0.35771862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2406"
+ sodipodi:cx="65.551178"
+ sodipodi:cy="310.03934"
+ sodipodi:rx="1.7716535"
+ sodipodi:ry="1.7716535"
+ d="M 67.322832,310.03934 A 1.7716535,1.7716535 0 1 1 63.779524,310.03934 A 1.7716535,1.7716535 0 1 1 67.322832,310.03934 z"
+ transform="matrix(0.9800207,0,0,1.0011502,128.13846,528.63109)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:#fb0000;fill-opacity:1;stroke:#000000;stroke-width:0.35771862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2408"
+ sodipodi:cx="65.551178"
+ sodipodi:cy="310.03934"
+ sodipodi:rx="1.7716535"
+ sodipodi:ry="1.7716535"
+ d="M 67.322832,310.03934 A 1.7716535,1.7716535 0 1 1 63.779524,310.03934 A 1.7716535,1.7716535 0 1 1 67.322832,310.03934 z"
+ transform="matrix(0.9800207,0,0,1.0011502,201.45482,536.56644)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:#fb0000;fill-opacity:1;stroke:#000000;stroke-width:0.35771862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2410"
+ sodipodi:cx="65.551178"
+ sodipodi:cy="310.03934"
+ sodipodi:rx="1.7716535"
+ sodipodi:ry="1.7716535"
+ d="M 67.322832,310.03934 A 1.7716535,1.7716535 0 1 1 63.779524,310.03934 A 1.7716535,1.7716535 0 1 1 67.322832,310.03934 z"
+ transform="matrix(0.9800207,0,0,1.0011502,32.485822,542.44402)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:#fb0000;fill-opacity:1;stroke:#000000;stroke-width:0.35771862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2412"
+ sodipodi:cx="65.551178"
+ sodipodi:cy="310.03934"
+ sodipodi:rx="1.7716535"
+ sodipodi:ry="1.7716535"
+ d="M 67.322832,310.03934 A 1.7716535,1.7716535 0 1 1 63.779524,310.03934 A 1.7716535,1.7716535 0 1 1 67.322832,310.03934 z"
+ transform="matrix(0.9800207,0,0,1.0011502,56.859962,524.37937)" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 245.77377,936.24751 L 287.11001,905.86712"
+ id="path2416"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:#fb0000;fill-opacity:1;stroke:#000000;stroke-width:0.35771862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2420"
+ sodipodi:cx="65.551178"
+ sodipodi:cy="310.03934"
+ sodipodi:rx="1.7716535"
+ sodipodi:ry="1.7716535"
+ d="M 67.322832,310.03934 A 1.7716535,1.7716535 0 1 1 63.779524,310.03934 A 1.7716535,1.7716535 0 1 1 67.322832,310.03934 z"
+ transform="matrix(0.9800207,0,0,1.0011502,204.71336,608.79864)" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 267.40232,848.15373 L 299.29209,855.24034"
+ id="path2422"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 267.99967,919.18756 L 269.99718,919.78445"
+ id="path2424"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Century Gothic;-inkscape-font-specification:Century Gothic Bold"
+ x="82.943787"
+ y="791.79657"
+ id="text2426"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2428"
+ x="82.943787"
+ y="791.79657">is_intersect</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Century Gothic;-inkscape-font-specification:Century Gothic Bold"
+ x="151.55994"
+ y="791.55756"
+ id="text2430"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2452">is_disjoint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Century Gothic;-inkscape-font-specification:Century Gothic Bold"
+ x="72.881683"
+ y="884.06732"
+ id="text2440"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan2444"
+ x="72.881683"
+ y="884.06732">is_collinear_overlap</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Century Gothic;-inkscape-font-specification:Century Gothic Bold"
+ x="158.79314"
+ y="883.87817"
+ id="text2446"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2450"
+ x="158.79314"
+ y="883.87817">is_collinear_connect</tspan></text>
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 304.92986,793.27185 L 304.92986,757.06561"
+ id="path2456"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 295.55052,793.27185 L 295.55052,757.06561"
+ id="path3228"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517"
+ inkscape:transform-center-x="-17.263914" />
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 314.3092,793.27185 L 314.3092,757.06561"
+ id="path3230"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 286.59116,793.27185 L 286.67516,757.06561"
+ id="path3232"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517"
+ inkscape:transform-center-x="-17.263914" />
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 323.68855,757.06561 L 286.17118,757.06561"
+ id="path3234"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 323.68855,766.11717 L 286.17118,766.11717"
+ id="path3236"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 323.68855,775.16873 L 286.17118,775.16873"
+ id="path3238"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 323.68855,784.22029 L 286.17118,784.22029"
+ id="path3240"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 323.43655,793.27185 L 323.42306,756.66178"
+ id="path3242"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="font-size:8px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.90000000000000002;fill:#808080;fill-rule:evenodd;stroke:#808080;stroke-width:2.12598419000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ d="M 323.68855,793.27185 L 286.17118,793.27185"
+ id="path3244"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <text
+ xml:space="preserve"
+ style="font-size:4.16063023px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ x="302.86984"
+ y="776.75757"
+ id="text3246"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0179454,0.982371)"><tspan
+ sodipodi:role="line"
+ id="tspan3250"
+ x="302.86984"
+ y="776.75757">B</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:4.16063023px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ x="284.69885"
+ y="795.41443"
+ id="text3252"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0179454,0.982371)"><tspan
+ sodipodi:role="line"
+ id="tspan3254"
+ x="284.69885"
+ y="795.41443">B</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:4.16063023px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ x="312.45383"
+ y="776.75757"
+ id="text3256"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0179454,0.982371)"><tspan
+ y="776.75757"
+ x="312.45383"
+ sodipodi:role="line"
+ id="tspan3260">E</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:4.16063023px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ x="284.72122"
+ y="804.32825"
+ id="text3262"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0179454,0.982371)"><tspan
+ sodipodi:role="line"
+ id="tspan3264"
+ x="284.72122"
+ y="804.32825">E</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:4.16063023px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ x="285.25348"
+ y="785.97559"
+ id="text3266"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0179454,0.982371)"><tspan
+ sodipodi:role="line"
+ id="tspan3270"
+ x="285.25348"
+ y="785.97559">I</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:4.16063023px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ x="294.02585"
+ y="776.75757"
+ id="text3272"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0179454,0.982371)"><tspan
+ sodipodi:role="line"
+ id="tspan3274"
+ x="294.02585"
+ y="776.75757">I</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:4.16063023px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ x="293.89435"
+ y="785.54333"
+ id="text3346"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0179454,0.982371)"><tspan
+ sodipodi:role="line"
+ id="tspan3350"
+ x="293.89435"
+ y="785.54333">0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:4.16063023px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman;-inkscape-font-specification:Times New Roman Bold"
+ x="303.00858"
+ y="786.00177"
+ id="text3352"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0179454,0.982371)"><tspan
+ sodipodi:role="line"
+ id="tspan3354"
+ x="303.00858"
+ y="786.00177">0</tspan></text>
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/intersection_segment_segment.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/intersection_segment_segment.svg
new file mode 100644
index 000000000..1baaaf4d7
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/intersection_segment_segment.svg
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images"
+ sodipodi:docname="intersection_segment_segment.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\clip_segment_segment.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective12" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.4339867"
+ inkscape:cx="145.33833"
+ inkscape:cy="48.561038"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="778"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598425;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 77.875125,949.43639 L 127.09591,913.61656"
+ id="linestring"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 109.82222,966.69297 L 74.072983,917.4209"
+ id="path2385"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 154.66272,948.5789 L 203.8835,912.75903"
+ id="path3157"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598443;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 206.79728,946.42841 L 180.7656,942.10689"
+ id="path3161"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517"
+ inkscape:transform-center-x="13.869227"
+ inkscape:transform-center-y="2.4991609" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#fffd01;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 244.66272,948.5789 L 293.8835,912.75903"
+ id="path3163"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0001fb;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 220.78968,966.18146 L 270.01046,930.3616"
+ id="path3167"
+ sodipodi:nodetypes="cc"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:#fb0000;fill-opacity:1;stroke:#000000;stroke-width:0.35771862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path3169"
+ sodipodi:cx="65.551178"
+ sodipodi:cy="310.03934"
+ sodipodi:rx="1.7716535"
+ sodipodi:ry="1.7716535"
+ d="M 67.322832,310.03934 A 1.7716535,1.7716535 0 1 1 63.779524,310.03934 A 1.7716535,1.7716535 0 1 1 67.322832,310.03934 z"
+ transform="matrix(0.9800207,0,0,1.0011502,26.387398,629.83064)" />
+ <path
+ style="opacity:1;fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.41732283;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 244.8216,948.71683 L 269.93834,930.37469"
+ id="path3165"
+ sodipodi:nodetypes="cc"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\intersection_linestring_example.png"
+ inkscape:export-xdpi="267.0517"
+ inkscape:export-ydpi="267.0517" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/linestring_example.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/linestring_example.svg
new file mode 100644
index 000000000..f631d4c47
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/linestring_example.svg
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="linestring_example.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8.7985531"
+ inkscape:cx="106.64411"
+ inkscape:cy="74.188153"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridspacingx="1mm"
+ gridspacingy="1mm"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="778"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:none;fill-rule:evenodd;stroke:#007eff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 78.67733,949.10975 L 149.24344,878.54364 L 212.69291,949.32749 L 149.4331,920.52717"
+ id="path2238"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 77.875125,949.43639 L 127.09591,913.61656 L 148.44123,878.87028 L 211.8907,949.65413 L 148.63089,920.85381"
+ id="linestring"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.39490446;fill:#0092ff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path2232"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(34.177691,246.24958)" />
+ <rect
+ style="opacity:0.35031846;fill:#0092ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.46545494px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2234"
+ width="106.77697"
+ height="35.16954"
+ x="108.55672"
+ y="899.84406"
+ transform="matrix(1,0,-1.8627311e-2,0.9998265,0,0)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 101.06522,934.70903 L 127.68592,914.51401 L 137.78343,898.90878"
+ id="path2163" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 169.45723,899.69565 L 196.99589,931.3651"
+ id="path2165" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 184.02651,935.03692 L 149.60319,919.43169"
+ id="path2167" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/polygon_example.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/polygon_example.svg
new file mode 100644
index 000000000..2258e557a
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/polygon_example.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="polygon_example.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.6312445"
+ inkscape:cx="177.16534"
+ inkscape:cy="164.4618"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridspacingx="1mm"
+ gridspacingy="1mm"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="-4"
+ inkscape:window-y="-4"
+ units="cm" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <rect
+ style="opacity:0.35031846;fill:#0092ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.46545494px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2234"
+ width="106.77697"
+ height="35.16954"
+ x="108.55672"
+ y="899.84406"
+ transform="matrix(1,0,-1.8627311e-2,0.9998265,0,0)" />
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z M 194,910 L 209,921 L 187,939 L 180,917 L 194,910 z "
+ id="path2161"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path2232"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(97.937256,218.05672)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4110"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(73.05507,217.92244)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4112"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(122.20614,217.62168)" />
+ <path
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#121518;stroke-width:0.99921262;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 102.84026,269.66542 L 117.22881,276.63251 L 113.2909,290.8696 L 99.205261,287.2346 L 102.84026,269.66542 z "
+ id="rect2162"
+ sodipodi:nodetypes="ccccc"
+ transform="translate(38.639912,633.95635)" />
+ <path
+ style="opacity:0.35031846;fill:#ff4700;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.46541455px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 330.4961,899.74455 L 317.77735,918.05705 L 328.77735,932.05705 L 326.52735,934.93205 L 344.46485,934.93205 L 338.77735,917.05705 L 352.77735,910.05705 L 357.08985,913.2133 L 357.33985,899.74455 L 330.4961,899.74455 z M 296.6211,924.5258 L 282.46485,928.1508 L 275.83986,934.93205 L 306.83985,934.93205 L 296.6211,924.5258 z M 356.77735,930.05705 L 350.8086,934.93205 L 356.6836,934.93205 L 356.77735,930.05705 z "
+ id="path2183" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/polygon_example1.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/polygon_example1.svg
new file mode 100644
index 000000000..8c8ba7599
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/polygon_example1.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\doc"
+ sodipodi:docname="polygon_example.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.6340734"
+ inkscape:cx="121.70637"
+ inkscape:cy="65.376123"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridspacingx="1mm"
+ gridspacingy="1mm"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="744"
+ inkscape:window-x="-4"
+ inkscape:window-y="-4"
+ units="cm" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <rect
+ style="opacity:0.35031846;fill:#0092ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.46545494px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2234"
+ width="106.77697"
+ height="35.16954"
+ x="108.55672"
+ y="899.84406"
+ transform="matrix(1,0,-1.8627311e-2,0.9998265,0,0)" />
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 183.96492,882.10899 L 159.3519,917.95833 L 170.01492,931.78926 L 158.96896,946.27736 L 138.06489,928.55892 L 123.87568,928.5754 L 112.86946,942.48336 L 141.60982,963.71284 L 212.38594,960.27083 L 229.28535,945.91682 L 226.64045,896.49471 L 183.96492,882.10899 z M 194.37062,910.01505 L 209.05737,921.28896 L 187.45444,939.06871 L 180.11964,917.58522 L 194.37062,910.01505 z "
+ id="path2161"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path2232"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(98.391632,219.11693)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4110"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(73.963821,218.98265)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4112"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(120.84301,218.53043)" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/ring.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/ring.svg
new file mode 100644
index 000000000..49c729334
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/ring.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="linear_ring.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.2048876"
+ inkscape:cx="130.8455"
+ inkscape:cy="65.287038"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z"
+ id="path2161"
+ sodipodi:nodetypes="cccccccccccc" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/simplify_example.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/simplify_example.svg
new file mode 100644
index 000000000..5cbb7e0fa
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/simplify_example.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images"
+ sodipodi:docname="simplify_example.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\simplify_example.png"
+ inkscape:export-xdpi="265.06"
+ inkscape:export-ydpi="265.06">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8.7985531"
+ inkscape:cx="106.64411"
+ inkscape:cy="74.188153"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridspacingx="1mm"
+ gridspacingy="1mm"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="778"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:none;fill-rule:evenodd;stroke:#007eff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 78.67733,949.10975 L 149.24344,878.54364 L 212.69291,949.32749 L 149.4331,920.52717"
+ id="path2238"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 77.875125,949.43639 L 127.09591,913.61656 L 148.44123,878.87028 L 211.8907,949.65413 L 148.63089,920.85381"
+ id="linestring"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/simplify_linestring.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/simplify_linestring.svg
new file mode 100644
index 000000000..25cca7e3d
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/simplify_linestring.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="simplify_linestring.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\simplify_linestring.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.8554841"
+ inkscape:cx="126.75664"
+ inkscape:cy="66.677418"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="778"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.4;fill:none;fill-rule:evenodd;stroke:#ff0200;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 77.72841,949.50595 L 148.29452,878.93984 L 211.74399,949.72369 L 148.48418,920.92337"
+ id="path2238"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.6;fill:none;fill-rule:evenodd;stroke:#0000fd;stroke-width:0.88582677;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 77.582925,949.60717 L 126.80371,913.78734 L 148.14903,879.04106 L 211.5985,949.82491 L 148.33869,921.02459"
+ id="linestring"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/union_box_box.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/union_box_box.svg
new file mode 100644
index 000000000..b808dcc69
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/union_box_box.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="union_box_box_polygon.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\union_box_box_polygon.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.687689"
+ inkscape:cx="177.16534"
+ inkscape:cy="177.16534"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ transform="matrix(1,0,-9.3464798e-3,0.9999563,0,0)"
+ style="opacity:0.75;fill:#0092ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.70867687;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 99.877876,899.72723 L 153.67975,899.72723 L 153.67975,935.1783 L 100.53014,935.1783 L 99.877876,899.72723 z"
+ id="rect2234"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ transform="matrix(1,0,-9.3464804e-3,0.9999563,0,0)"
+ style="opacity:0.75;fill:#1eff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.70867687;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 139.34093,882.00989 L 192.15934,882.02637 L 192.49053,917.46099 L 139.34093,917.46095 L 139.34093,882.00989 z"
+ id="rect3237"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:0.53744495;fill:#aead97;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:2.12598419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 91.789507,899.70436 L 130.7659,899.70436 L 130.7659,881.98783 L 183.9155,881.98783 L 183.9155,917.4209 L 144.93912,917.4209 L 144.93912,935.13743 L 91.789507,935.13743 L 91.789507,899.70436 z"
+ id="rect3239"
+ sodipodi:nodetypes="ccccccccc" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/within_polygon.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/within_polygon.svg
new file mode 100644
index 000000000..770027ea7
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/within_polygon.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="within_polygon.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\within_polygon.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.2048876"
+ inkscape:cx="130.8455"
+ inkscape:cy="65.287038"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z M 194,910 L 209,921 L 187,939 L 180,917 L 194,910 z "
+ id="path2161"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path2232"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(97.937256,218.05672)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4110"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(73.05507,217.92244)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4112"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(122.20614,217.62168)" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/within_polygon_example.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/within_polygon_example.svg
new file mode 100644
index 000000000..0b0ccb311
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/within_polygon_example.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images"
+ sodipodi:docname="within_polygon_example.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\within_polygon_example.png"
+ inkscape:export-xdpi="259.75"
+ inkscape:export-ydpi="259.75">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.6312445"
+ inkscape:cx="177.16534"
+ inkscape:cy="164.4618"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridspacingx="1mm"
+ gridspacingy="1mm"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="-4"
+ inkscape:window-y="-4"
+ units="cm" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z M 194,910 L 209,921 L 187,939 L 180,917 L 194,910 z "
+ id="path2161"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path2232"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(97.937256,218.05672)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4110"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(73.05507,217.92244)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4112"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(122.20614,217.62168)" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/source/within_ring.svg b/libs/geometry/doc/doxy/doxygen_input/images/source/within_ring.svg
new file mode 100644
index 000000000..5a66c4776
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/source/within_ring.svg
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="354.33069"
+ height="354.33069"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docbase="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc"
+ sodipodi:docname="within_ring.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="c:\svn\geolib\trunk\src\cpp\library\gl\geometry\doc\geometry\images\within_ring.png"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 177.16534 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="354.33069 : 177.16534 : 1"
+ inkscape:persp3d-origin="177.16534 : 118.11023 : 1"
+ id="perspective14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="50"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.2048876"
+ inkscape:cx="130.8455"
+ inkscape:cy="65.287038"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ width="10cm"
+ height="10cm"
+ showgrid="true"
+ gridanglex="8.4666669mm"
+ gridanglez="8.4666669mm"
+ grid_units="mm"
+ inkscape:grid-bbox="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="774"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ units="cm">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1mm"
+ spacingy="1mm"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-38.639912,-633.95635)">
+ <path
+ style="opacity:0.56687897;fill:#fff900;fill-opacity:1;stroke:#121518;stroke-opacity:1;stroke-width:0.9992126;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"
+ d="M 184,882 L 159,918 L 170,932 L 159,946 L 137.84854,924.45625 L 123.69708,928.09125 L 109.97083,942.15146 L 142,964 L 212,960 L 229,946 L 227,896 L 184,882 z"
+ id="path2161"
+ sodipodi:nodetypes="cccccccccccc"
+ inkscape:export-xdpi="200"
+ inkscape:export-ydpi="200" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path2232"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(97.937256,218.05672)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4110"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(73.05507,217.92244)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.5;fill:#ff000b;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path4112"
+ sodipodi:cx="72.000801"
+ sodipodi:cy="699.51318"
+ sodipodi:rx="1.7753623"
+ sodipodi:ry="1.9726247"
+ d="M 73.776163 699.51318 A 1.7753623 1.9726247 0 1 1 70.225439,699.51318 A 1.7753623 1.9726247 0 1 1 73.776163 699.51318 z"
+ transform="translate(122.20614,217.62168)" />
+ </g>
+</svg>
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/speed_comparison.png b/libs/geometry/doc/doxy/doxygen_input/images/speed_comparison.png
new file mode 100644
index 000000000..5e96986f1
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/speed_comparison.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_convex_hull_cities.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_convex_hull_cities.png
new file mode 100644
index 000000000..e47d30439
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_convex_hull_cities.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_convex_hull_country.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_convex_hull_country.png
new file mode 100644
index 000000000..2d7270a99
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_convex_hull_country.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_countries.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_countries.png
new file mode 100644
index 000000000..151763039
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_countries.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_polygon_box.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_polygon_box.png
new file mode 100644
index 000000000..0d72a86ec
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_polygon_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_polygon_ring.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_polygon_ring.png
new file mode 100644
index 000000000..ca88da421
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_polygon_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_ring_box.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_ring_box.png
new file mode 100644
index 000000000..48a3fb3fd
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_ring_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_ring_ring.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_ring_ring.png
new file mode 100644
index 000000000..8d78c15ea
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_ring_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_roads.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_roads.png
new file mode 100644
index 000000000..cd21586f6
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_intersection_roads.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_simplify_country.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_simplify_country.png
new file mode 100644
index 000000000..e49b72cb4
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_simplify_country.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_simplify_road.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_simplify_road.png
new file mode 100644
index 000000000..71f326fcd
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_simplify_road.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_union_polygon_box.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_union_polygon_box.png
new file mode 100644
index 000000000..7910b9fac
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_union_polygon_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_union_polygon_ring.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_union_polygon_ring.png
new file mode 100644
index 000000000..b82eca6cb
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_union_polygon_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_union_ring_box.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_union_ring_box.png
new file mode 100644
index 000000000..d1b8c7d65
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_union_ring_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/svg_union_ring_ring.png b/libs/geometry/doc/doxy/doxygen_input/images/svg_union_ring_ring.png
new file mode 100644
index 000000000..1ebb0d934
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/svg_union_ring_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/union_box_box.png b/libs/geometry/doc/doxy/doxygen_input/images/union_box_box.png
new file mode 100644
index 000000000..1a3dfa5d0
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/union_box_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/within_polygon.png b/libs/geometry/doc/doxy/doxygen_input/images/within_polygon.png
new file mode 100644
index 000000000..b5c51e6f6
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/within_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/within_polygon_example.png b/libs/geometry/doc/doxy/doxygen_input/images/within_polygon_example.png
new file mode 100644
index 000000000..c2a3e3fbc
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/within_polygon_example.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/within_ring.png b/libs/geometry/doc/doxy/doxygen_input/images/within_ring.png
new file mode 100644
index 000000000..b13ebd849
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/within_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/x01_qt_example_output.png b/libs/geometry/doc/doxy/doxygen_input/images/x01_qt_example_output.png
new file mode 100644
index 000000000..7a8f64bb4
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/x01_qt_example_output.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/images/x02_numeric_adaptor_example_output.png b/libs/geometry/doc/doxy/doxygen_input/images/x02_numeric_adaptor_example_output.png
new file mode 100644
index 000000000..a07a1997e
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/images/x02_numeric_adaptor_example_output.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_b_sets.hpp b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_b_sets.hpp
new file mode 100644
index 000000000..1e353a69d
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_b_sets.hpp
@@ -0,0 +1,214 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef _DOXYGEN_SETS_HPP
+#define _DOXYGEN_SETS_HPP
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page sets Spatial set-theoretic operations (union, intersection, difference)
+
+
+
+
+\section sets_par1 Introduction
+
+The GGL implementation of the algorithms intersection, union, difference and symmetric difference is based on set theory (a.o. http://en.wikipedia.org/wiki/Set_(mathematics)).
+This theory is applied for spatial sets.
+
+Intersection and union are so-called set-theoretic operations. Those operations
+work on sets, and geometries (especially
+polygons and multi-polygons) can be seen as sets, sets of points.
+
+
+The first section will repeat a small, relevant part of the algebra of sets, also describing the notation used in this page. The next section will extend this algebra of sets for spatial sets (polygons).
+
+\section sets_par2 Algebra of sets in a spatial context
+
+- A &#8745; B : the intersection of two sets A and B is the set that contains all elements of A that also belong to B (aka AND)
+- A &#8746; B : the union of two sets A and B is the set that contains all elements that belong to A or B (aka OR)
+- A<small><sup>c</sup></small> : the complement of set A is the set of elements which do not belong to A
+- A \ B : the difference of two sets A and B is the set of elements which belong to A but not to B
+- A &#8710; B : the symmetric difference of two sets A and B is the set of elements which belong to either A or to B, but not to A and B (aka XOR)
+
+(Source of most definitions: http://en.wikipedia.org/wiki/Algebra_of_sets)
+
+There are several laws on sets and we will not discuss them all here. The most important for this page are:
+- B \ A = A<small><sup>c</sup></small> &#8745; B and, vice versa, A \ B = B<small><sup>c</sup></small> &#8745; A
+- A &#8710; B = (B \ A) &#8746; (A \ B) (http://www.tutorvista.com/content/math/number-theory/sets/operations-sets.php)
+
+
+\section sets_par3 Polygons
+
+
+Polygons are sets of points, and, therefore polygons follow all definitions and laws for sets. For pragmatic reasons and implementations in computer programs, polygons have an orientation, clockwise or counter clockwise. Orientation is not part of most set theory descriptions, but is an important aspect for the appliance of sets to polygon operations.
+
+If a polygon is (arbitrarily) defined as having its vertices in clockwise direction:
+- then its interior lies on the right side of the edges [http://gandraxa.com/draw_orthogonal_polygons.aspx]
+- and its exterior lies, therefore, on the left side of the edges
+
+This definition is important for the spatial interpretation sets.
+
+- If set A describes the interior of a polygon, then A<small><sup>c</sup></small>, its complement, describes the exterior of a polygon.
+- Stated differently, set A is a polygon, all points belonging to A are inside the polygon. Its complement, A<small><sup>c</sup></small>, contains all points not belonging to A.
+- If A is a polygon with its vertices oriented clockwise, A<small><sup>c</sup></small> is a polygon with the same vertices, but in reverse order, so counter clockwise. Both sets have their points belonging to them at the right side of their edges
+
+\image html set_a_ac.png
+
+The last observation is helpful in calculating the difference and the symmetric difference:
+- the difference B \ A is defined above by the law B \ A = A<small><sup>c</sup></small> &#8745; B.
+ In polygon terms it is therefore the intersection of the "reverse of A" with B.
+ To calculate it, it is enough to have polygon A input in reverse order, and intersect this with polygon B
+- the symmetric difference A &#8710; B is defined above by the law (B \ A) &#8746; (A \ B), which leads to
+ (A<small><sup>c</sup></small> &#8745; B) &#8746; (B<small><sup>c</sup></small> &#8745; A).
+ To calculate the symmetric difference, it is enough to have polygon A input in reverse order,
+ intersect this with polygon B, store the result; then have polygon B input in reverse order,
+ intersect this with polygon A, add this to the result and this is the symmetric difference.
+ The combination of both sub-results does not have to be intersected as it is only touching
+ on vertices and do not have overlaps.
+
+
+\section sets_par4 Implementation of intersection and union
+All spatial set-theoretic operations are implemented in shared code. There is hardly any difference in code
+between the calculation of an intersection or a union. The only difference is that at each intersection point,
+for an intersection the right turn should be taken. For union the left turn should be taken.
+
+\image html set_int_right_union_left.png
+
+
+This is implemented as such in GGL. The turn to be taken is a variable.
+
+There is an alternative to calculate union as well:
+- the union A &#8746; B equals to the complement of the intersection of the complements of the inputs,
+ (A<small><sup>c</sup></small> &#8745; B<small><sup>c</sup></small>)<small><sup>c</sup></small> (De Morgan law,
+ http://en.wikipedia.org/wiki/Algebra_of_sets#Some_additional_laws_for_complements)
+
+There is an additional difference in the handling of disjoint holes (holes which are not intersected). This is also
+implemented in the same generic way (the implementation will still be tweaked a little to have it even more generic).
+
+For a counter clockwise polygon, the behaviour is the reverse: for intersection take the left path, for union
+take the right path. This is a trivial thing to implement, but it still has to be done (as the orientation was introduced
+in a later phase in GGL).
+
+
+\section sets_par5 Iterating forward or reverse
+As explained above, for a difference, the vertices of the first polygon should be iterated by a forward iterator, but
+the vertices of the second polygon should be iterated by a reverse iterator (or vice versa). This (trivial) implementation
+still has to be done. It will <b>not</b> be implemented by creating a copy, reversing it, and presenting it as input to the
+set operation (as outlined above). That is easy and will work but has a performance penalty. Instead a reversible iterator will used,
+extended from Boost.Range iterators, and decorating a Boost.Range iterator at the same time, which can travel forward or backward.
+
+It is currently named \b reversible_view and usage looks like:
+
+\code
+
+template <int Direction, typename Range>
+void walk(Range const & range)
+{
+ typedef reversible_view<Range, Direction> view_type;
+ view_type view(range);
+
+ typename boost::range_const_iterator<view_type>::type it;
+ for (it = boost::begin(view); it != boost::end(view); ++it)
+ {
+ // do something
+ }
+}
+
+walk<1>(range); // forward
+walk<-1>(range); // backward
+
+\endcode
+
+
+\section sets_par6 Characteristics of the intersection algorithm
+The algorithm is a modern variant of the graph traversal algorithm, after Weiler-Atherton
+(http://en.wikipedia.org/wiki/Weiler-Atherton_clipping_algorithm).
+
+It has the following characteristics (part of these points are deviations from Weiler-Atherton)
+- No copy is necessary (the original Weiler-Atherton, and its descendants, insert intersections in (linked) lists,
+ which require to make first copies of both input geometries).
+- All turning points (which are intersection points with side/turn information) are unaware of the context, so we have (and need) no information about
+ if, before the intersection point, a segment was inside or outside of the other geometry
+- It can do intersections, unions, symmetric differences, differences
+- It can handle polygons with holes, non-convex polygons, polygons-with-polygons, polygons-with-boxes (clip), rings, multi-polygons
+- It can handle one polygon at the time (resolve self-intersections), two polygons (the normal use case), or more polygons (applicable
+ for intersections and unions)
+- It can handle clockwise and counter-clockwise geometries
+
+
+\section sets_par7 Outline of the intersection algorithm
+The actual implementation consists of the next phases.
+
+\b 1 the input geometries are indexed (if necessary). Currently we use monotonic sections for the index. It is done
+by the algorithm \b sectionalize. Sections are created is done on the fly, so no preparation is required before (though this would improve
+performance - it is possible that there will be an alternative variant where prepared sections or other indexes are part of the input).
+For box-polygon this phase is not necessary and skipped. Sectionalizing is done in linear time.
+
+\b 2, intersection points are calculated. Segments of polygon A are compared with segments of polygon B. Segment intersection is only
+done for segments in overlapping sections. Intersection points are not inserted into the original polygon or in a copy. A linked list is therefore not necessary.
+This phase is called \b get_intersection_points. This function can currently be used for one or two input geometries, for self-intersection
+or for intersection.
+Because found intersections are provided with intersection-information, including a reference to their source, it is possible (but currently not
+implemented) to have more than two geometry inputs.
+
+The complexity of getting the intersections is (much) less than quadratic (n*m) because of the monotonic sections. The exact complexity depends on
+the number of sections, of how the input polygons look like. In a worst case scenario, there are only two monotonic sections per polygon and both
+overlap. The complexity is then quadratic. However, the sectionalize algorithm has a maximum number of segments per section, so for large polygons
+there are always more monotonic sections and in those cases they do not overlap by the definition of "monotonic".
+For boxes, the complexity is linear time.
+
+To give another idea of how sections and indexes work:
+For a test processing 3918 polygons (but not processing those of which envelopes do not overlap):
+- brute force (O(n<small><sup>2</sup></small>)): 11856331 combinations
+- monotonic sections: 213732 combinations (55 times less)
+- a spatial index: 34877 combinations (1/6 of using monotonic sections)
+So there can still be gained some performance by another index. However the current spatial index implementation (in an extension,
+not in Formal Review) will still be revisited, so it is currently not used.
+
+<i>In "normal" cases 84% of the time is spent on finding intersection points. These divisions in %'s refers to the performance test described elsewhere</i>
+
+One piece of information per intersection points is if it is \b trivial. It is trivial if the intersection is not located at segment end points.
+
+\b 3, the found intersection points are merged (\b merge_intersection_points), and some intersections can be deleted (e.g. in case of
+collinearities). This merge process consists of sorting the intersection points in X (major) and Y (minor) direction, and merging intersections with a common location together. Intersections with common
+locations do occur as soon as segments are collinear or meet at their end points.
+This phase is skipped if all intersection points are trivial.
+
+<i>About 6% is spent on merging.</i>
+
+\b 4, some turns need to be adapted. If segments intersect in their interiors, this is never necessary. However, if segments intersect on their
+end points, it is sometimes necessary to change "side" information to "turn" information. This phase is called \b adapt_turns.
+
+The image below gives one example when adapting turns is necessary. There is side information, both segments have sides \b left and \b right, there
+is also \b collinear.
+However, for an intersection no turn should be taken at all, so no right turn. For a union, both polygons have to be travelled.
+In this case the side information is adapted to turn information, both turns will be \b left. This phase is skipped if all intersection points are trivial.
+
+\image html set_adapt_turns.png
+
+
+\b 5, the merged intersection points are enriched (\b enrich_intersection_points) with information about a.o. the next intersection point (travel information).
+
+<i>About 3% is spent on enrichment.</i>
+
+\b 6, polygons are traversed (\b traverse) using the intersection points, enriched with travel information. The input polygons are traversed and
+at all intersection poitns a direction is taken, left for union, right for intersection point (for counter clockwise polygons this is the other way
+round). In some cases separate rings are produced. In some cases new holes are formed.
+
+<i>About 6% is spent on traversal.</i>
+
+\b 7, the created rings are assembled (\b assemble) into polygon(s) with exterior rings and interior rings. Even if there are no intersection points found, this process can be important to find containment and coverage.
+
+<i>Timing of this phase is not yet available, as the comparison program work on rings.</i>
+
+
+*/
+
+#endif // _DOXYGEN_SETS_HPP
diff --git a/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_c_strategy_rationale.hpp b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_c_strategy_rationale.hpp
new file mode 100644
index 000000000..4fafd3168
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_c_strategy_rationale.hpp
@@ -0,0 +1,79 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+
+#ifndef _DOXYGEN_STRATEGY_RATIONALE_HPP
+#define _DOXYGEN_STRATEGY_RATIONALE_HPP
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page strategy Strategy rationale
+
+
+\section strpar1 Purpose of strategies
+
+A strategy is (Wikipedia, http://en.wikipedia.org/wiki/Strategy_pattern) a software design pattern whereby algorithms can be selected at runtime. According to Wikipedia, it is also known as the Policy pattern. In the C++ template contexts, policies are usually meant as selecting functionality at compile time. so it is reasonable to state that a strategy can also be used at compile-time
+
+Within GGL the term policy is used (sparsely), but in a broader, or in another context. The term Strategy is used specificly for a computation method targeted to a specific coordinate system
+
+GGL-Strategies do have the following purposes:
+ - for each coordinate system, a default strategy is selected by compile time, using the coordinate system tag. This is effectively tag dispatching.
+ - users can override the default choice by using the overloaded function, which has a strategy as an extra parameter, and take another strategy
+ - users can override the default choice by using the overloaded function, to use the default strategy, but constructed with specific parameters
+ - users can override the default choice by using the overloaded function, to use the default strategy (which can be a templated structure), with other template parameters then the default ones
+ - users can override the default choice by using the overloaded function, to use the default strategy (which can be a templated structure), with other template parameters then the default ones, with the specific purpose as to select another calculation type (e.g. GMP or another big number type)
+
+All this happens at compile-time.
+
+For example (this is also explained in the design rationale) the distance functionality. The default distance strategy for point-point is Pythagoras (for cartesian coordinate systems) or Haversine (for spherical) or Andoyer (for geographic). Haversine works on the unit sphere, radius 1. Library users can use the distance function, specifying haversine strategy constructed with a radius of 2. Or they can use the distance function, specifying the more precise Vincenty strategy (for geographic coordinate systems, but that might not even be checked there). Specifying strategies is useful, even if not point-point distance is to be calculated, but e.g. point-polygon distance. In the end it will call the elementary specified functionality. Note that, for this example, the point-segment distance strategy is also "elementary". Note also that it can have an optional template parameter defining the underlying point-point-distance-strategy.
+
+\section strpar2 Properties of strategies
+
+Because strategies can be constructed outside the calling function, they can be specified as an optional parameter (implemented as an overloaded function), and not as only a template-parameter. Furthermore, strategies might be used several times, in several function calls. Therefore they are declared as const reference parameter, they should be stateless (besides construction information).
+
+The strategy needs to access construction information (member variables), its calculation method is therefore usually not a static method but a non-static const method. It can then access member variables, while still being const, non-mutable, stateless, being able to be called across several function calls.
+If often has to keep some calculation information (state), so it should (for some algorithms) declare a state_type. In those cases, that state_type is instantiated before first call and specified in each call.
+The calculation method is always called \b apply (as convention in GGL) and gets the most elementary information as a parameter: a point, a segment, a range. It depends on the algorithm and, sometimes, on the source geometry passed. That should actually be the case as least as possible
+In most cases, there is an additional method \b result which returns the calculated result. That result-method is a also non-static const method, and the state is passed.
+Note that the methods might be non-static const, but they might also be static. That is not checked by the concept-checker.
+
+A strategy for a specific algorithm has a concept. The distance-strategy should follow the distance-strategy-concept. The point-in-polygon strategy should follow the point-in-polygon-strategy-concept. Those concepts are not modelled as traits classes (contrary to the geometries). The reason for this is that it seems not necessary to use legacy classes as concepts, without modification. A wrapper can be built. So the strategies should have a method \b apply and should define some types.
+
+Which types, and which additional methods (often a method \b result), is dependant on the algorithm / type of strategy.
+
+Strategies are checked by a strategy-concept-checker. For this checker (and sometimes for checking alone), they should define some types. Because if no types are defined, the methods cannot be checked at compile time... The strategy-concept-checkers are thus implemented per algorithm and they use the Boost Concept Check Library for checking.
+
+So as explained above, the essence of the design is:
+- function determines default-strategy, or is called with specified strategy
+- function calls dispatch (dispatching is done on geometry_tag)
+- dispatch calls implementation (in namespace detail), which can be shared for different geometry types and for single/multi
+- implementation calls strategy (if applicable), with the smallest common (geometric) element applicable for all calculation method, the common denominator
+
+\section strpar3 Alternative designs
+
+Some calculations (strategies) might need to take the whole geometry, instead of working on point-per-point or segment-per-segment base. This would bypass the dispatch functionality. Because all strategies would take the whole geometry, it is not necessary to dispatch per geometry type. In fact this dispatching on geometry-type is moved to the strategy_traits class (which are specialized per coordinate system in the current design). So in this alternative design, the strategy traits class specializes on both geometry-tag and coordinate-system-tag, to select the default strategy.
+For the default strategy, this move from "dispatch" to another dispatch called "strategy_XXX" (XXX is the algorithm) might make sense. However, if library users would call the overloaded function and specify a strategy, the only thing what would happen is that that specified strategy is called. So, for example:
+\code
+template <typename G1, typename G2, typename S>
+bool within(G1 const& g1, G2 const& g2, S& const strategy)
+{
+ return strategy.apply(g1, g2);
+}
+\endcode
+
+The library user could call just this strategy.apply(..) method directly. If more strategies are provided by the library or its extensions,
+it would still make sense: the user can still call \b within and does not have to call the \b apply method of the strategy.
+
+The convex hull strategy currently works on a whole geometry. However, it is possible that it will be reshaped to work per range (the algorithm
+internally works per range), plus a mechanism to pass ranges multiple times (it currently is two-pass).
+
+
+*/
+
+#endif // _DOXYGEN_STRATEGY_RATIONALE_HPP
diff --git a/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_d_robustness.hpp b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_d_robustness.hpp
new file mode 100644
index 000000000..7cf9d8b2c
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_d_robustness.hpp
@@ -0,0 +1,150 @@
+// Boost.Geometry (aka Boost.Geometry, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef _DOXYGEN_ROBUSTNESS_HPP
+#define _DOXYGEN_ROBUSTNESS_HPP
+
+/---------------------------------------------------------------------------------------------------
+
+/*!
+\page robustness Boost.Geometry and Robustness
+
+\section robustness_par1 Introduction
+
+Floating point coordinates have limited precision. Geometry algorithms have to take this into account.
+
+If differences between points are very small, it may lead to false result of a mathematical calculation performed on such points, what in turn, may cause algorithm result as inadequate to actual geometric situation. For example, a point which is located left from a segment, but \b very close to it, can be reported on that segment or right from it. Also if differences are a little larger, artifacts can be shown in geometric algorithms.
+
+See for more backgrounds e.g.:
+
+- <a href="http://www.mpi-inf.mpg.de/~kettner/pub/nonrobust_cgta_06.pdf">Classroom Examples of Robustness Problems in Geometric Computations</a>
+- <a href="http://groups.csail.mit.edu/graphics/classes/6.838/S98/meetings/m12/pred/m12.html">Robust Predicates and Degeneracy</a>
+
+Boost.Geometry is aware of these issues and provides several approaches to minimize the problems, or avoid them completely using
+
+- <a href="http://en.wikipedia.org/wiki/GNU_Multi-Precision_Library">GMP</a>
+- <a href="http://en.wikipedia.org/wiki/Class_Library_for_Numbers">CLN</a>
+
+
+\section robustness_par2 Example
+
+An example. Consider the elongated triangle and box below.
+
+\image html robust_triangle_box.png
+
+The left edge of the triangle has a length of about the precision of the floating point grid. It is not possible to do this intersection correctly, using floating point. No library (using floating point) can do that, by nature of float point numerical representation. It is not possible to express the four different coordinates in the resulting intersected polygon. Theoretically distinct points will be assigned to the very same location.
+
+Also if the left edge is longer than that, or using double coordinates, those effects will be there. And of course not only in triangles, but any spiky feature in a polygon can result in non representable coordinates or zero-length edges.
+
+\section robustness_par3 Coordinate types
+
+All geometry types provided by Boost.Geometry, and types by the user, do have a coordinate type. For example
+
+\code
+boost::geometry::point_xy<float> p1;
+boost::geometry::point_xy<double> p2;
+boost::geometry::point_xy<long double> p3;
+\endcode
+
+describes three points with different coordinate types,
+a 32 bits <a href="http://en.wikipedia.org/wiki/Single_precision">float</a>,
+a 64 bits <a href="http://en.wikipedia.org/wiki/Double_precision_floating-point_format">double</a>,
+a <a href="http://en.wikipedia.org/wiki/Long_double">long double</a>, not standardized by IEEE and is on some machines 96 bits (using a MSVC compiler it is a synonym for a double).
+
+By default, algorithms select the coordinate type of the input geometries. If there are two input geometries, and they have different coordinate types, the coordinate type with the most precision is selected. This is done by the meta-function \b select_most_precise.
+
+Boost.Geometry supports also high precision arithmetic types, by adaption. The numeric_adaptor, used for adaption, is not part of Boost.Geometry itself but developed by us and sent (as preview) to the Boost List (as it turned out, that functionality might also be provided by Boost.Math bindings, but the mechanism is the same). Types from the following libraries are supported:
+
+- GMP (http://gmplib.org)
+- CLN (http://www.ginac.de/CLN)
+
+Note that the libraries themselves are not included in Boost.Geometry, they are completely independant of each other.
+
+These numeric types can be used as following:
+\code
+boost::geometry::point_xy<boost::numeric_adaptor::gmp_value_type> p4;
+boost::geometry::point_xy<boost::numeric_adaptor::cln_value_type> p5;
+\endcode
+
+All algorithms using these points will use the \b GMP resp. \b CLN library for calculations.
+
+\section robustness_par4 Calculation types
+
+If high precision arithmetic types are used as shown above, coordinates are stored in these points. That is not always necessary. Therefore, Boost.Geometry provides a second approach. It is possible to specify that only the calculation is done in high precision. This is done by specifying a strategy. For example, in area:
+
+Example:
+ The code below shows the calculation of the area. Points are stored in double; calculation is done using \b GMP
+
+\code
+ {
+ typedef boost::geometry::point_xy<double> point_type;
+ boost::geometry::linear_ring<point_type> ring;
+ ring.push_back(boost::geometry::make<point_type>(0.0, 0.0));
+ ring.push_back(boost::geometry::make<point_type>(0.0, 0.0012));
+ ring.push_back(boost::geometry::make<point_type>(1234567.89012345, 0.0));
+ ring.push_back(ring.front());
+
+ typedef boost::numeric_adaptor::gmp_value_type gmp;
+
+ gmp area = boost::geometry::area(ring, boost::geometry::strategy::area::by_triangles<point_type, gmp>());
+ std::cout << area << std::endl;
+ }
+\endcode
+
+Above shows how this is used to use \b GMP or \b CLN for double coordinates. Exactly the same mechanism works (of course) also to do calculation in double, where coordinates are stored in float.
+
+\section robustness_par5 Strategies
+
+In the previous section was shown that strategies have an optional template parameter \b CalculationType so enhance precision. However, the design of Boost.Geometry also allows that the user can implement a strategy himself. In that case he can implement the necessary predicates, or use the necessary floating point types, or even go to integer and back. Whatever he prefers.
+
+\section robustness_par6 Examples
+
+We show here some things which can occur in challenging domains.
+
+The image below is drawn in PowerPoint to predict what would happen at an intersection of two triangles using float coordinates in the range 1e-45.
+
+\image html robust_float.png
+
+If we perform the intersection using Boost.Geometry, we get the effect that is presented on the pictures below, using float (left) and using double (right).
+
+\image html robust_triangles.png
+
+This shows how double can solve issues which might be present in float. However, there are also cases which cannot be solved by double or long double. And there are also cases which give more deviations than just a move of the intersection points.
+
+We investigated this and created an artificial case. In this case, there are two stars, they are the same but one of them is rotated over an interval of about 1e-44. When those stars are intersected, the current Boost.Geometry implementation using float, double or long double will give some artifacts.
+
+Those artifacts are caused by taking the wrong paths on points where distances are zero (because they cannot be expressed in the used coordinate systems).
+
+If using \b GMP or \b CLN, the intersection is correct.
+
+\image html robust_stars.png
+
+Note again, these things happen in differences of about 1e-45. We can investigate if they can be reduced or sometimes even solved. However, they belong to the floating point approach, which is not exact.
+
+For many users, this all is not relevant. Using double they will be able to do all operations without any problems or artefacts. They can occur in real life, where differences are very small, or very large. Those users can use \b GMP to use Boost.Geometry without any problem.
+
+\section robustness_par7 Future work
+
+There are several methods to avoid instability and we don't know them all, some of them might be applicable to our algorithms. Therefore is stated that Boost.Geometry is "not checked on 100% robustness". As pointed out in the discussions on the Boost mailing list in spring '09 (a.o. <i>"The dependent concept should explicitely require unlimited precision since the library specifically uses it to *guarantee* robustness. [...] Users should be left with no choice but to pick some external component fulfilling the unlimited precision requirement"</i>), it seems that it is not possible to solve all these issues using any FP number, that it is necessary to use a library as GMP or CLN for this guarantee.
+
+Therefore we decided to go for supporting high precision numeric types first, and they are currently supported in most algorithms (a.o. area, length, perimeter, distance, centroid, intersection, union). However, we certainly are willing to take other measures as well.
+
+\section robustness_par8 Summary
+
+Boost.Geometry approach to support high precision:
+
+- library users can use points with float, double, or long double coordinates (the default)
+- for higher numerical robustness: users can call algorithms using another calculation type (e.g. \b GMP or \b CLN, ...)
+- for higher numerical robustness: users can use points with \b GMP or \b CLN coordinates
+- users can implement their own implementation and provide this as a strategy, the Boost.Geometry design allows this
+- other measures can be implemented, described as future work.
+
+
+
+*/
+
+#endif // _DOXYGEN_ROBUSTNESS_HPP
diff --git a/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_examples.hpp b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_examples.hpp
new file mode 100644
index 000000000..d7349b197
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_examples.hpp
@@ -0,0 +1,235 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+
+#ifndef _DOXYGEN_EXAMPLES_HPP
+#define _DOXYGEN_EXAMPLES_HPP
+
+
+/*!
+
+
+\example 01_point_example.cpp
+In most cases the documentation gives small examples of how to use the algorithms or classes.
+The point example is a slightly larger example giving an idea of how to use different
+algorithms from the library, related to points. It shows
+- the usage of include files
+- how to declare points, using different coordinate types
+- how to construct points, specifying coordinates, initializing to zero or to infinite
+- how to compare points to each other
+- how points can be streamed as OGC text
+- calculating the distance from point to point
+
+
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\example 02_linestring_example.cpp
+The linestring example shows how linestrings can be declared and used and shows some more algorithms.
+One of the important concepts of the Generic Geometry Library is that it is totally built upon the standard
+library, using the standard containers such as std::vector.
+
+A linestring is, as explained elsewhere in this documentation, not much more than a vector of points.
+Most algorithms run on linestrings, but can also run on any iterator pair. And all algorithms
+on std::vector can be used on geometry::linestring.
+
+The sample shows this, shows some algorithms:
+- geometry::envelope
+- geometry::length
+- geometry::distance
+- geometry::simplify
+- geometry::for_each
+- geometry::intersection
+
+This documentation illustrates the simplify algorithm and the intersection algorithm with some pictures.
+
+The simplify algorithm simplifies a linestring. Simplification means that the less important points
+are removed from the line and that the points that are most important for the shape of a line are
+kept. Simplification is done using the well known Douglas Peucker algorithm. The library user can
+specify the distance or tolerance, which indicates how much the linestring should be simplified.
+
+The image below shows the original and simplified linestring:
+\image html simplify_linestring.png
+The blue line is the original linestring; the red line is the simplified line which has one point less.
+In geographical applications simplification can reduce a linestring to its basic form containing only
+10% of its original points.
+
+The intersection algorithm intersects two geometries which each other, delivering a third geometry.
+In the case of the example a linestring is intersected with a box. Intersection with a box is often
+called a clip. The image below illustrates the intersection.
+\image html clip_linestring.png
+The yellow line is intersected with the blue box.
+The intersection result, painted in red, contains three linestrings.
+*/
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\example 03_polygon_example.cpp
+The polygon example shows some examples of what can be done with polygons in the Generic Geometry Library:
+* the outer ring and the inner rings
+* how to calculate the area of a polygon
+* how to get the centroid, and how to get an often more interesting label point
+* how to correct the polygon such that it is clockwise and closed
+* within: the well-known point in polygon algorithm
+* how to use polygons which use another container, or which use different containers for points and for inner rings
+* how polygons can be intersected, or clipped, using a clipping box
+
+The illustrations below show the usage of the within algorithm and the intersection algorithm.
+
+The within algorithm results in true if a point lies completly within a polygon. If it lies exactly
+on a border it is not considered as within and if it is inside a hole it is also not within the
+polygon. This is illustrated below, where only the point in the middle is within the polygon.
+
+\image html within_polygon.png
+
+The clipping algorithm, called intersection, is illustrated below:
+
+\image html clip_polygon.png
+
+The yellow polygon, containing a hole, is clipped with the blue rectangle, resulting in a
+multi_polygon of three polygons, drawn in red. The hole is vanished.
+
+include polygon_example.cpp
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example 06_a_transformation_example.cpp
+This sample demonstrates the usage of transformations in the Generic Geometry Library.
+Behind the screens this is done using with the uBLAS matrix/vector library.
+
+\example 06_b_transformation_example.cpp
+
+*/
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\example 07_a_graph_route_example.cpp
+The graph route example shows how GGL can be combined with Boost.Graph. The sample does the following things:
+- it reads roads (included in the distribution, stored on disk in the form of a text file containing geometries and names)
+- it reads cities
+- it creates a graph from the roads
+- it connects each city to the nearest vertex in the graph
+- it calculates the shortest route between each pair of cities
+- it outputs the distance over the road, and also of the air
+- it creates an SVG image with the roads, the cities, and the first calculated route
+
+Note that this example is useful, but it is only an example. It could be built in many different ways.
+For example:
+- the roads/cities could be read from a database using SOCI, or from a shapefile using shapelib
+- it could support oneway roads and roads on different levels (disconnected bridges)
+- it currently uses tuples but that could be anything
+- etc
+
+The SVG looks like:
+\image html 07_graph_route_example_svg.png
+
+The output screen looks like:
+\image html 07_graph_route_example_text.png
+
+\example 07_b_graph_route_example.cpp
+
+
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c01_custom_point_example.cpp
+This sample demonstrates that custom points can be made as well. This sample contains many points, derived
+from boost::tuple, created from scratch, read only points, legacy points, etc.
+*/
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c02_custom_box_example.cpp
+Besides custom points, custom boxes are possible as shown in this example.
+*/
+
+//---------------------------------------------------------------------------------------------------
+/*
+\example c03_custom_linestring_example.cpp
+GPS tracks are shown in this example: a custom linestring with GPS points
+*/
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c04_a_custom_triangle_example.cpp
+The \b custom triangle \b example goes even further and implements a custom ring, where the area calculation
+algorithm is optimized for a triangle
+*/
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c04_b_custom_triangle_example.cpp
+This second custom triangle example shows an alternative implementation for a custom shape, showing a
+partial specialization for the area calculation.
+*/
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c05_custom_point_pointer_example.cpp
+This example shows how GGL can be used to adapt a pointer-to-a-point, used e.g. in a linestring
+*/
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example c06_custom_polygon_example.cpp
+Showing a custom polygon (asked on the list during Formal Review)
+*/
+
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example x01_qt_example.cpp
+This sample demonstrates that by usage of concepts, external geometries can be handled
+by GGL, just calling by a one-line registration macro. In this case for the Qt Widget Library.
+
+The example, code shown below, results in this window-output:
+\image html x01_qt_example_output.png
+*/
+
+
+
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example x03_a_soci_example.cpp
+First example showing how to get spatial data from a database using SOCI and put them into GGL
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*!
+\example x03_b_soci_example.cpp
+Second example showing how to get polygons from a database using SOCI and put them into GGL, using WKT.
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*
+\example x03_c_soci_example.cpp
+Example showing how to get polygons from PostGIS using SOCI and use them in GGL through WKB
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+ /*
+\example x03_d_soci_example.cpp
+Example showing how to get polygons from PostGIS using SOCI and use them in GGL through WKB
+
+*/
+
+#endif // _DOXYGEN_EXAMPLES_HPP
diff --git a/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_mainpage.hpp b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_mainpage.hpp
new file mode 100644
index 000000000..e14496400
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_mainpage.hpp
@@ -0,0 +1,105 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+
+#ifndef _DOXYGEN_MAINPAGE_HPP
+#define _DOXYGEN_MAINPAGE_HPP
+
+
+// -> introduction.qbk
+// -> quickstart.qbk
+
+/*!
+\mainpage Boost.Geometry
+
+\section header Boost.Geometry (aka GGL, Generic Geometry Library)
+
+<em>
+Copyright &copy; 1995-2012 <b>Barend Gehrels</b>, Geodan, Amsterdam, the Netherlands.\n
+Copyright &copy; 2008-2012 <b>Bruno Lalande</b>, Paris, France.\n
+Copyright &copy; 2010-2012 <b>Mateusz Loskot</b>, Cadcorp, London, UK.\n
+Distributed under the Boost Software License, Version 1.0.\n
+(See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+</em>
+
+\section intro Introduction
+Boost.Geometry, formally accepted by Boost, defines concepts "concepts" for geometries and
+implements some algorithms on such geometries. Before acceptance by Boost it was known as GGL
+(Generic Geometry Library) and this documentation still contains that name on various places.
+
+
+Boost.Geometry contains a dimension-agnostic, coordinate-system-agnostic and
+scalable kernel, based on concepts, meta-functions and tag- dispatching. On top
+of that kernel, algorithms are built: area, length, perimeter, centroid, convex
+hull, intersection (clipping), within (point in polygon), distance, envelope
+(bounding box), simplify, transform, convert, and more. The library is also
+designed to support high precision arithmetic numbers, such as GMP.
+
+Boost.Geometry contains instantiable geometry classes, but library users can also use their own. Using registration macros or traits classes their geometries can be adapted to fulfil the Boost.Geometry Concepts.
+
+Boost.Geometry might be used in all domains where geometry plays a role: mapping and GIS, gaming, computer graphics and widgets, robotics, astronomy... The core is designed to be as generic as possible and support those domains. However, for now the development has been mostly GIS-oriented.
+
+Boost.Geometry supports the extension model, the same way as GIL also applies it. An extension is (mostly) something more specific to domains like mentioned above.
+
+The library follows existing conventions:
+- conventions from boost
+- conventions from the std library
+- conventions and names from one of the OGC standards on Geometry
+
+The library can be downloaded from the Boost Sandbox,
+go to the \ref download "Download page" for more information.
+
+A (recently started) Wiki is here: http://trac.osgeo.org/ggl/wiki
+
+\section quickstart Quick start
+It is not possible to show the whole library at a glance. A few very small examples are shown below.
+
+It should be possible to use a very small part of the library,
+for example only the distance between two points.
+
+\dontinclude doxygen_2.cpp
+\skip example_for_main_page()
+\skipline int a
+\until endl;
+
+Other often used algorithms are point-in-polygon:
+\skipline ring_2d
+\until endl;
+
+or area:
+\skip area
+\until endl;
+
+It is possible, by the nature of a template library, to mix the point types declared above:
+\skip double d2
+\until endl;
+
+The pieces above generate this output:
+\image html output_main.png
+
+
+It is also possible to use non-Cartesian points.
+For example: points on a sphere. When then an algorithm such as distance
+is used the library "inspects" that it is handling spherical
+points and calculates the distance over the sphere, instead of applying the Pythagorean theorem.
+
+Finally an example from a totally different domain: developing window-based applications, for example
+using QtWidgets. We check if two rectangles overlap and if so,
+move the second one to another place:
+\skip QRect
+\until }
+
+More examples are on the page \b Examples
+
+
+*/
+
+
+
+
+
+#endif // _DOXYGEN_MAINPAGE_HPP
diff --git a/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_pages.hpp b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_pages.hpp
new file mode 100644
index 000000000..7ec99f557
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_pages.hpp
@@ -0,0 +1,436 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+
+#ifndef _DOXYGEN_PAGES_HPP
+#define _DOXYGEN_PAGES_HPP
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page compat Relation to Boost and std libraries
+
+\section boost_compat Boost
+
+The GGL makes use of the following Boost Libraries:
+- Boost Range
+- Boost Type Traits (e.g. remove_const)
+- Boost Concept Check Library
+- Boost Numeric Conversion (cast, bounds)
+- Boost MPL
+- Boost Static Assert
+- Boost Iterator
+- Boost Smart Pointer (shared_ptr, in the extensions spatial index and projections)
+- Boost uBLAS
+- Adapted geometries:
+ - Boost Array
+ - Boost Tuple
+- IO and parsing
+ - Boost Tokenizer
+ - Boost Conversion (lexical cast)
+ - Boost String Algo
+- Testing
+ - Boost Test
+ - Boost Timer
+- Examples
+ - Boost Graph Library
+
+
+Many of these are used a lot inside the library.
+
+The \b Boost.Range library is used everywhere
+to declare iterators and to walk through standard containers or custom ranges.
+
+The \b Boost \b Concept \b Check \b Library is used to check concepts, for geometries as well
+as for strategies.
+
+Tranformations are implemented using \b Boost uBLAS
+
+\b MPL is used for a.o. reverse dispatching
+
+Finally, the library can perfectly be used together with the \b Boost \b Graph \b Library, as shown in example 7.
+
+
+\section std_compat std:: library
+
+
+The GGL makes substantial use of the std library, and is designed to be compatible with it.
+- provided geometries (linestring, ring, polygon, multi-s) make default use of std::vector (but that is configurable)
+- std sorting, unique copies, maps can make use of provided functors in compare "compare".
+- internally, there are vector's, deque's, there is sorting, many things are implemented using the std library
+
+*/
+
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page compiling Compiling
+
+\section compiling_intro Compiling Boost.Geometry
+
+Boost.Geometry is a Header Only library. So just including the headerfiles is enough
+to use the algorithms. Nothing has to be linked.
+
+Boost.Geometry is only dependant on (header only) Boost libraries. Download the Boost
+Library Collection from www.boost.org, adapt the include path to include Boost.
+
+\section platforms Platforms
+
+The library currently compiles successfully on the following platforms:
+- MS Visual Studio 2008 (Express Edition)
+- MS Visual Studio 2005 (Express Edition)
+- gcc version 3.4
+- gcc version 4 (tested are 4.1, 4.2, 4.4)
+
+For Visual Studio, the examples contains some project files (for 2005). However, because the library
+ is header only, it will be no problem to integrate it in your own project files.
+
+The test and example folders contain also Jam-files for bjam / boost-build
+
+For gcc, the flag -Wno-long-long can be used (surpressing warnings originating from Boost)
+
+\section convenient_includes Convenient includes
+
+This section concentrates on how to include GGL.
+
+The most convenient headerfile including all algorithms and strategies is geometry.hpp:
+- \#include <boost/geometry/geometry.hpp> It is recommended to include this file.
+Alternatively, it is possible to include GGL headerfiles separately. However, this is inconvenient as files might
+be renamed or moved occasionaly.
+
+
+An often used headerfile is geometries.hpp:
+- \#include <boost/geometry/geometries/geometries.hpp> This includes all default geometries: point, linestring,
+ polygon, linear_ring, box. It is not included in the "geometry.hpp" headerfile because
+ users are allowed to use their own geometries. However, for library users who want to use the provided
+ geometries it is most useful.
+
+
+For users using only Cartesian points, with floating point coordinates (double), in 2D or 3D, you can use instead:
+- \#include <boost/geometry/geometries/cartesian2d.hpp> This includes all 2D Cartesian geometries: point_2d, linestring_2d,
+ etc. Using this headerfile the library seems to be a non-template library, so it is convenient for users that
+ are not so into the template world.
+
+For users using multi-geometries:
+- \#include <boost/geometry/multi/multi.hpp>
+
+\section advanced_includes Advanced includes
+
+This section is for users who have their own geometries and want to use algorithms from the Boost.Geometry.
+
+
+If you want to use your own points it makes sense to use the registration macro's:
+- \#include <boost/geometry/geometries/register/point.hpp> macro's for point registration
+- \#include <boost/geometry/geometries/register/box.hpp> macro's for box registration
+
+
+
+
+\section extension_includes Extensions
+The GGL is currently (since 0.5) split into the kernel and several extensions. As this split is relatively new,
+there are not yet umbrella-include files, but most things below will do:
+
+If you want to use the \b geographic coordinate system:
+- the tag is already included in the kernel
+- \#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp> for Andoyer distance calculations
+- \#include <boost/geometry/extensions/gis/geographic/strategies/vincenty.hpp> for Vincenty distance calculations
+
+If you want to use the \b projections:
+- \#include <boost/geometry/extensions/gis/projections/parameters.hpp>
+- \#include <boost/geometry/extensions/gis/projections/projection.hpp>
+- \#include <boost/geometry/extensions/gis/projections/factory.hpp>
+
+If you want to use the \b circle (n-sphere)
+- \#include <boost/geometry/extensions/nsphere/...> <i>Several headerfiles, there is not yet a common include</i>
+
+
+
+\section performance Performance finetuning
+The enumeration below is not exhaustive but can contain hints to improve the performance
+- For Microsoft, set the define _SECURE_SCL=0
+- For Microsoft, set the define _HAS_ITERATOR_DEBUGGING=0
+- our measurements indicate that MSVC 2005 generates faster code than MSVC 2008
+- Using StlPort results in significant faster code than Microsoft's standard library
+- Of course turn on compiler optimizations, compile in release mode
+
+\section intellisense Intellisense issues
+Microsoft Visual Studio (Express) 2005 and 2008 can hang typing in a bracket or angle bracket.
+This is not directly related to GGL, but caused by heavy templated libraries such as Boost and GGL.
+If this is inconvenient, intellisense can easily be turned off:
+
+<i>(...) disabling Intellisense in VC++.
+There is a file called feacp.dll in &lt;VS8INSTALL&gt;/VC/vcpackages folder.
+Renaming this file will disable Intellisense feature.</i>
+
+Source: http://blogs.msdn.com/yash/archive/2007/09/19/intellisense-issues-in-visual-c-2005.aspx
+
+
+*/
+
+
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page performance Performance
+
+The performance has been tested for some algorithms, concluding that Boost.Geometry is highly comparative
+(http://trac.osgeo.org/ggl/wiki/Performance).
+
+\section performance-notes Performance notes
+In the page about compiling the library there are some hints provided which might improve the performance.
+
+Furthermore it is important to realize that if you're about to do calculations with two geometries, for
+example a point-in-polygon or an intersection, it is very useful to first calculate and store all bounding
+boxes (envelopes), and then before doing a point-in-polygon check if the point is in the bounding box. Checking if a
+point is within a box is of course much faster than visiting all vertices of a polygon.
+
+The storage of bounding boxes is, on purpose, not done within the library because it would break the possibility
+to use standard vectors of points for linestrings or rings. The library might get a traits system in the future
+where geometries might tell their boundaries to the algorithms, this however would be an optional system.
+*/
+
+
+
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page DSV DSV (Delimiter Separated Values)
+DSV is a text representation of a geometry, explained here: http://en.wikipedia.org/wiki/Delimiter-separated_values .
+DSV can represent a point, a linestring, a polygon, or multi versions of those.
+
+It is currently just a utility in the library, used in samples and tests, to get some textual output
+of a geometry.
+
+*/
+
+// BSG 24-12-2010: re-added to silence Doxygen warnings:
+/*!
+\page WKT WKT (Well-Known Text)
+WKT is a textual representation of a geometry, explained here: http://en.wikipedia.org/wiki/Well-known_text
+WKT can represent a point, a linestring, a polygon, or multi versions of those.
+
+It is currently just a utility in the library, used in samples and tests, to get some textual output
+of a geometry.
+
+*/
+
+//---------------------------------------------------------------------------------------------------
+
+
+/*!
+\page OGC OGC (Open Geospatial Consortium)
+OGC is the Open Geospatial Consortium, the standardization committee
+on Geospatial Interoperability and GIS (Geographical Information Systems).
+OGC geometries are used in many environments and databases.
+
+The Generic Geometry Library uses OGC conventions
+for algorithms and for geometry type names. Note that though OGC is concentrating on GIS,
+the conventions followed here are 'geometry only', the so-called 'simple features'
+(simple in the sense that polygons are not allowed to have self-intersections).
+
+OGC specifies a library based on inheritance, as opposed to this library, which is a generic template based library
+where data classes are separated from the algorithms.
+Therefore this library is not an OGC implementation in the strict sense.
+
+\section Classes
+OGC defines the following geometry classes,
+which are implemented as concepts (and as geometries) in the Generic Geometry Library:
+- \ref boost::geometry::model::point "point": a point. The point defined here is dimensionally agnostic.
+Library users does not have to use this point, they might also use their own points as long as it meets the concepts.
+- \ref boost::geometry::model::linestring "linestring": Sequence of point values with linear interpolation
+between points. Note that library users does not have to use this type. Algorithms works on iterators, so
+all algorithms also accept iterators on a vector (or other container) of points.
+- \ref boost::geometry::model::ring "linear_ring": Sequence of point values with linear interpolation
+between points, which is closed and not self-intersecting
+- \ref boost::geometry::model::polygon "polygon": Plane figure, consisting of an outer ring and zero or more
+inner rings. So basically a polygon which might have holes.
+<em>Note that this definition is different from several other polygon definitions and libraries,
+where polygons are not allowed to have holes. These polygons are comparable to the linear_ring above</em>
+
+And multi-geometries:
+- \ref boost::geometry::model::multi_point "multi_point": collection of points
+- \ref boost::geometry::model::multi_linestring "multi_linestring": collection of linestrings
+- \ref boost::geometry::model::multi_polygon "multi_polygon": collection of polygons
+
+The naming of these classes is used in:
+- WKT (Well-Known Text)
+- KML (Google Maps)
+- GML
+- many GIS/geometry libraries
+
+and in many databases:
+- Oracle Spatial
+- SQL Server 2008
+- PostGreSQL
+- MySQL
+- MonetDB
+
+Besides this the Generic Geometry Library provides the following additional classes:
+- \ref boost::geometry::model::box "box": Box, used for selections and for envelopes (bounding boxes)
+- \ref boost::geometry::model::segment "segment": Segment, helper class, used for e.g. intersections
+
+Finally geometry types can be added as extensions. This is e.g. done with an
+"n-sphere" meaning "circle" and "sphere". Circle is convenient for selections.
+
+
+\section Differences
+The Generic Geometry Library does not implement the OGC Simple Feature interface exactly and completely.
+There are many differences. Below the most important differences are listed.
+- In OGC all operations are class methods. The Generic Geometry Library is a template library and defines the algorithms
+as generic functions.
+- In OGC a point is defined by an x-coordinate value, a y-coordinate value and possibly a z-coordinate value
+and a measured value. In the Generic Geometry Library the basic point defines coordinates in a neutral way,
+so there is no x, no y.
+- In OGC all geometries have additional members, such as SRID (spatial reference system id) or isMeasured. These
+properties are not defined in the Generic Geometry Library. Library users can implement them, if necessary,
+in derived classes.
+- In OGC the envelope returns a geometry, in the Generic Geometry Library it returns a box
+- The OGC algorithm asText is named "wkt"
+- Union and intersection are currently named "X_inserter" to indicate that they
+ insert there produced geometries (if any) as an OutputIterator
+
+
+More information on OGC can be found on their website, http://www.opengeospatial.org
+and on Wikipedia http://en.wikipedia.org/wiki/Open_Geospatial_Consortium
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page status Status, previews and formal review
+
+\section introduction Introduction
+
+Boost.Geometry is accepted by Boost (http://permalink.gmane.org/gmane.comp.lib.boost.announce/246)
+after formal review (http://permalink.gmane.org/gmane.comp.lib.boost.announce/239)
+
+The first preview was a template 2D geometry library providing its own geometries and algorithms working on
+those geometries. Those geometries are still provided but not essential anymore.
+
+The second preview didn't asume points with .x() and .y() anymore. It provided strategies,
+operating on specific point types. So point_xy (cartesian points) were
+handled different from point_ll (latlong points). That is still the case (now using a coordinate system meta-function)
+
+The third preview introducted the point concept, library users could use their own points with the algorithms
+provided by the library.
+
+The fourth preview implemented concepts for all geometries. Besides that tag dispatching was
+introduced internally. All algorithms were made generic.
+
+The Formal Review continued with the design of the fourth preview, made it more consistent
+(apply everywhere, all implementation within struct's, structs used as building blocks for
+multi-implementations, etc). Things were made more conform Boost standards (template parameters,
+no tabs, etc).
+
+\section changes4 Changes since preview 3
+- there are now typedefs for the more common geometries, such as point_2d or ring_ll_deg
+- all geometries are optional, everything is working with concepts
+- the convex hull algorithm has been added and can be calculated for linestrings (ranges, point sequences), polygons
+- map projections (92 !) have been added, they are converted to C++ template classes from PROJ4
+- transformations have been added, to go from one coordinate system to another
+- conversions have been added, to go from one geometry type to another (e.g. BOX to POLYGON)
+- edit functionality have been added, to edit coordinate values or to add points
+- parsing of latitude longitude coordinate values have been added
+- the "selected" algorithm have been added
+- many examples have been added
+- many tests have been added
+
+\b Breaking \b changes
+Because the library was in preview, and it still is, there are some major changes which might influence library user's
+code. Although there are many changes internally, the changes for users should be relatively small:
+- all algorithms accepting linestrings are now modified to get the linestring itself. In the previous version
+ .begin(), end() had to be specified, This is not necessary anymore, because the Boost Range Library is used
+ internally, and tag dispatching is used to distinguish different geometries
+- the "grow" utility is now splitted into buffer (growing a box with a value was in fact a buffer) and a expand.
+- there was a generic "get" function with a const ref and a non const ref. This is splitted into "get" and "set"
+- there might be more changes, please contact if anything is unclear
+
+\section changes5 Changes since preview 4
+There are the following changes:
+- implementation of spatial set relations (intersection, union)
+- implementation of some spatial boolean relations (disjoint, equal, intersects, overlaps)
+- move of GIS-specific code to extension/gis
+- move of map projections to extensions/gis/projections
+- implementation of SVG in extensions/SVG
+- review of all code, conform Boost code guidelines, no tabs, template parameters, etc.
+- other small changes.
+
+\b Breaking \b changes
+- there is now distinction between functions using an output iterator, and functions
+ resulting in modifying geometries. Functions using an output iterator are called _inserter,
+ so convex_hull_inserter inserts points (the hull) into something.
+- many headerfiles are moved and/or renamed
+- strategies now define a method \b apply, in previous versions this was \b operator()
+ <i>this only influences your code if you've made strategies yourself</i>
+- ...
+
+
+\section changes6 Changes since formal review
+- namespace changes
+- intersection: fixed Access Violoation which could occur at wrongly oriented input
+- intersection: fixed omitting outer polygon if it was equal
+- intersection: performance improvement, non quadratic behaviour on monotonic sections
+- intersection: now supporting GMP and CLN number types
+ (there are still some comparisons causing implicit casts to double, which will be removed)
+- intersection: support of input consisting of pointer-types
+- small other changes (strategies transform and intersection do now have apply instead of operator() and relate)
+
+
+If people are interested in helping with the library, be it by coding, by testing, by commenting or otherwise, they
+are very welcome.
+
+\section history History
+Geodan started in 1995 with a Geographic Library, called geolib or also GGL (Geodan Geographic Library).
+Since then hundreds of projects have
+been done using this geolib, and the geolib have been extended to fit the needs of its users. Geolib
+can be used in different environments: in Windows applications, as a DLL (ggl32.dll), in
+Web Map Servers (SclMapServer), Web Feature Servers or more specific programs.
+
+In 2007-2009 the Geometry part has been revised and completely templatized.
+From 2008 Bruno Lalande, already a Boost contributor, joined and helped
+to make the library more generic and to define clear concepts.
+It was later now called Generic Geometry Library (GGL).
+From 2009 Mateusz Loskot, an active member of Geospatial Open Source communities,
+joined and helped with reviewing code, guidelines, WKB, iterators, and the Wiki and ticket system (http://trac.osgeo.org/ggl)
+
+The library is now called Boost.Geometry (formerly: Generic Geometry Library, abbreviated to GGL).
+Boost.Geometry is Open Source and is accepted by Boost libraries.
+
+
+*/
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page download Download Boost.Geometry
+
+The library can be downloaded from Boost SVN. There is anonymous SVN access.
+
+The command
+
+<tt>svn co https://svn.boost.org/svn/boost/sandbox/geometry geometry</tt>
+
+will download the library to your machine.
+
+The library can also be downloaded from Geodan SVN. <i>This will be moved to osgeo SVN</i>
+
+*/
+
+
+
+
+
+#endif // _DOXYGEN_PAGES_HPP
diff --git a/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_z_article09.hpp b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_z_article09.hpp
new file mode 100644
index 000000000..ba3924832
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/pages/doxygen_z_article09.hpp
@@ -0,0 +1,238 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+
+#ifndef _DOXYGEN_ARTICLE2009_HPP
+#define _DOXYGEN_ARTICLE2009_HPP
+
+
+//---------------------------------------------------------------------------------------------------
+
+/*!
+\page art09 A Generic Geometry Library (web-copy of article for BoostCon'09)
+
+
+Authors:
+- Barend Gehrels
+- Bruno Lalande
+
+This page is a web-version of the article <b>A Generic Geometry Library</b>, for BoostCon'09.
+
+<i>Note: this article is written December 2008, it is not updated (besides the namespace). There might be some things out of date. But most things are still as described here, be it that the Geographic stuff is moved to an extension.</i>
+
+\section art09_abstract Abstract
+The Generic Geometry Library (GGL) is a library for geometry and geography. It is based on templates and static polymorphism. It is agnostic in coordinate space, coordinate system, and dimensions. The library is non intrusive and uses concepts for geometries for its algorithms. Developers can either use the provided geometries or define or use their own geometry types and specializations. Essential algorithms such as distance calculations, area calculations, point in polygon calculations are available. A geometry library like described would be a valuable addition to the Boost Library Collection.
+
+\section art09_intro Introduction
+The Boost Library Collection currently still does not have any geometry library. In the past years several discussions and previews have been published on the Boost Mailing Lists. There is certainly interest for a library handling geometry within the Boost community; it would be valuable if geometry algorithms are available for the Boost users. Such algorithms are for instance: the distance between two points, the area of a polygon, or determining if a point is in a polygon.
+Geometry is used in many disciplines and there are many approaches possible. Depending on their interest programmers feel other needs. Developers creating games will need other geometries, other algorithms, other dimensions and coordinate representations than developers creating CAD, geographic applications, astronomic or control software for robotics. Besides that, programmers have their personal flavors.
+
+
+It is a major challenge to develop a consistent library containing every aspect of geometry, on which everyone agrees.
+This article describes one attempt of a geometry library. The Generic Geometry Library (GGL) developed and restyled in 2008 has been presented, at the time of writing, as a preview three times. With the feedback from the Boost community the library is enhanced and extended, it has been changed a lot and the library is better than it was before. It is still in preview phase and not yet reviewed nor accepted. There are other candidate libraries for geometry as well. This paper describes the characteristics and basic principles of the Generic Geometry Library.
+The Generic Geometry Library has been initiated by Geodan. Geodan is a company for Geographic Information Systems. Bruno Lalande, who has contributed to Boost libraries before, joined the team of developers.
+
+\section art09_concepts Geometry Concepts
+
+A geometry library should define geometry concepts and should implement algorithms working with those concepts. The library can then handle any geometry type modeled according to the concept.
+The task of selecting geometries and giving them proper names can already be a challenge and a subject for much discussion. The Wikipedia list of geometric shapes contains more than 30 different polygons, furthermore a dozen of triangles, rectangles, squares, kites, trapezoids, circles, ellipses, three dimensional shapes as polyhedrons, spheres. The list is probably never ending.
+The Generic Geometry Library is not attempting to create concepts for all these shapes. Instead, it models four concepts of basic geometries:
+- a point
+- a sequence of points (a linestring)
+- a point sequence which is closed (a (linear) ring)
+- a polygon (an outer ring which can optionally contain inner rings, also called donuts or holes)
+
+With those four concepts, all two dimensional shapes composed of straight line segments (triangles, rectangular and polygonal, etc.) can be built. How to handle curved geometries in two dimensions is not yet worked out. An equivalent system might be used where segments between three points are marked as curved.
+The Generic Geometry Library defines concepts and provides default implementations of these concepts. Besides these predefined types, other types can be handled as well. Any point type that defines the required properties, at compile-time, and thus satisfies the point concept requirements can be used.
+The linear ring and the linestring concepts follow Boost Range Library concepts. Ranges are used to iterate through sequences of points. Therefore algorithms as length or area also work on a std::vector of points. The names of these concepts and of the provided geometries are consistent with the naming system of the OGC, described below. The names are also used for tags related to the tag dispatching mechanism, which is used internally to distinguish geometry types.
+For convenience three other concepts are defined:
+- a box: to be able to select things, for spatial indexing, and to keep track of boundaries of geometries
+- an n-sphere: circle or sphere, to be able to select things
+- a segment: a part of line bounded by two points, to calculate e.g. distances and intersections
+
+Besides defining custom types, library users can make specializations of algorithms for their geometry types and in such way implement support for, for example, triangles. This will be worked out below.
+The Boost Concept Check Library (BCCL) is used internally to check if the developer's input follows the concepts expected by the library.
+
+
+
+\section art09_dim Dimensions
+The Generic Geometry Library is basically agnostic in its dimensions. A point is templatized by the number of dimensions, by coordinate type (integer, float, double, GMP), and by the coordinate system.
+Examples:
+- point<double, 2, cartesian>: a point in two dimensions
+- point<double, 3, cartesian>: a point in three dimensions
+- polygon< point<double, 2, spherical<radian> > >: a spherical polygon, measured in radians
+
+Although points of any dimensions can be created, most algorithms are currently not prepared to handle all possible dimensions. Most algorithms that are provided handle points in Cartesian, Geographic or Spherical coordinate systems.
+A template parameter defining how to handle calculations in algorithms using big number types might be added in the future.
+
+
+\section art09_cs Coordinate systems
+A generic library handling geometry should be neutral in its coordinate space. In geography, points can be specified using X and Y (and Z), but also using Latitude and Longitude (and Height). In other disciplines there might be need for other names, for example: red, green and blue (defining colors in a color cube), or right ascension and declination (in astronomy).
+The concepts of the Generic Geometry Library use therefore neutral names (get and set) for accessing and modifying coordinates. Example, setting a point to (3,2):
+\code
+boost::geometry::point<double, 2, cartesian> a;
+boost::geometry::set<0>(a, 3);
+boost::geometry::set<1>(a, 2);
+\endcode
+
+Or, alternatively:
+\code
+boost::geometry::assign(a, 3, 2);
+\endcode
+
+These calls are generic. Library users might also choose to use or define more context targeted methods as a.x() and a.y() for setting and getting coordinates, or non default constructors. This as long as they also provide the specializations needed to enable the library to play with points the way shown above.
+The Generic Geometry Library provides a generic transform algorithm which can transform geometries from one coordinate system to another.
+
+
+\section art09_types Types And Strategies
+
+Algorithms depend on coordinate system. Let's take, for example, the distance calculation between two points. For points in a Cartesian coordinate space the simple and well known Pythagorean theorem applies. For points in the geographic coordinate system (latitude longitude, also known as latlong, lola or ll) the distance can be calculated using the haversine formula (it is possible to select other formulas as well, which is described below).
+The Generic Geometry Library provides a tag dispatching system which selects strategies based on coordinate system. So distances and areas for spherical coordinates are internally calculated differently then distances and areas for Cartesian coordinates. This is, by default, not visible for the library user, it is an automatic tag dispatching system.
+The tag dispatching system is also used to distinguish geometry types internally. So the generic distance algorithm can get two points (in any coordinate system) as input, but also a point and a linestring, a point and a polygon, et cetera.
+
+Example showing different strategies for different coordinate systems:
+\code
+boost::geometry::point_xy<double> a(1,1), b(3,4);
+std::cout << boost::geometry::distance(a, b);
+
+typedef boost::geometry::point_ll<> LL;
+LL A, B;
+// initialize lat-long coordinates
+// e.g., Amsterdam and Barcelona
+// ...
+std::cout << boost::geometry::distance(A, B);
+\endcode
+This example uses two different point types. In the first part the Pythagorean theorem is used to calculate the distance between point a and point b. In the second part the distance along the sphere of earth is used (as the crow flies). Note that the non default constructor shown in the first line is not part of the concept; it is part of the implementation (so part of the example above).
+As described, distance is calculated using strategies for different coordinate systems. The distance algorithm selects automatically right specialization belonging to the geometry type, and then it selects the strategy belonging to the coordinate system. This strategy is then used for calculation.
+Algorithms in the Generic Geometry Library also have an overload where the strategy can be specified by the library user. This is useful for, for example, calculating distance along the earth (or along any sphere). There are several methods for that calculation, using internally either a fast or a precise algorithm. The library user can select such a strategy or can implement his or her own strategy. For example, to use the exact Vincenty geodetic calculation (provided by the library):
+\code
+std::cout << distance(A, B,
+ strategy::distance::vincenty<LL>())
+ << std::endl;
+\endcode
+Algorithms as simplification (removing non important points from point sequences such that shape is preserved) use, internally, distance calculations. The same mechanism is used there. Therefore simplification works for Cartesian polygons the same as for polygons with geographical coordinates. It is exactly the same implementation.
+
+
+\section art09_specializations Specializations
+Besides strategies, library users have also other options for customization. For example: the Generic Geometry Library itself does not support triangles. Instead it supports polygons (which might contain holes) and linear rings. However, if the library user wants to use triangles directly, he can implement his own type. Let's work this example out. A triangle can be represented by three coordinate pairs. The library user can make a triangle of his own points (in this case: custom_point), using e.g. a boost::array.
+\code
+struct triangle : public boost::array<custom_point, 3>
+{};
+\endcode
+The user then has to indicate that this geometry is handled as a linear ring. He therefore has to provide a specialization of the tag metafunction, defining a type for the tag dispatching mechanism. This should reside in the namespace ggl:
+\code
+namespace ggl
+{
+ template <>
+ struct tag<triangle>
+ {
+ typedef ring_tag type;
+ };
+}
+\endcode
+As soon as this is done, the library will automatically select the ring specializations for all triangle algorithms. Because the Generic Geometry Library handles a ring as being a range, the user does not have to provide anything more. The Boost Range library concepts are used internally for all iterations.
+So the area of the user's custom-points-triangle will be calculated correctly, using internally an iterator which walks through the point coordinates.
+But wait, for triangle that is not as efficient as possible! No problem, the developer can, if desired, implement a specialization for the area function:
+\code
+template<>
+double area<triangle>(const triangle& t)
+{
+ return 0.5 * (
+ (t[1].x() - t[0].x()) * (t[2].y() - t[0].y())
+ - (t[2].x() - t[0].x()) * (t[1].y() - t[0].y())
+ );
+}
+\endcode
+
+Now this specialization will be used to calculate the area of the developer's triangles, while for other algorithms (centroid, within, intersection, et cetera) the generic ring versions still being used.
+The Generic Geometry Library also provides a second way to specialize. Within the dispatch namespace, structs are available for all operations. They can be partially specialized such that, for example, a triangle templatized by point type will be handled correctly by the library.
+
+
+\section art09_conventions Names And Conventions
+
+All geometry types and algorithms are named following the specifications of the Open Geospatial Consortium (OGC). The naming system of the OGC is carefully thought-out and has been agreed upon by a broad community. Additional algorithms and geometry types are named as much as possible using the same conventions and systematics.
+OGC conventions, geometry types and spatial operations are widely used, a.o. in spatial databases, such as PostGreSQL, MySQL, Oracle, and SQL Server.
+The OGC defines the following algorithms:
+- Basic algorithms: dimension, envelope, as_text, as_binary, is_simple, is_empty
+- Query algorithms: equals, disjoint, intersects, touches, crosses, within, contains, overlaps, relate, locate_along, locate_between
+- Analysis algorithms: distance, buffer, convex_hull, intersection, union, difference, sym_difference
+- Geometry type dependant algorithms: area, length, centroid, point_on_surface
+
+All algorithms are planned to be implemented. Besides this there are some other algorithms provided or planned:
+- Simplify, densify, disperse, spline, triangulate
+- Coordinate system conversions: transform
+
+The last one, transform, transforms geometries from any coordinate system to any other coordinate system. For example from radian to degree, but also from spherical to a 3D X,Y,Z coordinate system, or calling a map projection.
+Textual representations of geometries (Well-Known Text or WKT) are also provided by the library, as well as the parsing of them.
+The OGC also defines geometry types containing a collection of geometries, which are planned to be supported:
+- multi_point
+- multi_linestring
+- multi_polygon
+
+The Generic Geometry Library is not OGC compliant in the strict sense. It sometimes deviates from the specifications to enable genericity. It uses Boost Range concepts for the linestring geometry type. The library user can therefore use any standard container or Range compatible type as a linestring (a sequence of points). And the output of intersections is, for example, modeled as an output iterator instead of a multi_polygon or a multi_linestring.
+
+
+\section art09_index Spatial Indexes
+In geometry or GIS, spatial indexes can be used to search geometries or to enhance or speed up determination of geometry relationships. In 2008, a student, within the framework of the Google Summer of Code, has worked out a first version of a spatial indexing library which uses the Generic Geometry Library. This will be worked out and extended in the future.
+The Priority R-Tree, an R-Tree having optimal performance for any query window, will be available for fast searches within a set of geometries.
+
+
+\section art09_proj Map Projections
+
+The Generic Geometry Library can be used as a generic library for Geographic Information Systems (GIS). It therefore contains map projections. Map projections are algorithms to map the spherical earth to a flat piece of paper. There are many ways to do this. The USGS has implemented over the years 92 projection algorithms, collected in an often used PROJ4 package, written in C. This package is recently fitted into the Generic Geometry Library by converting it to a set of C++ templates.
+The projection collection contains both static as dynamic polymorphism. It is possible to instantiate a projection declaring the wished projection itself, for example:
+\code
+typedef boost::geometry::point_ll<double, geographic<> > LL;
+typedef boost::geometry::point_xy<double> XY;
+projection::merc_ellipsoid<LL, XY> prj(
+ "+ellps=WGS84 +lon_0=11.6E");
+
+// Define Amsterdam / Barcelona
+LL amsterdam, barcelona;
+// Initialize A'dam / B'ona
+...
+XY ma, mb; // Declare points
+// and project (from latlong to XY)
+if (prj.forward(amsterdam, ma)
+ && prj.forward(barcelona, mb))
+{ ... }
+\endcode
+
+This will use static polymorphism. Note that the initialization string is conform PROJ4, but it is also possible to initialize projections with e.g. a std::map.
+Static polymorphism is also used if the already mentioned transform algorithm provided by the library is used, a generic algorithm for transforming or projecting geometries:
+
+\code
+// declare type UTM zone 30, Cartesian
+// using EPSG 2040
+typedef boost::geometry::point_xy<double, epsg<2040> > UTM;
+
+// Assign Amsterdam / Barcelona in UTM
+...
+
+// call generic transformation
+boost::geometry::transform (amsterdam, ma);
+boost::geometry::transform (barcelona, mb);
+\endcode
+
+EPSG has defined the accepted standard coding for map projections, worldwide, and an EPSG code can be used as a template parameter in the provided EPSG Cartesian coordinate system.
+Besides specific instantiation, any projection can also be instantiated using a factory:
+
+\code
+projection::factory<LL, XY> fac;
+boost::shared_ptr<projection::projection<LL, XY> > prj(fac.create_new(parameters));
+\endcode
+
+The projection instance can now be any projection, created by the factory according to its parameters (which should contain the name of the projection). The instantiated projection-base-class derived class contains virtual methods for forward and inverse projection, but is still also modeled using template parameters for its point types.
+
+
+\section art09_conclusions Conclusions
+The Generic Geometry Library as described and published in preview is an extensive generic template geometry library containing many algorithms. It can be used for simple algorithms such as distance calculation but it can also be used in larger contexts such as GIS or Web Mapping applications. It is an Open Source library following the Boost Software License. The Boost Community would profit from a geometry library as described in this article.
+
+
+*/
+
+#endif // _DOXYGEN_ARTICLE2009_HPP
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/boost.vsprops b/libs/geometry/doc/doxy/doxygen_input/sourcecode/boost.vsprops
new file mode 100644
index 000000000..68eaf1ffa
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/boost.vsprops
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(BOOST_ROOT)"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(BOOST_ROOT)\lib"
+ />
+ <UserMacro
+ Name="BOOST_ROOT"
+ Value="../../../../../.."
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_1.cpp b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_1.cpp
new file mode 100644
index 000000000..f0acc93a9
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_1.cpp
@@ -0,0 +1,469 @@
+OBSOLETE
+
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+//
+// Doxygen Examples, referred to from the sources
+
+#include <boost/tuple/tuple.hpp>
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's here so turn off warning
+#pragma warning( disable : 4244 )
+#endif // defined(_MSC_VER)
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+// All functions below are referred to in the documentation of Boost.Geometry
+// Don't rename them.
+void example_area_polygon()
+{
+ //[area_polygon
+ //` Calculate the area of a polygon
+ boost::geometry::polygon<boost::geometry::point_xy<double> > poly; /*< Declare >*/
+ boost::geometry::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly); /*< Fill, in this case with WKT >*/
+ double area = boost::geometry::area(poly); /*< Calculate area >*/
+ //]
+
+ //[area_polygon_spherical
+ //` Calculate the area of a *spherical* polygon
+ namespace bg = boost::geometry;
+ bg::polygon<bg::point<float, 2, bg::cs::spherical<bg::degree> > > sph_poly;
+ bg::read_wkt("POLYGON((0 0,0 45,45 0,0 0))", sph_poly);
+ double area = bg::area(sph_poly);
+ //]
+}
+
+void example_as_wkt_point()
+{
+ typedef boost::geometry::point_xy<double> P;
+ P p(5.12, 6.34);
+ // Points can be streamed like this:
+ std::cout << boost::geometry::dsv<P>(p) << std::endl;
+
+ // or like this:
+ std::cout << boost::geometry::dsv(p) << std::endl;
+
+ // or (with extension) like this:
+ std::cout << boost::geometry::wkt(p) << std::endl;
+}
+
+void example_as_wkt_vector()
+{
+ std::vector<boost::geometry::point_xy<int> > v;
+ boost::geometry::read_wkt<boost::geometry::point_xy<int> >("linestring(1 1,2 2,3 3,4 4)", std::back_inserter(v));
+
+ std::cout << boost::geometry::dsv(std::make_pair(v.begin(), v.end())) << std::endl;
+}
+
+
+void example_centroid_polygon()
+{
+ boost::geometry::polygon<boost::geometry::point_xy<double> > poly;
+ boost::geometry::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ // Center of polygon might have different type than points of polygon
+ boost::geometry::point_xy<float> center;
+ boost::geometry::centroid(poly, center);
+ std::cout << "Centroid: " << boost::geometry::dsv(center) << std::endl;
+}
+
+
+void example_distance_point_point()
+{
+ boost::geometry::point_xy<double> p1(1, 1);
+ boost::geometry::point_xy<double> p2(2, 3);
+ std::cout << "Distance p1-p2 is "
+ << boost::geometry::distance(p1, p2)
+ << " units" << std::endl;
+
+ /*
+ Extension, other coordinate system:
+ // Read 2 Dutch cities from WKT texts (in decimal degrees)
+ boost::geometry::point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > a, r;
+ boost::geometry::read_wkt("POINT(4.89222 52.3731)", a);
+ boost::geometry::read_wkt("POINT(4.47917 51.9308)", r);
+
+ std::cout << "Distance Amsterdam-Rotterdam is "
+ << boost::geometry::distance(a, r) / 1000.0
+ << " kilometers " << std::endl;
+ */
+}
+
+void example_distance_point_point_strategy()
+{
+ /*
+ Extension, other coordinate system:
+ typedef boost::geometry::point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
+ LL a, r;
+ boost::geometry::read_wkt("POINT(4.89222 52.3731)", a);
+ boost::geometry::read_wkt("POINT(4.47917 51.9308)", r);
+
+ std::cout << "Distance Amsterdam-Rotterdam is "
+ << boost::geometry::distance(a, r,
+ boost::geometry::strategy::distance::vincenty<LL>() )
+ / 1000.0
+ << " kilometers " << std::endl;
+ */
+}
+
+void example_from_wkt_point()
+{
+ boost::geometry::point_xy<int> point;
+ boost::geometry::read_wkt("Point(1 2)", point);
+ std::cout << point.x() << "," << point.y() << std::endl;
+}
+
+void example_from_wkt_output_iterator()
+{
+ std::vector<boost::geometry::point_xy<int> > v;
+ boost::geometry::read_wkt<boost::geometry::point_xy<int> >("linestring(1 1,2 2,3 3,4 4)", std::back_inserter(v));
+ std::cout << "vector has " << v.size() << " coordinates" << std::endl;
+}
+
+void example_from_wkt_linestring()
+{
+ boost::geometry::linestring<boost::geometry::point_xy<double> > line;
+ boost::geometry::read_wkt("linestring(1 1,2 2,3 3,4 4)", line);
+ std::cout << "linestring has " << line.size() << " coordinates" << std::endl;
+}
+
+void example_from_wkt_polygon()
+{
+ boost::geometry::polygon<boost::geometry::point_xy<double> > poly;
+ boost::geometry::read_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", poly);
+ std::cout << "Polygon has " << poly.outer().size() << " coordinates in outer ring" << std::endl;
+}
+
+void example_point_ll_convert()
+{
+ /*
+ Extension, other coordinate system:
+ boost::geometry::point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > deg(boost::geometry::latitude<>(33.0), boost::geometry::longitude<>(-118.0));
+ boost::geometry::point_ll<double, boost::geometry::cs::geographic<boost::geometry::radian> > rad;
+ boost::geometry::transform(deg, rad);
+
+ std::cout << "point in radians: " << rad << std::endl;
+ */
+}
+
+void example_clip_linestring1()
+{
+ typedef boost::geometry::point_xy<double> P;
+ boost::geometry::linestring<P> line;
+ boost::geometry::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+ boost::geometry::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
+ std::cout << "Clipped linestring(s) " << std::endl;
+
+ std::vector<boost::geometry::linestring<P> > intersection;
+ boost::geometry::intersection_inserter<boost::geometry::linestring<P> >(cb, line, std::back_inserter(intersection));
+}
+
+void example_clip_linestring2()
+{
+ typedef boost::geometry::point_xy<double> P;
+ std::vector<P> vector_in;
+ boost::geometry::read_wkt<P>("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)",
+ std::back_inserter(vector_in));
+
+ boost::geometry::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
+ typedef std::vector<std::vector<P> > VV;
+ VV vector_out;
+ boost::geometry::intersection_inserter<std::vector<P> >(cb, vector_in, std::back_inserter(vector_out));
+
+ std::cout << "Clipped vector(s) " << std::endl;
+ for (VV::const_iterator it = vector_out.begin(); it != vector_out.end(); it++)
+ {
+ std::copy(it->begin(), it->end(), std::ostream_iterator<P>(std::cout, " "));
+ std::cout << std::endl;
+ }
+}
+
+
+
+
+
+void example_intersection_polygon1()
+{
+ typedef boost::geometry::point_xy<double> P;
+ typedef std::vector<boost::geometry::polygon<P> > PV;
+
+ boost::geometry::box<P> cb(P(1.5, 1.5), P(4.5, 2.5));
+ boost::geometry::polygon<P> poly;
+ boost::geometry::read_wkt("POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ ",(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))", poly);
+
+ PV v;
+ boost::geometry::intersection_inserter<boost::geometry::polygon<P> >(cb, poly, std::back_inserter(v));
+
+ std::cout << "Clipped polygon(s) " << std::endl;
+ for (PV::const_iterator it = v.begin(); it != v.end(); it++)
+ {
+ std::cout << boost::geometry::dsv(*it) << std::endl;
+ }
+}
+
+void example_simplify_linestring1()
+{
+ //[simplify
+ //` Simplify a linestring
+ boost::geometry::linestring<boost::geometry::point_xy<double> > line, simplified;
+ boost::geometry::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+ boost::geometry::simplify(line, simplified, 0.5); /*< Simplify it, using distance of 0.5 units >*/
+ std::cout
+ << " original line: " << boost::geometry::dsv(line) << std::endl
+ << "simplified line: " << boost::geometry::dsv(simplified) << std::endl;
+ //]
+}
+
+void example_simplify_linestring2()
+{
+ //[simplify_inserter
+ //` Simplify a linestring using an output iterator
+ typedef boost::geometry::point_xy<double> P;
+ typedef boost::geometry::linestring<P> L;
+ L line;
+
+ boost::geometry::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+
+ typedef boost::geometry::strategy::distance::projected_point<P, P> DS;
+ typedef boost::geometry::strategy::simplify::douglas_peucker<P, DS> simplification;
+ boost::geometry::simplify_inserter(line, std::ostream_iterator<P>(std::cout, "\n"), 0.5, simplification());
+ //]
+}
+
+
+
+void example_within()
+{
+ boost::geometry::polygon<boost::geometry::point_xy<double> > poly;
+ boost::geometry::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ boost::geometry::point_xy<float> point(3, 3);
+ std::cout << "Point is "
+ << (boost::geometry::within(point, poly) ? "IN" : "NOT in")
+ << " polygon"
+ << std::endl;
+}
+
+/*
+void example_within_strategy()
+{
+ // TO BE UPDATED/FINISHED
+ typedef boost::geometry::point_xy<double> P;
+ typedef boost::geometry::polygon<P> POLY;
+ P p;
+ std::cout << within(p, poly, strategy::within::cross_count<P>) << std::endl;
+}
+*/
+
+void example_length_linestring()
+{
+ using namespace boost::geometry;
+ linestring<point_xy<double> > line;
+ read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ std::cout << "linestring length is "
+ << length(line)
+ << " units" << std::endl;
+
+ /*
+ Extension, other coordinate system:
+ // Linestring in latlong, filled with
+ // explicit degree-minute-second values
+ typedef point_ll<float, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
+ linestring<LL> line_ll;
+ line_ll.push_back(LL(
+ latitude<float>(dms<north, float>(52, 22, 23)),
+ longitude<float>(dms<east, float>(4, 53, 32))));
+ line_ll.push_back(LL(
+ latitude<float>(dms<north, float>(51, 55, 51)),
+ longitude<float>(dms<east, float>(4, 28, 45))));
+ line_ll.push_back(LL(
+ latitude<float>(dms<north, float>(52, 4, 48)),
+ longitude<float>(dms<east, float>(4, 18, 0))));
+ std::cout << "linestring length is "
+ << length(line_ll) / 1000
+ << " kilometers " << std::endl;
+ */
+}
+
+void example_length_linestring_iterators1()
+{
+ boost::geometry::linestring<boost::geometry::point_xy<double> > line;
+ boost::geometry::read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ std::cout << "linestring length is "
+ << boost::geometry::length(line)
+ << " units" << std::endl;
+}
+
+void example_length_linestring_iterators2()
+{
+ std::vector<boost::geometry::point_xy<double> > line;
+ boost::geometry::read_wkt<boost::geometry::point_xy<double> >("linestring(0 0,1 1,4 8,3 2)", std::back_inserter(line));
+ std::cout << "linestring length is "
+ << boost::geometry::length(line)
+ << " units" << std::endl;
+}
+
+void example_length_linestring_iterators3()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace boost::geometry;
+ typedef point_ll<float, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
+ std::deque<LL> line;
+ boost::geometry::read_wkt<LL>("linestring(0 51,1 51,2 52)", std::back_inserter(line));
+ std::cout << "linestring length is "
+ << 0.001 * boost::geometry::length(line, boost::geometry::strategy::distance::vincenty<LL>())
+ << " kilometers" << std::endl;
+ */
+}
+
+
+void example_length_linestring_strategy()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace boost::geometry;
+ typedef point_ll<float, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
+ linestring<LL> line_ll;
+ line_ll.push_back(LL(latitude<float>(dms<north, float>(52, 22, 23)), longitude<float>(dms<east, float>(4, 53, 32))));
+ line_ll.push_back(LL(latitude<float>(dms<north, float>(51, 55, 51)), longitude<float>(dms<east, float>(4, 28, 45))));
+ line_ll.push_back(LL(latitude<float>(dms<north, float>(52, 4, 48)), longitude<float>(dms<east, float>(4, 18, 0))));
+ std::cout << "linestring length is "
+ << length(line_ll, strategy::distance::vincenty<LL, LL>() )/(1000)
+ << " kilometers " << std::endl;
+ */
+}
+
+
+void example_envelope_linestring()
+{
+ boost::geometry::linestring<boost::geometry::point_xy<double> > line;
+ boost::geometry::read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ boost::geometry::box<boost::geometry::point_xy<double> > box;
+ boost::geometry::envelope(line, box);
+
+ std::cout << "envelope is " << boost::geometry::dsv(box) << std::endl;
+}
+
+void example_envelope_polygon()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace boost::geometry;
+ typedef point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > LL;
+
+ // Wrangel island, 180 meridian crossing island above Siberia.
+ polygon<LL> wrangel;
+ wrangel.outer().push_back(LL(latitude<>(dms<north>(70, 47, 7)), longitude<>(dms<west>(178, 47, 9))));
+ wrangel.outer().push_back(LL(latitude<>(dms<north>(71, 14, 0)), longitude<>(dms<east>(177, 28, 33))));
+ wrangel.outer().push_back(LL(latitude<>(dms<north>(71, 34, 24)), longitude<>(dms<east>(179, 44, 37))));
+ // Close it
+ wrangel.outer().push_back(wrangel.outer().front());
+
+ boost::geometry::box<LL> box;
+ boost::geometry::envelope(wrangel, box);
+
+ dms<cd_lat> minlat(box.min_corner().lat());
+ dms<cd_lon> minlon(box.min_corner().lon());
+
+ dms<cd_lat> maxlat(box.max_corner().lat());
+ dms<cd_lon> maxlon(box.max_corner().lon());
+
+ std::cout << wrangel << std::endl;
+ std::cout << "min: " << minlat.get_dms() << " , " << minlon.get_dms() << std::endl;
+ std::cout << "max: " << maxlat.get_dms() << " , " << maxlon.get_dms() << std::endl;
+ */
+}
+
+
+void example_dms()
+{
+ /*
+ Extension, other coordinate system:
+ // Construction with degree/minute/seconds
+ boost::geometry::dms<boost::geometry::east> d1(4, 53, 32.5);
+
+ // Explicit conversion to double.
+ std::cout << d1.as_value() << std::endl;
+
+ // Conversion to string, with optional strings
+ std::cout << d1.get_dms(" deg ", " min ", " sec") << std::endl;
+
+ // Combination with latitude/longitude and cardinal directions
+ {
+ using namespace boost::geometry;
+ point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > canberra(
+ latitude<>(dms<south>(35, 18, 27)),
+ longitude<>(dms<east>(149, 7, 27.9)));
+ std::cout << canberra << std::endl;
+ }
+ */
+}
+
+void example_point_ll_construct()
+{
+ /*
+ Extension, other coordinate system:
+ using namespace boost::geometry;
+ typedef point_ll<double, boost::geometry::cs::geographic<boost::geometry::degree> > ll;
+
+ // Constructions in both orders possible
+ ll juneau(
+ latitude<>(dms<north>(58, 21, 5)),
+ longitude<>(dms<west>(134, 30, 42)));
+ ll wladiwostok(
+ longitude<>(dms<east>(131, 54)),
+ latitude<>(dms<north>(43, 8))
+ );
+ */
+}
+
+int main(void)
+{
+ example_area_polygon();
+
+ example_centroid_polygon();
+
+ example_distance_point_point();
+ example_distance_point_point_strategy();
+
+ example_from_wkt_point();
+ example_from_wkt_output_iterator();
+ example_from_wkt_linestring();
+ example_from_wkt_polygon();
+
+ example_as_wkt_point();
+
+ example_clip_linestring1();
+ example_clip_linestring2();
+ example_intersection_polygon1();
+
+ example_simplify_linestring1();
+ example_simplify_linestring2();
+
+ example_length_linestring();
+ example_length_linestring_iterators1();
+ example_length_linestring_iterators2();
+ example_length_linestring_iterators3();
+ example_length_linestring_strategy();
+
+ example_envelope_linestring();
+ example_envelope_polygon();
+
+ example_within();
+
+ example_point_ll_convert();
+ example_point_ll_construct();
+ example_dms();
+
+ return 0;
+}
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_1.vcproj b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_1.vcproj
new file mode 100644
index 000000000..72b68d7b6
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_1.vcproj
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_1"
+ ProjectGUID="{861F130D-2849-4B50-B240-049DBD9D3F18}"
+ RootNamespace="doxygen_1"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_1"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="cd ../doc&#x0D;&#x0A;doxygen&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_1"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="cd ../doc&#x0D;&#x0A;doxygen&#x0D;&#x0A;"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Doxygen Files"
+ >
+ <File
+ RelativePath="../pages/doxygen_mainpage.hpp"
+ >
+ </File>
+ <File
+ RelativePath="../pages/doxygen_pages.hpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\doxygen_1.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_2.cpp b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_2.cpp
new file mode 100644
index 000000000..9d74d6c62
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_2.cpp
@@ -0,0 +1,155 @@
+OBSOLETE
+
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+//
+// Doxygen Examples, for main page
+
+#include <boost/tuple/tuple.hpp>
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's here so turn off warning
+//#pragma warning( disable : 4244 )
+#endif // defined(_MSC_VER)
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/algorithms/overlaps.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+
+
+// Small QRect simulations following http://doc.trolltech.com/4.4/qrect.html
+// Todo: once work the traits out further, would be nice if there is a real example of this.
+// However for the example it makes no difference, it will work any way.
+struct QPoint
+{
+ int x, y;
+ // In Qt these are methods but for example below it makes no difference
+};
+
+struct QRect
+{
+ int x, y, width, height;
+ QRect(int _x, int _y, int w, int h)
+ : x(_x), y(_y), width(w), height(h)
+ {}
+ // In Qt these are methods but that will work as well, requires changing traits below
+};
+
+
+// Would be get/set with x(),y(),setX(),setY()
+BOOST_GEOMETRY_REGISTER_POINT_2D(QPoint, int, cs::cartesian, x, y)
+
+
+// Register the QT rectangle. The macro(s) does not offer (yet) enough flexibility to do this in one line,
+// but the traits classes do their job perfectly.
+namespace boost { namespace geometry { namespace traits
+{
+
+template <> struct tag<QRect> { typedef box_tag type; };
+template <> struct point_type<QRect> { typedef QPoint type; };
+
+template <size_t C, size_t D>
+struct indexed_access<QRect, C, D>
+{
+ static inline int get(const QRect& qr)
+ {
+ // Would be: x(), y(), width(), height()
+ return C == min_corner && D == 0 ? qr.x
+ : C == min_corner && D == 1 ? qr.y
+ : C == max_corner && D == 0 ? qr.x + qr.width
+ : C == max_corner && D == 1 ? qr.y + qr.height
+ : 0;
+ }
+
+ static inline void set(QRect& qr, const int& value)
+ {
+ // Would be: setX, setY, setWidth, setHeight
+ if (C == min_corner && D == 0) qr.x = value;
+ else if (C == min_corner && D == 1) qr.y = value;
+ else if (C == max_corner && D == 0) qr.width = value - qr.x;
+ else if (C == max_corner && D == 1) qr.height = value - qr.y;
+ }
+};
+
+
+}}}
+
+
+void example_for_main_page()
+{
+ using namespace boost::geometry;
+
+ int a[2] = {1,1};
+ int b[2] = {2,3};
+ double d = distance(a, b);
+ std::cout << "Distance a-b is:" << d << std::endl;
+
+ ring_2d poly;
+ double points[][2] = {{2.0, 1.3}, {4.1, 3.0}, {5.3, 2.6}, {2.9, 0.7}, {2.0, 1.3}};
+ append(poly, points);
+ boost::tuple<double, double> p = boost::make_tuple(3.7, 2.0);
+ std::cout << "Point p is in polygon? " << (within(p, poly) ? "YES" : "NO") << std::endl;
+
+ std::cout << "Area: " << area(poly) << std::endl;
+
+ double d2 = distance(a, p);
+ std::cout << "Distance a-p is:" << d2 << std::endl;
+
+ /***
+ Now extension
+ point_ll_deg amsterdam, paris;
+ parse(amsterdam, "52 22 23 N", "4 53 32 E");
+ parse(paris, "48 52 0 N", "2 19 59 E");
+ std::cout << "Distance A'dam-Paris: " << distance(amsterdam, paris) / 1000.0 << " kilometers " << std::endl;
+ ***/
+
+ QRect r1(100, 200, 15, 15);
+ QRect r2(110, 210, 20, 20);
+ if (overlaps(r1, r2))
+ {
+ assign(r2, 200, 300, 220, 320);
+ }
+}
+
+
+void example_for_transform()
+{
+ using namespace boost::geometry;
+
+ typedef point<double, 3, cs::cartesian> XYZ;
+ typedef point<double, 3, cs::spherical<degree> > SPH;
+ XYZ p;
+
+ SPH sph1, sph2;
+ assign(sph1, 12.5, 41.90, 1.0);
+ // Go from spherical to Cartesian-3D:
+ transform(sph1, p);
+ // Go back from Cartesian 3D to spherical:
+ transform(p, sph2);
+
+ std::cout << dsv(p) << " <-> " << dsv(sph2) << std::endl;
+
+ typedef point_xy<double> XY;
+ typedef point_xy<int> PIXEL;
+ XY xy(50, 50);
+ strategy::transform::map_transformer<XY, PIXEL, false> map(0, 0, 100, 100, 1024, 768);
+ PIXEL pix;
+ transform(xy, pix, map);
+ std::cout << pix.x() << "," << pix.y() << std::endl;
+
+}
+
+
+int main(void)
+{
+ example_for_main_page();
+ example_for_transform();
+ return 0;
+}
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_2.vcproj b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_2.vcproj
new file mode 100644
index 000000000..78e45ef4e
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_2.vcproj
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_2"
+ ProjectGUID="{6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}"
+ RootNamespace="doxygen_2"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_2"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_2"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\doxygen_2.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_3.cpp b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_3.cpp
new file mode 100644
index 000000000..7aae59556
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_3.cpp
@@ -0,0 +1,74 @@
+OBSOLETE
+
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+//
+// Doxygen Examples, for e.g. email formal review
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry/geometry.hpp>
+
+
+
+void example_distance()
+{
+ int a[2] = {1,2};
+ int b[2] = {3,4};
+ double d = boost::geometry::distance(a, b);
+ std::cout << d << std::endl;
+}
+
+void example_length1()
+{
+ std::vector<boost::tuple<double, double, double> > line;
+ line.push_back(boost::make_tuple(1, 2, 3));
+ line.push_back(boost::make_tuple(4, 5, 6));
+ line.push_back(boost::make_tuple(7, 8, 9));
+ double length = boost::geometry::length(line);
+ std::cout << length << std::endl;
+}
+
+void example_length2()
+{
+ std::vector<boost::tuple<double, double> > line;
+ line.push_back(boost::make_tuple(1.1, 2.2));
+ line.push_back(boost::make_tuple(3.3, 4.4));
+ line.push_back(boost::make_tuple(5.5, 6.6));
+ std::cout << boost::geometry::length(
+ std::make_pair(boost::begin(line), boost::end(line) + -1)
+ )
+ << std::endl;
+}
+
+void example_less()
+{
+ typedef boost::tuple<double, double> P;
+ std::vector<P> line;
+ line.push_back(boost::make_tuple(8.1, 1.9));
+ line.push_back(boost::make_tuple(4.2, 7.5));
+ line.push_back(boost::make_tuple(2.3, 3.6));
+ std::sort(line.begin(), line.end(), boost::geometry::less<P>());
+
+ // Display ordered points
+ BOOST_FOREACH(P const& p, line)
+ {
+ std::cout << boost::geometry::dsv(p) << std::endl;
+ }
+}
+
+
+
+int main(void)
+{
+ example_distance();
+ example_length1();
+ example_length2();
+ example_less();
+ return 0;
+}
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_3.vcproj b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_3.vcproj
new file mode 100644
index 000000000..0a326ba5e
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_3.vcproj
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_3"
+ ProjectGUID="{45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}"
+ RootNamespace="doxygen_3"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_3"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_3"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\doxygen_3.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.cpp b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.cpp
new file mode 100644
index 000000000..b6fdecb73
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.cpp
@@ -0,0 +1,329 @@
+OBSOLETE
+
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+//
+// Doxygen Examples, for documentation images
+
+#include <fstream>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/multi/multi.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/io/svg/write_svg_multi.hpp>
+
+#include <boost/geometry/io/svg/svg_mapper.hpp>
+
+
+static const int wkt_countries_count = 1;
+std::string wkt_countries[wkt_countries_count] = {
+ "MULTIPOLYGON(((3.369472 51.37461,3.31712 51.33633,3.338228 51.27769,3.476597 51.23314,3.474252 51.2988,3.553989 51.3246,3.720502 51.27535,3.753336 51.2261,3.887015 51.21203,3.983169 51.25659,4.123883 51.28942,4.222384 51.33163,4.311502 51.38792,4.442835 51.35274,4.38655 51.46297,4.541337 51.4747,4.517883 51.40903,4.67267 51.42075,4.759444 51.48642,4.848564 51.48642,4.771171 51.3973,4.968171 51.3973,5.022111 51.48642,5.099504 51.44186,5.06667 51.36447,5.132337 51.26597,5.20973 51.33163,5.219111 51.22141,5.448946 51.26597,5.514612 51.31991,5.592005 51.27769,5.570898 51.21203,5.711612 51.18858,5.800732 51.16747,5.878123 51.13464,5.800732 51.05724,5.767898 50.93763,5.645946 50.86024,5.678778 50.76174,5.821838 50.76174,6.025336 50.75425,6.403867 50.32674,6.13802 50.1329,5.73455 49.89968,5.816617 49.54663,5.477649 49.49361,4.856486 49.79186,4.877701 50.15532,4.148557 49.97853,4.206795 50.27324,3.694881 50.31094,3.139944 50.79072,2.795442 50.72651,2.546947 51.09281,3.369472 51.37461)))"
+ //"MULTIPOLYGON(((4.222384 51.33163,4.201276 51.38792,4.13561 51.36447,4.025384 51.40903,4.016003 51.48642,4.091051 51.43013,4.213003 51.42075,4.288051 51.46297,4.234109 51.4958,4.048835 51.52864,3.971442 51.58492,4.058217 51.58492,4.156717 51.58492,4.156717 51.65059,4.255217 51.61776,4.344337 51.63886,4.419384 51.6717,4.574171 51.68342,4.705504 51.70453,4.81573 51.72564,4.750063 51.73736,4.541337 51.71626,4.353717 51.72564,4.255217 51.75847,4.069943 51.83586,3.99255 51.95547,4.180169 52.04459,4.365444 52.18765,4.550717 52.45031,4.67267 52.71298,4.738337 52.94281,4.804003 52.94281,4.881396 52.86542,4.968171 52.89826,5.054944 52.90998,5.111231 52.84431,5.111231 52.77161,5.162826 52.73643,5.228492 52.74582,5.287123 52.74112,5.287123 52.69188,5.233183 52.64497,5.125301 52.61683,5.071361 52.64262,5.015075 52.61214,5.080742 52.49018,5.01742 52.44328,5.080742 52.42921,4.956444 52.35885,5.031492 52.33071,5.120612 52.31898,5.183933 52.30257,5.244909 52.30491,5.341063 52.26739,5.399694 52.23924,5.523993 52.25566,5.566207 52.3096,5.676433 52.36354,5.793696 52.41279,5.861708 52.47611,5.859363 52.53709,5.796041 52.57227,5.849981 52.59806,5.645946 52.60979,5.58966 52.64262,5.592005 52.75989,5.6436 52.80914,5.716303 52.8279,5.645946 52.84431,5.561516 52.82555,5.484123 52.84197,5.413766 52.83025,5.348099 52.87715,5.404385 52.89826,5.40673 52.9991,5.383279 53.07415,5.448946 53.21721,5.580279 53.30398,5.845291 53.36965,5.976624 53.38138,6.140792 53.39076,6.183005 53.32509,6.206459 53.39076,6.370625 53.40248,6.764627 53.47988,6.851399 53.40248,6.928792 53.33682,7.048399 53.28288,7.158627 53.25004,7.179733 53.17265,7.137519 53.12809,7.179733 52.98738,7.048399 52.87715,7.060126 52.62386,6.973351 52.63559,6.698958 52.64732,6.720066 52.56992,6.675507 52.52536,6.7529 52.47142,6.872507 52.42686,6.994459 52.48315,7.060126 52.38465,7.015567 52.29553,7.060126 52.25331,6.884233 52.13136,6.731792 52.09853,6.687233 52.02114,6.80684 52.01176,6.851399 51.94609,6.797459 51.90153,6.666125 51.90153,6.424565 51.83586,6.281507 51.85697,6.140792 51.90153,6.150171 51.83586,5.953171 51.83586,5.953171 51.74909,6.018838 51.70453,6.117339 51.6928,6.107958 51.61776,6.227565 51.51925,6.239291 51.42075,6.194732 51.34336,6.084505 51.25424,6.096231 51.1792,6.173625 51.21203,6.194732 51.14636,5.986005 51.03613,5.943792 51.08069,5.878123 51.03613,5.899231 50.97047,6.030564 50.97047,6.030564 50.9048,6.107958 50.9048,6.096231 50.83913,6.030564 50.82741,6.025336 50.75425,5.821838 50.76174,5.678778 50.76174,5.645946 50.86024,5.767898 50.93763,5.800732 51.05724,5.878123 51.13464,5.800732 51.16747,5.711612 51.18858,5.570898 51.21203,5.592005 51.27769,5.514612 51.31991,5.448946 51.26597,5.219111 51.22141,5.20973 51.33163,5.132337 51.26597,5.06667 51.36447,5.099504 51.44186,5.022111 51.48642,4.968171 51.3973,4.771171 51.3973,4.848564 51.48642,4.759444 51.48642,4.67267 51.42075,4.517883 51.40903,4.541337 51.4747,4.38655 51.46297,4.442835 51.35274,4.311502 51.38792,4.222384 51.33163)),((5.455981 52.55116,5.514612 52.5582,5.573243 52.59103,5.634219 52.59103,5.73272 52.57462,5.791351 52.56758,5.854672 52.52771,5.8406 52.46908,5.756171 52.41279,5.674088 52.39403,5.573243 52.37058,5.540409 52.31664,5.507576 52.26504,5.397349 52.25097,5.294159 52.30725,5.198003 52.33305,5.134682 52.32836,5.153444 52.39403,5.411421 52.49488,5.455981 52.55116)),((4.222384 51.33163,4.123883 51.28942,3.983169 51.25659,3.887015 51.21203,3.753336 51.2261,3.720502 51.27535,3.553989 51.3246,3.474252 51.2988,3.476597 51.23314,3.338228 51.27769,3.31712 51.33633,3.369472 51.37461,3.467216 51.41137,3.600895 51.37854,3.718157 51.34336,3.840109 51.34805,3.924538 51.36447,3.952681 51.41607,4.011312 51.39496,4.072289 51.35509,4.128574 51.32225,4.222384 51.33163)),((3.40155 51.54036,3.500049 51.58258,3.56337 51.59665,3.619656 51.57554,3.659526 51.5216,3.720502 51.51456,3.781478 51.54036,3.887015 51.54271,3.971442 51.52864,4.016003 51.50753,3.999586 51.43717,3.9433 51.46062,3.879979 51.44186,3.854181 51.38792,3.753336 51.39027,3.65249 51.46062,3.556334 51.44421,3.483632 51.48173,3.429692 51.51456,3.40155 51.54036)),((3.973788 51.84524,4.037109 51.81241,4.123883 51.7913,4.196586 51.76081,4.269289 51.71391,4.360754 51.69515,4.313848 51.65293,4.248181 51.65293,4.177824 51.67873,4.119193 51.69984,4.044145 51.71391,4.023039 51.7913,3.933919 51.80537,3.870598 51.77958,3.847145 51.83821,3.973788 51.84524)),((3.793204 51.74674,3.933919 51.73502,3.985514 51.68577,4.076979 51.667,4.116848 51.65293,4.023039 51.62714,3.931574 51.6201,3.865907 51.6459,3.826037 51.6928,3.76037 51.69984,3.692358 51.66935,3.647799 51.70922,3.713466 51.73502,3.793204 51.74674)),((4.806348 53.12574,4.879051 53.175,4.92361 53.13278,4.91423 53.0718,4.86967 53.0249,4.801658 52.99676,4.747718 52.97096,4.72192 53.0249,4.754754 53.0765,4.806348 53.12574)),((5.216766 53.39545,5.507576 53.4447,5.559171 53.43766,5.493505 53.41655,5.460672 53.39545,5.387969 53.3931,5.336373 53.37669,5.240219 53.36027,5.183933 53.33682,5.165171 53.36027,5.216766 53.39545)),((3.596204 51.60134,3.720502 51.60134,3.840109 51.61306,3.877634 51.55443,3.774442 51.56147,3.718157 51.52864,3.645454 51.56147,3.596204 51.60134)),((5.636564 53.46346,5.728029 53.44939,5.852327 53.46112,5.941446 53.45877,5.88985 53.44001,5.800732 53.43063,5.716303 53.43063,5.674088 53.41421,5.622492 53.42828,5.60373 53.45408,5.636564 53.46346)),((5.008039 53.28757,5.050254 53.30398,5.094813 53.31102,5.120612 53.28991,5.001003 53.2688,4.982243 53.24066,4.932992 53.20548,4.862634 53.19845,4.890778 53.22659,4.970516 53.2688,5.008039 53.28757)),((6.138446 53.49395,6.27447 53.50567,6.307303 53.49629,6.236946 53.46815,6.154862 53.46581,6.12672 53.44939,6.100922 53.46581,6.138446 53.49395)),((6.419876 53.54085,6.483197 53.51974,6.42691 53.51506,6.396423 53.53382,6.419876 53.54085)))",
+};
+
+static const int wkt_cities_count = 1;
+std::string wkt_cities[wkt_cities_count] = {
+ "MULTIPOINT(( -71.03 42.37), (-87.65 41.90), (-95.35 29.97), (-118.40 33.93), (-80.28 25.82), (-73.98 40.77), (-112.02 33.43), ( -77.04 38.85))"
+};
+
+
+
+// Read an ASCII file containing WKT's, fill a vector of tuples
+// The tuples consist of at least <0> a geometry and <1> an identifying string
+template <typename Geometry, typename Tuple, typename Box>
+void read_wkt(std::string const& filename, std::vector<Tuple>& tuples, Box& box)
+{
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ Geometry geometry;
+ boost::trim(line);
+ if (! line.empty() && ! boost::starts_with(line, "#"))
+ {
+ std::string name;
+
+ // Split at ';', if any
+ std::string::size_type pos = line.find(";");
+ if (pos != std::string::npos)
+ {
+ name = line.substr(pos + 1);
+ line.erase(pos);
+
+ boost::trim(line);
+ boost::trim(name);
+ }
+
+ Geometry geometry;
+ boost::geometry::read_wkt(line, geometry);
+
+ Tuple tuple(geometry, name);
+
+ tuples.push_back(tuple);
+ boost::geometry::expand(box, boost::geometry::return_envelope<Box>(geometry));
+ }
+ }
+ }
+}
+
+
+
+
+void svg_simplify_road()
+{
+ static const int n = 1;
+ std::string wkt[n] = {
+ "LINESTRING(-122.191 47.9758,-122.181 47.9958,-122.177 48.0022,-122.171 48.0081,-122.174 48.0402,-122.178 48.0718,-122.181 48.1036,-122.183 48.1361,-122.189 48.143,-122.206 48.205,-122.231 48.2515,-122.261 48.2977,-122.291 48.3592,-122.297 48.4234,-122.299 48.5183,-122.324 48.6237,-122.41 48.7339,-122.407 48.7538,-122.4 48.7749,-122.399 48.793,-122.423 48.8044,-122.45 48.8124,-122.481 48.8304,-122.517 48.8718,-122.521 48.8813,-122.523 48.901,-122.527 48.9105,-122.543 48.919,-122.551 48.9305,-122.561 48.9411,-122.585 48.9471,-122.612 48.9669,-122.638 48.9849,-122.661 49.0022)",
+ //"LINESTRING(-122.191 47.9758,-122.204 47.9372,-122.221 47.9019,-122.242 47.8674,-122.266 47.8312)",
+ //"LINESTRING(-122.176 47.5801,-122.182 47.5932,-122.185 47.6067,-122.187 47.6202,-122.187 47.6338,-122.187 47.6691,-122.182 47.7052,-122.181 47.7412,-122.192 47.776,-122.2 47.7864,-122.212 47.7945,-122.223 47.8027,-122.232 47.8132,-122.241 47.8168,-122.25 47.821,-122.259 47.8258,-122.266 47.8312)",
+ //"LINESTRING(-122.193 47.5075,-122.192 47.5108,-122.192 47.5147,-122.192 47.5184,-122.192 47.5224,-122.192 47.5265,-122.192 47.5307,-122.192 47.5327,-122.191 47.5348,-122.19 47.5395,-122.189 47.5443,-122.188 47.549,-122.187 47.5538,-122.185 47.5584,-122.183 47.5609,-122.182 47.563,-122.18 47.5667,-122.179 47.5676,-122.178 47.5711,-122.177 47.5726,-122.177 47.5742,-122.177 47.5762,-122.176 47.5781,-122.176 47.5801)"
+ };
+
+ typedef boost::geometry::point_xy<double> point_type;
+
+ std::ofstream svg("simplify_road.svg");
+ boost::geometry::svg_mapper<point_type> mapper(svg, 300, 300);
+
+ boost::geometry::linestring<point_type> original[n], simplified[n];
+
+ for (int i = 0; i < n; i++)
+ {
+ boost::geometry::read_wkt(wkt[i], original[i]);
+ boost::geometry::simplify(original[i], simplified[i], 0.03);
+ mapper.add(original[i]);
+ mapper.add(simplified[i]);
+ std::cout
+ << "original: " << boost::size(original[i])
+ << " simplified: " << boost::size(simplified[i])
+ << std::endl;
+ }
+
+
+ for (int i = 0; i < n; i++)
+ {
+ mapper.map(original[i], "opacity:0.8;stroke:rgb(0,0,255);stroke-width:3");
+ mapper.map(simplified[i], "opacity:0.8;stroke:rgb(0,255,0);stroke-width:2");
+ }
+
+}
+
+
+void svg_simplify_country()
+{
+
+ typedef boost::geometry::point_xy<double> point_type;
+
+ std::ofstream svg("simplify_country.svg");
+ boost::geometry::svg_mapper<point_type> mapper(svg, 300, 300);
+
+ boost::geometry::multi_polygon<boost::geometry::polygon<point_type> > original[wkt_countries_count]
+ , simplified[wkt_countries_count];
+
+ for (int i = 0; i < wkt_countries_count; i++)
+ {
+ boost::geometry::read_wkt(wkt_countries[i], original[i]);
+ boost::geometry::simplify(original[i], simplified[i], 0.1);
+ mapper.add(original[i]);
+ mapper.add(simplified[i]);
+ std::cout
+ << "original: " << boost::geometry::num_points(original[i])
+ << " simplified: " << boost::geometry::num_points(simplified[i])
+ << std::endl;
+ }
+
+
+ for (int i = 0; i < wkt_countries_count; i++)
+ {
+ mapper.map(original[i], "opacity:0.8;fill:none;stroke:rgb(0,0,255);stroke-width:3");
+ mapper.map(simplified[i], "opacity:0.8;fill:none;stroke:rgb(0,255,0);stroke-width:2");
+ }
+}
+
+void svg_convex_hull_country()
+{
+
+ typedef boost::geometry::point_xy<double> point_type;
+
+ std::ofstream svg("convex_hull_country.svg");
+ boost::geometry::svg_mapper<point_type> mapper(svg, 300, 300);
+
+ boost::geometry::multi_polygon<boost::geometry::polygon<point_type> > original[wkt_countries_count];
+ boost::geometry::linear_ring<point_type> hull[wkt_countries_count];
+
+ for (int i = 0; i < wkt_countries_count; i++)
+ {
+ boost::geometry::read_wkt(wkt_countries[i], original[i]);
+ boost::geometry::convex_hull_inserter(original[i], std::back_inserter(hull[i]));
+ mapper.add(original[i]);
+ mapper.add(hull[i]);
+ std::cout
+ << "original: " << boost::geometry::num_points(original[i])
+ << " hull: " << boost::geometry::num_points(hull[i])
+ << std::endl;
+ }
+
+
+ for (int i = 0; i < wkt_countries_count; i++)
+ {
+ mapper.map(original[i], "opacity:0.8;fill:rgb(255,255,0);stroke:rgb(0,0,0);stroke-width:3");
+ mapper.map(hull[i], "opacity:0.8;fill:none;stroke:rgb(255,0,0);stroke-width:3");
+ }
+
+}
+
+
+void svg_convex_hull_cities()
+{
+
+ typedef boost::geometry::point_xy<double> point_type;
+
+ std::ofstream svg("convex_hull_cities.svg");
+ boost::geometry::svg_mapper<point_type> mapper(svg, 300, 300);
+
+ boost::geometry::multi_point<point_type> original[wkt_cities_count];
+
+ boost::geometry::linear_ring<point_type> hull[wkt_cities_count];
+
+ for (int i = 0; i < wkt_cities_count; i++)
+ {
+ boost::geometry::read_wkt(wkt_cities[i], original[i]);
+ boost::geometry::convex_hull_inserter(original[i], std::back_inserter(hull[i]));
+ mapper.add(original[i]);
+ mapper.add(hull[i]);
+ std::cout
+ << "original: " << boost::geometry::num_points(original[i])
+ << " hull: " << boost::geometry::num_points(hull[i])
+ << std::endl;
+ }
+
+
+ for (int i = 0; i < wkt_cities_count; i++)
+ {
+ mapper.map(original[i], "fill:rgb(255,255,0);stroke:rgb(0,0,100);stroke-width:1", 3);
+ mapper.map(hull[i], "opacity:0.8;fill:none;stroke:rgb(255,0,0);stroke-width:3");
+ }
+}
+
+void svg_intersection_roads()
+{
+ // Read the road network
+ typedef boost::geometry::point_xy<double> point_type;
+ typedef boost::geometry::linestring<point_type> line_type;
+
+ typedef boost::tuple<line_type, std::string> road_type;
+
+ boost::geometry::box<point_type> bbox;
+ boost::geometry::assign_inverse(bbox);
+
+ std::vector<road_type> roads;
+ read_wkt<line_type>("../../../example/data/roads.wkt", roads, bbox);
+
+ // intersect
+ boost::geometry::box<point_type> clip;
+ std::vector<line_type> intersected;
+
+ boost::geometry::assign(clip, -100, 25, -90, 50);
+ for (size_t i = 0; i < roads.size(); i++)
+ {
+ boost::geometry::intersection_inserter<line_type>(clip, roads[i].get<0>(), std::back_inserter(intersected));
+ }
+
+ // create map
+ std::ofstream svg("intersection_roads.svg");
+ boost::geometry::svg_mapper<point_type> mapper(svg, 500, 500);
+
+ mapper.add(bbox);
+
+ for (size_t i = 0; i < roads.size(); i++)
+ {
+ mapper.map(roads[i].get<0>(), "stroke:rgb(0,0,255);stroke-width:3");
+ }
+
+ for (size_t i = 0; i < intersected.size(); i++)
+ {
+ mapper.map(intersected[i], "stroke:rgb(0,255,0);stroke-width:2");
+ }
+
+ for (size_t i = 0; i < intersected.size(); i++)
+ {
+ mapper.map(clip, "fill:none;stroke:rgb(128,128,128);stroke-width:2");
+ }
+}
+
+
+void svg_intersection_countries()
+{
+ // Read the road network
+ typedef boost::geometry::point_xy<double> point_type;
+ typedef boost::geometry::polygon<point_type> poly_type;
+ typedef boost::geometry::multi_polygon<poly_type> mp_type;
+
+ typedef boost::tuple<mp_type, std::string> country_type;
+
+ boost::geometry::box<point_type> bbox;
+ boost::geometry::assign_inverse(bbox);
+
+ std::vector<country_type> countries;
+ read_wkt<mp_type>("../../../example/data/world.wkt", countries, bbox);
+
+ // intersect
+ boost::geometry::box<point_type> clip;
+ std::vector<poly_type> intersected;
+
+ boost::geometry::assign(clip, -100, -50, 100, 50);
+ for (size_t i = 0; i < countries.size(); i++)
+ {
+ mp_type const& mp = countries[i].get<0>();
+ for (size_t j = 0; j < mp.size(); j++)
+ {
+ boost::geometry::intersection_inserter<poly_type>(clip, mp[j], std::back_inserter(intersected));
+ }
+ }
+
+ // create map
+ std::ofstream svg("intersection_countries.svg");
+ boost::geometry::svg_mapper<point_type> mapper(svg, 800, 800);
+
+ mapper.add(bbox);
+
+ for (size_t i = 0; i < countries.size(); i++)
+ {
+ mapper.map(countries[i].get<0>().front(), "fill:rgb(0,0,255);stroke-width:1");
+ }
+
+ for (size_t i = 0; i < intersected.size(); i++)
+ {
+ mapper.map(intersected[i], "fill:rgb(0,255,0);stroke-width:1");
+ }
+
+ for (size_t i = 0; i < intersected.size(); i++)
+ {
+ mapper.map(clip, "fill:none;stroke:rgb(128,128,128);stroke-width:2");
+ }
+}
+
+
+
+
+
+int main(void)
+{
+ svg_intersection_roads();
+ svg_intersection_countries();
+ svg_simplify_road();
+ svg_simplify_country();
+ svg_convex_hull_country();
+ svg_convex_hull_cities();
+ return 0;
+}
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.vcproj b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.vcproj
new file mode 100644
index 000000000..d65ca80c1
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_4.vcproj
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_4"
+ ProjectGUID="{CBEDAEC7-EC87-4F91-9C45-F9505A052A44}"
+ RootNamespace="doxygen_4"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_4"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../../../test"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_4"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../../../test"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\doxygen_4.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_5.cpp b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_5.cpp
new file mode 100644
index 000000000..942df9285
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_5.cpp
@@ -0,0 +1,138 @@
+OBSOLETE
+
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+//
+// Doxygen Examples, for Geometry Concepts
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+
+
+
+struct legacy_point1
+{
+ double x, y;
+};
+
+// adapt legacy_point1
+namespace boost { namespace geometry { namespace traits
+{
+ template <> struct tag<legacy_point1> { typedef point_tag type; };
+ template <> struct coordinate_type<legacy_point1> { typedef double type; };
+ template <> struct coordinate_system<legacy_point1> { typedef cs::cartesian type; };
+ template <> struct dimension<legacy_point1>: boost::mpl::int_<2> {};
+ template <> struct access<legacy_point1, 0>
+ {
+ static double get(legacy_point1 const& p) { return p.x; }
+ static void set(legacy_point1& p, double const& value) { p.x = value; }
+ };
+ template <> struct access<legacy_point1, 1>
+ {
+ static double get(legacy_point1 const& p) { return p.y; }
+ static void set(legacy_point1& p, double const& value) { p.y = value; }
+ };
+}}} // namespace boost::geometry::traits
+// end adaptation
+
+namespace example_legacy_point1
+{
+ // The first way to check a concept at compile time: checking if the input is parameter
+ // or return type is OK.
+ template <typename P>
+ BOOST_CONCEPT_REQUIRES(((boost::geometry::concept::Point<P>)), (void))
+ test1(P& p)
+ {
+ }
+
+ // The second way to check a concept at compile time: checking if the provided type,
+ // inside the function, if OK
+ template <typename P>
+ void test2(P& p)
+ {
+ BOOST_CONCEPT_ASSERT((boost::geometry::concept::Point<P>));
+ }
+
+
+ void example()
+ {
+ legacy_point1 p;
+ test1(p);
+ test2(p);
+ }
+}
+
+// leave comment below for (strange behaviour of) doxygen
+class legacy_point2
+{
+public :
+ double x() const;
+ double y() const;
+};
+
+// adapt legacy_point2
+BOOST_GEOMETRY_REGISTER_POINT_2D_CONST(legacy_point2, double, boost::geometry::cs::cartesian, x(), y() )
+// end adaptation
+
+
+double legacy_point2::x() const { return 0; }
+double legacy_point2::y() const { return 0; }
+
+namespace example_legacy_point2
+{
+ // test it using boost concept requires
+
+ template <typename P>
+ BOOST_CONCEPT_REQUIRES(((boost::geometry::concept::ConstPoint<P>)), (double))
+ test3(P& p)
+ {
+ return boost::geometry::get<0>(p);
+ }
+
+ void example()
+ {
+ legacy_point2 p;
+ test3(p);
+ }
+}
+
+
+template <typename P>
+struct custom_linestring1 : std::deque<P>
+{
+ int id;
+};
+
+// adapt custom_linestring1
+namespace boost { namespace geometry { namespace traits
+{
+ template <typename P>
+ struct tag< custom_linestring1<P> > { typedef linestring_tag type; };
+}}} // namespace boost::geometry::traits
+// end adaptation
+
+namespace example_custom_linestring1
+{
+ void example()
+ {
+ typedef custom_linestring1<legacy_point1> L;
+ BOOST_CONCEPT_ASSERT((boost::geometry::concept::Linestring<L>));
+
+ }
+}
+
+int main(void)
+{
+ example_legacy_point1::example();
+ example_legacy_point2::example();
+ example_custom_linestring1::example();
+
+ return 0;
+}
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_5.vcproj b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_5.vcproj
new file mode 100644
index 000000000..23505e8c9
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_5.vcproj
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_5"
+ ProjectGUID="{0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}"
+ RootNamespace="doxygen_5"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_5"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../../../test"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\doxygen_5"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../../../test"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib $(NoInherit)"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\doxygen_5.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_examples.sln b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_examples.sln
new file mode 100644
index 000000000..d7fd0b326
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_input/sourcecode/doxygen_examples.sln
@@ -0,0 +1,43 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_1", "doxygen_1.vcproj", "{861F130D-2849-4B50-B240-049DBD9D3F18}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_2", "doxygen_2.vcproj", "{6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_3", "doxygen_3.vcproj", "{45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_4", "doxygen_4.vcproj", "{CBEDAEC7-EC87-4F91-9C45-F9505A052A44}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_5", "doxygen_5.vcproj", "{0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {861F130D-2849-4B50-B240-049DBD9D3F18}.Debug|Win32.ActiveCfg = Debug|Win32
+ {861F130D-2849-4B50-B240-049DBD9D3F18}.Debug|Win32.Build.0 = Debug|Win32
+ {861F130D-2849-4B50-B240-049DBD9D3F18}.Release|Win32.ActiveCfg = Release|Win32
+ {861F130D-2849-4B50-B240-049DBD9D3F18}.Release|Win32.Build.0 = Release|Win32
+ {6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}.Debug|Win32.Build.0 = Debug|Win32
+ {6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}.Release|Win32.ActiveCfg = Release|Win32
+ {6CF6A521-57E0-4DA4-9D17-ED5D29E4208C}.Release|Win32.Build.0 = Release|Win32
+ {45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}.Debug|Win32.Build.0 = Debug|Win32
+ {45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}.Release|Win32.ActiveCfg = Release|Win32
+ {45D4139F-BC5B-4D48-BAB8-9901C53ECCC9}.Release|Win32.Build.0 = Release|Win32
+ {CBEDAEC7-EC87-4F91-9C45-F9505A052A44}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CBEDAEC7-EC87-4F91-9C45-F9505A052A44}.Debug|Win32.Build.0 = Debug|Win32
+ {CBEDAEC7-EC87-4F91-9C45-F9505A052A44}.Release|Win32.ActiveCfg = Release|Win32
+ {CBEDAEC7-EC87-4F91-9C45-F9505A052A44}.Release|Win32.Build.0 = Release|Win32
+ {0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}.Debug|Win32.Build.0 = Debug|Win32
+ {0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}.Release|Win32.ActiveCfg = Release|Win32
+ {0CDE9E15-C937-4D05-B9BF-A2D96B8EAD33}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/07_graph_route_example_svg.png b/libs/geometry/doc/doxy/doxygen_output/html/07_graph_route_example_svg.png
new file mode 100644
index 000000000..3bf38fa46
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/07_graph_route_example_svg.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/07_graph_route_example_text.png b/libs/geometry/doc/doxy/doxygen_output/html/07_graph_route_example_text.png
new file mode 100644
index 000000000..b51e9268d
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/07_graph_route_example_text.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/centroid_polygon.png b/libs/geometry/doc/doxy/doxygen_output/html/centroid_polygon.png
new file mode 100644
index 000000000..a6426e8f7
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/centroid_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/centroid_ring.png b/libs/geometry/doc/doxy/doxygen_output/html/centroid_ring.png
new file mode 100644
index 000000000..d2d014813
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/centroid_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/clip_linestring.png b/libs/geometry/doc/doxy/doxygen_output/html/clip_linestring.png
new file mode 100644
index 000000000..f02d19ed0
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/clip_linestring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/clip_polygon.png b/libs/geometry/doc/doxy/doxygen_output/html/clip_polygon.png
new file mode 100644
index 000000000..e94792e74
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/clip_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/combine_box_box.png b/libs/geometry/doc/doxy/doxygen_output/html/combine_box_box.png
new file mode 100644
index 000000000..807c39504
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/combine_box_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/combine_box_point.png b/libs/geometry/doc/doxy/doxygen_output/html/combine_box_point.png
new file mode 100644
index 000000000..17b22aa80
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/combine_box_point.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/doxygen.css b/libs/geometry/doc/doxy/doxygen_output/html/doxygen.css
new file mode 100644
index 000000000..4f78a1bf0
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/doxygen.css
@@ -0,0 +1,1184 @@
+/* The standard CSS for doxygen 1.8.3.1-20130324 */
+
+body, table, div, p, dl {
+ font: 400 14px/19px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+div.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+}
+
+p.startli, p.startdd, p.starttd {
+ margin-top: 2px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 4px;
+ margin: 4px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: bold;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-topleft: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view when not used as main index */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+ padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.note
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #505050;
+}
+
+dl.todo
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 20px 10px 10px;
+ width: 200px;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/doxygen.png b/libs/geometry/doc/doxy/doxygen_output/html/doxygen.png
new file mode 100644
index 000000000..3ff17d807
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/doxygen.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/envelope_polygon.png b/libs/geometry/doc/doxy/doxygen_output/html/envelope_polygon.png
new file mode 100644
index 000000000..404f4d7e7
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/envelope_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/images/accepted_by_boost.png b/libs/geometry/doc/doxy/doxygen_output/html/images/accepted_by_boost.png
new file mode 100644
index 000000000..7a92d064a
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/images/accepted_by_boost.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/images/draft.png b/libs/geometry/doc/doxy/doxygen_output/html/images/draft.png
new file mode 100644
index 000000000..0084708c9
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/images/draft.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/images/ggl-logo-big.png b/libs/geometry/doc/doxy/doxygen_output/html/images/ggl-logo-big.png
new file mode 100644
index 000000000..0ef978a2f
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/images/ggl-logo-big.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/images/proposed_boost.png b/libs/geometry/doc/doxy/doxygen_output/html/images/proposed_boost.png
new file mode 100644
index 000000000..9912755af
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/images/proposed_boost.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/output_main.png b/libs/geometry/doc/doxy/doxygen_output/html/output_main.png
new file mode 100644
index 000000000..184ba5965
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/output_main.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/set_a_ac.png b/libs/geometry/doc/doxy/doxygen_output/html/set_a_ac.png
new file mode 100644
index 000000000..2ba18a700
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/set_a_ac.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/set_adapt_turns.png b/libs/geometry/doc/doxy/doxygen_output/html/set_adapt_turns.png
new file mode 100644
index 000000000..cfa3375e7
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/set_adapt_turns.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/set_int_right_union_left.png b/libs/geometry/doc/doxy/doxygen_output/html/set_int_right_union_left.png
new file mode 100644
index 000000000..9c2bc84f4
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/set_int_right_union_left.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/simplify_linestring.png b/libs/geometry/doc/doxy/doxygen_output/html/simplify_linestring.png
new file mode 100644
index 000000000..51df7a305
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/simplify_linestring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_convex_hull_cities.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_convex_hull_cities.png
new file mode 100644
index 000000000..e47d30439
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_convex_hull_cities.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_convex_hull_country.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_convex_hull_country.png
new file mode 100644
index 000000000..2d7270a99
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_convex_hull_country.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_countries.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_countries.png
new file mode 100644
index 000000000..151763039
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_countries.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_polygon_box.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_polygon_box.png
new file mode 100644
index 000000000..0d72a86ec
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_polygon_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_polygon_ring.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_polygon_ring.png
new file mode 100644
index 000000000..ca88da421
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_polygon_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_ring_box.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_ring_box.png
new file mode 100644
index 000000000..48a3fb3fd
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_ring_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_ring_ring.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_ring_ring.png
new file mode 100644
index 000000000..8d78c15ea
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_ring_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_roads.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_roads.png
new file mode 100644
index 000000000..cd21586f6
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_intersection_roads.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_simplify_country.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_simplify_country.png
new file mode 100644
index 000000000..e49b72cb4
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_simplify_country.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_simplify_road.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_simplify_road.png
new file mode 100644
index 000000000..71f326fcd
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_simplify_road.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_union_polygon_box.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_union_polygon_box.png
new file mode 100644
index 000000000..7910b9fac
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_union_polygon_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_union_polygon_ring.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_union_polygon_ring.png
new file mode 100644
index 000000000..b82eca6cb
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_union_polygon_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_union_ring_box.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_union_ring_box.png
new file mode 100644
index 000000000..d1b8c7d65
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_union_ring_box.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/svg_union_ring_ring.png b/libs/geometry/doc/doxy/doxygen_output/html/svg_union_ring_ring.png
new file mode 100644
index 000000000..1ebb0d934
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/svg_union_ring_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/tab_b.gif b/libs/geometry/doc/doxy/doxygen_output/html/tab_b.gif
new file mode 100644
index 000000000..0d623483f
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/tab_b.gif
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/tab_l.gif b/libs/geometry/doc/doxy/doxygen_output/html/tab_l.gif
new file mode 100644
index 000000000..9b1e6337c
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/tab_l.gif
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/tab_r.gif b/libs/geometry/doc/doxy/doxygen_output/html/tab_r.gif
new file mode 100644
index 000000000..ce9dd9f53
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/tab_r.gif
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/tabs.css b/libs/geometry/doc/doxy/doxygen_output/html/tabs.css
new file mode 100644
index 000000000..9cf578f23
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: url('tab_b.png');
+ width: 100%;
+ z-index: 101;
+ font-size: 13px;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: url('tab_b.png');
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color: #283A5D;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ background-image: url('tab_h.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/within_polygon.png b/libs/geometry/doc/doxy/doxygen_output/html/within_polygon.png
new file mode 100644
index 000000000..b5c51e6f6
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/within_polygon.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/within_ring.png b/libs/geometry/doc/doxy/doxygen_output/html/within_ring.png
new file mode 100644
index 000000000..b13ebd849
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/within_ring.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/x01_qt_example_output.png b/libs/geometry/doc/doxy/doxygen_output/html/x01_qt_example_output.png
new file mode 100644
index 000000000..7a8f64bb4
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/x01_qt_example_output.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/doxygen_output/html/x02_numeric_adaptor_example_output.png b/libs/geometry/doc/doxy/doxygen_output/html/x02_numeric_adaptor_example_output.png
new file mode 100644
index 000000000..a07a1997e
--- /dev/null
+++ b/libs/geometry/doc/doxy/doxygen_output/html/x02_numeric_adaptor_example_output.png
Binary files differ
diff --git a/libs/geometry/doc/doxy/make_documentation.bat b/libs/geometry/doc/doxy/make_documentation.bat
new file mode 100644
index 000000000..bdb6d8feb
--- /dev/null
+++ b/libs/geometry/doc/doxy/make_documentation.bat
@@ -0,0 +1,17 @@
+:: ===========================================================================
+:: Copyright (c) 2010 Barend Gehrels, Amsterdam, the Netherlands.
+::
+:: 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)9
+:: ============================================================================
+
+@echo off
+
+doxygen
+
+cd doxygen_output\html
+
+for %%f in (*.html) do ..\..\doxygen_enhance.py %%f
+
+cd ..\..
diff --git a/libs/geometry/doc/example_adapting_a_legacy_geometry_object_model.qbk b/libs/geometry/doc/example_adapting_a_legacy_geometry_object_model.qbk
new file mode 100644
index 000000000..8c3b9b3a2
--- /dev/null
+++ b/libs/geometry/doc/example_adapting_a_legacy_geometry_object_model.qbk
@@ -0,0 +1,587 @@
+[section Example: Adapting a legacy geometry object model]
+
+One of the primary benefits of __boost_geometry__, and the reason for its fairly complex template-based implementation, is that it allows for integration with legacy classes/objects.
+
+By defining the relationship between the __boost_geometry__ concepts and an existing, legacy object model, the legacy objects can be used in place of __boost_geometry__'s own geometry classes.
+
+__boost_geometry__ will then happliy read and write directly from and to the legacy object, treating it as a native __boost_geometry__ object.
+
+This means that one can adapt algorithms and methods from __boost_geometry__ to any existing legacy geometry object model at a very small runtime cost, which is simply not possible with most geometry libraries, where one has to make an intermediate object specific to the geometry library one is using.
+
+The following example will demonstrate the adaption process of a legacy geometry object model for use with __boost_geometry__.
+
+[h2 Adapting a shared geometry legacy object model]
+
+[h3 Example code: object hierarcy]
+
+ class QPoint
+ {
+ public:
+ double x;
+ double y;
+ QPoint(double x, double y) : x(x), y(y) {}
+ };
+
+ class QLineString
+ {
+ public:
+ bool cw;
+ std::vector<QPoint*> points;
+ };
+
+ class QRing
+ {
+ public:
+ std::vector<QLineString*> lines;
+ };
+
+ class QPolygon
+ {
+ public:
+ QRing* exterior;
+ std::vector<QRing*> interiors;
+ };
+
+The legacy object hierarcy is based on topology (e.g. two QRings might share one QLineString) instead of points directly (i.e. each object does not point directly to it's QPoints), and it also uses pointers for access.
+
+This is the other common way to approach geometries, to enable e.g. shared boundaries between surfaces. __boost_geometry__'s approach use simple features, and does not have shared geometries.
+
+The mismatch in representation is fixed by creating a custom iterator, that exposes a __boost_range__ of Points for every object. This way, __boost_geometry__'s functions will operate on the QRing as if it was a collection of Points, which is a requirement.
+
+[h2 Adapting QPoint]
+
+The [link adaption_of_qpoint_source_code adaption of the QPoint] is fairly straightforward, one just needs to implement the requirements.
+
+Even though the geometries in our legacy object model use pointers of QPoints, __boost_geometry__ automatically handles the conversion from pointers-to-Points to references-to-Points internally, so we do not have to convert them manually.
+
+Alternatively, we can use the [link geometry.reference.adapted.register.boost_geometry_register_point_2d BOOST_GEOMETRY_REGISTER_POINT_2D(QPoint, double, cs::cartesian, x, y)] helper macro, which does exactly the same as our manual adaption.
+
+The sample code adapts QPoint to the [link geometry.reference.concepts.concept_point Point Concept] using specialization of the traits class.
+
+[h2 Adapting QLineString]
+
+The [link adaption_of_qlinestring_source_code adaption of the QLineString] is very simple on the surface, as it is just "a specialization of traits::tag defining linestring_tag as type". Alternatively, we can use the [link geometry.reference.adapted.register.boost_geometry_register_linestring BOOST_GEOMETRY_REGISTER_LINESTRING(QLineString)] helper macro, which does exactly the same as our manual adaption.
+
+However, the [link geometry.reference.concepts.concept_linestring LineString concept] also requires that the collection of Points "must behave like a __boost_range__ Random Access Range" and "the type defined by the metafunction range_value<...>::type must fulfill the Point Concept".
+
+This means that we have to do two things:
+
+* Make QLineString behave like a __boost_range__, with Random Access requirements
+* Make sure that the __boost_range__ iterates over QPoints, which we already have adapted
+
+This might look like a lot of work, but we are in luck: a std::vector is nearly a __boost_range__, and already iterate over pointers-to-QPoints, that are handled by __boost_geometry__. The [link adaption_of_qlinestring_range_source_code code for making QLineString a __boost_range__] is therefore fairly straightforward.
+
+[h2 Adapting QRing]
+
+The [link adaption_of_qring_source_code adaption of the QRing] is mostly equal to the QLineString in that there is a tag and a collection to iterate through. Alternatively, we can use the [link geometry.reference.adapted.register.boost_geometry_register_ring BOOST_GEOMETRY_REGISTER_RING(QRing)] helper macro, which does exactly the same as our manual adaption.
+
+However, the QRing expose pointers-to-QLineStrings, and not QPoints directly, which is [link geometry.reference.concepts.concept_ring required in the Ring concept], so it is not enough to trivially make the std::vector into a __boost_range__. We need to create a Boost.Iterator that expose QPoints, and because we are dealing with a legacy object model, we are not allowed to change the class definition.
+
+The [link adaption_of_qring_iterator_source_code custom iterator that does this] uses Boost.Iterator Facade, and is not very different from the [@http://www.boost.org/doc/libs/1_53_0/libs/iterator/doc/iterator_facade.html example provided in Boost.Iterator's own documentation](link), except that our __boost_range__ need to be random access.
+
+Now, with the custom iterator made, we can [link adaption_of_qring_range_source_code define the __boost_range__] that traverses through QPoints.
+
+[h2 Adapting QPolygon]
+
+[link adaption_of_qpolygon_source_code Adapting the QPolygon] to the [link geometry.reference.concepts.concept_polygon Polygon Concept] is a little more involved than the other geometry types.
+
+The only requirement that is not straightforward to adapt is the interior_rings' get method.
+
+A __boost_geometry__ Polygon operates on Ring objects, and unfortunately, __boost_geometry__ does not automatically handle the conversion from pointers to references for Rings internally (only Points, as mentioned).
+
+Therefore, we need to expose QRings instead of pointers-to-QRings for the interior Rings, which means a little more work than the pointers-to-QPoints for QLineString and QRing.
+
+First, we [link adaption_of_qpolygon_iterator_source_code create a Boost.Iterator Facade] that returns QRing instead of pointer-to-QRing:
+
+Now we have an iterator that can "convert" our pointer-to-QRing into QRing. However, the get method of the interior Rings must return a __boost_range__ compatible object, which a plain PolygonRingIterator is not.
+
+We need to [link adaption_of_qpolygon_range_source_code define another __boost_range__], that can be constructed with PolygonRingIterators as arguments, and returned from the get method.
+
+[h2 Conclusion]
+
+That's it! The methods of __boost_geometry__ can now be used directly on instances of our legacy object model.
+
+[endsect]
+
+[section Example source code: Adapting a legacy geometry object model]
+
+[h2 Adaption of QPoint]
+[#adaption_of_qpoint_source_code]
+
+ #include <boost/geometry.hpp>
+
+ namespace boost
+ {
+ namespace geometry
+ {
+ namespace traits
+ {
+ // Adapt QPoint to Boost.Geometry
+
+ template<> struct tag<QPoint>
+ { typedef point_tag type; };
+
+ template<> struct coordinate_type<QPoint>
+ { typedef QPoint::double type; };
+
+ template<> struct coordinate_system<QPoint>
+ { typedef cs::cartesian type; };
+
+ template<> struct dimension<QPoint> : boost::mpl::int_<2> {};
+
+ template<>
+ struct access<QPoint, 0>
+ {
+ static QPoint::double get(QPoint const& p)
+ {
+ return p.x;
+ }
+
+ static void set(QPoint& p, QPoint::double const& value)
+ {
+ p.x = value;
+ }
+ };
+
+ template<>
+ struct access<QPoint, 1>
+ {
+ static QPoint::double get(QPoint const& p)
+ {
+ return p.y;
+ }
+
+ static void set(QPoint& p, QPoint::double const& value)
+ {
+ p.y = value;
+ }
+ };
+ }
+ }
+ } // namespace boost::geometry::traits
+
+
+
+
+[h2 Adaption of QLineString]
+[#adaption_of_qlinestring_source_code]
+
+ namespace boost
+ {
+ namespace geometry
+ {
+ namespace traits
+ {
+ template<>
+ struct tag<QLineString>
+ {
+ typedef linestring_tag type;
+ };
+ }
+ }
+ } // namespace boost::geometry::traits
+
+[h3 Boost.Range for QLineString]
+[#adaption_of_qlinestring_range_source_code]
+
+ #include <boost/range.hpp>
+
+ namespace boost
+ {
+ template <>
+ struct range_iterator<QLineString>
+ { typedef std::vector<QPoint*>::iterator type; };
+
+ template<>
+ struct range_const_iterator<QLineString>
+ { typedef std::vector<QPoint*>::const_iterator type; };
+ }
+
+ inline std::vector<QPoint*>::iterator
+ range_begin(QLineString& qls) {return qls.points.begin();}
+
+ inline std::vector<QPoint*>::iterator
+ range_end(QLineString& qls) {return qls.points.end();}
+
+ inline std::vector<QPoint*>::const_iterator
+ range_begin(const QLineString& qls) {return qls.points.begin();}
+
+ inline std::vector<QPoint*>::const_iterator
+ range_end(const QLineString& qls) {return qls.points.end();}
+
+[h2 Adaption of QRing]
+[#adaption_of_qring_source_code]
+
+ namespace boost
+ {
+ namespace geometry
+ {
+ namespace traits
+ {
+ template<>
+ struct tag<QRing>
+ {
+ typedef ring_tag type;
+ };
+ }
+ }
+ } // namespace boost::geometry::traits
+
+[h3 Boost.Iterator for QRing]
+[#adaption_of_qring_iterator_source_code]
+
+ #include <boost/iterator/iterator_facade.hpp>
+
+ /* Custom iterator type that flattens a 2D array into a 1D array */
+ template <class I, // Line iterator type
+ class R // Point reference type
+ >
+ class RingIteratorImpl : public boost::iterator_facade<
+ RingIteratorImpl<I,R>, R, std::random_access_iterator_tag, R> //new traversal tag boost::random_access_traversal_tag
+ {
+ public:
+ RingIteratorImpl() : pointIndex_(0)
+ {
+ }
+
+ explicit RingIteratorImpl(I lineStringIterCurrent)
+ : lineStringIterCurrent_(lineStringIterCurrent), pointIndex_(0)
+ {
+ }
+
+ template<class OtherI, class OtherR>
+ RingIteratorImpl(RingIteratorImpl<OtherI, OtherR> const& other) :
+ lineStringIterCurrent_(other.getLineStrIt()), pointIndex_(other.getPointIdx())
+ {
+ }
+
+ I getLineStrIt() const {return lineStringIterCurrent_;}
+
+ bool isEmpty() const {return isEmpty;}
+ size_t getPointIdx() const {return pointIndex_;}
+
+ typedef typename boost::iterator_facade<RingIteratorImpl<I,R>, R, std::random_access_iterator_tag, R>::difference_type difference_type;
+
+ private:
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ ++pointIndex_;
+ if (pointIndex_ >= (*lineStringIterCurrent_)->points.size())
+ {
+ ++lineStringIterCurrent_;
+ pointIndex_ = 0;
+ }
+ }
+
+ void decrement()
+ {
+ if(pointIndex_>0)
+ {
+ --pointIndex_;
+ }
+ else
+ {
+ --lineStringIterCurrent_;
+ pointIndex_ = (*lineStringIterCurrent_)->points.size();
+ }
+ }
+
+ void advance(difference_type n)
+ {
+ difference_type counter = n;
+
+ difference_type maxPointIndex, remainderPointIndex;
+
+ while(counter>0)
+ {
+ maxPointIndex = (*lineStringIterCurrent_)->points.size(),
+ remainderPointIndex = maxPointIndex - pointIndex_;
+
+ if(counter>remainderPointIndex)
+ {
+ counter -= remainderPointIndex;
+ ++lineStringIterCurrent_;
+ }
+ else // (counter<=remainderPointIndex)
+ {
+ counter = 0;
+ pointIndex_ = remainderPointIndex;
+ }
+ }
+
+ }
+
+ difference_type distance_to(const RingIteratorImpl& other) const
+ {
+ I currentLineStringIter = getLineStrIt();
+ I otherLineStringIter = other.getLineStrIt();
+
+ difference_type count = 0;
+ difference_type distance_to_other = std::distance(currentLineStringIter, otherLineStringIter);
+
+ if(distance_to_other < 0)
+ {
+ count += pointIndex_;
+
+ while(distance_to_other < 0)
+ {
+ QLineString const* ls = *otherLineStringIter;
+ count -= ls->points.size();
+
+ ++otherLineStringIter;
+ ++distance_to_other;
+ }
+
+ assert(otherLineStringIter==currentLineStringIter);
+ }
+ else if(distance_to_other > 0)
+ {
+ count -= pointIndex_;
+
+ while(distance_to_other < 0)
+ {
+ QLineString const* ls = *currentLineStringIter;
+ count += ls->points.size();
+
+ ++currentLineStringIter;
+ --distance_to_other;
+ }
+
+ assert(otherLineStringIter==currentLineStringIter);
+ }
+ else
+ {
+ count = pointIndex_ - other.getPointIdx();
+ }
+
+ return count;
+ }
+
+ bool equal(const RingIteratorImpl& other) const
+ {
+ return (lineStringIterCurrent_ == other.getLineStrIt()) &&
+ (pointIndex_ == other.getPointIdx());
+ }
+
+ R dereference() const {return *(*lineStringIterCurrent_)->points[pointIndex_];}
+
+
+ I lineStringIterCurrent_;
+
+ bool empty;
+ size_t pointIndex_;
+ };
+
+
+[h3 Boost.Range for QRing]
+[#adaption_of_qring_range_source_code]
+
+ typedef RingIteratorImpl<std::vector<QLineString*>::iterator, QPoint> RingIterator;
+ typedef RingIteratorImpl<std::vector<QLineString*>::const_iterator, const QPoint> ConstRingIterator;
+
+ namespace boost
+ {
+ // Specialize metafunctions. We must include the range.hpp header.
+ // We must open the 'boost' namespace.
+
+ template <>
+ struct range_iterator<QRing>
+ { typedef RingIterator type; };
+
+ template<>
+ struct range_const_iterator<QRing>
+ { typedef ConstRingIterator type; };
+
+ } // namespace 'boost'
+
+
+ // The required Range functions. These should be defined in the same namespace
+ // as Ring.
+
+ inline RingIterator range_begin(QRing& r)
+ {return RingIterator(r.lines.begin());}
+
+ inline ConstRingIterator range_begin(const QRing& r)
+ {return ConstRingIterator(r.lines.begin());}
+
+ inline RingIterator range_end(QRing& r)
+ {return RingIterator(r.lines.end());}
+
+ inline ConstRingIterator range_end(const QRing& r)
+ {return ConstRingIterator(r.lines.end());}
+
+[h2 Adaption of QPolygon]
+[#adaption_of_qpolygon_source_code]
+
+ namespace boost {
+ namespace geometry {
+ namespace traits {
+ template<> struct tag<QPolygon> { typedef polygon_tag type; };
+ template<> struct ring_const_type<QPolygon> { typedef const QRing& type; };
+ template<> struct ring_mutable_type<QPolygon> { typedef QRing& type; };
+ template<> struct interior_const_type<QPolygon> { typedef const CustomPolygonRingRange type; };
+ template<> struct interior_mutable_type<QPolygon> { typedef CustomPolygonRingRange type; };
+
+ template<> struct exterior_ring<QPolygon>
+ {
+ static QRing& get(QPolygon& p)
+ {
+ return (*p.exterior);
+ }
+ static QRing const& get(QPolygon const& p)
+ {
+ return (*p.exterior);
+ }
+ };
+
+ template<> struct interior_rings<QPolygon>
+ {
+ static CustomPolygonRingRange get(QPolygon& p)
+ {
+ return CustomPolygonRingRange(PolygonRingIterator(p.interiors.begin()), PolygonRingIterator(p.interiors.end()));
+ }
+ static const CustomPolygonRingRange get(QPolygon const& p)
+ {
+ return CustomPolygonRingRange(ConstPolygonRingIterator(p.interiors.begin()), ConstPolygonRingIterator(p.interiors.end()));
+ }
+ };
+ }
+ }
+ } // namespace boost::geometry::traits
+
+
+[h3 Boost.Iterator for QRings in QPolygon]
+[#adaption_of_qpolygon_iterator_source_code]
+
+ template <class I, // Line iterator type
+ class R // Point reference type
+ >
+ class PolyRingIterator : public boost::iterator_facade<
+ PolyRingIterator<I,R>, R, std::random_access_iterator_tag, R> //new traversal tag
+ {
+ public:
+ PolyRingIterator() {}
+
+ explicit PolyRingIterator(I ringIter) : _ringIter(ringIter) {}
+
+ template<class OtherI, class OtherR>
+ PolyRingIterator(PolyRingIterator<OtherI, OtherR> const& other) :
+ _ringIter(other.getRingIter()) {}
+
+ I getRingIter() const {return _ringIter;}
+
+ typedef typename boost::iterator_facade<PolyRingIterator<I,R>, R, std::random_access_iterator_tag, R>::difference_type difference_type;
+
+ private:
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ ++_ringIter;
+ }
+
+ void decrement()
+ {
+ --_ringIter;
+ }
+
+ void advance(difference_type n)
+ {
+ std::advance(_ringIter,n);
+ }
+
+ difference_type distance_to(const PolyRingIterator& other) const
+ {
+ return std::distance(_ringIter, other.getRingIter());
+ }
+
+ bool equal(const PolyRingIterator& other) const
+ {
+ return _ringIter == other.getRingIter();
+ }
+
+ R dereference() const {return *(*_ringIter);}
+
+ I _ringIter;
+ };
+
+[h3 Boost.Range for PolygonRingIterator]
+[#adaption_of_qpolygon_range_source_code]
+
+ typedef PolyRingIterator<std::vector<QRing*>::iterator, QRing> PolygonRingIterator;
+ typedef PolyRingIterator<std::vector<QRing*>::const_iterator, const QRing> ConstPolygonRingIterator;
+
+ class CustomPolygonRingRange
+ {
+ PolygonRingIterator _begin;
+ PolygonRingIterator _end;
+
+ bool isIterSet;
+
+ ConstPolygonRingIterator _cbegin;
+ ConstPolygonRingIterator _cend;
+
+ bool isCIterSet;
+
+ public:
+
+ CustomPolygonRingRange(PolygonRingIterator begin, PolygonRingIterator end) : _begin(begin), _end(end), isIterSet(true) {}
+ CustomPolygonRingRange(ConstPolygonRingIterator begin, ConstPolygonRingIterator end) : _cbegin(begin), _cend(end), isCIterSet(true) {}
+
+ PolygonRingIterator begin()
+ {
+ assert(isIterSet);
+ return _begin;
+ }
+
+ ConstPolygonRingIterator cbegin() const
+ {
+ assert(isCIterSet);
+ return _cbegin;
+ }
+
+ PolygonRingIterator end()
+ {
+ assert(isIterSet);
+ return _end;
+ }
+
+ ConstPolygonRingIterator cend() const
+ {
+ assert(isCIterSet);
+ return _cend;
+ }
+ };
+
+ namespace boost
+ {
+ // Specialize metafunctions. We must include the range.hpp header.
+ // We must open the 'boost' namespace.
+
+ template <>
+ struct range_iterator<CustomPolygonRingRange> { typedef PolygonRingIterator type; };
+
+ template<>
+ struct range_const_iterator<CustomPolygonRingRange> { typedef ConstPolygonRingIterator type; };
+
+ } // namespace 'boost'
+
+
+ // The required Range functions. These should be defined in the same namespace
+ // as Ring.
+
+ inline PolygonRingIterator range_begin(CustomPolygonRingRange& r)
+ {return r.begin();}
+
+ inline ConstPolygonRingIterator range_begin(const CustomPolygonRingRange& r)
+ {return r.cbegin();}
+
+ inline PolygonRingIterator range_end(CustomPolygonRingRange& r)
+ {return r.end();}
+
+ inline ConstPolygonRingIterator range_end(const CustomPolygonRingRange& r)
+ {return r.cend();}
+
+[endsect]
diff --git a/libs/geometry/doc/generated/append_status.qbk b/libs/geometry/doc/generated/append_status.qbk
new file mode 100644
index 000000000..51329f887
--- /dev/null
+++ b/libs/geometry/doc/generated/append_status.qbk
@@ -0,0 +1,14 @@
+[/NOTE: adapted manually, multi-linestring/multi-polygon do compile but not run!]
+[heading Supported geometries]
+[table
+[[ ][Point][Range]]
+[[Point][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+]
diff --git a/libs/geometry/doc/generated/area_status.qbk b/libs/geometry/doc/generated/area_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/area_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/boost-no-inspect b/libs/geometry/doc/generated/boost-no-inspect
new file mode 100644
index 000000000..b0177ad8c
--- /dev/null
+++ b/libs/geometry/doc/generated/boost-no-inspect
@@ -0,0 +1 @@
+Tell inspect to ignore directory \ No newline at end of file
diff --git a/libs/geometry/doc/generated/buffer_status.qbk b/libs/geometry/doc/generated/buffer_status.qbk
new file mode 100644
index 000000000..6caf4c90c
--- /dev/null
+++ b/libs/geometry/doc/generated/buffer_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Segment][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Box][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Linestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Ring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Polygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPoint][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+]
diff --git a/libs/geometry/doc/generated/centroid_status.qbk b/libs/geometry/doc/generated/centroid_status.qbk
new file mode 100644
index 000000000..10e064127
--- /dev/null
+++ b/libs/geometry/doc/generated/centroid_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/nyi.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/clear_status.qbk b/libs/geometry/doc/generated/clear_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/clear_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/convert_status.qbk b/libs/geometry/doc/generated/convert_status.qbk
new file mode 100644
index 000000000..aacf812a4
--- /dev/null
+++ b/libs/geometry/doc/generated/convert_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Segment][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Box][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Linestring][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Ring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Polygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPoint][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/convex_hull_status.qbk b/libs/geometry/doc/generated/convex_hull_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/convex_hull_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/correct_status.qbk b/libs/geometry/doc/generated/correct_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/correct_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/covered_by_status.qbk b/libs/geometry/doc/generated/covered_by_status.qbk
new file mode 100644
index 000000000..2843670d5
--- /dev/null
+++ b/libs/geometry/doc/generated/covered_by_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Segment][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Box][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Linestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Ring][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Polygon][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPoint][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+]
diff --git a/libs/geometry/doc/generated/disjoint_status.qbk b/libs/geometry/doc/generated/disjoint_status.qbk
new file mode 100644
index 000000000..d7d9e977e
--- /dev/null
+++ b/libs/geometry/doc/generated/disjoint_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/distance_status.qbk b/libs/geometry/doc/generated/distance_status.qbk
new file mode 100644
index 000000000..5dbdeba7f
--- /dev/null
+++ b/libs/geometry/doc/generated/distance_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Box][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Linestring][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Ring][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Polygon][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPoint][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+]
diff --git a/libs/geometry/doc/generated/envelope_status.qbk b/libs/geometry/doc/generated/envelope_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/envelope_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/equals_status.qbk b/libs/geometry/doc/generated/equals_status.qbk
new file mode 100644
index 000000000..573c78f4b
--- /dev/null
+++ b/libs/geometry/doc/generated/equals_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Segment][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Box][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Linestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Ring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Polygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/expand_status.qbk b/libs/geometry/doc/generated/expand_status.qbk
new file mode 100644
index 000000000..37635e161
--- /dev/null
+++ b/libs/geometry/doc/generated/expand_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Segment][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Box][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Linestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Ring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Polygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPoint][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+]
diff --git a/libs/geometry/doc/generated/for_each_point_status.qbk b/libs/geometry/doc/generated/for_each_point_status.qbk
new file mode 100644
index 000000000..b5383e0d1
--- /dev/null
+++ b/libs/geometry/doc/generated/for_each_point_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/nyi.png] ]]
+[[Box][ [$img/nyi.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/for_each_segment_status.qbk b/libs/geometry/doc/generated/for_each_segment_status.qbk
new file mode 100644
index 000000000..b5383e0d1
--- /dev/null
+++ b/libs/geometry/doc/generated/for_each_segment_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/nyi.png] ]]
+[[Box][ [$img/nyi.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/length_status.qbk b/libs/geometry/doc/generated/length_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/length_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/num_geometries_status.qbk b/libs/geometry/doc/generated/num_geometries_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/num_geometries_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/num_interior_rings_status.qbk b/libs/geometry/doc/generated/num_interior_rings_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/num_interior_rings_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/num_points_status.qbk b/libs/geometry/doc/generated/num_points_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/num_points_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/overlaps_status.qbk b/libs/geometry/doc/generated/overlaps_status.qbk
new file mode 100644
index 000000000..6caf4c90c
--- /dev/null
+++ b/libs/geometry/doc/generated/overlaps_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Segment][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Box][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Linestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Ring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Polygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPoint][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+]
diff --git a/libs/geometry/doc/generated/perimeter_status.qbk b/libs/geometry/doc/generated/perimeter_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/perimeter_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/reverse_status.qbk b/libs/geometry/doc/generated/reverse_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/reverse_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/simplify_status.qbk b/libs/geometry/doc/generated/simplify_status.qbk
new file mode 100644
index 000000000..b5383e0d1
--- /dev/null
+++ b/libs/geometry/doc/generated/simplify_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/nyi.png] ]]
+[[Box][ [$img/nyi.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/transform_status.qbk b/libs/geometry/doc/generated/transform_status.qbk
new file mode 100644
index 000000000..d7d9e977e
--- /dev/null
+++ b/libs/geometry/doc/generated/transform_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/unique_status.qbk b/libs/geometry/doc/generated/unique_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/unique_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/generated/within_status.qbk b/libs/geometry/doc/generated/within_status.qbk
new file mode 100644
index 000000000..2843670d5
--- /dev/null
+++ b/libs/geometry/doc/generated/within_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[ ][Point][Segment][Box][Linestring][Ring][Polygon][MultiPoint][MultiLinestring][MultiPolygon]]
+[[Point][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Segment][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Box][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Linestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Ring][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[Polygon][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPoint][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiLinestring][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+[[MultiPolygon][ [$img/ok.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ][ [$img/nyi.png] ]]
+]
diff --git a/libs/geometry/doc/generated/wkt_status.qbk b/libs/geometry/doc/generated/wkt_status.qbk
new file mode 100644
index 000000000..e4d8d3023
--- /dev/null
+++ b/libs/geometry/doc/generated/wkt_status.qbk
@@ -0,0 +1,13 @@
+[heading Supported geometries]
+[table
+[[Geometry][Status]]
+[[Point][ [$img/ok.png] ]]
+[[Segment][ [$img/ok.png] ]]
+[[Box][ [$img/ok.png] ]]
+[[Linestring][ [$img/ok.png] ]]
+[[Ring][ [$img/ok.png] ]]
+[[Polygon][ [$img/ok.png] ]]
+[[MultiPoint][ [$img/ok.png] ]]
+[[MultiLinestring][ [$img/ok.png] ]]
+[[MultiPolygon][ [$img/ok.png] ]]
+]
diff --git a/libs/geometry/doc/geometry.qbk b/libs/geometry/doc/geometry.qbk
new file mode 100644
index 000000000..72935105c
--- /dev/null
+++ b/libs/geometry/doc/geometry.qbk
@@ -0,0 +1,145 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[library Geometry
+ [quickbook 1.5]
+ [authors [Gehrels, Barend], [Lalande, Bruno], [Loskot, Mateusz], [Wulkiewicz, Adam]]
+ [copyright 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz]
+ [purpose Documentation of Boost.Geometry library]
+ [license
+ Distributed under 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])
+ ]
+ [id geometry]
+ [category geometry]
+]
+
+[/Behavior]
+[def __0dim__ pointlike (e.g. point)]
+[def __1dim__ linear (e.g. linestring)]
+[def __2dim__ areal (e.g. polygon)]
+[def __single__ single (e.g. point, polygon)]
+[def __multi__ multiple (e.g. multi_point, multi_polygon)]
+[def __cart__ Cartesian]
+[def __sph__ Spherical]
+[def __geo__ Geographic]
+[def __rev__ Reversed polygon (coordinates not according their orientiation)]
+[def __empty__ Empty (e.g. polygon without points)]
+[def __box__ Box]
+[def __rectangle__ Rectangle]
+[def __segment__ Segment]
+[def __point__ Point]
+[def __linestring__ Linestring]
+[def __polygon__ Polygon]
+[def __ring__ Ring]
+[def __multi_point__ Multi Point]
+[def __multi_linestring__ Multi Linestring]
+[def __multi_polygon__ Multi Polygon]
+[def __range__ Rangelike (linestring, ring)]
+[def __other__ Other geometries]
+[def __nyiversion__ Not yet supported in this version]
+
+[def __not_in_boost_geometry_hpp__ The standard header `boost/geometry.hpp` does not include this header.]
+
+
+[/Parts]
+[def __ret_zero__ Returns zero]
+[def __ret_one__ Returns 1]
+[def __does_nothing__ Nothing happens, geometry is unchanged]
+[def __cs_units__ in the same units as the input coordinates]
+[def __sph1__ on a unit sphere (or another sphere, if specified as such in the constructor of the strategy)]
+[template qbk_ret[what] Returns [what]]
+[template qbk_out[what] GeometryOut is a [what]]
+
+[def __boost__ Boost]
+[def __boost_geometry__ Boost.Geometry]
+[def __boost_array__ Boost.Array]
+[def __boost_fusion__ Boost.Fusion]
+[def __boost_mpl__ Boost.MPL]
+[def __boost_range__ Boost.Range]
+[def __boost_tuple__ Boost.Tuple]
+[def __boost_gil__ [@http://www.boost.org/libs/gil/ Boost.GIL]]
+[def __boost_bb__ Boost.Build]
+
+[def __ttmath__ [@http://www.ttmath.org/ ttmath]]
+[def __ogc__ [@http://www.opengeospatial.org OGC]]
+
+[def __ogc_sf__ [@http://www.opengeospatial.org/standards/sfa OGC Simple Feature Specification]]
+
+[/Templates]
+[template concept[name type]
+The [name] Concept describes the requirements for a [type] type.
+All algorithms in Boost.Geometry will check any geometry arguments against the concept requirements.
+]
+
+[template heading_conformance_no_ogc[function]
+[heading Conformance]
+The function [function] is not defined by OGC.
+]
+
+[template heading_conformance_ogc[function ogc_function]
+[heading Conformance]
+The function [function] implements function [ogc_function] from the __ogc_sf__.
+]
+
+[template conformance_std[function std_function]
+The function [function] conforms to the [std_function] of the C++ std-library.
+]
+
+[template see_boost_range_sample[concept]
+[note See also the sample in the [@../../../range/doc/html/range/reference/extending/method_2.html Boost.Range documentation]
+ showing how a type can be adapted to a Boost.Range to fulfill the concept of a [concept]
+]
+]
+
+
+[heading Contributions]
+
+Boost.Geometry contains contributions by:
+
+* Akira Takahashi (adaption of Boost.Fusion)
+* Alfredo Correa (adaption of Boost.Array)
+* Andrew Hundt (varray container, aka. static_vector)
+* Federico Fern\u00E1ndez (preliminary version of R-tree spatial index)
+* Karsten Ahnert (patch for cross-track distance)
+* Mats Taraldsvik (documentation: adapting a legacy model)
+
+[include imports.qbk]
+
+[include introduction.qbk]
+[include compiling.qbk]
+
+[include design_rationale.qbk]
+[include quickstart.qbk]
+
+[section Spatial Indexes]
+[include index/index.qbk]
+[endsect]
+
+[include reference.qbk]
+
+[section Indexes]
+[include matrix.qbk]
+[section Alphabetical Index]
+'''<index><title/></index>'''
+[endsect]
+[endsect]
+
+[section Examples]
+[include example_adapting_a_legacy_geometry_object_model.qbk]
+[endsect]
+
+[include release_notes.qbk]
+
+[include about_documentation.qbk]
+[include acknowledgments.qbk]
diff --git a/libs/geometry/doc/html/geometry/aboutdoc.html b/libs/geometry/doc/html/geometry/aboutdoc.html
new file mode 100644
index 000000000..e3ef4f0ba
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/aboutdoc.html
@@ -0,0 +1,281 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>About this Documentation</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="release_notes.html" title="Release Notes">
+<link rel="next" href="acknowledgments.html" title="Acknowledgments">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="release_notes.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="acknowledgments.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.aboutdoc"></a><a class="link" href="aboutdoc.html" title="About this Documentation">About this Documentation</a>
+</h2></div></div></div>
+<p>
+ Within the Boost community there are several styles of documenting. Most libraries
+ nowadays are using QuickBook, the WikiWiki style documentation.
+ </p>
+<p>
+ Boost.Geometry started with Doxygen, and during review it was decided to go
+ to QuickBook. However, it was convenient to keep Doxygen also there: it does
+ a good job of connecting descriptions to function and class declarations.
+ </p>
+<p>
+ Doxygen is able to generate XML (besides the normal HTML output), containing
+ all documentation.
+ </p>
+<p>
+ So the challenge was to translate the XML generated by doxygen to QuickBook.
+ At least, translate parts of it. Boost contains currently two tools using XSLT
+ to go from Doxygen-XML to BoostBook, or to QuickBook. These tools are used
+ within Boost.Random and Boost.Asio (and maybe more). However, this XSLT process
+ was quite hard, did not deliver (yet) the wished results, and we are all C++
+ programmers. So another tool was born, this time in C++ using RapidXML, going
+ from Doxygen-XML to QuickBook with the ability to mix both.
+ </p>
+<h4>
+<a name="geometry.aboutdoc.h0"></a>
+ <span class="phrase"><a name="geometry.aboutdoc.the_chain"></a></span><a class="link" href="aboutdoc.html#geometry.aboutdoc.the_chain">The
+ chain</a>
+ </h4>
+<p>
+ The process is as following:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+ call doxygen to go from C++ to XML
+ </li>
+<li class="listitem">
+ call <span class="emphasis"><em>doxygen_xml2qbk</em></span> to go from XML to QuickBook
+ </li>
+<li class="listitem">
+ call bjam to from QuickBook to HTML
+ <div class="orderedlist"><ol class="orderedlist" type="a">
+<li class="listitem">
+ bjam translates QuickBook to BoostBook
+ </li>
+<li class="listitem">
+ bjam then translates from BoostBook to DocBook
+ </li>
+<li class="listitem">
+ bjam then translates from DocBook to HTML
+ </li>
+</ol></div>
+ </li>
+</ol></div>
+<p>
+ This chain is currently called by "make_qbk.py", a Python script
+ which calls the chain above in the right order. Python ensures that the chain
+ can be handled in both Windows and Linux environments (it is probably possible
+ to call all parts with bjam too).
+ </p>
+<h4>
+<a name="geometry.aboutdoc.h1"></a>
+ <span class="phrase"><a name="geometry.aboutdoc.the_reference_matrix"></a></span><a class="link" href="aboutdoc.html#geometry.aboutdoc.the_reference_matrix">The
+ reference matrix</a>
+ </h4>
+<p>
+ There reference matrix is the only thing written in BoostBook. It is an XML
+ file with an overview of all Boost.Geometry functionality. Presenting it like
+ this is not possible within QuickBook, therefore BoostBook XML is used here.
+ It is included by the QuickBook code. The Boost.Asio documentation contains
+ a similar reference matrix.
+ </p>
+<h4>
+<a name="geometry.aboutdoc.h2"></a>
+ <span class="phrase"><a name="geometry.aboutdoc.mixing_quickbook_into_c___code"></a></span><a class="link" href="aboutdoc.html#geometry.aboutdoc.mixing_quickbook_into_c___code">Mixing
+ QuickBook into C++ code</a>
+ </h4>
+<p>
+ With Doxygen it is possible to define aliases. Specificly for <span class="emphasis"><em>doxygen_xml2qbk</em></span>,
+ the alias <span class="bold"><strong>\qbk{...}</strong></span> was defined. This alias
+ <span class="bold"><strong>\qbk{...}</strong></span> add some XML-tags around the text
+ inside the alias, such that that included part is recognizable by the converter.
+ </p>
+<p>
+ So the C++ code might look like this:
+ </p>
+<pre class="programlisting">/*!
+\brief Some explanation
+\ingroup some_group
+\details Some details
+\tparam Geometry Description of the template parameter
+\param geometry Description of the variable
+
+\qbk{ [include reference/more_documentation.qbk] }
+ */
+</pre>
+<p>
+ First you see normal Doxygen comments. The last line uses the alias \qbk{...}
+ to include a QuickBook file. So most of the documentation can be written in
+ that QuickBook file: behaviour, complexity, examples, related pages, etc.
+ </p>
+<p>
+ In the example above a QuickBook include statement is used. But any QuickBook
+ code can be used, the QuickBook code does not have to be stored in a separate
+ file. Two more samples:
+ </p>
+<pre class="programlisting">/*!
+...
+\qbk{
+[heading Example]
+[area_with_strategy]
+[area_with_strategy_output]
+
+[heading Available Strategies]
+[link geometry.reference.strategies.strategy_area_surveyor Surveyor (cartesian)]
+}
+ */
+</pre>
+<p>
+ In this example pieces of QuickBook are included, two headers, two examples
+ (this is the QuickBook way - the examples are defined elsewhere), and a link.
+ </p>
+<h4>
+<a name="geometry.aboutdoc.h3"></a>
+ <span class="phrase"><a name="geometry.aboutdoc.quickbook_within_c___issues"></a></span><a class="link" href="aboutdoc.html#geometry.aboutdoc.quickbook_within_c___issues">QuickBook
+ within C++ issues</a>
+ </h4>
+<p>
+ There are two issues: the comma and the asterisk. If within the <span class="bold"><strong>\qbk</strong></span>
+ alias a comma is used, it is recognized by Doxygen as another parameter, and
+ therefore will not deliver the correct results, or result into errors. This
+ is easily solvable by escaping comma's (by putting a backslash directly before
+ the comma, \, ). It within the <span class="bold"><strong>\qbk</strong></span> alias
+ an asterisk is used on the first line, it is interpreted by Doxygen as well.
+ This asterisk can be escaped as well, and this time it is <span class="emphasis"><em>doxygen_qbk2xml</em></span>
+ which handles this escape and translates it back into an asterisk.
+ </p>
+<h4>
+<a name="geometry.aboutdoc.h4"></a>
+ <span class="phrase"><a name="geometry.aboutdoc.overloads"></a></span><a class="link" href="aboutdoc.html#geometry.aboutdoc.overloads">Overloads</a>
+ </h4>
+<p>
+ Boost.Geometry contains a lot of overloads, two functions with the same name
+ and, for example, a different number of parameters. Or, as another example,
+ a const and a non-const version. They can be marked specificly to the <span class="emphasis"><em>doxygen_xml2qbk</em></span>
+ tool with the \qbk alias, by adding a specific description for the overload.
+ So, for example, <span class="bold"><strong>\qbk{distinguish,with strategy}</strong></span>
+ will result in another page where the text "with strategy" is added,
+ and it is processed as "_with_strategy" within the QuickBook section
+ name.
+ </p>
+<h4>
+<a name="geometry.aboutdoc.h5"></a>
+ <span class="phrase"><a name="geometry.aboutdoc.overloads_and_sharing_documentation"></a></span><a class="link" href="aboutdoc.html#geometry.aboutdoc.overloads_and_sharing_documentation">Overloads
+ and sharing documentation</a>
+ </h4>
+<p>
+ With overloads, part of the documentation must be shared, and other part must
+ not. The descriptions are often the same. But the examples are usually not.
+ So it is a balance between sharing documentation, including shared documentation,
+ avoiding too much separate QuickBook files containing pieces of documentation
+ and avoiding including too much QuickBook code within the C++ code...
+ </p>
+<h4>
+<a name="geometry.aboutdoc.h6"></a>
+ <span class="phrase"><a name="geometry.aboutdoc.doxygen_aliases"></a></span><a class="link" href="aboutdoc.html#geometry.aboutdoc.doxygen_aliases">Doxygen
+ aliases</a>
+ </h4>
+<p>
+ While documenting a large library, it is unavoidable that you have to document
+ the same parameters in different places. For example, the template parameter
+ <span class="bold"><strong>Geometry</strong></span>, and the variable <span class="bold"><strong>geometry</strong></span>,
+ occur at least 100 times in our library.
+ </p>
+<p>
+ To avoid repeating the same text again and again, Doxygen aliases are used.
+ So \tparam_geometry means that the generic description for a template parameter
+ geometry is inserted. \param_geometry does the same for a parameter. This is
+ all handled by Doxygen itself. The aliases can also be parameterized, for example:
+ <span class="bold"><strong>\return_calc{area}</strong></span> is expanded to: <span class="emphasis"><em>The
+ calculated area</em></span>
+ </p>
+<p>
+ This is for Doxygen alone and is not related to <span class="emphasis"><em>doxygen_xml2qbk</em></span>
+ or QuickBook.
+ </p>
+<h4>
+<a name="geometry.aboutdoc.h7"></a>
+ <span class="phrase"><a name="geometry.aboutdoc.quickbook_macros"></a></span><a class="link" href="aboutdoc.html#geometry.aboutdoc.quickbook_macros">QuickBook
+ macros</a>
+ </h4>
+<p>
+ QuickBook has the same functionality for the same purpose: macro's or templates
+ can be defined. Within Boost.Geometry this is used in the QuickBook parts of
+ the documentation. So the general rule would be: where it is possible to use
+ a Doxygen alias, we use a Doxygen alias. If we are outside the scope of Doxygen
+ and we want to define a macro, we use a QuickBook macro.
+ </p>
+<p>
+ Stated otherwise, we don't use the generated Doxygen documentation, but if
+ we would, it would look correct and would not be unreadable by unexpanded QuickBook
+ macro's.
+ </p>
+<h4>
+<a name="geometry.aboutdoc.h8"></a>
+ <span class="phrase"><a name="geometry.aboutdoc.code_examples"></a></span><a class="link" href="aboutdoc.html#geometry.aboutdoc.code_examples">Code
+ examples</a>
+ </h4>
+<p>
+ We favour the use of code examples within the generated documentation. Example
+ code must be correct, so examples must compile, run, and produce the correct
+ results. QuickBook has a nice solution to include and present C++ source code,
+ including syntax highlighting. So we generally present the example (a complete
+ example including necessary headerfiles) and the output. Asserts are not used
+ here, these are examples and no tests.
+ </p>
+<p>
+ So this is why we did enclose in the \qbk alias above:
+ </p>
+<pre class="programlisting">[heading Example]
+[area_with_strategy]
+[area_with_strategy_output]
+</pre>
+<p>
+ We define a heading, we include the example (here denoted by the name "area_with_strategy")
+ and we include the output of the sample "area_with_strategy_output".
+ Note that we simulate that the output is C++ code, a trick giving the appropriate
+ formatting (there might be other ways to get the same effect).
+ </p>
+<p>
+ All these QuickBook examples are included in the doc/src/examples/* folders,
+ where also a Jamfile is present. Running bjam there ensures that nothing is
+ broken in the examples.
+ </p>
+<p>
+ Some examples, if relevant, are accompagnied by images. The images are generated
+ by the example themselves (though marked as commented out for QuickBook), deliver
+ an SVG file which can be manually converted to a PNG (I'm using InkScape for
+ that which is quite convenient).
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="release_notes.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="acknowledgments.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/acknowledgments.html b/libs/geometry/doc/html/geometry/acknowledgments.html
new file mode 100644
index 000000000..254d1bf38
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/acknowledgments.html
@@ -0,0 +1,75 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Acknowledgments</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="aboutdoc.html" title="About this Documentation">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="aboutdoc.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.acknowledgments"></a><a class="link" href="acknowledgments.html" title="Acknowledgments">Acknowledgments</a>
+</h2></div></div></div>
+<p>
+ We like to thank all the people who helped to develop this library.
+ </p>
+<p>
+ First of all we are grateful to Hartmut Kaiser for managing the formal review
+ of this library. Hartmut is an excellent review manager, who intervented when
+ necessary and produced the review report quickly.
+ </p>
+<p>
+ We thank the 14 reviewers of our library, reviewed from November 5, 2009 to
+ November 22, 2009. Reviews have been written by: Brandon Kohn, Christophe Henry,
+ Fabio Fracassi, Gordon Woodhull, Joachim Faulhaber, Jonathan Franklin, Jose,
+ Lucanus Simonson, Michael Caisse, Michael Fawcett, Paul Bristow, Phil Endecott,
+ Thomas Klimpel, Tom Brinkman.
+ </p>
+<p>
+ We also thank all people who discussed on the mailing lists (either at boost,
+ or at osgeo) about Boost.Geometry, in preview stage, or in review stage, or
+ after that.
+ </p>
+<p>
+ Furthermore we are thankful to people supplying patches: Arnold Metselaar,
+ Aleksey Tulinov, Christophe Henry
+ </p>
+<p>
+ Finally I (Barend) would like to thank my former employer, Geodan. They allowed
+ me to start a geographic library in 1995, which after a number of incarnations,
+ redesigns, refactorings, previews, a review and even more refactorings have
+ led to the now released Boost.Geometry. And with them I want to thank the team
+ initially involved in developing the library, Valik Solorzano Barboza, Maarten
+ Hilferink, Anne Blankert, and later Sjoerd Schreuder, Steven Fruijtier, Paul
+ den Dulk, and Joris Sierman.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="aboutdoc.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/compilation.html b/libs/geometry/doc/html/geometry/compilation.html
new file mode 100644
index 000000000..612b1ec26
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/compilation.html
@@ -0,0 +1,259 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Compilation</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="introduction.html" title="Introduction">
+<link rel="next" href="design.html" title="Design Rationale">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="introduction.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="design.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.compilation"></a><a class="link" href="compilation.html" title="Compilation">Compilation</a>
+</h2></div></div></div>
+<p>
+ Boost.Geometry is a headers-only library. Users only need to include the library
+ headers in their programs in order to be able to access definitions and algorithms
+ provided by the Boost.Geometry library. No linking against any binaries is
+ required.
+ </p>
+<p>
+ Boost.Geometry is only dependant on headers-only Boost libraries. It does not
+ introduce indirect dependencies on any binary libraries.
+ </p>
+<p>
+ In order to be able to use Boost.Geometry, the only thing users need to do
+ is to download and/or install Boost and specify location to include directories,
+ so <code class="computeroutput"><span class="identifier">include</span></code> directives of this
+ scheme will work:
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/...&gt;</span>
+</pre>
+<h4>
+<a name="geometry.compilation.h0"></a>
+ <span class="phrase"><a name="geometry.compilation.supported_compilers"></a></span><a class="link" href="compilation.html#geometry.compilation.supported_compilers">Supported
+ Compilers</a>
+ </h4>
+<p>
+ Boost.Geometry library has been successfully tested with the following compilers:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ MSVC (including Express Editions)
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
+<li class="listitem">
+ 10.0 (MSVC 2010)
+ </li>
+<li class="listitem">
+ 9.0 (MSVC 2008)
+ </li>
+<li class="listitem">
+ 8.0 (MSVC 2005)
+ </li>
+</ul></div>
+ </li>
+<li class="listitem">
+ gcc
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
+<li class="listitem">
+ gcc 4.7.0
+ </li>
+<li class="listitem">
+ gcc 4.6.2
+ </li>
+<li class="listitem">
+ gcc 4.6.1
+ </li>
+<li class="listitem">
+ gcc 4.6.0
+ </li>
+<li class="listitem">
+ gcc 4.5.2
+ </li>
+<li class="listitem">
+ gcc 4.4.0
+ </li>
+<li class="listitem">
+ gcc 4.3.4
+ </li>
+<li class="listitem">
+ gcc 4.2.1
+ </li>
+<li class="listitem">
+ gcc 3.4.6
+ </li>
+</ul></div>
+ </li>
+<li class="listitem">
+ clang
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">
+ clang x.x
+ </li></ul></div>
+ </li>
+<li class="listitem">
+ darwin
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
+<li class="listitem">
+ darwin 4.0.1
+ </li>
+<li class="listitem">
+ darwin 4.4
+ </li>
+</ul></div>
+ </li>
+<li class="listitem">
+ intel
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
+<li class="listitem">
+ intel 11.1
+ </li>
+<li class="listitem">
+ intel 11.0
+ </li>
+<li class="listitem">
+ intel 10.1
+ </li>
+</ul></div>
+ </li>
+<li class="listitem">
+ pathscale
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">
+ pathscale 4.0.8
+ </li></ul></div>
+ </li>
+</ul></div>
+<p>
+ Boost.Geometry uses Boost.Build, a text-based system for developing and testing
+ software, to configure, build and execute unit tests and example programs.
+ The build configuration is provided as a collection of <code class="computeroutput"><span class="identifier">Jamfile</span><span class="special">.</span><span class="identifier">v2</span></code> files.
+ </p>
+<p>
+ For gcc, flag <code class="literal">-Wno-long-long</code> can be used to surpress some
+ warnings originating from Boost.
+ </p>
+<h4>
+<a name="geometry.compilation.h1"></a>
+ <span class="phrase"><a name="geometry.compilation.includes"></a></span><a class="link" href="compilation.html#geometry.compilation.includes">Includes</a>
+ </h4>
+<p>
+ The most convenient headerfile including all algorithms and strategies is
+ <code class="computeroutput"><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>:
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+</pre>
+<p>
+ This is the main header of the Boost.Geometry library and it is recommended
+ to include this file.
+ </p>
+<p>
+ Alternatively, it is possible to include Boost.Geometry header files separately.
+ However, this may be inconvenient as header files might be renamed or moved
+ occasionaly in future.
+ </p>
+<p>
+ Another often used header is <code class="computeroutput"><span class="identifier">geometries</span><span class="special">.</span><span class="identifier">hpp</span></code>:
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+</pre>
+<p>
+ This includes definitions of all provided geometry types: point, linestring,
+ polygon, ring, box. The file <code class="computeroutput"><span class="identifier">geometries</span><span class="special">.</span><span class="identifier">hpp</span></code> is not
+ included in the <code class="computeroutput"><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code> headerfile because users should be given
+ the liberty to use their own geometries and not the provided ones. However,
+ for the Boost.Geometry users who want to use the provided geometries it is
+ useful to include.
+ </p>
+<p>
+ For users using multi-geometries:
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+</pre>
+<h4>
+<a name="geometry.compilation.h2"></a>
+ <span class="phrase"><a name="geometry.compilation.advanced_includes"></a></span><a class="link" href="compilation.html#geometry.compilation.advanced_includes">Advanced
+ Includes</a>
+ </h4>
+<p>
+ Users who have their own geometries and want to use algorithms from Boost.Geometry
+ might include the files containing registration macro's, like:
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+</pre>
+<h4>
+<a name="geometry.compilation.h3"></a>
+ <span class="phrase"><a name="geometry.compilation.performance"></a></span><a class="link" href="compilation.html#geometry.compilation.performance">Performance</a>
+ </h4>
+<p>
+ The enumeration below is not exhaustive but can contain hints to improve the
+ performance:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ For Microsoft MSVC, set define <code class="computeroutput"><span class="identifier">_SECURE_SCL</span><span class="special">=</span><span class="number">0</span></code> for preprocessor.
+ </li>
+<li class="listitem">
+ For Microsoft MSVC, set define <code class="computeroutput"><span class="identifier">_HAS_ITERATOR_DEBUGGING</span><span class="special">=</span><span class="number">0</span></code> for preprocessor.
+ </li>
+<li class="listitem">
+ Use of <a href="http://sourceforge.net/projects/stlport" target="_top">STLport</a>,
+ a popular open-source implementation of the STL, may result in significantly
+ faster code than use of the C++ standard library provided by MSVC.
+ </li>
+<li class="listitem">
+ Turn on compiler optimizations, compile in release mode.
+ </li>
+</ul></div>
+<h4>
+<a name="geometry.compilation.h4"></a>
+ <span class="phrase"><a name="geometry.compilation.problems_with_intellisense"></a></span><a class="link" href="compilation.html#geometry.compilation.problems_with_intellisense">Problems
+ with Intellisense</a>
+ </h4>
+<p>
+ Both versions of MSVC, 2005 and 2008 (including Express Editions) can hang
+ trying to resolve symbols and give <a href="http://en.wikipedia.org/wiki/IntelliSense" target="_top">IntelliSense</a>
+ suggestions while typing in a bracket or angle bracket. This is not directly
+ related to Boost.Geometry, but is caused by problems with handling by this
+ IDE large C++ code base with intensively used templates, such as Boost and
+ Boost.Geometry. If this is inconvenient, IntelliSense can be turned off:
+ </p>
+<div class="blockquote"><blockquote class="blockquote">
+<p>
+ <span class="emphasis"><em><span class="quote">&#8220;<span class="quote">(...)disabling IntelliSense in VC++. There is a file called
+ <code class="computeroutput"><span class="identifier">feacp</span><span class="special">.</span><span class="identifier">dll</span></code> in <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">VS8INSTALL</span><span class="special">&gt;/</span><span class="identifier">VC</span><span class="special">/</span><span class="identifier">vcpackages</span></code>
+ folder. Renaming this file will disable Intellisense feature.</span>&#8221;</span></em></span>
+ </p>
+<p>
+ -- <a href="http://blogs.msdn.com/yash/archive/2007/09/19/intellisense-issues-in-visual-c-2005.aspx" target="_top">Intellisense
+ issues in Visual C++ 2005</a>
+ </p>
+</blockquote></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="introduction.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="design.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/design.html b/libs/geometry/doc/html/geometry/design.html
new file mode 100644
index 000000000..f20771003
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/design.html
@@ -0,0 +1,843 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Design Rationale</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="compilation.html" title="Compilation">
+<link rel="next" href="quickstart.html" title="Quick Start">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="compilation.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="quickstart.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.design"></a><a class="link" href="design.html" title="Design Rationale">Design Rationale</a>
+</h2></div></div></div>
+<p>
+ Suppose you need a C++ program to calculate the distance between two points.
+ You might define a struct:
+ </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">mypoint</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ and a function, containing the algorithm:
+ </p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">mypoint</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">mypoint</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">dx</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">x</span><span class="special">;</span>
+ <span class="keyword">double</span> <span class="identifier">dy</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">y</span> <span class="special">-</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">y</span><span class="special">;</span>
+ <span class="keyword">return</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">dx</span> <span class="special">*</span> <span class="identifier">dx</span> <span class="special">+</span> <span class="identifier">dy</span> <span class="special">*</span> <span class="identifier">dy</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Quite simple, and it is usable, but not generic. For a library it has to be
+ designed way further. The design above can only be used for 2D points, for
+ the struct <span class="bold"><strong>mypoint</strong></span> (and no other struct),
+ in a Cartesian coordinate system. A generic library should be able to calculate
+ the distance:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ for any point class or struct, not on just this <span class="bold"><strong>mypoint</strong></span>
+ type
+ </li>
+<li class="listitem">
+ in more than two dimensions
+ </li>
+<li class="listitem">
+ for other coordinate systems, e.g. over the earth or on a sphere
+ </li>
+<li class="listitem">
+ between a point and a line or between other geometry combinations
+ </li>
+<li class="listitem">
+ in higher precision than <span class="emphasis"><em>double</em></span>
+ </li>
+<li class="listitem">
+ avoiding the square root: often we don't want to do that because it is
+ a relatively expensive function, and for comparing distances it is not
+ necessary
+ </li>
+</ul></div>
+<p>
+ In this and following sections we will make the design step by step more generic.
+ </p>
+<h4>
+<a name="geometry.design.h0"></a>
+ <span class="phrase"><a name="geometry.design.using_templates"></a></span><a class="link" href="design.html#geometry.design.using_templates">Using
+ Templates</a>
+ </h4>
+<p>
+ The distance function can be changed into a template function. This is trivial
+ and allows calculating the distance between other point types than just <span class="bold"><strong>mypoint</strong></span>. We add two template parameters, allowing input
+ of two different point types.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">&gt;</span>
+<span class="keyword">double</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">dx</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">x</span><span class="special">;</span>
+ <span class="keyword">double</span> <span class="identifier">dy</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">y</span> <span class="special">-</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">y</span><span class="special">;</span>
+ <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">dx</span> <span class="special">*</span> <span class="identifier">dx</span> <span class="special">+</span> <span class="identifier">dy</span> <span class="special">*</span> <span class="identifier">dy</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ This template version is slightly better, but not much.
+ </p>
+<p>
+ Consider a C++ class where member variables are protected... Such a class does
+ not allow to access <code class="computeroutput"><span class="identifier">x</span></code> and
+ <code class="computeroutput"><span class="identifier">y</span></code> members directly. So, this
+ paragraph is short and we just move on.
+ </p>
+<h4>
+<a name="geometry.design.h1"></a>
+ <span class="phrase"><a name="geometry.design.using_traits"></a></span><a class="link" href="design.html#geometry.design.using_traits">Using
+ Traits</a>
+ </h4>
+<p>
+ We need to take a generic approach and allow any point type as input to the
+ distance function. Instead of accessing <code class="computeroutput"><span class="identifier">x</span></code>
+ and <code class="computeroutput"><span class="identifier">y</span></code> members, we will add
+ a few levels of indirection, using a traits system. The function then becomes:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">&gt;</span>
+<span class="keyword">double</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">dx</span> <span class="special">=</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">a</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">);</span>
+ <span class="keyword">double</span> <span class="identifier">dy</span> <span class="special">=</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">a</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">dx</span> <span class="special">*</span> <span class="identifier">dx</span> <span class="special">+</span> <span class="identifier">dy</span> <span class="special">*</span> <span class="identifier">dy</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ This adapted distance function uses a generic get function, with dimension
+ as a template parameter, to access the coordinates of a point. This get forwards
+ to the traits system, defined as following:
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">traits</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">D</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">access</span> <span class="special">{};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ which is then specialized for our <span class="bold"><strong>mypoint</strong></span>
+ type, implementing a static method called <code class="computeroutput"><span class="identifier">get</span></code>:
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">traits</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">access</span><span class="special">&lt;</span><span class="identifier">mypoint</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">double</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">mypoint</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">x</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="comment">// same for 1: p.y</span>
+ <span class="special">...</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Calling <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">access</span><span class="special">&lt;</span><span class="identifier">mypoint</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>
+ now returns us our <code class="computeroutput"><span class="identifier">x</span></code> coordinate.
+ Nice, isn't it? It is too verbose for a function like this, used so often in
+ the library. We can shorten the syntax by adding an extra free function:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">int</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+<span class="keyword">inline</span> <span class="keyword">double</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">P</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">access</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&gt;::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">p</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ This enables us to call <code class="computeroutput"><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">a</span><span class="special">)</span></code>, for any
+ point having the traits::access specialization, as shown in the distance algorithm
+ at the start of this paragraph. So we wanted to enable classes with methods
+ like <code class="computeroutput"><span class="identifier">x</span><span class="special">()</span></code>,
+ and they are supported as long as there is a specialization of the access
+ <code class="computeroutput"><span class="keyword">struct</span></code> with a static <code class="computeroutput"><span class="identifier">get</span></code> function returning <code class="computeroutput"><span class="identifier">x</span><span class="special">()</span></code> for dimension 0, and similar for 1 and <code class="computeroutput"><span class="identifier">y</span><span class="special">()</span></code>.
+ </p>
+<h4>
+<a name="geometry.design.h2"></a>
+ <span class="phrase"><a name="geometry.design.dimension_agnosticism"></a></span><a class="link" href="design.html#geometry.design.dimension_agnosticism">Dimension
+ Agnosticism</a>
+ </h4>
+<p>
+ Now we can calculate the distance between points in 2D, points of any structure
+ or class. However, we wanted to have 3D as well. So we have to make it dimension
+ agnostic. This complicates our distance function. We can use a <code class="computeroutput"><span class="keyword">for</span></code> loop to walk through dimensions, but for
+ loops have another performance than the straightforward coordinate addition
+ which was there originally. However, we can make more usage of templates and
+ make the distance algorithm as following, more complex but attractive for template
+ fans:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">pythagoras</span>
+<span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">double</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">a</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">d</span> <span class="special">*</span> <span class="identifier">d</span> <span class="special">+</span> <span class="identifier">pythagoras</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">D</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span> <span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">pythagoras</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">double</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">P2</span> <span class="keyword">const</span><span class="special">&amp;)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ The distance function is calling that <code class="computeroutput"><span class="identifier">pythagoras</span></code>
+ structure, specifying the number of dimensions:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">&gt;</span>
+<span class="keyword">double</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">BOOST_STATIC_ASSERT</span><span class="special">((</span> <span class="identifier">dimension</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">&gt;::</span><span class="identifier">value</span> <span class="special">==</span> <span class="identifier">dimension</span><span class="special">&lt;</span><span class="identifier">P2</span><span class="special">&gt;::</span><span class="identifier">value</span> <span class="special">));</span>
+
+ <span class="keyword">return</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">pythagoras</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">dimension</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">));</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The dimension which is referred to is defined using another traits class:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">traits</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">dimension</span> <span class="special">{};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ which has to be specialized again for the <code class="computeroutput"><span class="keyword">struct</span>
+ <span class="identifier">mypoint</span></code>.
+ </p>
+<p>
+ Because it only has to publish a value, we conveniently derive it from the
+ Boost.MPL <code class="computeroutput"><span class="keyword">class</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span></code>:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">traits</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">dimension</span><span class="special">&lt;</span><span class="identifier">mypoint</span><span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;</span>
+ <span class="special">{};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Like the free get function, the library also contains a dimension meta-function.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">dimension</span> <span class="special">:</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">dimension</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;</span>
+<span class="special">{};</span>
+</pre>
+<p>
+ Below is explained why the extra declaration is useful. Now we have agnosticism
+ in the number of dimensions. Our more generic distance function now accepts
+ points of three or more dimensions. The compile-time assertion will prevent
+ point a having two dimension and point b having three dimensions.
+ </p>
+<h4>
+<a name="geometry.design.h3"></a>
+ <span class="phrase"><a name="geometry.design.coordinate_type"></a></span><a class="link" href="design.html#geometry.design.coordinate_type">Coordinate
+ Type</a>
+ </h4>
+<p>
+ We assumed double above. What if our points are in integer?
+ </p>
+<p>
+ We can easily add a traits class, and we will do that. However, the distance
+ between two integer coordinates can still be a fractionized value. Besides
+ that, a design goal was to avoid square roots. We handle these cases below,
+ in another paragraph. For the moment we keep returning double, but we allow
+ integer coordinates for our point types. To define the coordinate type, we
+ add another traits class, <code class="computeroutput"><span class="identifier">coordinate_type</span></code>,
+ which should be specialized by the library user:
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">traits</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">coordinate_type</span><span class="special">{};</span>
+
+ <span class="comment">// specialization for our mypoint</span>
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">mypoint</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">double</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Like the access function, where we had a free get function, we add a proxy
+ here as well. A longer version is presented later on, the short function would
+ look like this:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">coordinate_type</span> <span class="special">:</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;</span> <span class="special">{};</span>
+</pre>
+<p>
+ We now can modify our distance algorithm again. Because it still returns double,
+ we only modify the <code class="computeroutput"><span class="identifier">pythagoras</span></code>
+ computation class. It should return the coordinate type of its input. But,
+ it has two input, possibly different, point types. They might also differ in
+ their coordinate types. Not that that is very likely, but we&#8217;re designing
+ a generic library and we should handle those strange cases. We have to choose
+ one of the coordinate types and of course we select the one with the highest
+ precision. This is not worked out here, it would be too long, and it is not
+ related to geometry. We just assume that there is a meta-function <code class="computeroutput"><span class="identifier">select_most_precise</span></code> selecting the best type.
+ </p>
+<p>
+ So our computation class becomes:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">pythagoras</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">select_most_precise</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">P2</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">computation_type</span><span class="special">;</span>
+
+ <span class="keyword">static</span> <span class="identifier">computation_type</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">computation_type</span> <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">a</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">d</span> <span class="special">*</span> <span class="identifier">d</span> <span class="special">+</span> <span class="identifier">pythagoras</span> <span class="special">&lt;</span><span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">D</span><span class="special">-</span><span class="number">1</span><span class="special">&gt;</span> <span class="special">::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<h4>
+<a name="geometry.design.h4"></a>
+ <span class="phrase"><a name="geometry.design.different_geometries"></a></span><a class="link" href="design.html#geometry.design.different_geometries">Different
+ Geometries</a>
+ </h4>
+<p>
+ We have designed a dimension agnostic system supporting any point type of any
+ coordinate type. There are still some tweaks but they will be worked out later.
+ Now we will see how we calculate the distance between a point and a polygon,
+ or between a point and a line-segment. These formulae are more complex, and
+ the influence on design is even larger. We don&#8217;t want to add a function with
+ another name:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">S</span><span class="special">&gt;</span>
+<span class="keyword">double</span> <span class="identifier">distance_point_segment</span><span class="special">(</span><span class="identifier">P</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">S</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">s</span><span class="special">)</span>
+</pre>
+<p>
+ We want to be generic, the distance function has to be called from code not
+ knowing the type of geometry it handles, so it has to be named distance. We
+ also cannot create an overload because that would be ambiguous, having the
+ same template signature. There are two solutions:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ tag dispatching
+ </li>
+<li class="listitem">
+ SFINAE
+ </li>
+</ul></div>
+<p>
+ We select tag dispatching because it fits into the traits system. The earlier
+ versions (previews) of Boost.Geometry used SFINAE but we found it had several
+ drawbacks for such a big design, so the switch to tag dispatching was made.
+ </p>
+<p>
+ With tag dispatching the distance algorithm inspects the type of geometry of
+ the input parameters. The distance function will be changed into this:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">G1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">G2</span><span class="special">&gt;</span>
+<span class="keyword">double</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">G1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g1</span><span class="special">,</span> <span class="identifier">G2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g2</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">dispatch</span><span class="special">::</span><span class="identifier">distance</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">G1</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">G2</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="identifier">G1</span><span class="special">,</span> <span class="identifier">G2</span>
+ <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">g1</span><span class="special">,</span> <span class="identifier">g2</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ It is referring to the tag meta-function and forwarding the call to the <span class="bold"><strong>apply</strong></span> method of a <span class="emphasis"><em>dispatch::distance</em></span>
+ structure. The <span class="bold"><strong>tag</strong></span> meta-function is another
+ traits class, and should be specialized for per point type, both shown here:
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">traits</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">G</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">tag</span> <span class="special">{};</span>
+
+ <span class="comment">// specialization</span>
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">mypoint</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">point_tag</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Free meta-function, like coordinate_system and get:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">G</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">tag</span> <span class="special">:</span> <span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">G</span><span class="special">&gt;</span> <span class="special">{};</span>
+</pre>
+<p>
+ <span class="bold"><strong>Tags</strong></span> (<code class="computeroutput"><span class="identifier">point_tag</span></code>,
+ <code class="computeroutput"><span class="identifier">segment_tag</span></code>, etc) are empty
+ structures with the purpose to specialize a dispatch struct. The dispatch struct
+ for distance, and its specializations, are all defined in a separate namespace
+ and look like the following:
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">dispatch</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Tag1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Tag2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">G1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">G2</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">distance</span>
+ <span class="special">{};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">distance</span> <span class="special">&lt;</span> <span class="identifier">point_tag</span><span class="special">,</span> <span class="identifier">point_tag</span><span class="special">,</span> <span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span> <span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">double</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="comment">// here we call pythagoras</span>
+ <span class="comment">// exactly like we did before</span>
+ <span class="special">...</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">S</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">distance</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">point_tag</span><span class="special">,</span> <span class="identifier">segment_tag</span><span class="special">,</span> <span class="identifier">P</span><span class="special">,</span> <span class="identifier">S</span>
+ <span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">double</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">P</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">S</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">s</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="comment">// here we refer to another function</span>
+ <span class="comment">// implementing point-segment</span>
+ <span class="comment">// calculations in 2 or 3</span>
+ <span class="comment">// dimensions...</span>
+ <span class="special">...</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+
+ <span class="comment">// here we might have many more</span>
+ <span class="comment">// specializations,</span>
+ <span class="comment">// for point-polygon, box-circle, etc.</span>
+
+<span class="special">}</span> <span class="comment">// namespace</span>
+</pre>
+<p>
+ So yes, it is possible; the distance algorithm is generic now in the sense
+ that it also supports different geometry types. One drawback: we have to define
+ two dispatch specializations for point - segment and for segment - point separately.
+ That will also be solved, in the paragraph reversibility below. The example
+ below shows where we are now: different point types, geometry types, dimensions.
+ </p>
+<pre class="programlisting"><span class="identifier">point</span> <span class="identifier">a</span><span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">);</span>
+<span class="identifier">point</span> <span class="identifier">b</span><span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="number">2</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="identifier">segment</span> <span class="identifier">s1</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="number">3</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">s1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="identifier">rgb</span> <span class="identifier">red</span><span class="special">(</span><span class="number">255</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">rbc</span> <span class="identifier">orange</span><span class="special">(</span><span class="number">255</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"color distance: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">red</span><span class="special">,</span> <span class="identifier">orange</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<h4>
+<a name="geometry.design.h5"></a>
+ <span class="phrase"><a name="geometry.design.kernel_revisited"></a></span><a class="link" href="design.html#geometry.design.kernel_revisited">Kernel
+ Revisited</a>
+ </h4>
+<p>
+ We described above that we had a traits class <code class="computeroutput"><span class="identifier">coordinate_type</span></code>,
+ defined in namespace traits, and defined a separate <code class="computeroutput"><span class="identifier">coordinate_type</span></code>
+ class as well. This was actually not really necessary before, because the only
+ difference was the namespace clause. But now that we have another geometry
+ type, a segment in this case, it is essential. We can call the <code class="computeroutput"><span class="identifier">coordinate_type</span></code> meta-function for any geometry
+ type, point, segment, polygon, etc, implemented again by tag dispatching:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">G</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">coordinate_type</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">dispatch</span><span class="special">::</span><span class="identifier">coordinate_type</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">G</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">G</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ Inside the dispatch namespace this meta-function is implemented twice: a generic
+ version and one specialization for points. The specialization for points calls
+ the traits class. The generic version calls the point specialization, as a
+ sort of recursive meta-function definition:
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">dispatch</span>
+<span class="special">{</span>
+
+ <span class="comment">// Version for any geometry:</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">GeometryTag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">G</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">coordinate_type</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">point_type</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">GeometryTag</span><span class="special">,</span> <span class="identifier">G</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">point_type</span><span class="special">;</span>
+
+ <span class="comment">// Call specialization on point-tag</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">coordinate_type</span> <span class="special">&lt;</span> <span class="identifier">point_tag</span><span class="special">,</span> <span class="identifier">point_type</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="comment">// Specialization for point-type:</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">point_tag</span><span class="special">,</span> <span class="identifier">P</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span>
+ <span class="identifier">traits</span><span class="special">::</span><span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ So it calls another meta-function point_type. This is not elaborated in here
+ but realize that it is available for all geometry types, and typedefs the point
+ type which makes up the geometry, calling it type.
+ </p>
+<p>
+ The same applies for the meta-function dimension and for the upcoming meta-function
+ coordinate system.
+ </p>
+<h4>
+<a name="geometry.design.h6"></a>
+ <span class="phrase"><a name="geometry.design.coordinate_system"></a></span><a class="link" href="design.html#geometry.design.coordinate_system">Coordinate
+ System</a>
+ </h4>
+<p>
+ Until here we assumed a Cartesian system. But we know that the Earth is not
+ flat. Calculating a distance between two GPS-points with the system above would
+ result in nonsense. So we again extend our design. We define for each point
+ type a coordinate system type using the traits system again. Then we make the
+ calculation dependant on that coordinate system.
+ </p>
+<p>
+ Coordinate system is similar to coordinate type, a meta-function, calling a
+ dispatch function to have it for any geometry-type, forwarding to its point
+ specialization, and finally calling a traits class, defining a typedef type
+ with a coordinate system. We don&#8217;t show that all here again. We only show
+ the definition of a few coordinate systems:
+ </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">cartesian</span> <span class="special">{};</span>
+
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">DegreeOrRadian</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">geographic</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">DegreeOrRadian</span> <span class="identifier">units</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ So Cartesian is simple, for geographic we can also select if its coordinates
+ are stored in degrees or in radians.
+ </p>
+<p>
+ The distance function will now change: it will select the computation method
+ for the corresponding coordinate system and then call the dispatch struct for
+ distance. We call the computation method specialized for coordinate systems
+ a strategy. So the new version of the distance function is:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">G1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">G2</span><span class="special">&gt;</span>
+<span class="keyword">double</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">G1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g1</span><span class="special">,</span> <span class="identifier">G2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g2</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">strategy_distance</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">coordinate_system</span><span class="special">&lt;</span><span class="identifier">G1</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">coordinate_system</span><span class="special">&lt;</span><span class="identifier">G2</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">point_type</span><span class="special">&lt;</span><span class="identifier">G1</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">point_type</span><span class="special">&lt;</span><span class="identifier">G2</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="identifier">dimension</span><span class="special">&lt;</span><span class="identifier">G1</span><span class="special">&gt;::</span><span class="identifier">value</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">strategy</span><span class="special">;</span>
+
+ <span class="keyword">return</span> <span class="identifier">dispatch</span><span class="special">::</span><span class="identifier">distance</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">G1</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">G2</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="identifier">G1</span><span class="special">,</span> <span class="identifier">G2</span><span class="special">,</span> <span class="identifier">strategy</span>
+ <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">g1</span><span class="special">,</span> <span class="identifier">g2</span><span class="special">,</span> <span class="identifier">strategy</span><span class="special">());</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The strategy_distance mentioned here is a struct with specializations for different
+ coordinate systems.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">strategy_distance</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">strategy_distance</span><span class="special">&lt;</span><span class="identifier">cartesian</span><span class="special">,</span> <span class="identifier">cartesian</span><span class="special">,</span> <span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">pythagoras</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ So, here is our <code class="computeroutput"><span class="identifier">pythagoras</span></code>
+ again, now defined as a strategy. The distance dispatch function just calls
+ its apply method.
+ </p>
+<p>
+ So this is an important step: for spherical or geographical coordinate systems,
+ another strategy (computation method) can be implemented. For spherical coordinate
+ systems have the haversine formula. So the dispatching traits struct is specialized
+ like this
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">D</span> <span class="special">=</span> <span class="number">2</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">strategy_distance</span><span class="special">&lt;</span><span class="identifier">spherical</span><span class="special">,</span> <span class="identifier">spherical</span><span class="special">,</span> <span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">haversine</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="comment">// struct haversine with apply function</span>
+<span class="comment">// is omitted here</span>
+</pre>
+<p>
+ For geography, we have some alternatives for distance calculation. There is
+ the Andoyer method, fast and precise, and there is the Vincenty method, slower
+ and more precise, and there are some less precise approaches as well.
+ </p>
+<p>
+ Per coordinate system, one strategy is defined as the default strategy. To
+ be able to use another strategy as well, we modify our design again and add
+ an overload for the distance algorithm, taking a strategy object as a third
+ parameter.
+ </p>
+<p>
+ This new overload distance function also has the advantage that the strategy
+ can be constructed outside the distance function. Because it was constructed
+ inside above, it could not have construction parameters. But for Andoyer or
+ Vincenty, or the haversine formula, it certainly makes sense to have a constructor
+ taking the radius of the earth as a parameter.
+ </p>
+<p>
+ So, the distance overloaded function is:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">G1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">G2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">S</span><span class="special">&gt;</span>
+<span class="keyword">double</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">G1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g1</span><span class="special">,</span> <span class="identifier">G2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g2</span><span class="special">,</span> <span class="identifier">S</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">dispatch</span><span class="special">::</span><span class="identifier">distance</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">G1</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">G2</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="identifier">G1</span><span class="special">,</span> <span class="identifier">G2</span><span class="special">,</span> <span class="identifier">S</span>
+ <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">g1</span><span class="special">,</span> <span class="identifier">g2</span><span class="special">,</span> <span class="identifier">strategy</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The strategy has to have a method apply taking two points as arguments (for
+ points). It is not required that it is a static method. A strategy might define
+ a constructor, where a configuration value is passed and stored as a member
+ variable. In those cases a static method would be inconvenient. It can be implemented
+ as a normal method (with the const qualifier).
+ </p>
+<p>
+ We do not list all implementations here, Vincenty would cover half a page of
+ mathematics, but you will understand the idea. We can call distance like this:
+ </p>
+<pre class="programlisting"><span class="identifier">distance</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c2</span><span class="special">)</span>
+</pre>
+<p>
+ where <code class="computeroutput"><span class="identifier">c1</span></code> and <code class="computeroutput"><span class="identifier">c2</span></code> are Cartesian points, or like this:
+ </p>
+<pre class="programlisting"><span class="identifier">distance</span><span class="special">(</span><span class="identifier">g1</span><span class="special">,</span> <span class="identifier">g2</span><span class="special">)</span>
+</pre>
+<p>
+ where <code class="computeroutput"><span class="identifier">g1</span></code> and <code class="computeroutput"><span class="identifier">g2</span></code> are Geographic points, calling the default
+ strategy for Geographic points (e.g. Andoyer), and like this:
+ </p>
+<pre class="programlisting"><span class="identifier">distance</span><span class="special">(</span><span class="identifier">g1</span><span class="special">,</span> <span class="identifier">g2</span><span class="special">,</span> <span class="identifier">vincenty</span><span class="special">&lt;</span><span class="identifier">G1</span><span class="special">,</span> <span class="identifier">G2</span><span class="special">&gt;(</span><span class="number">6275</span><span class="special">))</span>
+</pre>
+<p>
+ where a strategy is specified explicitly and constructed with a radius.
+ </p>
+<h4>
+<a name="geometry.design.h7"></a>
+ <span class="phrase"><a name="geometry.design.point_concept"></a></span><a class="link" href="design.html#geometry.design.point_concept">Point
+ Concept</a>
+ </h4>
+<p>
+ The five traits classes mentioned in the previous sections form together the
+ Point Concept. Any point type for which specializations are implemented in
+ the traits namespace should be accepted a as valid type. So the Point Concept
+ consists of:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ a specialization for <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>
+ </li>
+<li class="listitem">
+ a specialization for <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">coordinate_system</span></code>
+ </li>
+<li class="listitem">
+ a specialization for <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">coordinate_type</span></code>
+ </li>
+<li class="listitem">
+ a specialization for <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">dimension</span></code>
+ </li>
+<li class="listitem">
+ a specialization for <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">access</span></code>
+ </li>
+</ul></div>
+<p>
+ The last one is a class, containing the method get and the (optional) method
+ set, the first four are metafunctions, either defining type or declaring a
+ value (conform MPL conventions).
+ </p>
+<p>
+ So we now have agnosticism for the number of dimensions, agnosticism for coordinate
+ systems; the design can handle any coordinate type, and it can handle different
+ geometry types. Furthermore we can specify our own strategies, the code will
+ not compile in case of two points with different dimensions (because of the
+ assertion), and it will not compile for two points with different coordinate
+ systems (because there is no specialization). A library can check if a point
+ type fulfills the requirements imposed by the concepts. This is handled in
+ the upcoming section Concept Checking.
+ </p>
+<h4>
+<a name="geometry.design.h8"></a>
+ <span class="phrase"><a name="geometry.design.return_type"></a></span><a class="link" href="design.html#geometry.design.return_type">Return
+ Type</a>
+ </h4>
+<p>
+ We promised that calling <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">sqrt</span></code> was
+ not always necessary. So we define a distance result <code class="computeroutput"><span class="keyword">struct</span></code>
+ that contains the squared value and is convertible to a double value. This,
+ however, only has to be done for <code class="computeroutput"><span class="identifier">pythagoras</span></code>.
+ The spherical distance functions do not take the square root so for them it
+ is not necessary to avoid the expensive square root call; they can just return
+ their distance.
+ </p>
+<p>
+ So the distance result struct is dependant on strategy, therefore made a member
+ type of the strategy. The result struct looks like this:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span> <span class="special">=</span> <span class="keyword">double</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">cartesian_distance</span>
+<span class="special">{</span>
+ <span class="identifier">T</span> <span class="identifier">sq</span><span class="special">;</span>
+ <span class="keyword">explicit</span> <span class="identifier">cartesian_distance</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">sq</span> <span class="special">(</span><span class="identifier">v</span><span class="special">)</span> <span class="special">{}</span>
+
+ <span class="keyword">inline</span> <span class="keyword">operator</span> <span class="identifier">T</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">sq</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ It also has operators defined to compare itself to other results without taking
+ the square root.
+ </p>
+<p>
+ Each strategy should define its return type, within the strategy class, for
+ example:
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">cartesian_distance</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">return_type</span><span class="special">;</span>
+</pre>
+<p>
+ or:
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="keyword">double</span> <span class="identifier">return_type</span><span class="special">;</span>
+</pre>
+<p>
+ for cartesian (pythagoras) and spherical, respectively.
+ </p>
+<p>
+ Again our distance function will be modified, as expected, to reflect the new
+ return type. For the overload with a strategy it is not complex:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">G1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">G2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span> <span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">::</span><span class="identifier">return_type</span> <span class="identifier">distance</span><span class="special">(</span> <span class="identifier">G1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">G1</span> <span class="special">,</span> <span class="identifier">G2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">G2</span> <span class="special">,</span> <span class="identifier">S</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span>
+</pre>
+<p>
+ But for the one without strategy we have to select strategy, coordinate type,
+ etc. It would be spacious to do it in one line so we add a separate meta-function:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">G1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">G2</span> <span class="special">=</span> <span class="identifier">G1</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">distance_result</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">point_type</span><span class="special">&lt;</span><span class="identifier">G1</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">P1</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">point_type</span><span class="special">&lt;</span><span class="identifier">G2</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">P2</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">strategy_distance</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">cs_tag</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">cs_tag</span><span class="special">&lt;</span><span class="identifier">P2</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">S</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">S</span><span class="special">::</span><span class="identifier">return_type</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ and modify our distance function:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">G1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">G2</span><span class="special">&gt;</span>
+<span class="keyword">inline</span> <span class="keyword">typename</span> <span class="identifier">distance_result</span><span class="special">&lt;</span><span class="identifier">G1</span><span class="special">,</span> <span class="identifier">G2</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">G1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g1</span><span class="special">,</span> <span class="identifier">G2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g2</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Of course also the apply functions in the dispatch specializations will return
+ a result like this. They have a strategy as a template parameter everywhere,
+ making the less verbose version possible.
+ </p>
+<h4>
+<a name="geometry.design.h9"></a>
+ <span class="phrase"><a name="geometry.design.summary"></a></span><a class="link" href="design.html#geometry.design.summary">Summary</a>
+ </h4>
+<p>
+ In this design rationale, Boost.Geometry is step by step designed using tag
+ dispatching, concepts, traits, and metaprogramming. We used the well-known
+ distance function to show the design.
+ </p>
+<p>
+ Boost.Geometry is designed like described here, with some more techniques as
+ automatically reversing template arguments, tag casting, and reusing implementation
+ classes or dispatch classes as policies in other dispatch classes.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="compilation.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="quickstart.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/examples.html b/libs/geometry/doc/html/geometry/examples.html
new file mode 100644
index 000000000..5e949e3cd
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/examples.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Examples</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="indexes/alphabetical_index.html" title="Alphabetical Index">
+<link rel="next" href="examples/example__adapting_a_legacy_geometry_object_model.html" title="Example: Adapting a legacy geometry object model">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="indexes/alphabetical_index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="examples/example__adapting_a_legacy_geometry_object_model.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.examples"></a><a class="link" href="examples.html" title="Examples">Examples</a>
+</h2></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="examples/example__adapting_a_legacy_geometry_object_model.html">Example:
+ Adapting a legacy geometry object model</a></span></dt>
+<dt><span class="section"><a href="examples/example_source_code__adapting_a_legacy_geometry_object_model.html">Example
+ source code: Adapting a legacy geometry object model</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="indexes/alphabetical_index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="examples/example__adapting_a_legacy_geometry_object_model.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/examples/example__adapting_a_legacy_geometry_object_model.html b/libs/geometry/doc/html/geometry/examples/example__adapting_a_legacy_geometry_object_model.html
new file mode 100644
index 000000000..773bb38cf
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/examples/example__adapting_a_legacy_geometry_object_model.html
@@ -0,0 +1,256 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Example: Adapting a legacy geometry object model</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../examples.html" title="Examples">
+<link rel="prev" href="../examples.html" title="Examples">
+<link rel="next" href="example_source_code__adapting_a_legacy_geometry_object_model.html" title="Example source code: Adapting a legacy geometry object model">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../examples.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.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="example_source_code__adapting_a_legacy_geometry_object_model.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.examples.example__adapting_a_legacy_geometry_object_model"></a><a class="link" href="example__adapting_a_legacy_geometry_object_model.html" title="Example: Adapting a legacy geometry object model">Example:
+ Adapting a legacy geometry object model</a>
+</h3></div></div></div>
+<p>
+ One of the primary benefits of Boost.Geometry, and the reason for its fairly
+ complex template-based implementation, is that it allows for integration
+ with legacy classes/objects.
+ </p>
+<p>
+ By defining the relationship between the Boost.Geometry concepts and an existing,
+ legacy object model, the legacy objects can be used in place of Boost.Geometry's
+ own geometry classes.
+ </p>
+<p>
+ Boost.Geometry will then happliy read and write directly from and to the
+ legacy object, treating it as a native Boost.Geometry object.
+ </p>
+<p>
+ This means that one can adapt algorithms and methods from Boost.Geometry
+ to any existing legacy geometry object model at a very small runtime cost,
+ which is simply not possible with most geometry libraries, where one has
+ to make an intermediate object specific to the geometry library one is using.
+ </p>
+<p>
+ The following example will demonstrate the adaption process of a legacy geometry
+ object model for use with Boost.Geometry.
+ </p>
+<h3>
+<a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.h0"></a>
+ <span class="phrase"><a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_a_shared_geometry_legacy_object_model"></a></span><a class="link" href="example__adapting_a_legacy_geometry_object_model.html#geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_a_shared_geometry_legacy_object_model">Adapting
+ a shared geometry legacy object model</a>
+ </h3>
+<h4>
+<a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.h1"></a>
+ <span class="phrase"><a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.example_code__object_hierarcy"></a></span><a class="link" href="example__adapting_a_legacy_geometry_object_model.html#geometry.examples.example__adapting_a_legacy_geometry_object_model.example_code__object_hierarcy">Example
+ code: object hierarcy</a>
+ </h4>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">QPoint</span>
+<span class="special">{</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">double</span> <span class="identifier">x</span><span class="special">;</span>
+ <span class="keyword">double</span> <span class="identifier">y</span><span class="special">;</span>
+ <span class="identifier">QPoint</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">y</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">x</span><span class="special">(</span><span class="identifier">x</span><span class="special">),</span> <span class="identifier">y</span><span class="special">(</span><span class="identifier">y</span><span class="special">)</span> <span class="special">{}</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">QLineString</span>
+<span class="special">{</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">bool</span> <span class="identifier">cw</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">*&gt;</span> <span class="identifier">points</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">QRing</span>
+<span class="special">{</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QLineString</span><span class="special">*&gt;</span> <span class="identifier">lines</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">QPolygon</span>
+<span class="special">{</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">QRing</span><span class="special">*</span> <span class="identifier">exterior</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QRing</span><span class="special">*&gt;</span> <span class="identifier">interiors</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ The legacy object hierarcy is based on topology (e.g. two QRings might share
+ one QLineString) instead of points directly (i.e. each object does not point
+ directly to it's QPoints), and it also uses pointers for access.
+ </p>
+<p>
+ This is the other common way to approach geometries, to enable e.g. shared
+ boundaries between surfaces. Boost.Geometry's approach use simple features,
+ and does not have shared geometries.
+ </p>
+<p>
+ The mismatch in representation is fixed by creating a custom iterator, that
+ exposes a Boost.Range of Points for every object. This way, Boost.Geometry's
+ functions will operate on the QRing as if it was a collection of Points,
+ which is a requirement.
+ </p>
+<h3>
+<a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.h2"></a>
+ <span class="phrase"><a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_qpoint"></a></span><a class="link" href="example__adapting_a_legacy_geometry_object_model.html#geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_qpoint">Adapting
+ QPoint</a>
+ </h3>
+<p>
+ The <a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#adaption_of_qpoint_source_code">adaption of the QPoint</a>
+ is fairly straightforward, one just needs to implement the requirements.
+ </p>
+<p>
+ Even though the geometries in our legacy object model use pointers of QPoints,
+ Boost.Geometry automatically handles the conversion from pointers-to-Points
+ to references-to-Points internally, so we do not have to convert them manually.
+ </p>
+<p>
+ Alternatively, we can use the <a class="link" href="../reference/adapted/register/boost_geometry_register_point_2d.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D">BOOST_GEOMETRY_REGISTER_POINT_2D(QPoint,
+ double, cs::cartesian, x, y)</a> helper macro, which does exactly the
+ same as our manual adaption.
+ </p>
+<p>
+ The sample code adapts QPoint to the <a class="link" href="../reference/concepts/concept_point.html" title="Point Concept">Point
+ Concept</a> using specialization of the traits class.
+ </p>
+<h3>
+<a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.h3"></a>
+ <span class="phrase"><a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_qlinestring"></a></span><a class="link" href="example__adapting_a_legacy_geometry_object_model.html#geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_qlinestring">Adapting
+ QLineString</a>
+ </h3>
+<p>
+ The <a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#adaption_of_qlinestring_source_code">adaption of the QLineString</a>
+ is very simple on the surface, as it is just "a specialization of traits::tag
+ defining linestring_tag as type". Alternatively, we can use the <a class="link" href="../reference/adapted/register/boost_geometry_register_linestring.html" title="BOOST_GEOMETRY_REGISTER_LINESTRING">BOOST_GEOMETRY_REGISTER_LINESTRING(QLineString)</a>
+ helper macro, which does exactly the same as our manual adaption.
+ </p>
+<p>
+ However, the <a class="link" href="../reference/concepts/concept_linestring.html" title="Linestring Concept">LineString
+ concept</a> also requires that the collection of Points "must behave
+ like a Boost.Range Random Access Range" and "the type defined by
+ the metafunction range_value&lt;...&gt;::type must fulfill the Point Concept".
+ </p>
+<p>
+ This means that we have to do two things:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Make QLineString behave like a Boost.Range, with Random Access requirements
+ </li>
+<li class="listitem">
+ Make sure that the Boost.Range iterates over QPoints, which we already
+ have adapted
+ </li>
+</ul></div>
+<p>
+ This might look like a lot of work, but we are in luck: a std::vector is
+ nearly a Boost.Range, and already iterate over pointers-to-QPoints, that
+ are handled by Boost.Geometry. The <a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#adaption_of_qlinestring_range_source_code">code
+ for making QLineString a Boost.Range</a> is therefore fairly straightforward.
+ </p>
+<h3>
+<a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.h4"></a>
+ <span class="phrase"><a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_qring"></a></span><a class="link" href="example__adapting_a_legacy_geometry_object_model.html#geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_qring">Adapting
+ QRing</a>
+ </h3>
+<p>
+ The <a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#adaption_of_qring_source_code">adaption of the QRing</a>
+ is mostly equal to the QLineString in that there is a tag and a collection
+ to iterate through. Alternatively, we can use the <a class="link" href="../reference/adapted/register/boost_geometry_register_ring.html" title="BOOST_GEOMETRY_REGISTER_RING">BOOST_GEOMETRY_REGISTER_RING(QRing)</a>
+ helper macro, which does exactly the same as our manual adaption.
+ </p>
+<p>
+ However, the QRing expose pointers-to-QLineStrings, and not QPoints directly,
+ which is <a class="link" href="../reference/concepts/concept_ring.html" title="Ring Concept">required
+ in the Ring concept</a>, so it is not enough to trivially make the std::vector
+ into a Boost.Range. We need to create a Boost.Iterator that expose QPoints,
+ and because we are dealing with a legacy object model, we are not allowed
+ to change the class definition.
+ </p>
+<p>
+ The <a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#adaption_of_qring_iterator_source_code">custom iterator
+ that does this</a> uses Boost.Iterator Facade, and is not very different
+ from the <a href="http://www.boost.org/doc/libs/1_53_0/libs/iterator/doc/iterator_facade.html" target="_top">example
+ provided in Boost.Iterator's own documentation</a>(link), except that
+ our Boost.Range need to be random access.
+ </p>
+<p>
+ Now, with the custom iterator made, we can <a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#adaption_of_qring_range_source_code">define
+ the Boost.Range</a> that traverses through QPoints.
+ </p>
+<h3>
+<a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.h5"></a>
+ <span class="phrase"><a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_qpolygon"></a></span><a class="link" href="example__adapting_a_legacy_geometry_object_model.html#geometry.examples.example__adapting_a_legacy_geometry_object_model.adapting_qpolygon">Adapting
+ QPolygon</a>
+ </h3>
+<p>
+ <a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#adaption_of_qpolygon_source_code">Adapting the QPolygon</a>
+ to the <a class="link" href="../reference/concepts/concept_polygon.html" title="Polygon Concept">Polygon
+ Concept</a> is a little more involved than the other geometry types.
+ </p>
+<p>
+ The only requirement that is not straightforward to adapt is the interior_rings'
+ get method.
+ </p>
+<p>
+ A Boost.Geometry Polygon operates on Ring objects, and unfortunately, Boost.Geometry
+ does not automatically handle the conversion from pointers to references
+ for Rings internally (only Points, as mentioned).
+ </p>
+<p>
+ Therefore, we need to expose QRings instead of pointers-to-QRings for the
+ interior Rings, which means a little more work than the pointers-to-QPoints
+ for QLineString and QRing.
+ </p>
+<p>
+ First, we <a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#adaption_of_qpolygon_iterator_source_code">create
+ a Boost.Iterator Facade</a> that returns QRing instead of pointer-to-QRing:
+ </p>
+<p>
+ Now we have an iterator that can "convert" our pointer-to-QRing
+ into QRing. However, the get method of the interior Rings must return a Boost.Range
+ compatible object, which a plain PolygonRingIterator is not.
+ </p>
+<p>
+ We need to <a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#adaption_of_qpolygon_range_source_code">define
+ another Boost.Range</a>, that can be constructed with PolygonRingIterators
+ as arguments, and returned from the get method.
+ </p>
+<h3>
+<a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.h6"></a>
+ <span class="phrase"><a name="geometry.examples.example__adapting_a_legacy_geometry_object_model.conclusion"></a></span><a class="link" href="example__adapting_a_legacy_geometry_object_model.html#geometry.examples.example__adapting_a_legacy_geometry_object_model.conclusion">Conclusion</a>
+ </h3>
+<p>
+ That's it! The methods of Boost.Geometry can now be used directly on instances
+ of our legacy object model.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../examples.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.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="example_source_code__adapting_a_legacy_geometry_object_model.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/examples/example_source_code__adapting_a_legacy_geometry_object_model.html b/libs/geometry/doc/html/geometry/examples/example_source_code__adapting_a_legacy_geometry_object_model.html
new file mode 100644
index 000000000..dff72e3e1
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/examples/example_source_code__adapting_a_legacy_geometry_object_model.html
@@ -0,0 +1,536 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Example source code: Adapting a legacy geometry object model</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../examples.html" title="Examples">
+<link rel="prev" href="example__adapting_a_legacy_geometry_object_model.html" title="Example: Adapting a legacy geometry object model">
+<link rel="next" href="../release_notes.html" title="Release Notes">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="example__adapting_a_legacy_geometry_object_model.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.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="../release_notes.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model"></a><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html" title="Example source code: Adapting a legacy geometry object model">Example
+ source code: Adapting a legacy geometry object model</a>
+</h3></div></div></div>
+<h3>
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.h0"></a>
+ <span class="phrase"><a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.adaption_of_qpoint"></a></span><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.adaption_of_qpoint">Adaption
+ of QPoint</a>
+ </h3>
+<a name="adaption_of_qpoint_source_code"></a><pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</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">traits</span>
+ <span class="special">{</span>
+ <span class="comment">// Adapt QPoint to Boost.Geometry</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">&gt;</span>
+ <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">point_tag</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">&gt;</span>
+ <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">QPoint</span><span class="special">::</span><span class="keyword">double</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">coordinate_system</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">&gt;</span>
+ <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">cartesian</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">dimension</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;</span> <span class="special">{};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">access</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">static</span> <span class="identifier">QPoint</span><span class="special">::</span><span class="keyword">double</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">QPoint</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">x</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="identifier">QPoint</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">QPoint</span><span class="special">::</span><span class="keyword">double</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">value</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">p</span><span class="special">.</span><span class="identifier">x</span> <span class="special">=</span> <span class="identifier">value</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">access</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">static</span> <span class="identifier">QPoint</span><span class="special">::</span><span class="keyword">double</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">QPoint</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">y</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="identifier">QPoint</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">QPoint</span><span class="special">::</span><span class="keyword">double</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">value</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">p</span><span class="special">.</span><span class="identifier">y</span> <span class="special">=</span> <span class="identifier">value</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+<span class="special">}</span> <span class="comment">// namespace boost::geometry::traits</span>
+</pre>
+<h3>
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.h1"></a>
+ <span class="phrase"><a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.adaption_of_qlinestring"></a></span><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.adaption_of_qlinestring">Adaption
+ of QLineString</a>
+ </h3>
+<a name="adaption_of_qlinestring_source_code"></a><pre class="programlisting"><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">traits</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">QLineString</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">linestring_tag</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+<span class="special">}</span> <span class="comment">// namespace boost::geometry::traits</span>
+</pre>
+<h4>
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.h2"></a>
+ <span class="phrase"><a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_range_for_qlinestring"></a></span><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_range_for_qlinestring">Boost.Range
+ for QLineString</a>
+ </h4>
+<a name="adaption_of_qlinestring_range_source_code"></a><pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">range</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">namespace</span> <span class="identifier">boost</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">QLineString</span><span class="special">&gt;</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">&lt;</span><span class="identifier">QPoint</span><span class="special">*&gt;::</span><span class="identifier">iterator</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">range_const_iterator</span><span class="special">&lt;</span><span class="identifier">QLineString</span><span class="special">&gt;</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">&lt;</span><span class="identifier">QPoint</span><span class="special">*&gt;::</span><span class="identifier">const_iterator</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+<span class="special">}</span>
+
+<span class="keyword">inline</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">*&gt;::</span><span class="identifier">iterator</span>
+<span class="identifier">range_begin</span><span class="special">(</span><span class="identifier">QLineString</span><span class="special">&amp;</span> <span class="identifier">qls</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">qls</span><span class="special">.</span><span class="identifier">points</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();}</span>
+
+<span class="keyword">inline</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">*&gt;::</span><span class="identifier">iterator</span>
+<span class="identifier">range_end</span><span class="special">(</span><span class="identifier">QLineString</span><span class="special">&amp;</span> <span class="identifier">qls</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">qls</span><span class="special">.</span><span class="identifier">points</span><span class="special">.</span><span class="identifier">end</span><span class="special">();}</span>
+
+<span class="keyword">inline</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">*&gt;::</span><span class="identifier">const_iterator</span>
+<span class="identifier">range_begin</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">QLineString</span><span class="special">&amp;</span> <span class="identifier">qls</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">qls</span><span class="special">.</span><span class="identifier">points</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();}</span>
+
+<span class="keyword">inline</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QPoint</span><span class="special">*&gt;::</span><span class="identifier">const_iterator</span>
+<span class="identifier">range_end</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">QLineString</span><span class="special">&amp;</span> <span class="identifier">qls</span><span class="special">)</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">qls</span><span class="special">.</span><span class="identifier">points</span><span class="special">.</span><span class="identifier">end</span><span class="special">();}</span>
+</pre>
+<h3>
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.h3"></a>
+ <span class="phrase"><a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.adaption_of_qring"></a></span><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.adaption_of_qring">Adaption
+ of QRing</a>
+ </h3>
+<a name="adaption_of_qring_source_code"></a><pre class="programlisting"><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">traits</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">QRing</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">ring_tag</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+<span class="special">}</span> <span class="comment">// namespace boost::geometry::traits</span>
+</pre>
+<h4>
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.h4"></a>
+ <span class="phrase"><a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_iterator_for_qring"></a></span><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_iterator_for_qring">Boost.Iterator
+ for QRing</a>
+ </h4>
+<a name="adaption_of_qring_iterator_source_code"></a><pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">iterator</span><span class="special">/</span><span class="identifier">iterator_facade</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="comment">/* Custom iterator type that flattens a 2D array into a 1D array */</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">I</span><span class="special">,</span> <span class="comment">// Line iterator type</span>
+ <span class="keyword">class</span> <span class="identifier">R</span> <span class="comment">// Point reference type</span>
+ <span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">RingIteratorImpl</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_facade</span><span class="special">&lt;</span>
+ <span class="identifier">RingIteratorImpl</span><span class="special">&lt;</span><span class="identifier">I</span><span class="special">,</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">R</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">random_access_iterator_tag</span><span class="special">,</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="comment">//new traversal tag boost::random_access_traversal_tag</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">RingIteratorImpl</span><span class="special">()</span> <span class="special">:</span> <span class="identifier">pointIndex_</span><span class="special">(</span><span class="number">0</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="special">}</span>
+
+ <span class="keyword">explicit</span> <span class="identifier">RingIteratorImpl</span><span class="special">(</span><span class="identifier">I</span> <span class="identifier">lineStringIterCurrent</span><span class="special">)</span>
+ <span class="special">:</span> <span class="identifier">lineStringIterCurrent_</span><span class="special">(</span><span class="identifier">lineStringIterCurrent</span><span class="special">),</span> <span class="identifier">pointIndex_</span><span class="special">(</span><span class="number">0</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">OtherI</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">OtherR</span><span class="special">&gt;</span>
+ <span class="identifier">RingIteratorImpl</span><span class="special">(</span><span class="identifier">RingIteratorImpl</span><span class="special">&lt;</span><span class="identifier">OtherI</span><span class="special">,</span> <span class="identifier">OtherR</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="special">:</span>
+ <span class="identifier">lineStringIterCurrent_</span><span class="special">(</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">getLineStrIt</span><span class="special">()),</span> <span class="identifier">pointIndex_</span><span class="special">(</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">getPointIdx</span><span class="special">())</span>
+ <span class="special">{</span>
+ <span class="special">}</span>
+
+ <span class="identifier">I</span> <span class="identifier">getLineStrIt</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">lineStringIterCurrent_</span><span class="special">;}</span>
+
+ <span class="keyword">bool</span> <span class="identifier">isEmpty</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">isEmpty</span><span class="special">;}</span>
+ <span class="identifier">size_t</span> <span class="identifier">getPointIdx</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">pointIndex_</span><span class="special">;}</span>
+
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_facade</span><span class="special">&lt;</span><span class="identifier">RingIteratorImpl</span><span class="special">&lt;</span><span class="identifier">I</span><span class="special">,</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">R</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">random_access_iterator_tag</span><span class="special">,</span> <span class="identifier">R</span><span class="special">&gt;::</span><span class="identifier">difference_type</span> <span class="identifier">difference_type</span><span class="special">;</span>
+
+<span class="keyword">private</span><span class="special">:</span>
+ <span class="keyword">friend</span> <span class="keyword">class</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_core_access</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">increment</span><span class="special">()</span>
+ <span class="special">{</span>
+ <span class="special">++</span><span class="identifier">pointIndex_</span><span class="special">;</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">pointIndex_</span> <span class="special">&gt;=</span> <span class="special">(*</span><span class="identifier">lineStringIterCurrent_</span><span class="special">)-&gt;</span><span class="identifier">points</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">lineStringIterCurrent_</span><span class="special">;</span>
+ <span class="identifier">pointIndex_</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+
+ <span class="keyword">void</span> <span class="identifier">decrement</span><span class="special">()</span>
+ <span class="special">{</span>
+ <span class="keyword">if</span><span class="special">(</span><span class="identifier">pointIndex_</span><span class="special">&gt;</span><span class="number">0</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="special">--</span><span class="identifier">pointIndex_</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="keyword">else</span>
+ <span class="special">{</span>
+ <span class="special">--</span><span class="identifier">lineStringIterCurrent_</span><span class="special">;</span>
+ <span class="identifier">pointIndex_</span> <span class="special">=</span> <span class="special">(*</span><span class="identifier">lineStringIterCurrent_</span><span class="special">)-&gt;</span><span class="identifier">points</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+
+ <span class="keyword">void</span> <span class="identifier">advance</span><span class="special">(</span><span class="identifier">difference_type</span> <span class="identifier">n</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">difference_type</span> <span class="identifier">counter</span> <span class="special">=</span> <span class="identifier">n</span><span class="special">;</span>
+
+ <span class="identifier">difference_type</span> <span class="identifier">maxPointIndex</span><span class="special">,</span> <span class="identifier">remainderPointIndex</span><span class="special">;</span>
+
+ <span class="keyword">while</span><span class="special">(</span><span class="identifier">counter</span><span class="special">&gt;</span><span class="number">0</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">maxPointIndex</span> <span class="special">=</span> <span class="special">(*</span><span class="identifier">lineStringIterCurrent_</span><span class="special">)-&gt;</span><span class="identifier">points</span><span class="special">.</span><span class="identifier">size</span><span class="special">(),</span>
+ <span class="identifier">remainderPointIndex</span> <span class="special">=</span> <span class="identifier">maxPointIndex</span> <span class="special">-</span> <span class="identifier">pointIndex_</span><span class="special">;</span>
+
+ <span class="keyword">if</span><span class="special">(</span><span class="identifier">counter</span><span class="special">&gt;</span><span class="identifier">remainderPointIndex</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">counter</span> <span class="special">-=</span> <span class="identifier">remainderPointIndex</span><span class="special">;</span>
+ <span class="special">++</span><span class="identifier">lineStringIterCurrent_</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="keyword">else</span> <span class="comment">// (counter&lt;=remainderPointIndex)</span>
+ <span class="special">{</span>
+ <span class="identifier">counter</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">pointIndex_</span> <span class="special">=</span> <span class="identifier">remainderPointIndex</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+
+ <span class="special">}</span>
+
+ <span class="identifier">difference_type</span> <span class="identifier">distance_to</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">RingIteratorImpl</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="identifier">I</span> <span class="identifier">currentLineStringIter</span> <span class="special">=</span> <span class="identifier">getLineStrIt</span><span class="special">();</span>
+ <span class="identifier">I</span> <span class="identifier">otherLineStringIter</span> <span class="special">=</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">getLineStrIt</span><span class="special">();</span>
+
+ <span class="identifier">difference_type</span> <span class="identifier">count</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">difference_type</span> <span class="identifier">distance_to_other</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">currentLineStringIter</span><span class="special">,</span> <span class="identifier">otherLineStringIter</span><span class="special">);</span>
+
+ <span class="keyword">if</span><span class="special">(</span><span class="identifier">distance_to_other</span> <span class="special">&lt;</span> <span class="number">0</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">count</span> <span class="special">+=</span> <span class="identifier">pointIndex_</span><span class="special">;</span>
+
+ <span class="keyword">while</span><span class="special">(</span><span class="identifier">distance_to_other</span> <span class="special">&lt;</span> <span class="number">0</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">QLineString</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">ls</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">otherLineStringIter</span><span class="special">;</span>
+ <span class="identifier">count</span> <span class="special">-=</span> <span class="identifier">ls</span><span class="special">-&gt;</span><span class="identifier">points</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span>
+
+ <span class="special">++</span><span class="identifier">otherLineStringIter</span><span class="special">;</span>
+ <span class="special">++</span><span class="identifier">distance_to_other</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">otherLineStringIter</span><span class="special">==</span><span class="identifier">currentLineStringIter</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="keyword">else</span> <span class="keyword">if</span><span class="special">(</span><span class="identifier">distance_to_other</span> <span class="special">&gt;</span> <span class="number">0</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">count</span> <span class="special">-=</span> <span class="identifier">pointIndex_</span><span class="special">;</span>
+
+ <span class="keyword">while</span><span class="special">(</span><span class="identifier">distance_to_other</span> <span class="special">&lt;</span> <span class="number">0</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">QLineString</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">ls</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">currentLineStringIter</span><span class="special">;</span>
+ <span class="identifier">count</span> <span class="special">+=</span> <span class="identifier">ls</span><span class="special">-&gt;</span><span class="identifier">points</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span>
+
+ <span class="special">++</span><span class="identifier">currentLineStringIter</span><span class="special">;</span>
+ <span class="special">--</span><span class="identifier">distance_to_other</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">otherLineStringIter</span><span class="special">==</span><span class="identifier">currentLineStringIter</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="keyword">else</span>
+ <span class="special">{</span>
+ <span class="identifier">count</span> <span class="special">=</span> <span class="identifier">pointIndex_</span> <span class="special">-</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">getPointIdx</span><span class="special">();</span>
+ <span class="special">}</span>
+
+ <span class="keyword">return</span> <span class="identifier">count</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">bool</span> <span class="identifier">equal</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">RingIteratorImpl</span><span class="special">&amp;</span> <span class="identifier">other</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">lineStringIterCurrent_</span> <span class="special">==</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">getLineStrIt</span><span class="special">())</span> <span class="special">&amp;&amp;</span>
+ <span class="special">(</span><span class="identifier">pointIndex_</span> <span class="special">==</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">getPointIdx</span><span class="special">());</span>
+ <span class="special">}</span>
+
+ <span class="identifier">R</span> <span class="identifier">dereference</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">lineStringIterCurrent_</span><span class="special">)-&gt;</span><span class="identifier">points</span><span class="special">[</span><span class="identifier">pointIndex_</span><span class="special">];}</span>
+
+
+ <span class="identifier">I</span> <span class="identifier">lineStringIterCurrent_</span><span class="special">;</span>
+
+ <span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">;</span>
+ <span class="identifier">size_t</span> <span class="identifier">pointIndex_</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<h4>
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.h5"></a>
+ <span class="phrase"><a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_range_for_qring"></a></span><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_range_for_qring">Boost.Range
+ for QRing</a>
+ </h4>
+<a name="adaption_of_qring_range_source_code"></a><pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">RingIteratorImpl</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QLineString</span><span class="special">*&gt;::</span><span class="identifier">iterator</span><span class="special">,</span> <span class="identifier">QPoint</span><span class="special">&gt;</span> <span class="identifier">RingIterator</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">RingIteratorImpl</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QLineString</span><span class="special">*&gt;::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">QPoint</span><span class="special">&gt;</span> <span class="identifier">ConstRingIterator</span><span class="special">;</span>
+
+<span class="keyword">namespace</span> <span class="identifier">boost</span>
+<span class="special">{</span>
+ <span class="comment">// Specialize metafunctions. We must include the range.hpp header.</span>
+ <span class="comment">// We must open the 'boost' namespace.</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">QRing</span><span class="special">&gt;</span>
+ <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">RingIterator</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">range_const_iterator</span><span class="special">&lt;</span><span class="identifier">QRing</span><span class="special">&gt;</span>
+ <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">ConstRingIterator</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+
+<span class="special">}</span> <span class="comment">// namespace 'boost'</span>
+
+
+<span class="comment">// The required Range functions. These should be defined in the same namespace</span>
+<span class="comment">// as Ring.</span>
+
+<span class="keyword">inline</span> <span class="identifier">RingIterator</span> <span class="identifier">range_begin</span><span class="special">(</span><span class="identifier">QRing</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span>
+<span class="special">{</span><span class="keyword">return</span> <span class="identifier">RingIterator</span><span class="special">(</span><span class="identifier">r</span><span class="special">.</span><span class="identifier">lines</span><span class="special">.</span><span class="identifier">begin</span><span class="special">());}</span>
+
+<span class="keyword">inline</span> <span class="identifier">ConstRingIterator</span> <span class="identifier">range_begin</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">QRing</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span>
+<span class="special">{</span><span class="keyword">return</span> <span class="identifier">ConstRingIterator</span><span class="special">(</span><span class="identifier">r</span><span class="special">.</span><span class="identifier">lines</span><span class="special">.</span><span class="identifier">begin</span><span class="special">());}</span>
+
+<span class="keyword">inline</span> <span class="identifier">RingIterator</span> <span class="identifier">range_end</span><span class="special">(</span><span class="identifier">QRing</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span>
+<span class="special">{</span><span class="keyword">return</span> <span class="identifier">RingIterator</span><span class="special">(</span><span class="identifier">r</span><span class="special">.</span><span class="identifier">lines</span><span class="special">.</span><span class="identifier">end</span><span class="special">());}</span>
+
+<span class="keyword">inline</span> <span class="identifier">ConstRingIterator</span> <span class="identifier">range_end</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">QRing</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span>
+<span class="special">{</span><span class="keyword">return</span> <span class="identifier">ConstRingIterator</span><span class="special">(</span><span class="identifier">r</span><span class="special">.</span><span class="identifier">lines</span><span class="special">.</span><span class="identifier">end</span><span class="special">());}</span>
+</pre>
+<h3>
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.h6"></a>
+ <span class="phrase"><a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.adaption_of_qpolygon"></a></span><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.adaption_of_qpolygon">Adaption
+ of QPolygon</a>
+ </h3>
+<a name="adaption_of_qpolygon_source_code"></a><pre class="programlisting"><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">traits</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">QPolygon</span><span class="special">&gt;</span> <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">polygon_tag</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">ring_const_type</span><span class="special">&lt;</span><span class="identifier">QPolygon</span><span class="special">&gt;</span> <span class="special">{</span> <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">QRing</span><span class="special">&amp;</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">ring_mutable_type</span><span class="special">&lt;</span><span class="identifier">QPolygon</span><span class="special">&gt;</span> <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">QRing</span><span class="special">&amp;</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">interior_const_type</span><span class="special">&lt;</span><span class="identifier">QPolygon</span><span class="special">&gt;</span> <span class="special">{</span> <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">CustomPolygonRingRange</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">interior_mutable_type</span><span class="special">&lt;</span><span class="identifier">QPolygon</span><span class="special">&gt;</span> <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">CustomPolygonRingRange</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">exterior_ring</span><span class="special">&lt;</span><span class="identifier">QPolygon</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">static</span> <span class="identifier">QRing</span><span class="special">&amp;</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">QPolygon</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="special">(*</span><span class="identifier">p</span><span class="special">.</span><span class="identifier">exterior</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="keyword">static</span> <span class="identifier">QRing</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">QPolygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="special">(*</span><span class="identifier">p</span><span class="special">.</span><span class="identifier">exterior</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">interior_rings</span><span class="special">&lt;</span><span class="identifier">QPolygon</span><span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">static</span> <span class="identifier">CustomPolygonRingRange</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">QPolygon</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">CustomPolygonRingRange</span><span class="special">(</span><span class="identifier">PolygonRingIterator</span><span class="special">(</span><span class="identifier">p</span><span class="special">.</span><span class="identifier">interiors</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()),</span> <span class="identifier">PolygonRingIterator</span><span class="special">(</span><span class="identifier">p</span><span class="special">.</span><span class="identifier">interiors</span><span class="special">.</span><span class="identifier">end</span><span class="special">()));</span>
+ <span class="special">}</span>
+ <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">CustomPolygonRingRange</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">QPolygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">CustomPolygonRingRange</span><span class="special">(</span><span class="identifier">ConstPolygonRingIterator</span><span class="special">(</span><span class="identifier">p</span><span class="special">.</span><span class="identifier">interiors</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()),</span> <span class="identifier">ConstPolygonRingIterator</span><span class="special">(</span><span class="identifier">p</span><span class="special">.</span><span class="identifier">interiors</span><span class="special">.</span><span class="identifier">end</span><span class="special">()));</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+<span class="special">}</span> <span class="comment">// namespace boost::geometry::traits</span>
+</pre>
+<h4>
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.h7"></a>
+ <span class="phrase"><a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_iterator_for_qrings_in_qpolygon"></a></span><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_iterator_for_qrings_in_qpolygon">Boost.Iterator
+ for QRings in QPolygon</a>
+ </h4>
+<a name="adaption_of_qpolygon_iterator_source_code"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">I</span><span class="special">,</span> <span class="comment">// Line iterator type</span>
+ <span class="keyword">class</span> <span class="identifier">R</span> <span class="comment">// Point reference type</span>
+ <span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">PolyRingIterator</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_facade</span><span class="special">&lt;</span>
+ <span class="identifier">PolyRingIterator</span><span class="special">&lt;</span><span class="identifier">I</span><span class="special">,</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">R</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">random_access_iterator_tag</span><span class="special">,</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="comment">//new traversal tag</span>
+<span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">PolyRingIterator</span><span class="special">()</span> <span class="special">{}</span>
+
+ <span class="keyword">explicit</span> <span class="identifier">PolyRingIterator</span><span class="special">(</span><span class="identifier">I</span> <span class="identifier">ringIter</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">_ringIter</span><span class="special">(</span><span class="identifier">ringIter</span><span class="special">)</span> <span class="special">{}</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">OtherI</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">OtherR</span><span class="special">&gt;</span>
+ <span class="identifier">PolyRingIterator</span><span class="special">(</span><span class="identifier">PolyRingIterator</span><span class="special">&lt;</span><span class="identifier">OtherI</span><span class="special">,</span> <span class="identifier">OtherR</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="special">:</span>
+ <span class="identifier">_ringIter</span><span class="special">(</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">getRingIter</span><span class="special">())</span> <span class="special">{}</span>
+
+ <span class="identifier">I</span> <span class="identifier">getRingIter</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">{</span><span class="keyword">return</span> <span class="identifier">_ringIter</span><span class="special">;}</span>
+
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_facade</span><span class="special">&lt;</span><span class="identifier">PolyRingIterator</span><span class="special">&lt;</span><span class="identifier">I</span><span class="special">,</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">R</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">random_access_iterator_tag</span><span class="special">,</span> <span class="identifier">R</span><span class="special">&gt;::</span><span class="identifier">difference_type</span> <span class="identifier">difference_type</span><span class="special">;</span>
+
+<span class="keyword">private</span><span class="special">:</span>
+ <span class="keyword">friend</span> <span class="keyword">class</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_core_access</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">increment</span><span class="special">()</span>
+ <span class="special">{</span>
+ <span class="special">++</span><span class="identifier">_ringIter</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">void</span> <span class="identifier">decrement</span><span class="special">()</span>
+ <span class="special">{</span>
+ <span class="special">--</span><span class="identifier">_ringIter</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">void</span> <span class="identifier">advance</span><span class="special">(</span><span class="identifier">difference_type</span> <span class="identifier">n</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">advance</span><span class="special">(</span><span class="identifier">_ringIter</span><span class="special">,</span><span class="identifier">n</span><span class="special">);</span>
+ <span class="special">}</span>
+
+ <span class="identifier">difference_type</span> <span class="identifier">distance_to</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">PolyRingIterator</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">_ringIter</span><span class="special">,</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">getRingIter</span><span class="special">());</span>
+ <span class="special">}</span>
+
+ <span class="keyword">bool</span> <span class="identifier">equal</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">PolyRingIterator</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">_ringIter</span> <span class="special">==</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">getRingIter</span><span class="special">();</span>
+ <span class="special">}</span>
+
+ <span class="identifier">R</span> <span class="identifier">dereference</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">_ringIter</span><span class="special">);}</span>
+
+ <span class="identifier">I</span> <span class="identifier">_ringIter</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<h4>
+<a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.h8"></a>
+ <span class="phrase"><a name="geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_range_for_polygonringiterator"></a></span><a class="link" href="example_source_code__adapting_a_legacy_geometry_object_model.html#geometry.examples.example_source_code__adapting_a_legacy_geometry_object_model.boost_range_for_polygonringiterator">Boost.Range
+ for PolygonRingIterator</a>
+ </h4>
+<a name="adaption_of_qpolygon_range_source_code"></a><pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">PolyRingIterator</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QRing</span><span class="special">*&gt;::</span><span class="identifier">iterator</span><span class="special">,</span> <span class="identifier">QRing</span><span class="special">&gt;</span> <span class="identifier">PolygonRingIterator</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">PolyRingIterator</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">QRing</span><span class="special">*&gt;::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">QRing</span><span class="special">&gt;</span> <span class="identifier">ConstPolygonRingIterator</span><span class="special">;</span>
+
+<span class="keyword">class</span> <span class="identifier">CustomPolygonRingRange</span>
+<span class="special">{</span>
+ <span class="identifier">PolygonRingIterator</span> <span class="identifier">_begin</span><span class="special">;</span>
+ <span class="identifier">PolygonRingIterator</span> <span class="identifier">_end</span><span class="special">;</span>
+
+ <span class="keyword">bool</span> <span class="identifier">isIterSet</span><span class="special">;</span>
+
+ <span class="identifier">ConstPolygonRingIterator</span> <span class="identifier">_cbegin</span><span class="special">;</span>
+ <span class="identifier">ConstPolygonRingIterator</span> <span class="identifier">_cend</span><span class="special">;</span>
+
+ <span class="keyword">bool</span> <span class="identifier">isCIterSet</span><span class="special">;</span>
+
+<span class="keyword">public</span><span class="special">:</span>
+
+ <span class="identifier">CustomPolygonRingRange</span><span class="special">(</span><span class="identifier">PolygonRingIterator</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">PolygonRingIterator</span> <span class="identifier">end</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">_begin</span><span class="special">(</span><span class="identifier">begin</span><span class="special">),</span> <span class="identifier">_end</span><span class="special">(</span><span class="identifier">end</span><span class="special">),</span> <span class="identifier">isIterSet</span><span class="special">(</span><span class="keyword">true</span><span class="special">)</span> <span class="special">{}</span>
+ <span class="identifier">CustomPolygonRingRange</span><span class="special">(</span><span class="identifier">ConstPolygonRingIterator</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">ConstPolygonRingIterator</span> <span class="identifier">end</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">_cbegin</span><span class="special">(</span><span class="identifier">begin</span><span class="special">),</span> <span class="identifier">_cend</span><span class="special">(</span><span class="identifier">end</span><span class="special">),</span> <span class="identifier">isCIterSet</span><span class="special">(</span><span class="keyword">true</span><span class="special">)</span> <span class="special">{}</span>
+
+ <span class="identifier">PolygonRingIterator</span> <span class="identifier">begin</span><span class="special">()</span>
+ <span class="special">{</span>
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">isIterSet</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">_begin</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="identifier">ConstPolygonRingIterator</span> <span class="identifier">cbegin</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">isCIterSet</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">_cbegin</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="identifier">PolygonRingIterator</span> <span class="identifier">end</span><span class="special">()</span>
+ <span class="special">{</span>
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">isIterSet</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">_end</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="identifier">ConstPolygonRingIterator</span> <span class="identifier">cend</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="identifier">assert</span><span class="special">(</span><span class="identifier">isCIterSet</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">_cend</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="keyword">namespace</span> <span class="identifier">boost</span>
+<span class="special">{</span>
+ <span class="comment">// Specialize metafunctions. We must include the range.hpp header.</span>
+ <span class="comment">// We must open the 'boost' namespace.</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">CustomPolygonRingRange</span><span class="special">&gt;</span> <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">PolygonRingIterator</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">range_const_iterator</span><span class="special">&lt;</span><span class="identifier">CustomPolygonRingRange</span><span class="special">&gt;</span> <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">ConstPolygonRingIterator</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
+
+<span class="special">}</span> <span class="comment">// namespace 'boost'</span>
+
+
+<span class="comment">// The required Range functions. These should be defined in the same namespace</span>
+<span class="comment">// as Ring.</span>
+
+<span class="keyword">inline</span> <span class="identifier">PolygonRingIterator</span> <span class="identifier">range_begin</span><span class="special">(</span><span class="identifier">CustomPolygonRingRange</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span>
+ <span class="special">{</span><span class="keyword">return</span> <span class="identifier">r</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();}</span>
+
+<span class="keyword">inline</span> <span class="identifier">ConstPolygonRingIterator</span> <span class="identifier">range_begin</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">CustomPolygonRingRange</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span>
+ <span class="special">{</span><span class="keyword">return</span> <span class="identifier">r</span><span class="special">.</span><span class="identifier">cbegin</span><span class="special">();}</span>
+
+<span class="keyword">inline</span> <span class="identifier">PolygonRingIterator</span> <span class="identifier">range_end</span><span class="special">(</span><span class="identifier">CustomPolygonRingRange</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span>
+ <span class="special">{</span><span class="keyword">return</span> <span class="identifier">r</span><span class="special">.</span><span class="identifier">end</span><span class="special">();}</span>
+
+<span class="keyword">inline</span> <span class="identifier">ConstPolygonRingIterator</span> <span class="identifier">range_end</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">CustomPolygonRingRange</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span>
+ <span class="special">{</span><span class="keyword">return</span> <span class="identifier">r</span><span class="special">.</span><span class="identifier">cend</span><span class="special">();}</span>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="example__adapting_a_legacy_geometry_object_model.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.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="../release_notes.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/indexes.html b/libs/geometry/doc/html/geometry/indexes.html
new file mode 100644
index 000000000..e60a2f743
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/indexes.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Indexes</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="reference/views/identity_view.html" title="identity_view">
+<link rel="next" href="indexes/matrix.html" title="Reference Matrix">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/views/identity_view.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="indexes/matrix.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.indexes"></a><a class="link" href="indexes.html" title="Indexes">Indexes</a>
+</h2></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="indexes/matrix.html">Reference Matrix</a></span></dt>
+<dt><span class="section"><a href="indexes/alphabetical_index.html">Alphabetical Index</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/views/identity_view.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="indexes/matrix.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/indexes/alphabetical_index.html b/libs/geometry/doc/html/geometry/indexes/alphabetical_index.html
new file mode 100644
index 000000000..9095bf67f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/indexes/alphabetical_index.html
@@ -0,0 +1,483 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Alphabetical Index</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../indexes.html" title="Indexes">
+<link rel="prev" href="matrix.html" title="Reference Matrix">
+<link rel="next" href="../examples.html" title="Examples">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="matrix.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="../examples.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.indexes.alphabetical_index"></a><a class="link" href="alphabetical_index.html" title="Alphabetical Index">Alphabetical Index</a>
+</h3></div></div></div>
+<p>
+ </p>
+<div class="index">
+<div class="titlepage"><div><div><h4 class="title"><a name="idp17521488"></a></h4></div></div></div>
+<div class="index">
+<div class="indexdiv">
+<h3>A</h3>
+<dl>
+<dt>add_point, <a class="indexterm" href="../reference/arithmetic/add_point.html">add_point</a>
+</dt>
+<dt>add_value, <a class="indexterm" href="../reference/arithmetic/add_value.html">add_value</a>
+</dt>
+<dt>append, <a class="indexterm" href="../reference/algorithms/append.html">append</a>
+</dt>
+<dt>area, <a class="indexterm" href="../reference/algorithms/area/area_1.html">area</a>, <a class="indexterm" href="../reference/algorithms/area/area_2_with_strategy.html">area
+ (with strategy)</a>, <a class="indexterm" href="../reference/strategies/strategy_area_surveyor.html">strategy::area::surveyor</a>, <a class="indexterm" href="../reference/strategies/strategy_area_huiller.html">strategy::area::huiller</a>
+</dt>
+<dt>assign, <a class="indexterm" href="../reference/algorithms/assign/assign.html">assign</a>
+</dt>
+<dt>assign_inverse, <a class="indexterm" href="../reference/algorithms/assign/assign_inverse.html">assign_inverse</a>
+</dt>
+<dt>assign_point, <a class="indexterm" href="../reference/arithmetic/assign_point.html">assign_point</a>
+</dt>
+<dt>assign_points, <a class="indexterm" href="../reference/algorithms/assign/assign_points.html">assign_points</a>
+</dt>
+<dt>assign_value, <a class="indexterm" href="../reference/arithmetic/assign_value.html">assign_value</a>
+</dt>
+<dt>assign_values, <a class="indexterm" href="../reference/algorithms/assign/assign_values_3_2_coordinate_values.html">assign_values
+ (2 coordinate values)</a>, <a class="indexterm" href="../reference/algorithms/assign/assign_values_4_3_coordinate_values.html">assign_values
+ (3 coordinate values)</a>, <a class="indexterm" href="../reference/algorithms/assign/assign_values_5_4_coordinate_values.html">assign_values
+ (4 coordinate values)</a>
+</dt>
+<dt>assign_zero, <a class="indexterm" href="../reference/algorithms/assign/assign_zero.html">assign_zero</a>
+</dt>
+<dt>average, <a class="indexterm" href="../reference/strategies/strategy_centroid_average.html">strategy::centroid::average</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>B</h3>
+<dl>
+<dt>bashein_detmer, <a class="indexterm" href="../reference/strategies/strategy_centroid_bashein_detmer.html">strategy::centroid::bashein_detmer</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_BOX, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_box.html">BOOST_GEOMETRY_REGISTER_BOX</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_box_2d_4values.html">BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_box_templated.html">BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_LINESTRING, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_linestring.html">BOOST_GEOMETRY_REGISTER_LINESTRING</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_linestring_templated.html">BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_multi_linestring.html">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_multi_linestring_templated.html">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_MULTI_POINT, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_multi_point.html">BOOST_GEOMETRY_REGISTER_MULTI_POINT</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_multi_point_templated.html">BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_MULTI_POLYGON, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_multi_polygon.html">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_multi_polygon_templated.html">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_POINT_2D, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_point_2d.html">BOOST_GEOMETRY_REGISTER_POINT_2D</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_POINT_2D_CONST, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_point_2d_const.html">BOOST_GEOMETRY_REGISTER_POINT_2D_CONST</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_point_2d_get_set.html">BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_POINT_3D, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_point_3d.html">BOOST_GEOMETRY_REGISTER_POINT_3D</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_POINT_3D_CONST, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_point_3d_const.html">BOOST_GEOMETRY_REGISTER_POINT_3D_CONST</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_point_3d_get_set.html">BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_RING, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_ring.html">BOOST_GEOMETRY_REGISTER_RING</a>
+</dt>
+<dt>BOOST_GEOMETRY_REGISTER_RING_TEMPLATED, <a class="indexterm" href="../reference/adapted/register/boost_geometry_register_ring_templated.html">BOOST_GEOMETRY_REGISTER_RING_TEMPLATED</a>
+</dt>
+<dt>box, <a class="indexterm" href="../reference/models/model_box.html">model::box</a>
+</dt>
+<dt>box_view, <a class="indexterm" href="../reference/views/box_view.html">box_view</a>
+</dt>
+<dt>buffer, <a class="indexterm" href="../reference/algorithms/buffer/buffer.html">buffer</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>C</h3>
+<dl>
+<dt>cartesian, <a class="indexterm" href="../reference/cs/cs_cartesian.html">cs::cartesian</a>
+</dt>
+<dt>centroid, <a class="indexterm" href="../reference/algorithms/centroid/centroid_3_with_strategy.html">centroid
+ (with strategy)</a>, <a class="indexterm" href="../reference/algorithms/centroid/centroid_2.html">centroid</a>, <a class="indexterm" href="../reference/strategies/strategy_centroid_average.html">strategy::centroid::average</a>, <a class="indexterm" href="../reference/strategies/strategy_centroid_bashein_detmer.html">strategy::centroid::bashein_detmer</a>
+</dt>
+<dt>centroid_exception, <a class="indexterm" href="../reference/exceptions/centroid_exception.html">centroid_exception</a>
+</dt>
+<dt>clear, <a class="indexterm" href="../reference/algorithms/clear.html">clear</a>
+</dt>
+<dt>clockwise, <a class="indexterm" href="../reference/enumerations/order_selector.html">order_selector</a>
+</dt>
+<dt>closeable_view, <a class="indexterm" href="../reference/views/closeable_view.html">closeable_view</a>
+</dt>
+<dt>closed, <a class="indexterm" href="../reference/enumerations/closure_selector.html">closure_selector</a>
+</dt>
+<dt>closing_iterator, <a class="indexterm" href="../reference/iterators/closing_iterator.html">closing_iterator</a>
+</dt>
+<dt>closure, <a class="indexterm" href="../reference/core/closure.html">closure</a>
+</dt>
+<dt>closure_selector, <a class="indexterm" href="../reference/enumerations/closure_selector.html">closure_selector</a>
+</dt>
+<dt>closure_undertermined, <a class="indexterm" href="../reference/enumerations/closure_selector.html">closure_selector</a>
+</dt>
+<dt>comparable_distance, <a class="indexterm" href="../reference/algorithms/distance/comparable_distance.html">comparable_distance</a>
+</dt>
+<dt>convert, <a class="indexterm" href="../reference/algorithms/convert.html">convert</a>
+</dt>
+<dt>convex_hull, <a class="indexterm" href="../reference/algorithms/convex_hull.html">convex_hull</a>, <a class="indexterm" href="../reference/strategies/strategy_convex_hull_graham_andrew.html">strategy::convex_hull::graham_andrew</a>
+</dt>
+<dt>coordinate_system, <a class="indexterm" href="../reference/core/coordinate_system.html">coordinate_system</a>
+</dt>
+<dt>coordinate_type, <a class="indexterm" href="../reference/core/coordinate_type.html">coordinate_type</a>
+</dt>
+<dt>correct, <a class="indexterm" href="../reference/algorithms/correct.html">correct</a>
+</dt>
+<dt>counterclockwise, <a class="indexterm" href="../reference/enumerations/order_selector.html">order_selector</a>
+</dt>
+<dt>covered_by, <a class="indexterm" href="../reference/algorithms/covered_by/covered_by_2.html">covered_by</a>, <a class="indexterm" href="../reference/algorithms/covered_by/covered_by_3_with_strategy.html">covered_by
+ (with strategy)</a>
+</dt>
+<dt>crossings_multiply, <a class="indexterm" href="../reference/strategies/strategy_within_crossings_multiply.html">strategy::within::crossings_multiply</a>
+</dt>
+<dt>cross_track, <a class="indexterm" href="../reference/strategies/strategy_distance_cross_track.html">strategy::distance::cross_track</a>
+</dt>
+<dt>cs, <a class="indexterm" href="../reference/cs/cs_cartesian.html">cs::cartesian</a>, <a class="indexterm" href="../reference/cs/cs_spherical.html">cs::spherical</a>, <a class="indexterm" href="../reference/cs/cs_spherical_equatorial.html">cs::spherical_equatorial</a>, <a class="indexterm" href="../reference/cs/cs_geographic.html">cs::geographic</a>
+</dt>
+<dt>cs_tag, <a class="indexterm" href="../reference/core/cs_tag.html">cs_tag</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>D</h3>
+<dl>
+<dt>d2, <a class="indexterm" href="../reference/models/model_d2_point_xy.html">model::d2::point_xy</a>
+</dt>
+<dt>degree, <a class="indexterm" href="../reference/core/degree.html">degree</a>
+</dt>
+<dt>difference, <a class="indexterm" href="../reference/algorithms/difference.html">difference</a>
+</dt>
+<dt>dimension, <a class="indexterm" href="../reference/core/dimension.html">dimension</a>
+</dt>
+<dt>disjoint, <a class="indexterm" href="../reference/algorithms/disjoint.html">disjoint</a>
+</dt>
+<dt>distance, <a class="indexterm" href="../reference/algorithms/distance/distance_3_with_strategy.html">distance
+ (with strategy)</a>, <a class="indexterm" href="../reference/algorithms/distance/distance_2.html">distance</a>, <a class="indexterm" href="../reference/strategies/strategy_distance_pythagoras.html">strategy::distance::pythagoras</a>, <a class="indexterm" href="../reference/strategies/strategy_distance_haversine.html">strategy::distance::haversine</a>, <a class="indexterm" href="../reference/strategies/strategy_distance_projected_point.html">strategy::distance::projected_point</a>, <a class="indexterm" href="../reference/strategies/strategy_distance_cross_track.html">strategy::distance::cross_track</a>
+</dt>
+<dt>divide_point, <a class="indexterm" href="../reference/arithmetic/divide_point.html">divide_point</a>
+</dt>
+<dt>divide_value, <a class="indexterm" href="../reference/arithmetic/divide_value.html">divide_value</a>
+</dt>
+<dt>dot_product, <a class="indexterm" href="../reference/arithmetic/dot_product.html">dot_product</a>
+</dt>
+<dt>douglas_peucker, <a class="indexterm" href="../reference/strategies/strategy_simplify_douglas_peucker.html">strategy::simplify::douglas_peucker</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>E</h3>
+<dl>
+<dt>envelope, <a class="indexterm" href="../reference/algorithms/envelope/envelope.html">envelope</a>
+</dt>
+<dt>equals, <a class="indexterm" href="../reference/algorithms/equals.html">equals</a>
+</dt>
+<dt>ever_circling_iterator, <a class="indexterm" href="../reference/iterators/ever_circling_iterator.html">ever_circling_iterator</a>
+</dt>
+<dt>exception, <a class="indexterm" href="../reference/exceptions/exception.html">exception</a>
+</dt>
+<dt>expand, <a class="indexterm" href="../reference/algorithms/expand.html">expand</a>
+</dt>
+<dt>exterior_ring, <a class="indexterm" href="../reference/access/exterior_ring/exterior_ring_1.html">exterior_ring</a>, <a class="indexterm" href="../reference/access/exterior_ring/exterior_ring_1_const_version.html">exterior_ring
+ (const version)</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>F</h3>
+<dl>
+<dt>for_each_point, <a class="indexterm" href="../reference/algorithms/for_each/for_each_point.html">for_each_point</a>
+</dt>
+<dt>for_each_segment, <a class="indexterm" href="../reference/algorithms/for_each/for_each_segment.html">for_each_segment</a>
+</dt>
+<dt>franklin, <a class="indexterm" href="../reference/strategies/strategy_within_franklin.html">strategy::within::franklin</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>G</h3>
+<dl>
+<dt>geographic, <a class="indexterm" href="../reference/cs/cs_geographic.html">cs::geographic</a>
+</dt>
+<dt>get, <a class="indexterm" href="../reference/access/get/get_1.html">get</a>, <a class="indexterm" href="../reference/access/get/get_1_with_index.html">get
+ (with index)</a>
+</dt>
+<dt>get_as_radian, <a class="indexterm" href="../reference/access/get/get_as_radian.html">get_as_radian</a>
+</dt>
+<dt>graham_andrew, <a class="indexterm" href="../reference/strategies/strategy_convex_hull_graham_andrew.html">strategy::convex_hull::graham_andrew</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>H</h3>
+<dl>
+<dt>haversine, <a class="indexterm" href="../reference/strategies/strategy_distance_haversine.html">strategy::distance::haversine</a>
+</dt>
+<dt>huiller, <a class="indexterm" href="../reference/strategies/strategy_area_huiller.html">strategy::area::huiller</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>I</h3>
+<dl>
+<dt>identity_view, <a class="indexterm" href="../reference/views/identity_view.html">identity_view</a>
+</dt>
+<dt>interior_rings, <a class="indexterm" href="../reference/access/interior_rings/interior_rings_1.html">interior_rings</a>, <a class="indexterm" href="../reference/access/interior_rings/interior_rings_1_const_version.html">interior_rings
+ (const version)</a>
+</dt>
+<dt>interior_type, <a class="indexterm" href="../reference/core/interior_type.html">interior_type</a>
+</dt>
+<dt>intersection, <a class="indexterm" href="../reference/algorithms/intersection.html">intersection</a>
+</dt>
+<dt>intersects, <a class="indexterm" href="../reference/algorithms/intersects/intersects_1_one_geometry.html">intersects
+ (one geometry)</a>, <a class="indexterm" href="../reference/algorithms/intersects/intersects_2_two_geometries.html">intersects
+ (two geometries)</a>
+</dt>
+<dt>inverse_transformer, <a class="indexterm" href="../reference/strategies/strategy_transform_inverse_transformer.html">strategy::transform::inverse_transformer</a>
+</dt>
+<dt>is_radian, <a class="indexterm" href="../reference/core/is_radian.html">is_radian</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>L</h3>
+<dl>
+<dt>length, <a class="indexterm" href="../reference/algorithms/length/length_1.html">length</a>, <a class="indexterm" href="../reference/algorithms/length/length_2_with_strategy.html">length
+ (with strategy)</a>
+</dt>
+<dt>linestring, <a class="indexterm" href="../reference/models/model_linestring.html">model::linestring</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>M</h3>
+<dl>
+<dt>make, <a class="indexterm" href="../reference/algorithms/make/make_2_2_coordinate_values.html">make
+ (2 coordinate values)</a>, <a class="indexterm" href="../reference/algorithms/make/make_3_3_coordinate_values.html">make
+ (3 coordinate values)</a>
+</dt>
+<dt>make_inverse, <a class="indexterm" href="../reference/algorithms/make/make_inverse.html">make_inverse</a>
+</dt>
+<dt>make_zero, <a class="indexterm" href="../reference/algorithms/make/make_zero.html">make_zero</a>
+</dt>
+<dt>map_transformer, <a class="indexterm" href="../reference/strategies/strategy_transform_map_transformer.html">strategy::transform::map_transformer</a>
+</dt>
+<dt>model, <a class="indexterm" href="../reference/models/model_point.html">model::point</a>, <a class="indexterm" href="../reference/models/model_d2_point_xy.html">model::d2::point_xy</a>, <a class="indexterm" href="../reference/models/model_linestring.html">model::linestring</a>, <a class="indexterm" href="../reference/models/model_polygon.html">model::polygon</a>, <a class="indexterm" href="../reference/models/model_multi_point.html">model::multi_point</a>, <a class="indexterm" href="../reference/models/model_multi_linestring.html">model::multi_linestring</a>, <a class="indexterm" href="../reference/models/model_multi_polygon.html">model::multi_polygon</a>, <a class="indexterm" href="../reference/models/model_box.html">model::box</a>, <a class="indexterm" href="../reference/models/model_ring.html">model::ring</a>, <a class="indexterm" href="../reference/models/model_segment.html">model::segment</a>, <a class="indexterm" href="../reference/models/model_referring_segment.html">model::referring_segment</a>
+</dt>
+<dt>multiply_point, <a class="indexterm" href="../reference/arithmetic/multiply_point.html">multiply_point</a>
+</dt>
+<dt>multiply_value, <a class="indexterm" href="../reference/arithmetic/multiply_value.html">multiply_value</a>
+</dt>
+<dt>multi_linestring, <a class="indexterm" href="../reference/models/model_multi_linestring.html">model::multi_linestring</a>
+</dt>
+<dt>multi_point, <a class="indexterm" href="../reference/models/model_multi_point.html">model::multi_point</a>
+</dt>
+<dt>multi_polygon, <a class="indexterm" href="../reference/models/model_multi_polygon.html">model::multi_polygon</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>N</h3>
+<dl>
+<dt>num_geometries, <a class="indexterm" href="../reference/algorithms/num_geometries.html">num_geometries</a>
+</dt>
+<dt>num_interior_rings, <a class="indexterm" href="../reference/algorithms/num_interior_rings.html">num_interior_rings</a>
+</dt>
+<dt>num_points, <a class="indexterm" href="../reference/algorithms/num_points.html">num_points</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>O</h3>
+<dl>
+<dt>open, <a class="indexterm" href="../reference/enumerations/closure_selector.html">closure_selector</a>
+</dt>
+<dt>order_selector, <a class="indexterm" href="../reference/enumerations/order_selector.html">order_selector</a>
+</dt>
+<dt>order_undetermined, <a class="indexterm" href="../reference/enumerations/order_selector.html">order_selector</a>
+</dt>
+<dt>overlaps, <a class="indexterm" href="../reference/algorithms/overlaps.html">overlaps</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>perimeter, <a class="indexterm" href="../reference/algorithms/perimeter/perimeter_1.html">perimeter</a>, <a class="indexterm" href="../reference/algorithms/perimeter/perimeter_2_with_strategy.html">perimeter
+ (with strategy)</a>
+</dt>
+<dt>point, <a class="indexterm" href="../reference/models/model_point.html">model::point</a>
+</dt>
+<dt>point_order, <a class="indexterm" href="../reference/core/point_order.html">point_order</a>
+</dt>
+<dt>point_type, <a class="indexterm" href="../reference/core/point_type.html">point_type</a>
+</dt>
+<dt>point_xy, <a class="indexterm" href="../reference/models/model_d2_point_xy.html">model::d2::point_xy</a>
+</dt>
+<dt>polygon, <a class="indexterm" href="../reference/models/model_polygon.html">model::polygon</a>
+</dt>
+<dt>projected_point, <a class="indexterm" href="../reference/strategies/strategy_distance_projected_point.html">strategy::distance::projected_point</a>
+</dt>
+<dt>pythagoras, <a class="indexterm" href="../reference/strategies/strategy_distance_pythagoras.html">strategy::distance::pythagoras</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>R</h3>
+<dl>
+<dt>radian, <a class="indexterm" href="../reference/core/radian.html">radian</a>
+</dt>
+<dt>referring_segment, <a class="indexterm" href="../reference/models/model_referring_segment.html">model::referring_segment</a>
+</dt>
+<dt>return_buffer, <a class="indexterm" href="../reference/algorithms/buffer/return_buffer.html">return_buffer</a>
+</dt>
+<dt>return_centroid, <a class="indexterm" href="../reference/algorithms/centroid/return_centroid_1.html">return_centroid</a>, <a class="indexterm" href="../reference/algorithms/centroid/return_centroid_2_with_strategy.html">return_centroid
+ (with strategy)</a>
+</dt>
+<dt>return_envelope, <a class="indexterm" href="../reference/algorithms/envelope/return_envelope.html">return_envelope</a>
+</dt>
+<dt>reverse, <a class="indexterm" href="../reference/algorithms/reverse.html">reverse</a>
+</dt>
+<dt>reversible_view, <a class="indexterm" href="../reference/views/reversible_view.html">reversible_view</a>
+</dt>
+<dt>ring, <a class="indexterm" href="../reference/models/model_ring.html">model::ring</a>
+</dt>
+<dt>ring_type, <a class="indexterm" href="../reference/core/ring_type.html">ring_type</a>
+</dt>
+<dt>rotate_transformer, <a class="indexterm" href="../reference/strategies/strategy_transform_rotate_transformer.html">strategy::transform::rotate_transformer</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>S</h3>
+<dl>
+<dt>scale_transformer, <a class="indexterm" href="../reference/strategies/strategy_transform_scale_transformer.html">strategy::transform::scale_transformer</a>
+</dt>
+<dt>segment, <a class="indexterm" href="../reference/models/model_segment.html">model::segment</a>
+</dt>
+<dt>segment_view, <a class="indexterm" href="../reference/views/segment_view.html">segment_view</a>
+</dt>
+<dt>set, <a class="indexterm" href="../reference/access/set/set_2.html">set</a>, <a class="indexterm" href="../reference/access/set/set_2_with_index.html">set
+ (with index)</a>
+</dt>
+<dt>set_from_radian, <a class="indexterm" href="../reference/access/set/set_from_radian.html">set_from_radian</a>
+</dt>
+<dt>side, <a class="indexterm" href="../reference/strategies/strategy_side_side_by_triangle.html">strategy::side::side_by_triangle</a>, <a class="indexterm" href="../reference/strategies/strategy_side_side_by_cross_track.html">strategy::side::side_by_cross_track</a>, <a class="indexterm" href="../reference/strategies/strategy_side_spherical_side_formula.html">strategy::side::spherical_side_formula</a>
+</dt>
+<dt>side_by_cross_track, <a class="indexterm" href="../reference/strategies/strategy_side_side_by_cross_track.html">strategy::side::side_by_cross_track</a>
+</dt>
+<dt>side_by_triangle, <a class="indexterm" href="../reference/strategies/strategy_side_side_by_triangle.html">strategy::side::side_by_triangle</a>
+</dt>
+<dt>simplify, <a class="indexterm" href="../reference/algorithms/simplify/simplify_4_with_strategy.html">simplify
+ (with strategy)</a>, <a class="indexterm" href="../reference/algorithms/simplify/simplify_3.html">simplify</a>, <a class="indexterm" href="../reference/strategies/strategy_simplify_douglas_peucker.html">strategy::simplify::douglas_peucker</a>
+</dt>
+<dt>spherical, <a class="indexterm" href="../reference/cs/cs_spherical.html">cs::spherical</a>
+</dt>
+<dt>spherical_equatorial, <a class="indexterm" href="../reference/cs/cs_spherical_equatorial.html">cs::spherical_equatorial</a>
+</dt>
+<dt>spherical_side_formula, <a class="indexterm" href="../reference/strategies/strategy_side_spherical_side_formula.html">strategy::side::spherical_side_formula</a>
+</dt>
+<dt>strategy, <a class="indexterm" href="../reference/strategies/strategy_distance_pythagoras.html">strategy::distance::pythagoras</a>, <a class="indexterm" href="../reference/strategies/strategy_distance_haversine.html">strategy::distance::haversine</a>, <a class="indexterm" href="../reference/strategies/strategy_distance_projected_point.html">strategy::distance::projected_point</a>, <a class="indexterm" href="../reference/strategies/strategy_distance_cross_track.html">strategy::distance::cross_track</a>, <a class="indexterm" href="../reference/strategies/strategy_area_surveyor.html">strategy::area::surveyor</a>, <a class="indexterm" href="../reference/strategies/strategy_area_huiller.html">strategy::area::huiller</a>, <a class="indexterm" href="../reference/strategies/strategy_centroid_average.html">strategy::centroid::average</a>, <a class="indexterm" href="../reference/strategies/strategy_centroid_bashein_detmer.html">strategy::centroid::bashein_detmer</a>, <a class="indexterm" href="../reference/strategies/strategy_convex_hull_graham_andrew.html">strategy::convex_hull::graham_andrew</a>, <a class="indexterm" href="../reference/strategies/strategy_side_side_by_triangle.html">strategy::side::side_by_triangle</a>, <a class="indexterm" href="../reference/strategies/strategy_side_side_by_cross_track.html">strategy::side::side_by_cross_track</a>, <a class="indexterm" href="../reference/strategies/strategy_side_spherical_side_formula.html">strategy::side::spherical_side_formula</a>, <a class="indexterm" href="../reference/strategies/strategy_simplify_douglas_peucker.html">strategy::simplify::douglas_peucker</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_inverse_transformer.html">strategy::transform::inverse_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_map_transformer.html">strategy::transform::map_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_rotate_transformer.html">strategy::transform::rotate_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_scale_transformer.html">strategy::transform::scale_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_translate_transformer.html">strategy::transform::translate_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_ublas_transformer.html">strategy::transform::ublas_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_within_winding.html">strategy::within::winding</a>, <a class="indexterm" href="../reference/strategies/strategy_within_franklin.html">strategy::within::franklin</a>, <a class="indexterm" href="../reference/strategies/strategy_within_crossings_multiply.html">strategy::within::crossings_multiply</a>
+</dt>
+<dt>subtract_point, <a class="indexterm" href="../reference/arithmetic/subtract_point.html">subtract_point</a>
+</dt>
+<dt>subtract_value, <a class="indexterm" href="../reference/arithmetic/subtract_value.html">subtract_value</a>
+</dt>
+<dt>surveyor, <a class="indexterm" href="../reference/strategies/strategy_area_surveyor.html">strategy::area::surveyor</a>
+</dt>
+<dt>svg, <a class="indexterm" href="../reference/io/svg/svg.html">svg</a>
+</dt>
+<dt>svg_mapper, <a class="indexterm" href="../reference/io/svg/svg_mapper.html">svg_mapper</a>
+</dt>
+<dt>sym_difference, <a class="indexterm" href="../reference/algorithms/sym_difference.html">sym_difference</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>T</h3>
+<dl>
+<dt>tag, <a class="indexterm" href="../reference/core/tag.html">tag</a>
+</dt>
+<dt>tag_cast, <a class="indexterm" href="../reference/core/tag_cast.html">tag_cast</a>
+</dt>
+<dt>touches, <a class="indexterm" href="../reference/algorithms/touches/touches_1_one_geometry.html">touches
+ (one geometry)</a>, <a class="indexterm" href="../reference/algorithms/touches/touches_2_two_geometries.html">touches
+ (two geometries)</a>
+</dt>
+<dt>transform, <a class="indexterm" href="../reference/algorithms/transform/transform_3_with_strategy.html">transform
+ (with strategy)</a>, <a class="indexterm" href="../reference/algorithms/transform/transform_2.html">transform</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_inverse_transformer.html">strategy::transform::inverse_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_map_transformer.html">strategy::transform::map_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_rotate_transformer.html">strategy::transform::rotate_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_scale_transformer.html">strategy::transform::scale_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_translate_transformer.html">strategy::transform::translate_transformer</a>, <a class="indexterm" href="../reference/strategies/strategy_transform_ublas_transformer.html">strategy::transform::ublas_transformer</a>
+</dt>
+<dt>translate_transformer, <a class="indexterm" href="../reference/strategies/strategy_transform_translate_transformer.html">strategy::transform::translate_transformer</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>U</h3>
+<dl>
+<dt>ublas_transformer, <a class="indexterm" href="../reference/strategies/strategy_transform_ublas_transformer.html">strategy::transform::ublas_transformer</a>
+</dt>
+<dt>union_, <a class="indexterm" href="../reference/algorithms/union_.html">union_</a>
+</dt>
+<dt>unique, <a class="indexterm" href="../reference/algorithms/unique.html">unique</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>W</h3>
+<dl>
+<dt>winding, <a class="indexterm" href="../reference/strategies/strategy_within_winding.html">strategy::within::winding</a>
+</dt>
+<dt>within, <a class="indexterm" href="../reference/algorithms/within/within_2.html">within</a>, <a class="indexterm" href="../reference/algorithms/within/within_3_with_strategy.html">within
+ (with strategy)</a>, <a class="indexterm" href="../reference/strategies/strategy_within_winding.html">strategy::within::winding</a>, <a class="indexterm" href="../reference/strategies/strategy_within_franklin.html">strategy::within::franklin</a>, <a class="indexterm" href="../reference/strategies/strategy_within_crossings_multiply.html">strategy::within::crossings_multiply</a>
+</dt>
+</dl>
+</div>
+</div>
+</div>
+<p>
+
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="matrix.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="../examples.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/indexes/matrix.html b/libs/geometry/doc/html/geometry/indexes/matrix.html
new file mode 100644
index 000000000..65ed2ce96
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/indexes/matrix.html
@@ -0,0 +1,714 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Reference Matrix</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../indexes.html" title="Indexes">
+<link rel="prev" href="../indexes.html" title="Indexes">
+<link rel="next" href="alphabetical_index.html" title="Alphabetical Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../indexes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="alphabetical_index.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.indexes.matrix"></a><a class="link" href="matrix.html" title="Reference Matrix">Reference Matrix</a>
+</h3></div></div></div>
+<div class="informaltable">
+<table class="table">
+<colgroup>
+<col class="a">
+<col class="b">
+<col class="c">
+</colgroup>
+<thead><tr><th colspan="3" valign="center">
+ <h3>
+<a name="idp17303232"></a>Geometry Concepts</h3>
+ </th></tr></thead>
+<tbody><tr>
+<td valign="top">
+ <h4>
+<a name="idp17304256"></a>0-dimensional</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/concepts/concept_point.html" title="Point Concept">Point</a></td></tr>
+<tr><td><a class="link" href="../reference/concepts/concept_multi_point.html" title="MultiPoint Concept">MultiPoint</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17306384"></a>1-dimensional</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/concepts/concept_segment.html" title="Segment Concept">Segment</a></td></tr>
+<tr><td><a class="link" href="../reference/concepts/concept_linestring.html" title="Linestring Concept">Linestring</a></td></tr>
+<tr><td><a class="link" href="../reference/concepts/concept_multi_linestring.html" title="MultiLinestring Concept">MultiLinestring</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17309072"></a>2-dimensional</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/concepts/concept_box.html" title="Box Concept">Box</a></td></tr>
+<tr><td><a class="link" href="../reference/concepts/concept_ring.html" title="Ring Concept">Ring</a></td></tr>
+<tr><td><a class="link" href="../reference/concepts/concept_polygon.html" title="Polygon Concept">Polygon</a></td></tr>
+<tr><td><a class="link" href="../reference/concepts/concept_multi_polygon.html" title="MultiPolygon Concept">MultiPolygon</a></td></tr>
+</table>
+ </td>
+</tr></tbody>
+</table>
+<table class="table">
+<colgroup>
+<col class="a">
+<col class="b">
+<col class="c">
+</colgroup>
+<thead><tr><th colspan="3" valign="center">
+ <h3>
+<a name="idp17313920"></a>Geometry Models</h3>
+ </th></tr></thead>
+<tbody>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17314944"></a>0-dimensional</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/models/model_point.html" title="model::point">point</a></td></tr>
+<tr><td><a class="link" href="../reference/models/model_d2_point_xy.html" title="model::d2::point_xy">point_xy</a></td></tr>
+<tr><td><a class="link" href="../reference/models/model_multi_point.html" title="model::multi_point">multi_point</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17317600"></a>1-dimensional</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/models/model_linestring.html" title="model::linestring">linestring</a></td></tr>
+<tr><td><a class="link" href="../reference/models/model_multi_linestring.html" title="model::multi_linestring">multi_linestring</a></td></tr>
+<tr><td><a class="link" href="../reference/models/model_segment.html" title="model::segment">segment</a></td></tr>
+<tr><td><a class="link" href="../reference/models/model_referring_segment.html" title="model::referring_segment">referring_segment</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17320880"></a>2-dimensional</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/models/model_box.html" title="model::box">box</a></td></tr>
+<tr><td><a class="link" href="../reference/models/model_ring.html" title="model::ring">ring</a></td></tr>
+<tr><td><a class="link" href="../reference/models/model_polygon.html" title="model::polygon">polygon</a></td></tr>
+<tr><td><a class="link" href="../reference/models/model_multi_polygon.html" title="model::multi_polygon">multi_polygon</a></td></tr>
+</table>
+ </td>
+</tr>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17324240"></a>0-dimensional (adapted)</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/adapted/boost_array.html" title="Boost.Array">Boost.Array</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/boost_fusion.html" title="Boost.Fusion">Boost.Fusion</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/boost_polygon/point_data.html" title="Boost.Polygon's point_data">Boost.Polygon's point_data</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/boost_tuple.html" title="Boost.Tuple">Boost.Tuple</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/c_array.html" title="C array">C arrays</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17328016"></a>1-dimensional (adapted)</h4>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17328672"></a>2-dimensional (adapted)</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/adapted/boost_polygon/rectangle_data.html" title="Boost.Polygon's rectangle_data">Boost.Polygon's rectangle_data</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/boost_polygon/polygon_data.html" title="Boost.Polygon's polygon_data">Boost.Polygon's polygon_data</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/boost_polygon/polygon_with_holes_data.html" title="Boost.Polygon's polygon_with_holes_data">Boost.Polygon's polygon_with_holes_data</a></td></tr>
+</table>
+ </td>
+</tr>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17331808"></a>0-dimensional (macro's for adaption)</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_point_2d.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D">BOOST_GEOMETRY_REGISTER_POINT_2D</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_point_2d_const.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D_CONST">BOOST_GEOMETRY_REGISTER_POINT_2D_CONST</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_point_2d_get_set.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET">BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_point_3d.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D">BOOST_GEOMETRY_REGISTER_POINT_3D</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_point_3d_const.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D_CONST">BOOST_GEOMETRY_REGISTER_POINT_3D_CONST</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_point_3d_get_set.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET">BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_multi_point.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POINT">BOOST_GEOMETRY_REGISTER_MULTI_POINT</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_multi_point_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED">BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17338000"></a>1-dimensionial (macro's for adaption)</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_linestring.html" title="BOOST_GEOMETRY_REGISTER_LINESTRING">BOOST_GEOMETRY_REGISTER_LINESTRING</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_linestring_templated.html" title="BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED">BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_multi_linestring.html" title="BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_multi_linestring_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17341680"></a>2-dimensional (macro's for adaption)</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_box.html" title="BOOST_GEOMETRY_REGISTER_BOX">BOOST_GEOMETRY_REGISTER_BOX</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_box_2d_4values.html" title="BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES">BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_box_templated.html" title="BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED">BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_ring.html" title="BOOST_GEOMETRY_REGISTER_RING">BOOST_GEOMETRY_REGISTER_RING</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_ring_templated.html" title="BOOST_GEOMETRY_REGISTER_RING_TEMPLATED">BOOST_GEOMETRY_REGISTER_RING_TEMPLATED</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_multi_polygon.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POLYGON">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON</a></td></tr>
+<tr><td><a class="link" href="../reference/adapted/register/boost_geometry_register_multi_polygon_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED</a></td></tr>
+</table>
+ </td>
+</tr>
+</tbody>
+</table>
+<table class="table">
+<colgroup>
+<col class="a">
+<col class="b">
+</colgroup>
+<thead><tr><th colspan="2" valign="center">
+ <h3>
+<a name="idp17348512"></a>Core</h3>
+ </th></tr></thead>
+<tbody><tr>
+<td valign="top">
+ <h4>
+<a name="idp17349536"></a>Metafunctions</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/core/cs_tag.html" title="cs_tag">cs_tag</a></td></tr>
+<tr><td><a class="link" href="../reference/core/closure.html" title="closure">closure</a></td></tr>
+<tr><td><a class="link" href="../reference/core/coordinate_type.html" title="coordinate_type">coordinate_type</a></td></tr>
+<tr><td><a class="link" href="../reference/core/coordinate_system.html" title="coordinate_system">coordinate_system</a></td></tr>
+<tr><td><a class="link" href="../reference/core/dimension.html" title="dimension">dimension</a></td></tr>
+<tr><td><a class="link" href="../reference/core/interior_type.html" title="interior_type">interior_type</a></td></tr>
+<tr><td><a class="link" href="../reference/core/is_radian.html" title="is_radian">is_radian</a></td></tr>
+<tr><td><a class="link" href="../reference/core/point_order.html" title="point_order">point_order</a></td></tr>
+<tr><td><a class="link" href="../reference/core/point_type.html" title="point_type">point_type</a></td></tr>
+<tr><td><a class="link" href="../reference/core/ring_type.html" title="ring_type">ring_type</a></td></tr>
+<tr><td><a class="link" href="../reference/core/tag.html" title="tag">tag</a></td></tr>
+<tr><td><a class="link" href="../reference/core/tag_cast.html" title="tag_cast">tag_cast</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17356752"></a>Access Functions</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/access/get.html" title="get">get</a></td></tr>
+<tr><td><a class="link" href="../reference/access/set.html" title="set">set</a></td></tr>
+<tr><td><a class="link" href="../reference/access/exterior_ring.html" title="exterior_ring">exterior_ring</a></td></tr>
+<tr><td><a class="link" href="../reference/access/interior_rings.html" title="interior_rings">interior_rings</a></td></tr>
+</table>
+ <h4>
+<a name="idp17359600"></a>Classes</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/exceptions/exception.html" title="exception">exception</a></td></tr>
+<tr><td> <a class="link" href="../reference/exceptions/centroid_exception.html" title="centroid_exception">centroid_exception</a>
+</td></tr>
+</table>
+ </td>
+</tr></tbody>
+</table>
+<table class="table">
+<colgroup>
+<col class="a">
+<col class="b">
+</colgroup>
+<thead><tr>
+<th colspan="2" valign="center">
+ <h3>
+<a name="idp17363440"></a>Constants</h3>
+ </th>
+<th colspan="2" valign="center">
+ <h3>
+<a name="idp17364320"></a>Coordinate Systems</h3>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td valign="top">
+ <h4>
+<a name="idp17365360"></a>Numeric</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/constants/max_corner.html" title="max_corner">max_corner</a></td></tr>
+<tr><td><a class="link" href="../reference/constants/min_corner.html" title="min_corner">min_corner</a></td></tr>
+<tr><td><a class="link" href="../reference/enumerations/order_selector.html" title="order_selector">order_selector</a></td></tr>
+<tr><td><a class="link" href="../reference/enumerations/closure_selector.html" title="closure_selector">closure_selector</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17368592"></a>Types</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/core/degree.html" title="degree">degree</a></td></tr>
+<tr><td><a class="link" href="../reference/core/radian.html" title="radian">radian</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17370688"></a>Classes</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/cs/cs_cartesian.html" title="cs::cartesian">cs::cartesian</a></td></tr>
+<tr><td><a class="link" href="../reference/cs/cs_spherical.html" title="cs::spherical">cs::spherical</a></td></tr>
+<tr><td><a class="link" href="../reference/cs/cs_spherical_equatorial.html" title="cs::spherical_equatorial">cs::spherical_equatorial</a></td></tr>
+<tr><td><a class="link" href="../reference/cs/cs_geographic.html" title="cs::geographic">cs::geographic</a></td></tr>
+</table>
+ </td>
+</tr></tbody>
+</table>
+<table class="table">
+<colgroup>
+<col class="a">
+<col class="b">
+</colgroup>
+<thead><tr>
+<th valign="center">
+ <h3>
+<a name="idp17375264"></a>Iterators</h3>
+ </th>
+<th valign="center">
+ <h3>
+<a name="idp17376144"></a>Views</h3>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td valign="top">
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/iterators/closing_iterator.html" title="closing_iterator">closing_iterator</a></td></tr>
+<tr><td><a class="link" href="../reference/iterators/ever_circling_iterator.html" title="ever_circling_iterator">ever_circling_iterator</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/views/box_view.html" title="box_view">box_view</a></td></tr>
+<tr><td><a class="link" href="../reference/views/segment_view.html" title="segment_view">segment_view</a></td></tr>
+<tr><td><a class="link" href="../reference/views/closeable_view.html" title="closeable_view">closeable_view</a></td></tr>
+<tr><td><a class="link" href="../reference/views/reversible_view.html" title="reversible_view">reversible_view</a></td></tr>
+<tr><td><a class="link" href="../reference/views/identity_view.html" title="identity_view">identity_view</a></td></tr>
+</table>
+ </td>
+</tr></tbody>
+</table>
+<table class="table">
+<colgroup>
+<col class="a">
+<col class="b">
+<col class="c">
+</colgroup>
+<thead><tr><th colspan="3" valign="center">
+ <h3>
+<a name="idp17384048"></a>Algorithms</h3>
+ </th></tr></thead>
+<tbody>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17385072"></a>Geometry Constructors</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/algorithms/make.html" title="make">make</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/make/make_inverse.html" title="make_inverse">make_inverse</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/make/make_zero.html" title="make_zero">make_zero</a></td></tr>
+</table>
+ <h4>
+<a name="idp17387488"></a>Predicates</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/algorithms/covered_by.html" title="covered_by">covered_by</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/disjoint.html" title="disjoint">disjoint</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/equals.html" title="equals">equals</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/intersects.html" title="intersects">intersects</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/overlaps.html" title="overlaps">overlaps</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/touches.html" title="touches">touches</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/within.html" title="within">within</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17392208"></a>Append</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/append.html" title="append">append</a></td></tr></table>
+ <h4>
+<a name="idp17393552"></a>Area</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/area.html" title="area">area</a></td></tr></table>
+ <h4>
+<a name="idp17394848"></a>Assign</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/algorithms/assign/assign.html" title="assign">assign</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/assign/assign_inverse.html" title="assign_inverse">assign_inverse</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/assign/assign_zero.html" title="assign_zero">assign_zero</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/assign/assign_points.html" title="assign_points">assign_points</a></td></tr>
+<tr><td>assign_values (
+ <a class="link" href="../reference/algorithms/assign/assign_values_3_2_coordinate_values.html" title="assign_values (2 coordinate values)">2</a>
+ <a class="link" href="../reference/algorithms/assign/assign_values_4_3_coordinate_values.html" title="assign_values (3 coordinate values)">3</a>
+ <a class="link" href="../reference/algorithms/assign/assign_values_5_4_coordinate_values.html" title="assign_values (4 coordinate values)">4</a>
+ coordinate values)
+ </td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17399968"></a>Centroid</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/centroid.html" title="centroid">centroid</a></td></tr></table>
+ <h4>
+<a name="idp17401232"></a>Clear</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/clear.html" title="clear">clear</a></td></tr></table>
+ <h4>
+<a name="idp17402528"></a>Convert</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/convert.html" title="convert">convert</a></td></tr></table>
+ <h4>
+<a name="idp17403824"></a>Convex Hull</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/convex_hull.html" title="convex_hull">convex_hull</a></td></tr></table>
+ <h4>
+<a name="idp17405120"></a>Correct</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/correct.html" title="correct">correct</a></td></tr></table>
+ </td>
+</tr>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17406864"></a>Distance</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/distance.html" title="distance">distance</a></td></tr></table>
+ <h4>
+<a name="idp17408208"></a>Difference</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/algorithms/difference.html" title="difference">difference</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/sym_difference.html" title="sym_difference">sym_difference</a></td></tr>
+</table>
+ <h4>
+<a name="idp17410032"></a>Envelope</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/envelope.html" title="envelope">envelope</a></td></tr></table>
+ <h4>
+<a name="idp17411328"></a>Expand</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/expand.html" title="expand">expand</a></td></tr></table>
+ <h4>
+<a name="idp17412624"></a>For Each</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/for_each.html" title="for_each">for each (point, segment)</a></td></tr></table>
+ <h4>
+<a name="idp17413936"></a>Intersection</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/intersection.html" title="intersection">intersection</a></td></tr></table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17415488"></a>Length</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/length.html" title="length">length</a></td></tr></table>
+
+ <h4>
+<a name="idp17416864"></a>Num_ (counting)</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/algorithms/num_interior_rings.html" title="num_interior_rings">num_interior_rings</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/num_geometries.html" title="num_geometries">num_geometries</a></td></tr>
+<tr><td><a class="link" href="../reference/algorithms/num_points.html" title="num_points">num_points</a></td></tr>
+</table>
+
+
+ <h4>
+<a name="idp17419264"></a>Perimeter</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/perimeter.html" title="perimeter">perimeter</a></td></tr></table>
+ <h4>
+<a name="idp17420560"></a>Reverse</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/reverse.html" title="reverse">reverse</a></td></tr></table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17422112"></a>Simplify</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/simplify.html" title="simplify">simplify</a></td></tr></table>
+ <h4>
+<a name="idp17423456"></a>Transform</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/transform.html" title="transform">transform</a></td></tr></table>
+ <h4>
+<a name="idp17424752"></a>Union</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/union_.html" title="union_">union</a></td></tr></table>
+ <h4>
+<a name="idp17426048"></a>Unique</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/algorithms/unique.html" title="unique">unique</a></td></tr></table>
+ </td>
+</tr>
+</tbody>
+</table>
+<table class="table">
+<colgroup>
+<col class="a">
+<col class="b">
+<col class="c">
+</colgroup>
+<thead><tr><th colspan="3" valign="center">
+ <h3>
+<a name="idp17429280"></a>Strategies</h3>
+ </th></tr></thead>
+<tbody>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17430304"></a>Area</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/strategies/strategy_area_surveyor.html" title="strategy::area::surveyor">strategy::area::surveyor</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_area_huiller.html" title="strategy::area::huiller">strategy::area::huiller</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17432528"></a>Centroid</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/strategies/strategy_centroid_bashein_detmer.html" title="strategy::centroid::bashein_detmer">strategy::centroid::bashein_detmer</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_centroid_average.html" title="strategy::centroid::average">strategy::centroid::centroid_average</a></td></tr>
+</table>
+ </td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17434976"></a>Distance</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/strategies/strategy_distance_projected_point.html" title="strategy::distance::projected_point">strategy::distance::projected_point</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_distance_pythagoras.html" title="strategy::distance::pythagoras">strategy::distance::pythagoras</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_distance_cross_track.html" title="strategy::distance::cross_track">strategy::distance::cross_track</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_distance_haversine.html" title="strategy::distance::haversine">strategy::distance::haversine</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17438368"></a>Convex Hull</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/strategies/strategy_convex_hull_graham_andrew.html" title="strategy::convex_hull::graham_andrew">strategy::convex_hull::graham_andrew</a></td></tr></table>
+ </td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17440336"></a>Side</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/strategies/strategy_side_side_by_triangle.html" title="strategy::side::side_by_triangle">strategy::side::side_by_triangle</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_side_side_by_cross_track.html" title="strategy::side::side_by_cross_track">strategy::side::side_by_cross_track</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_side_spherical_side_formula.html" title="strategy::side::spherical_side_formula">strategy::side::spherical_side_formula</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17443216"></a>Simplify</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/strategies/strategy_simplify_douglas_peucker.html" title="strategy::simplify::douglas_peucker">strategy::simplify::douglas_peucker</a></td></tr></table>
+ </td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17445024"></a>Transform</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/strategies/strategy_transform_inverse_transformer.html" title="strategy::transform::inverse_transformer">strategy::transform::inverse_transformer</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_transform_map_transformer.html" title="strategy::transform::map_transformer">strategy::transform::map_transformer</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_transform_ublas_transformer.html" title="strategy::transform::ublas_transformer">strategy::transform::ublas_transformer</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_transform_translate_transformer.html" title="strategy::transform::translate_transformer">strategy::transform::translate_transformer</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_transform_scale_transformer.html" title="strategy::transform::scale_transformer">strategy::transform::scale_transformer</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_transform_rotate_transformer.html" title="strategy::transform::rotate_transformer">strategy::transform::rotate_transformer</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17449888"></a>Within</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/strategies/strategy_within_winding.html" title="strategy::within::winding">strategy::winding</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_within_crossings_multiply.html" title="strategy::within::crossings_multiply">strategy::crossings_multiply</a></td></tr>
+<tr><td><a class="link" href="../reference/strategies/strategy_within_franklin.html" title="strategy::within::franklin">strategy::franklin</a></td></tr>
+</table>
+ </td>
+<td class="auto-generated">&#160;</td>
+</tr>
+</tbody>
+</table>
+<table class="table">
+<colgroup>
+<col class="a">
+<col class="b">
+<col class="c">
+<col class="d">
+</colgroup>
+<thead><tr><th colspan="4" valign="center">
+ <h3>
+<a name="idp17454560"></a>Arithmetic</h3>
+ </th></tr></thead>
+<tbody>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17455584"></a>Add</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/arithmetic/add_point.html" title="add_point">add_point</a></td></tr>
+<tr><td><a class="link" href="../reference/arithmetic/add_value.html" title="add_value">add_value</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17457728"></a>Subtract</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/arithmetic/subtract_point.html" title="subtract_point">subtract_point</a></td></tr>
+<tr><td><a class="link" href="../reference/arithmetic/subtract_value.html" title="subtract_value">subtract_value</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17459856"></a>Multiply</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/arithmetic/multiply_point.html" title="multiply_point">multiply_point</a></td></tr>
+<tr><td><a class="link" href="../reference/arithmetic/multiply_value.html" title="multiply_value">multiply_value</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17461984"></a>Divide</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../reference/arithmetic/divide_point.html" title="divide_point">divide_point</a></td></tr>
+<tr><td><a class="link" href="../reference/arithmetic/divide_value.html" title="divide_value">divide_value</a></td></tr>
+</table>
+ </td>
+</tr>
+<tr><td colspan="4" valign="center">
+ <h4>
+<a name="idp17464544"></a>Products</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../reference/arithmetic/dot_product.html" title="dot_product">dot_product</a></td></tr></table>
+ </td></tr>
+</tbody>
+</table>
+<table class="table">
+<colgroup>
+<col class="a">
+<col class="b">
+<col class="c">
+</colgroup>
+<thead><tr><th colspan="3" valign="center">
+ <h3>
+<a name="idp17467824"></a>Spatial indexes</h3>
+ </th></tr></thead>
+<tbody>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17468848"></a>R-tree</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../../">boost::geometry::index::rtree</a></td></tr></table>
+ <h4>
+<a name="idp17470400"></a>R-tree parameters</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../../">boost::geometry::index::linear</a></td></tr>
+<tr><td><a class="link" href="../../">boost::geometry::index::quadratic</a></td></tr>
+<tr><td><a class="link" href="../../">boost::geometry::index::rstar</a></td></tr>
+<tr><td><a class="link" href="../../">boost::geometry::index::dynamic_linear</a></td></tr>
+<tr><td><a class="link" href="../../">boost::geometry::index::dynamic_quadratic</a></td></tr>
+<tr><td><a class="link" href="../../">boost::geometry::index::dynamic_rstar</a></td></tr>
+</table>
+ <h4>
+<a name="idp17475488"></a>R-tree constructors and destructor</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../../">rtree()</a></td></tr>
+<tr><td><a class="link" href="../../">rtree(parameters_type const &amp;, indexable_getter const &amp;, value_equal const &amp;, allocator_type const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">rtree(Iterator, Iterator)</a></td></tr>
+<tr><td><a class="link" href="../../">rtree(Range const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">rtree(rtree const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">rtree(rtree const &amp;, allocator_type const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">rtree(rtree &amp;&amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">rtree(rtree &amp;&amp;, allocator_type const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">~rtree()</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17483344"></a>R-tree member functions</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../../">operator=(const rtree &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">operator=(rtree &amp;&amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">swap(rtree &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">insert(value_type const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">insert(Iterator, Iterator)</a></td></tr>
+<tr><td><a class="link" href="../../">insert(Range const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">remove(value_type const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">remove(Iterator, Iterator)</a></td></tr>
+<tr><td><a class="link" href="../../">remove(Range const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">query(Predicates const &amp;, OutIter)</a></td></tr>
+<tr><td><a class="link" href="../../">size()</a></td></tr>
+<tr><td><a class="link" href="../../">empty()</a></td></tr>
+<tr><td><a class="link" href="../../">clear()</a></td></tr>
+<tr><td><a class="link" href="../../">bounds()</a></td></tr>
+<tr><td><a class="link" href="../../">count(ValueOrIndexable const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">parameters()</a></td></tr>
+<tr><td><a class="link" href="../../">indexable_get()</a></td></tr>
+<tr><td><a class="link" href="../../">value_eq()</a></td></tr>
+<tr><td><a class="link" href="../../">get_allocator()</a></td></tr>
+</table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17497984"></a>R-tree free functions (boost::geometry::index::)</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../../">insert(rtree&lt;...&gt; &amp;, Value const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">insert(rtree&lt;...&gt; &amp;, Iterator, Iterator)</a></td></tr>
+<tr><td><a class="link" href="../../">insert(rtree&lt;...&gt; &amp;, Range const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">remove(rtree&lt;...&gt; &amp;, Value const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">remove(rtree&lt;...&gt; &amp;, Iterator, Iterator)</a></td></tr>
+<tr><td><a class="link" href="../../">remove(rtree&lt;...&gt; &amp;, Range const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">query(rtree&lt;...&gt; const &amp;, Predicates const &amp;, OutIter)</a></td></tr>
+<tr><td><a class="link" href="../../">clear(rtree&lt;...&gt; &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">size(rtree&lt;...&gt; const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">empty(rtree&lt;...&gt; const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">bounds(rtree&lt;...&gt; const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">swap(rtree&lt;...&gt; &amp;, rtree&lt;...&gt; &amp;)</a></td></tr>
+</table>
+ </td>
+</tr>
+<tr>
+<td valign="top">
+ <h4>
+<a name="idp17508464"></a>Observers (boost::geometry::index::)</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../../">boost::geometry::index::indexable</a></td></tr>
+<tr><td><a class="link" href="../../">boost::geometry::index::equal_to</a></td></tr>
+</table>
+ <h4>
+<a name="idp17510672"></a>Inserters (boost::geometry::index::)</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../../">inserter(Container &amp;)</a></td></tr></table>
+ <h4>
+<a name="idp17512160"></a>Adaptors (boost::geometry::index::adaptors::)</h4>
+ <table border="0" summary="Simple list" class="simplelist"><tr><td><a class="link" href="../../">queried(Predicates const &amp;)</a></td></tr></table>
+ </td>
+<td valign="top">
+ <h4>
+<a name="idp17513936"></a>Predicates (boost::geometry::index::)</h4>
+ <table border="0" summary="Simple list" class="simplelist">
+<tr><td><a class="link" href="../../">covered_by(Geometry const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">disjoint(Geometry const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">intersects(Geometry const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">overlaps(Geometry const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">within(Geometry const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">satisfies(UnaryPredicate const &amp;)</a></td></tr>
+<tr><td><a class="link" href="../../">nearest(Point const &amp;, unsigned)</a></td></tr>
+</table>
+ </td>
+<td class="auto-generated">&#160;</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../indexes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="alphabetical_index.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/introduction.html b/libs/geometry/doc/html/geometry/introduction.html
new file mode 100644
index 000000000..7e7af4be0
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/introduction.html
@@ -0,0 +1,111 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Introduction</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="next" href="compilation.html" title="Compilation">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="compilation.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.introduction"></a><a class="link" href="introduction.html" title="Introduction">Introduction</a>
+</h2></div></div></div>
+<p>
+ Boost.Geometry (aka Generic Geometry Library, GGL), part of collection of the
+ Boost C++ Libraries, defines concepts, primitives and algorithms for solving
+ geometry problems.
+ </p>
+<p>
+ Boost.Geometry contains a dimension-agnostic, coordinate-system-agnostic and
+ scalable kernel, based on concepts, meta-functions and tag dispatching. On
+ top of that kernel, algorithms are built: area, length, perimeter, centroid,
+ convex hull, intersection (clipping), within (point in polygon), distance,
+ envelope (bounding box), simplify, transform, and much more. The library supports
+ high precision arithmetic numbers, such as <a href="http://www.ttmath.org/" target="_top">ttmath</a>.
+ </p>
+<p>
+ Boost.Geometry contains instantiable geometry classes, but library users can
+ also use their own. Using registration macros or traits classes their geometries
+ can be adapted to fulfil Boost.Geometry concepts.
+ </p>
+<p>
+ Boost.Geometry might be used in all domains where geometry plays a role: mapping
+ and GIS, game development, computer graphics and widgets, robotics, astronomy
+ and more. The core is designed to be as generic as possible and support those
+ domains. For now, the development has been mostly GIS-oriented.
+ </p>
+<p>
+ The library follows existing conventions:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ conventions from boost
+ </li>
+<li class="listitem">
+ conventions from the std library
+ </li>
+<li class="listitem">
+ conventions and names from one of the <a href="http://www.opengeospatial.org" target="_top">OGC</a>
+ standards on geometry and, more specificly, from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>
+ </li>
+</ul></div>
+<p>
+ The library was first released with Boost 1.47.0 and from that point on it
+ is officially part of the Boost C++ Libraries.
+ </p>
+<p>
+ Latest stable version of the source code is included in the <a href="http://www.boost.org/users/download/" target="_top">Boost
+ packaged releases</a>. It can also be downloaded from the current <a href="http://svn.boost.org/svn/boost/branches/release" target="_top">Boost release branch</a>
+ in the Boost Subversion repository.
+ </p>
+<p>
+ The library development upstream is available from the <a href="http://svn.boost.org/svn/boost/trunk" target="_top">Boost
+ trunk</a> in the Boost Subversion repository.
+ </p>
+<p>
+ Note that the library <span class="bold"><strong>extensions</strong></span> are not distributed
+ in the official Boost releases, but only available in the <a href="http://svn.boost.org/svn/boost/trunk/boost/geometry/extensions/" target="_top">Boost
+ trunk</a> and that they are subject to change.
+ </p>
+<p>
+ Boost.Geometry was accepted by Boost at November 28, 2009 (<a href="http://permalink.gmane.org/gmane.comp.lib.boost.announce/246" target="_top">review
+ report</a>).
+ </p>
+<p>
+ There is a Boost.Geometry <a href="http://lists.boost.org/mailman/listinfo.cgi/geometry" target="_top">mailing
+ list</a>. The mailing list and its messages are also accessible from <a href="http://boost-geometry.203548.n3.nabble.com/" target="_top">Nabble</a> as Boost Geometry.
+ Also on the Boost Developers list and on the Boost Users list Boost.Geometry
+ is discussed.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="compilation.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/quickstart.html b/libs/geometry/doc/html/geometry/quickstart.html
new file mode 100644
index 000000000..537c81848
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/quickstart.html
@@ -0,0 +1,232 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Quick Start</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="design.html" title="Design Rationale">
+<link rel="next" href="spatial_indexes.html" title="Spatial Indexes">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="design.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="spatial_indexes.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.quickstart"></a><a class="link" href="quickstart.html" title="Quick Start">Quick Start</a>
+</h2></div></div></div>
+<p>
+ This Quick Start section shows some of the features of Boost.Geometry in the
+ form of annotated, relatively simple, code snippets.
+ </p>
+<p>
+ The code below assumes that <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code> is included,
+ and that <code class="computeroutput"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span></code>
+ is used. Boost.Geometry is header only, so including headerfiles is enough.
+ There is no linking with any library necessary.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<h4>
+<a name="geometry.quickstart.h0"></a>
+ <span class="phrase"><a name="geometry.quickstart.cartesian"></a></span><a class="link" href="quickstart.html#geometry.quickstart.cartesian">Cartesian</a>
+ </h4>
+<p>
+ It is possible to use only a small part of the library. For example: the distance
+ between two points is a common use case. Boost.Geometry can calculate it from
+ various types. Using one of its own types:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">p1</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">),</span> <span class="identifier">p2</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance p1-p2 is: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p2</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ If the right headers are included and the types are bound to a coordinate system,
+ various other types can be used as points: plain C array's, Boost.Array's,
+ Boost.Tuple's, Boost.Fusion imported structs, your own classes...
+ </p>
+<p>
+ Registering and using a C array:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">c_array</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_C_ARRAY_CS</span><span class="special">(</span><span class="identifier">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">)</span>
+</pre>
+<p>
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">a</span><span class="special">[</span><span class="number">2</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">};</span>
+<span class="keyword">int</span> <span class="identifier">b</span><span class="special">[</span><span class="number">2</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">};</span>
+<span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance a-b is: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">d</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ Another often used algorithm is point-in-polygon. It is implemented in Boost.Geometry
+ under the name <code class="computeroutput"><span class="identifier">within</span></code>. We show
+ its usage here checking a Boost.Tuple (as a point) located within a polygon,
+ filled with C Array point pairs.
+ </p>
+<p>
+ But it is first necessary to register a Boost.Tuple, like the C array:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</span><span class="special">(</span><span class="identifier">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">)</span>
+</pre>
+<p>
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">points</span><span class="special">[][</span><span class="number">2</span><span class="special">]</span> <span class="special">=</span> <span class="special">{{</span><span class="number">2.0</span><span class="special">,</span> <span class="number">1.3</span><span class="special">},</span> <span class="special">{</span><span class="number">4.1</span><span class="special">,</span> <span class="number">3.0</span><span class="special">},</span> <span class="special">{</span><span class="number">5.3</span><span class="special">,</span> <span class="number">2.6</span><span class="special">},</span> <span class="special">{</span><span class="number">2.9</span><span class="special">,</span> <span class="number">0.7</span><span class="special">},</span> <span class="special">{</span><span class="number">2.0</span><span class="special">,</span> <span class="number">1.3</span><span class="special">}};</span>
+<span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">poly</span><span class="special">;</span>
+<span class="identifier">append</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">points</span><span class="special">);</span>
+<span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_tuple</span><span class="special">(</span><span class="number">3.7</span><span class="special">,</span> <span class="number">2.0</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Point p is in polygon? "</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">boolalpha</span> <span class="special">&lt;&lt;</span> <span class="identifier">within</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ We can calculate the area of a polygon:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ By the nature of a template library, it is possible to mix point types. We
+ calculate distance again, now using a C array point and a Boost.Tuple point:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">d2</span> <span class="special">=</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">p</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance a-p is: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">d2</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ The snippets listed above generate the following output:
+ </p>
+<pre class="programlisting">Distance p1-p2 is: 1.41421
+Distance a-b is: 2.23607
+Point p is in polygon? true
+Area: 3.015
+Distance a-p is: 2.87924
+</pre>
+<h4>
+<a name="geometry.quickstart.h1"></a>
+ <span class="phrase"><a name="geometry.quickstart.non_cartesian"></a></span><a class="link" href="quickstart.html#geometry.quickstart.non_cartesian">Non-Cartesian</a>
+ </h4>
+<p>
+ It is also possible to use non-Cartesian points. For example: points on a sphere.
+ When then an algorithm such as distance is used the library "inspects"
+ that it is handling spherical points and calculates the distance over the sphere,
+ instead of applying the Pythagorean theorem.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Boost.Geometry supports a geographical coordinate system, but that is in
+ an extension and not released in the current Boost release.
+ </p></td></tr>
+</table></div>
+<p>
+ We approximate the Earth as a sphere and calculate the distance between Amsterdam
+ and Paris:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">double</span><span class="special">,</span> <span class="number">2</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">cs</span><span class="special">::</span><span class="identifier">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">degree</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">spherical_point</span><span class="special">;</span>
+
+<span class="identifier">spherical_point</span> <span class="identifier">amsterdam</span><span class="special">(</span><span class="number">4.90</span><span class="special">,</span> <span class="number">52.37</span><span class="special">);</span>
+<span class="identifier">spherical_point</span> <span class="identifier">paris</span><span class="special">(</span><span class="number">2.35</span><span class="special">,</span> <span class="number">48.86</span><span class="special">);</span>
+
+<span class="keyword">double</span> <span class="keyword">const</span> <span class="identifier">earth_radius</span> <span class="special">=</span> <span class="number">3959</span><span class="special">;</span> <span class="comment">// miles</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance in miles: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">amsterdam</span><span class="special">,</span> <span class="identifier">paris</span><span class="special">)</span> <span class="special">*</span> <span class="identifier">earth_radius</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ It writes:
+ </p>
+<pre class="programlisting">Distance in miles: 267.02</pre>
+<h4>
+<a name="geometry.quickstart.h2"></a>
+ <span class="phrase"><a name="geometry.quickstart.adapted_structs"></a></span><a class="link" href="quickstart.html#geometry.quickstart.adapted_structs">Adapted
+ structs</a>
+ </h4>
+<p>
+ Finally an example from a totally different domain: developing window-based
+ applications, for example using QtWidgets. As soon as Qt classes are registered
+ in Boost.Geometry we can use them. We can, for example, check if two rectangles
+ overlap and if so, move the second one to another place:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="identifier">QRect</span> <span class="identifier">r1</span><span class="special">(</span><span class="number">100</span><span class="special">,</span> <span class="number">200</span><span class="special">,</span> <span class="number">15</span><span class="special">,</span> <span class="number">15</span><span class="special">);</span>
+<span class="identifier">QRect</span> <span class="identifier">r2</span><span class="special">(</span><span class="number">110</span><span class="special">,</span> <span class="number">210</span><span class="special">,</span> <span class="number">20</span><span class="special">,</span> <span class="number">20</span><span class="special">);</span>
+<span class="keyword">if</span> <span class="special">(</span><span class="identifier">overlaps</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> <span class="identifier">r2</span><span class="special">))</span>
+<span class="special">{</span>
+ <span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">r2</span><span class="special">,</span> <span class="number">200</span><span class="special">,</span> <span class="number">300</span><span class="special">,</span> <span class="number">220</span><span class="special">,</span> <span class="number">320</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<h4>
+<a name="geometry.quickstart.h3"></a>
+ <span class="phrase"><a name="geometry.quickstart.more"></a></span><a class="link" href="quickstart.html#geometry.quickstart.more">More</a>
+ </h4>
+<p>
+ In the reference many more examples can be found.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="design.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="spatial_indexes.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference.html b/libs/geometry/doc/html/geometry/reference.html
new file mode 100644
index 000000000..548a0be09
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference.html
@@ -0,0 +1,234 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Reference</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="spatial_indexes/rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html" title="Index stored in shared memory using Boost.Interprocess">
+<link rel="next" href="reference/access.html" title="Access Functions">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="spatial_indexes/rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="reference/access.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
+</h2></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="reference/access.html">Access Functions</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/access/get.html">get</a></span></dt>
+<dt><span class="section"><a href="reference/access/set.html">set</a></span></dt>
+<dt><span class="section"><a href="reference/access/exterior_ring.html">exterior_ring</a></span></dt>
+<dt><span class="section"><a href="reference/access/interior_rings.html">interior_rings</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/adapted.html">Adapted models</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/adapted/c_array.html">C array</a></span></dt>
+<dt><span class="section"><a href="reference/adapted/boost_array.html">Boost.Array</a></span></dt>
+<dt><span class="section"><a href="reference/adapted/boost_fusion.html">Boost.Fusion</a></span></dt>
+<dt><span class="section"><a href="reference/adapted/boost_tuple.html">Boost.Tuple</a></span></dt>
+<dt><span class="section"><a href="reference/adapted/boost_polygon.html">Boost.Polygon</a></span></dt>
+<dt><span class="section"><a href="reference/adapted/boost_range.html">Boost.Range</a></span></dt>
+<dt><span class="section"><a href="reference/adapted/register.html">Macro's for adaption</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/algorithms.html">Algorithms</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/algorithms/area.html">area</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/assign.html">assign</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/append.html">append</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/buffer.html">buffer</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/centroid.html">centroid</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/clear.html">clear</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/convert.html">convert</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/convex_hull.html">convex_hull</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/correct.html">correct</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/covered_by.html">covered_by</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/difference.html">difference</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/disjoint.html">disjoint</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/distance.html">distance</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/envelope.html">envelope</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/equals.html">equals</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/expand.html">expand</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/for_each.html">for_each</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/intersection.html">intersection</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/intersects.html">intersects</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/length.html">length</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/make.html">make</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/num_geometries.html">num_geometries</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/num_interior_rings.html">num_interior_rings</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/num_points.html">num_points</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/overlaps.html">overlaps</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/perimeter.html">perimeter</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/reverse.html">reverse</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/simplify.html">simplify</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/sym_difference.html">sym_difference</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/touches.html">touches</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/transform.html">transform</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/union_.html">union_</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/unique.html">unique</a></span></dt>
+<dt><span class="section"><a href="reference/algorithms/within.html">within</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/arithmetic.html">Arithmetic</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/arithmetic/add_point.html">add_point</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/add_value.html">add_value</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/assign_point.html">assign_point</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/assign_value.html">assign_value</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/divide_point.html">divide_point</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/divide_value.html">divide_value</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/dot_product.html">dot_product</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/multiply_point.html">multiply_point</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/multiply_value.html">multiply_value</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/subtract_point.html">subtract_point</a></span></dt>
+<dt><span class="section"><a href="reference/arithmetic/subtract_value.html">subtract_value</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/concepts.html">Concepts</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/concepts/concept_point.html">Point Concept</a></span></dt>
+<dt><span class="section"><a href="reference/concepts/concept_linestring.html">Linestring
+ Concept</a></span></dt>
+<dt><span class="section"><a href="reference/concepts/concept_polygon.html">Polygon
+ Concept</a></span></dt>
+<dt><span class="section"><a href="reference/concepts/concept_multi_point.html">MultiPoint
+ Concept</a></span></dt>
+<dt><span class="section"><a href="reference/concepts/concept_multi_linestring.html">MultiLinestring
+ Concept</a></span></dt>
+<dt><span class="section"><a href="reference/concepts/concept_multi_polygon.html">MultiPolygon
+ Concept</a></span></dt>
+<dt><span class="section"><a href="reference/concepts/concept_box.html">Box Concept</a></span></dt>
+<dt><span class="section"><a href="reference/concepts/concept_ring.html">Ring Concept</a></span></dt>
+<dt><span class="section"><a href="reference/concepts/concept_segment.html">Segment
+ Concept</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/constants.html">Constants</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/constants/min_corner.html">min_corner</a></span></dt>
+<dt><span class="section"><a href="reference/constants/max_corner.html">max_corner</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/cs.html">Coordinate Systems</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/cs/cs_cartesian.html">cs::cartesian</a></span></dt>
+<dt><span class="section"><a href="reference/cs/cs_spherical.html">cs::spherical</a></span></dt>
+<dt><span class="section"><a href="reference/cs/cs_spherical_equatorial.html">cs::spherical_equatorial</a></span></dt>
+<dt><span class="section"><a href="reference/cs/cs_geographic.html">cs::geographic</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/core.html">Core Metafunctions</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/core/closure.html">closure</a></span></dt>
+<dt><span class="section"><a href="reference/core/coordinate_system.html">coordinate_system</a></span></dt>
+<dt><span class="section"><a href="reference/core/coordinate_type.html">coordinate_type</a></span></dt>
+<dt><span class="section"><a href="reference/core/cs_tag.html">cs_tag</a></span></dt>
+<dt><span class="section"><a href="reference/core/degree.html">degree</a></span></dt>
+<dt><span class="section"><a href="reference/core/dimension.html">dimension</a></span></dt>
+<dt><span class="section"><a href="reference/core/interior_type.html">interior_type</a></span></dt>
+<dt><span class="section"><a href="reference/core/is_radian.html">is_radian</a></span></dt>
+<dt><span class="section"><a href="reference/core/point_order.html">point_order</a></span></dt>
+<dt><span class="section"><a href="reference/core/point_type.html">point_type</a></span></dt>
+<dt><span class="section"><a href="reference/core/radian.html">radian</a></span></dt>
+<dt><span class="section"><a href="reference/core/ring_type.html">ring_type</a></span></dt>
+<dt><span class="section"><a href="reference/core/tag.html">tag</a></span></dt>
+<dt><span class="section"><a href="reference/core/tag_cast.html">tag_cast</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/enumerations.html">Enumerations</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/enumerations/closure_selector.html">closure_selector</a></span></dt>
+<dt><span class="section"><a href="reference/enumerations/order_selector.html">order_selector</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/exceptions.html">Exceptions</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/exceptions/exception.html">exception</a></span></dt>
+<dt><span class="section"><a href="reference/exceptions/centroid_exception.html">centroid_exception</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/io.html">IO (input/output)</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/io/wkt.html">WKT (Well-Known Text)</a></span></dt>
+<dt><span class="section"><a href="reference/io/svg.html">SVG (Scalable Vector Graphics)</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/iterators.html">Iterators</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/iterators/closing_iterator.html">closing_iterator</a></span></dt>
+<dt><span class="section"><a href="reference/iterators/ever_circling_iterator.html">ever_circling_iterator</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/models.html">Models</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/models/model_point.html">model::point</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_d2_point_xy.html">model::d2::point_xy</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_linestring.html">model::linestring</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_polygon.html">model::polygon</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_multi_point.html">model::multi_point</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_multi_linestring.html">model::multi_linestring</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_multi_polygon.html">model::multi_polygon</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_box.html">model::box</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_ring.html">model::ring</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_segment.html">model::segment</a></span></dt>
+<dt><span class="section"><a href="reference/models/model_referring_segment.html">model::referring_segment</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/spatial_indexes.html">Spatial Indexes</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/spatial_indexes/parameters.html">R-tree
+ parameters (boost::geometry::index::)</a></span></dt>
+<dt><span class="section"><a href="reference/spatial_indexes/observers.html">Observers
+ (boost::geometry::index::)</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/strategies.html">Strategies</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/strategies/strategy_distance_pythagoras.html">strategy::distance::pythagoras</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_distance_haversine.html">strategy::distance::haversine</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_distance_projected_point.html">strategy::distance::projected_point</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_distance_cross_track.html">strategy::distance::cross_track</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_area_surveyor.html">strategy::area::surveyor</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_area_huiller.html">strategy::area::huiller</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_centroid_average.html">strategy::centroid::average</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_centroid_bashein_detmer.html">strategy::centroid::bashein_detmer</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_convex_hull_graham_andrew.html">strategy::convex_hull::graham_andrew</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_side_side_by_triangle.html">strategy::side::side_by_triangle</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_side_side_by_cross_track.html">strategy::side::side_by_cross_track</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_side_spherical_side_formula.html">strategy::side::spherical_side_formula</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_simplify_douglas_peucker.html">strategy::simplify::douglas_peucker</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_transform_inverse_transformer.html">strategy::transform::inverse_transformer</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_transform_map_transformer.html">strategy::transform::map_transformer</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_transform_rotate_transformer.html">strategy::transform::rotate_transformer</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_transform_scale_transformer.html">strategy::transform::scale_transformer</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_transform_translate_transformer.html">strategy::transform::translate_transformer</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_transform_ublas_transformer.html">strategy::transform::ublas_transformer</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_within_winding.html">strategy::within::winding</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_within_franklin.html">strategy::within::franklin</a></span></dt>
+<dt><span class="section"><a href="reference/strategies/strategy_within_crossings_multiply.html">strategy::within::crossings_multiply</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/views.html">Views</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/views/box_view.html">box_view</a></span></dt>
+<dt><span class="section"><a href="reference/views/segment_view.html">segment_view</a></span></dt>
+<dt><span class="section"><a href="reference/views/closeable_view.html">closeable_view</a></span></dt>
+<dt><span class="section"><a href="reference/views/reversible_view.html">reversible_view</a></span></dt>
+<dt><span class="section"><a href="reference/views/identity_view.html">identity_view</a></span></dt>
+</dl></dd>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="spatial_indexes/rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="reference/access.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access.html b/libs/geometry/doc/html/geometry/reference/access.html
new file mode 100644
index 000000000..f2d8908b0
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Access Functions</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="../reference.html" title="Reference">
+<link rel="next" href="access/get.html" title="get">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="access/get.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.access"></a><a class="link" href="access.html" title="Access Functions">Access Functions</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="access/get.html">get</a></span></dt>
+<dt><span class="section"><a href="access/set.html">set</a></span></dt>
+<dt><span class="section"><a href="access/exterior_ring.html">exterior_ring</a></span></dt>
+<dt><span class="section"><a href="access/interior_rings.html">interior_rings</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="access/get.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/exterior_ring.html b/libs/geometry/doc/html/geometry/reference/access/exterior_ring.html
new file mode 100644
index 000000000..cd129db01
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/exterior_ring.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>exterior_ring</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../access.html" title="Access Functions">
+<link rel="prev" href="set/set_from_radian.html" title="set_from_radian">
+<link rel="next" href="exterior_ring/exterior_ring_1.html" title="exterior_ring">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set/set_from_radian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../access.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="exterior_ring/exterior_ring_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.access.exterior_ring"></a><a class="link" href="exterior_ring.html" title="exterior_ring">exterior_ring</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="exterior_ring/exterior_ring_1.html">exterior_ring</a></span></dt>
+<dt><span class="section"><a href="exterior_ring/exterior_ring_1_const_version.html">exterior_ring
+ (const version)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set/set_from_radian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../access.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="exterior_ring/exterior_ring_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/exterior_ring/exterior_ring_1.html b/libs/geometry/doc/html/geometry/reference/access/exterior_ring/exterior_ring_1.html
new file mode 100644
index 000000000..55e3153de
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/exterior_ring/exterior_ring_1.html
@@ -0,0 +1,136 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>exterior_ring</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../exterior_ring.html" title="exterior_ring">
+<link rel="prev" href="../exterior_ring.html" title="exterior_ring">
+<link rel="next" href="exterior_ring_1_const_version.html" title="exterior_ring (const version)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../exterior_ring.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../exterior_ring.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="exterior_ring_1_const_version.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1"></a><a class="link" href="exterior_ring_1.html" title="exterior_ring">exterior_ring</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5704176"></a>
+Function to get the exterior_ring ring of a polygon.
+ </p>
+<h6>
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.exterior_ring.exterior_ring_1.synopsis"></a></span><a class="link" href="exterior_ring_1.html#geometry.reference.access.exterior_ring.exterior_ring_1.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Polygon</span><span class="special">&gt;</span>
+<span class="identifier">ring_return_type</span><span class="special">&lt;</span><span class="identifier">Polygon</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">exterior_ring</span><span class="special">(</span><span class="identifier">Polygon</span> <span class="special">&amp;</span> <span class="identifier">polygon</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.exterior_ring.exterior_ring_1.parameters"></a></span><a class="link" href="exterior_ring_1.html#geometry.reference.access.exterior_ring.exterior_ring_1.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Polygon &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ polygon type
+ </p>
+ </td>
+<td>
+ <p>
+ polygon
+ </p>
+ </td>
+<td>
+ <p>
+ the polygon to get the exterior ring from
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.exterior_ring.exterior_ring_1.returns"></a></span><a class="link" href="exterior_ring_1.html#geometry.reference.access.exterior_ring.exterior_ring_1.returns">Returns</a>
+ </h6>
+<p>
+ a reference to the exterior ring
+ </p>
+<h6>
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.exterior_ring.exterior_ring_1.header"></a></span><a class="link" href="exterior_ring_1.html#geometry.reference.access.exterior_ring.exterior_ring_1.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">exterior_ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../exterior_ring.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../exterior_ring.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="exterior_ring_1_const_version.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/exterior_ring/exterior_ring_1_const_version.html b/libs/geometry/doc/html/geometry/reference/access/exterior_ring/exterior_ring_1_const_version.html
new file mode 100644
index 000000000..9dde4deff
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/exterior_ring/exterior_ring_1_const_version.html
@@ -0,0 +1,137 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>exterior_ring (const version)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../exterior_ring.html" title="exterior_ring">
+<link rel="prev" href="exterior_ring_1.html" title="exterior_ring">
+<link rel="next" href="../interior_rings.html" title="interior_rings">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exterior_ring_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../exterior_ring.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="../interior_rings.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1_const_version"></a><a class="link" href="exterior_ring_1_const_version.html" title="exterior_ring (const version)">exterior_ring
+ (const version)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5730272"></a>
+Function to get the exterior ring of a polygon (const version)
+ </p>
+<h6>
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1_const_version.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.exterior_ring.exterior_ring_1_const_version.synopsis"></a></span><a class="link" href="exterior_ring_1_const_version.html#geometry.reference.access.exterior_ring.exterior_ring_1_const_version.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Polygon</span><span class="special">&gt;</span>
+<span class="identifier">ring_return_type</span><span class="special">&lt;</span><span class="identifier">Polygon</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">exterior_ring</span><span class="special">(</span><span class="identifier">Polygon</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">polygon</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1_const_version.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.exterior_ring.exterior_ring_1_const_version.parameters"></a></span><a class="link" href="exterior_ring_1_const_version.html#geometry.reference.access.exterior_ring.exterior_ring_1_const_version.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Polygon const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ polygon type
+ </p>
+ </td>
+<td>
+ <p>
+ polygon
+ </p>
+ </td>
+<td>
+ <p>
+ the polygon to get the exterior ring from
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1_const_version.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.exterior_ring.exterior_ring_1_const_version.returns"></a></span><a class="link" href="exterior_ring_1_const_version.html#geometry.reference.access.exterior_ring.exterior_ring_1_const_version.returns">Returns</a>
+ </h6>
+<p>
+ a const reference to the exterior ring
+ </p>
+<h6>
+<a name="geometry.reference.access.exterior_ring.exterior_ring_1_const_version.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.exterior_ring.exterior_ring_1_const_version.header"></a></span><a class="link" href="exterior_ring_1_const_version.html#geometry.reference.access.exterior_ring.exterior_ring_1_const_version.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">exterior_ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exterior_ring_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../exterior_ring.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="../interior_rings.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/get.html b/libs/geometry/doc/html/geometry/reference/access/get.html
new file mode 100644
index 000000000..a7311fb03
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/get.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>get</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../access.html" title="Access Functions">
+<link rel="prev" href="../access.html" title="Access Functions">
+<link rel="next" href="get/get_1.html" title="get">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../access.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../access.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="get/get_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.access.get"></a><a class="link" href="get.html" title="get">get</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="get/get_1.html">get</a></span></dt>
+<dt><span class="section"><a href="get/get_1_with_index.html">get
+ (with index)</a></span></dt>
+<dt><span class="section"><a href="get/get_as_radian.html">get_as_radian</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../access.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../access.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="get/get_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/get/get_1.html b/libs/geometry/doc/html/geometry/reference/access/get/get_1.html
new file mode 100644
index 000000000..d211bc5bc
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/get/get_1.html
@@ -0,0 +1,275 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>get</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../get.html" title="get">
+<link rel="prev" href="../get.html" title="get">
+<link rel="next" href="get_1_with_index.html" title="get (with index)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../get.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../get.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="get_1_with_index.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.get.get_1"></a><a class="link" href="get_1.html" title="get">get</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5308368"></a>
+Get coordinate value of a geometry (usually a point)
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1.description"></a></span><a class="link" href="get_1.html#geometry.reference.access.get.get_1.description">Description</a>
+ </h6>
+<p>
+ The free functions <span class="bold"><strong>get</strong></span> and <span class="bold"><strong>set</strong></span> are two of the most important functions of
+ Boost.Geometry, both within the library, as also for the library user.
+ With these two functions you normally get and set coordinate values from
+ and for a point, box, segment or sphere.
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1.synopsis"></a></span><a class="link" href="get_1.html#geometry.reference.access.get.get_1.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1.parameters"></a></span><a class="link" href="get_1.html#geometry.reference.access.get.get_1.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Dimension
+ </p>
+ </td>
+<td>
+ <p>
+ Dimension, this template parameter is required. Should contain
+ [0 .. n-1] for an n-dimensional geometry
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept (usually a Point Concept)
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept (usually a point)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.get.get_1.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1.returns"></a></span><a class="link" href="get_1.html#geometry.reference.access.get.get_1.returns">Returns</a>
+ </h6>
+<p>
+ The coordinate value of specified dimension of specified geometry
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1.h4"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1.header"></a></span><a class="link" href="get_1.html#geometry.reference.access.get.get_1.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">access</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1.h5"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1.behavior"></a></span><a class="link" href="get_1.html#geometry.reference.access.get.get_1.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the coordinate of a point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Circle or Sphere
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the coordinate of the center of a circle or sphere
+ (currently in an extension)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the coordinate of a point, in either Radian's or Degree's,
+ depending on specified units
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.get.get_1.h6"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1.complexity"></a></span><a class="link" href="get_1.html#geometry.reference.access.get.get_1.complexity">Complexity</a>
+ </h6>
+<p>
+ Constant
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1.h7"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1.example"></a></span><a class="link" href="get_1.html#geometry.reference.access.get.get_1.example">Example</a>
+ </h6>
+<p>
+ Get the coordinate of a point
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+
+ <span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">point</span><span class="special">);</span>
+ <span class="keyword">double</span> <span class="identifier">y</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">point</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"x="</span> <span class="special">&lt;&lt;</span> <span class="identifier">x</span> <span class="special">&lt;&lt;</span> <span class="string">" y="</span> <span class="special">&lt;&lt;</span> <span class="identifier">y</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">x=1 y=2
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../get.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../get.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="get_1_with_index.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/get/get_1_with_index.html b/libs/geometry/doc/html/geometry/reference/access/get/get_1_with_index.html
new file mode 100644
index 000000000..09b70148f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/get/get_1_with_index.html
@@ -0,0 +1,292 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>get (with index)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../get.html" title="get">
+<link rel="prev" href="get_1.html" title="get">
+<link rel="next" href="get_as_radian.html" title="get_as_radian">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="get_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../get.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="get_as_radian.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.get.get_1_with_index"></a><a class="link" href="get_1_with_index.html" title="get (with index)">get
+ (with index)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5378704"></a>
+get coordinate value of a Box or Segment
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1_with_index.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1_with_index.description"></a></span><a class="link" href="get_1_with_index.html#geometry.reference.access.get.get_1_with_index.description">Description</a>
+ </h6>
+<p>
+ The free functions <span class="bold"><strong>get</strong></span> and <span class="bold"><strong>set</strong></span> are two of the most important functions of
+ Boost.Geometry, both within the library, as also for the library user.
+ With these two functions you normally get and set coordinate values from
+ and for a point, box, segment or sphere.
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1_with_index.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1_with_index.synopsis"></a></span><a class="link" href="get_1_with_index.html#geometry.reference.access.get.get_1_with_index.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Index</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1_with_index.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1_with_index.parameters"></a></span><a class="link" href="get_1_with_index.html#geometry.reference.access.get.get_1_with_index.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Index
+ </p>
+ </td>
+<td>
+ <p>
+ Index, this template parameter is required. For a Box: either
+ min_corner or max_corner. For a Segment: either 0 or 1 for
+ first or last point.
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Dimension
+ </p>
+ </td>
+<td>
+ <p>
+ Dimension, this template parameter is required. Should contain
+ [0 .. n-1] for an n-dimensional geometry
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Box Concept or a Segment Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.get.get_1_with_index.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1_with_index.returns"></a></span><a class="link" href="get_1_with_index.html#geometry.reference.access.get.get_1_with_index.returns">Returns</a>
+ </h6>
+<p>
+ coordinate value
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1_with_index.h4"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1_with_index.header"></a></span><a class="link" href="get_1_with_index.html#geometry.reference.access.get.get_1_with_index.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">access</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1_with_index.h5"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1_with_index.behavior"></a></span><a class="link" href="get_1_with_index.html#geometry.reference.access.get.get_1_with_index.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the coordinate of a box (use min_corner, max_corner
+ to specify which of the points to get)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the coordinate of a segment (use 0, 1 to specify which
+ of the two points to get)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.get.get_1_with_index.h6"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1_with_index.complexity"></a></span><a class="link" href="get_1_with_index.html#geometry.reference.access.get.get_1_with_index.complexity">Complexity</a>
+ </h6>
+<p>
+ Constant
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_1_with_index.h7"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_1_with_index.example"></a></span><a class="link" href="get_1_with_index.html#geometry.reference.access.get.get_1_with_index.example">Example</a>
+ </h6>
+<p>
+ Get the coordinate of a box
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">box</span><span class="special">;</span>
+
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">box</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">6</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Box:"</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">min_corner</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">min_corner</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">max_corner</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">max_corner</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Box: 1 3 5 6
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="get_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../get.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="get_as_radian.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/get/get_as_radian.html b/libs/geometry/doc/html/geometry/reference/access/get/get_as_radian.html
new file mode 100644
index 000000000..36b0a08af
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/get/get_as_radian.html
@@ -0,0 +1,167 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>get_as_radian</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../get.html" title="get">
+<link rel="prev" href="get_1_with_index.html" title="get (with index)">
+<link rel="next" href="../set.html" title="set">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="get_1_with_index.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../get.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="../set.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.get.get_as_radian"></a><a class="link" href="get_as_radian.html" title="get_as_radian">get_as_radian</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5465600"></a>
+get coordinate value of a point, result is in Radian
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_as_radian.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_as_radian.description"></a></span><a class="link" href="get_as_radian.html#geometry.reference.access.get.get_as_radian.description">Description</a>
+ </h6>
+<p>
+ Result is in Radian, even if source coordinate system is in Degrees
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_as_radian.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_as_radian.synopsis"></a></span><a class="link" href="get_as_radian.html#geometry.reference.access.get.get_as_radian.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">fp_coordinate_type</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">get_as_radian</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_as_radian.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_as_radian.parameters"></a></span><a class="link" href="get_as_radian.html#geometry.reference.access.get.get_as_radian.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Dimension
+ </p>
+ </td>
+<td>
+ <p>
+ dimension
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ geometry to get coordinate value from
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.get.get_as_radian.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_as_radian.returns"></a></span><a class="link" href="get_as_radian.html#geometry.reference.access.get.get_as_radian.returns">Returns</a>
+ </h6>
+<p>
+ coordinate value
+ </p>
+<h6>
+<a name="geometry.reference.access.get.get_as_radian.h4"></a>
+ <span class="phrase"><a name="geometry.reference.access.get.get_as_radian.header"></a></span><a class="link" href="get_as_radian.html#geometry.reference.access.get.get_as_radian.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">radian_access</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="get_1_with_index.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../get.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="../set.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/interior_rings.html b/libs/geometry/doc/html/geometry/reference/access/interior_rings.html
new file mode 100644
index 000000000..aade3ba14
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/interior_rings.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>interior_rings</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../access.html" title="Access Functions">
+<link rel="prev" href="exterior_ring/exterior_ring_1_const_version.html" title="exterior_ring (const version)">
+<link rel="next" href="interior_rings/interior_rings_1.html" title="interior_rings">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exterior_ring/exterior_ring_1_const_version.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../access.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="interior_rings/interior_rings_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.access.interior_rings"></a><a class="link" href="interior_rings.html" title="interior_rings">interior_rings</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="interior_rings/interior_rings_1.html">interior_rings</a></span></dt>
+<dt><span class="section"><a href="interior_rings/interior_rings_1_const_version.html">interior_rings
+ (const version)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exterior_ring/exterior_ring_1_const_version.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../access.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="interior_rings/interior_rings_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/interior_rings/interior_rings_1.html b/libs/geometry/doc/html/geometry/reference/access/interior_rings/interior_rings_1.html
new file mode 100644
index 000000000..0d381df16
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/interior_rings/interior_rings_1.html
@@ -0,0 +1,136 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>interior_rings</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../interior_rings.html" title="interior_rings">
+<link rel="prev" href="../interior_rings.html" title="interior_rings">
+<link rel="next" href="interior_rings_1_const_version.html" title="interior_rings (const version)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../interior_rings.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interior_rings.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="interior_rings_1_const_version.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.interior_rings.interior_rings_1"></a><a class="link" href="interior_rings_1.html" title="interior_rings">interior_rings</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5758320"></a>
+Function to get the interior rings of a polygon (non const version)
+ </p>
+<h6>
+<a name="geometry.reference.access.interior_rings.interior_rings_1.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.interior_rings.interior_rings_1.synopsis"></a></span><a class="link" href="interior_rings_1.html#geometry.reference.access.interior_rings.interior_rings_1.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Polygon</span><span class="special">&gt;</span>
+<span class="identifier">interior_return_type</span><span class="special">&lt;</span><span class="identifier">Polygon</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">interior_rings</span><span class="special">(</span><span class="identifier">Polygon</span> <span class="special">&amp;</span> <span class="identifier">polygon</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.interior_rings.interior_rings_1.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.interior_rings.interior_rings_1.parameters"></a></span><a class="link" href="interior_rings_1.html#geometry.reference.access.interior_rings.interior_rings_1.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Polygon &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ polygon type
+ </p>
+ </td>
+<td>
+ <p>
+ polygon
+ </p>
+ </td>
+<td>
+ <p>
+ the polygon to get the interior rings from
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.interior_rings.interior_rings_1.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.interior_rings.interior_rings_1.returns"></a></span><a class="link" href="interior_rings_1.html#geometry.reference.access.interior_rings.interior_rings_1.returns">Returns</a>
+ </h6>
+<p>
+ the interior rings (possibly a reference)
+ </p>
+<h6>
+<a name="geometry.reference.access.interior_rings.interior_rings_1.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.interior_rings.interior_rings_1.header"></a></span><a class="link" href="interior_rings_1.html#geometry.reference.access.interior_rings.interior_rings_1.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">interior_rings</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../interior_rings.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interior_rings.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="interior_rings_1_const_version.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/interior_rings/interior_rings_1_const_version.html b/libs/geometry/doc/html/geometry/reference/access/interior_rings/interior_rings_1_const_version.html
new file mode 100644
index 000000000..84203cf47
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/interior_rings/interior_rings_1_const_version.html
@@ -0,0 +1,137 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>interior_rings (const version)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../interior_rings.html" title="interior_rings">
+<link rel="prev" href="interior_rings_1.html" title="interior_rings">
+<link rel="next" href="../../adapted.html" title="Adapted models">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="interior_rings_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interior_rings.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="../../adapted.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.interior_rings.interior_rings_1_const_version"></a><a class="link" href="interior_rings_1_const_version.html" title="interior_rings (const version)">interior_rings
+ (const version)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5784592"></a>
+Function to get the interior rings of a polygon (const version)
+ </p>
+<h6>
+<a name="geometry.reference.access.interior_rings.interior_rings_1_const_version.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.interior_rings.interior_rings_1_const_version.synopsis"></a></span><a class="link" href="interior_rings_1_const_version.html#geometry.reference.access.interior_rings.interior_rings_1_const_version.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Polygon</span><span class="special">&gt;</span>
+<span class="identifier">interior_return_type</span><span class="special">&lt;</span><span class="identifier">Polygon</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">interior_rings</span><span class="special">(</span><span class="identifier">Polygon</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">polygon</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.interior_rings.interior_rings_1_const_version.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.interior_rings.interior_rings_1_const_version.parameters"></a></span><a class="link" href="interior_rings_1_const_version.html#geometry.reference.access.interior_rings.interior_rings_1_const_version.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Polygon const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ polygon type
+ </p>
+ </td>
+<td>
+ <p>
+ polygon
+ </p>
+ </td>
+<td>
+ <p>
+ the polygon to get the interior rings from
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.interior_rings.interior_rings_1_const_version.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.interior_rings.interior_rings_1_const_version.returns"></a></span><a class="link" href="interior_rings_1_const_version.html#geometry.reference.access.interior_rings.interior_rings_1_const_version.returns">Returns</a>
+ </h6>
+<p>
+ the interior rings (possibly a const reference)
+ </p>
+<h6>
+<a name="geometry.reference.access.interior_rings.interior_rings_1_const_version.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.interior_rings.interior_rings_1_const_version.header"></a></span><a class="link" href="interior_rings_1_const_version.html#geometry.reference.access.interior_rings.interior_rings_1_const_version.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">interior_rings</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="interior_rings_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interior_rings.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="../../adapted.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/set.html b/libs/geometry/doc/html/geometry/reference/access/set.html
new file mode 100644
index 000000000..4a065101d
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/set.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>set</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../access.html" title="Access Functions">
+<link rel="prev" href="get/get_as_radian.html" title="get_as_radian">
+<link rel="next" href="set/set_2.html" title="set">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="get/get_as_radian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../access.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="set/set_2.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.access.set"></a><a class="link" href="set.html" title="set">set</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="set/set_2.html">set</a></span></dt>
+<dt><span class="section"><a href="set/set_2_with_index.html">set
+ (with index)</a></span></dt>
+<dt><span class="section"><a href="set/set_from_radian.html">set_from_radian</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="get/get_as_radian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../access.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="set/set_2.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/set/set_2.html b/libs/geometry/doc/html/geometry/reference/access/set/set_2.html
new file mode 100644
index 000000000..5de0d18e2
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/set/set_2.html
@@ -0,0 +1,298 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>set</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../set.html" title="set">
+<link rel="prev" href="../set.html" title="set">
+<link rel="next" href="set_2_with_index.html" title="set (with index)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../set.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../set.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="set_2_with_index.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.set.set_2"></a><a class="link" href="set_2.html" title="set">set</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5497664"></a>
+Set coordinate value of a geometry (usually a point)
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_2.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2.description"></a></span><a class="link" href="set_2.html#geometry.reference.access.set.set_2.description">Description</a>
+ </h6>
+<p>
+ The free functions <span class="bold"><strong>get</strong></span> and <span class="bold"><strong>set</strong></span> are two of the most important functions of
+ Boost.Geometry, both within the library, as also for the library user.
+ With these two functions you normally get and set coordinate values from
+ and for a point, box, segment or sphere.
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_2.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2.synopsis"></a></span><a class="link" href="set_2.html#geometry.reference.access.set.set_2.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">coordinate_type</span><span class="special">&lt;</span> <span class="identifier">Geometry</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">value</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_2.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2.parameters"></a></span><a class="link" href="set_2.html#geometry.reference.access.set.set_2.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Dimension
+ </p>
+ </td>
+<td>
+ <p>
+ Dimension, this template parameter is required. Should contain
+ [0 .. n-1] for an n-dimensional geometry
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept (usually a Point Concept)
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept (usually a point)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename coordinate_type&lt; Geometry &gt;::type const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ value
+ </p>
+ </td>
+<td>
+ <p>
+ The coordinate value to set
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.set.set_2.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2.header"></a></span><a class="link" href="set_2.html#geometry.reference.access.set.set_2.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">access</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ If you host both the std:: library namespace and boost::geometry::
+ namespace set might become ambiguous, std::set is a collection. So
+ don't do that or refer to geometry::set then explicitly.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.access.set.set_2.h4"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2.behavior"></a></span><a class="link" href="set_2.html#geometry.reference.access.set.set_2.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Sets the coordinate of a point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Circle or Sphere
+ </p>
+ </td>
+<td>
+ <p>
+ Sets the coordinate of the center of a circle or sphere (currently
+ in an extension)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Sets the coordinate of a point, in either Radian's or Degree's,
+ depending on specified units
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.set.set_2.h5"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2.complexity"></a></span><a class="link" href="set_2.html#geometry.reference.access.set.set_2.complexity">Complexity</a>
+ </h6>
+<p>
+ Constant
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_2.h6"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2.example"></a></span><a class="link" href="set_2.html#geometry.reference.access.set.set_2.example">Example</a>
+ </h6>
+<p>
+ Set the coordinate of a point
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">set</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">point</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">set</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">point</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Location: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">point</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Location: (1, 2)
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../set.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../set.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="set_2_with_index.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/set/set_2_with_index.html b/libs/geometry/doc/html/geometry/reference/access/set/set_2_with_index.html
new file mode 100644
index 000000000..20ca6bd1c
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/set/set_2_with_index.html
@@ -0,0 +1,302 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>set (with index)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../set.html" title="set">
+<link rel="prev" href="set_2.html" title="set">
+<link rel="next" href="set_from_radian.html" title="set_from_radian">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_2.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../set.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="set_from_radian.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.set.set_2_with_index"></a><a class="link" href="set_2_with_index.html" title="set (with index)">set
+ (with index)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5568688"></a>
+set coordinate value of a Box / Segment
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_2_with_index.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2_with_index.description"></a></span><a class="link" href="set_2_with_index.html#geometry.reference.access.set.set_2_with_index.description">Description</a>
+ </h6>
+<p>
+ The free functions <span class="bold"><strong>get</strong></span> and <span class="bold"><strong>set</strong></span> are two of the most important functions of
+ Boost.Geometry, both within the library, as also for the library user.
+ With these two functions you normally get and set coordinate values from
+ and for a point, box, segment or sphere.
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_2_with_index.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2_with_index.synopsis"></a></span><a class="link" href="set_2_with_index.html#geometry.reference.access.set.set_2_with_index.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Index</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">coordinate_type</span><span class="special">&lt;</span> <span class="identifier">Geometry</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">value</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_2_with_index.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2_with_index.parameters"></a></span><a class="link" href="set_2_with_index.html#geometry.reference.access.set.set_2_with_index.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Index
+ </p>
+ </td>
+<td>
+ <p>
+ Index, this template parameter is required. For a Box: either
+ min_corner or max_corner. For a Segment: either 0 or 1 for
+ first or last point.
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Dimension
+ </p>
+ </td>
+<td>
+ <p>
+ Dimension, this template parameter is required. Should contain
+ [0 .. n-1] for an n-dimensional geometry
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Box Concept or a Segment Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename coordinate_type&lt; Geometry &gt;::type const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ value
+ </p>
+ </td>
+<td>
+ <p>
+ The coordinate value to set
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.set.set_2_with_index.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2_with_index.header"></a></span><a class="link" href="set_2_with_index.html#geometry.reference.access.set.set_2_with_index.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">access</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_2_with_index.h4"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2_with_index.behavior"></a></span><a class="link" href="set_2_with_index.html#geometry.reference.access.set.set_2_with_index.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Sets the coordinate of a box (use min_corner, max_corner to
+ specify which of the points to set)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ Sets the coordinate of a segment (use 0, 1 to specify which
+ of the two points to set)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.set.set_2_with_index.h5"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2_with_index.complexity"></a></span><a class="link" href="set_2_with_index.html#geometry.reference.access.set.set_2_with_index.complexity">Complexity</a>
+ </h6>
+<p>
+ Constant
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_2_with_index.h6"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_2_with_index.example"></a></span><a class="link" href="set_2_with_index.html#geometry.reference.access.set.set_2_with_index.example">Example</a>
+ </h6>
+<p>
+ Set the coordinate of a box
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">box</span><span class="special">;</span>
+
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">set</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">min_corner</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">set</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">min_corner</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;(</span><span class="identifier">box</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">set</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">max_corner</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">set</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">max_corner</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;(</span><span class="identifier">box</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">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Extent: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">box</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Extent: ((0, 2), (4, 5))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_2.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../set.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="set_from_radian.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/access/set/set_from_radian.html b/libs/geometry/doc/html/geometry/reference/access/set/set_from_radian.html
new file mode 100644
index 000000000..2c8fc8848
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/access/set/set_from_radian.html
@@ -0,0 +1,180 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>set_from_radian</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../set.html" title="set">
+<link rel="prev" href="set_2_with_index.html" title="set (with index)">
+<link rel="next" href="../exterior_ring.html" title="exterior_ring">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_2_with_index.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../set.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="../exterior_ring.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.access.set.set_from_radian"></a><a class="link" href="set_from_radian.html" title="set_from_radian">set_from_radian</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp5669936"></a>
+set coordinate value (in radian) to a point
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_from_radian.h0"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_from_radian.description"></a></span><a class="link" href="set_from_radian.html#geometry.reference.access.set.set_from_radian.description">Description</a>
+ </h6>
+<p>
+ Coordinate value will be set correctly, if coordinate system of point
+ is in Degree, Radian value will be converted to Degree
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_from_radian.h1"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_from_radian.synopsis"></a></span><a class="link" href="set_from_radian.html#geometry.reference.access.set.set_from_radian.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">set_from_radian</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">fp_coordinate_type</span><span class="special">&lt;</span> <span class="identifier">Geometry</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">radians</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.access.set.set_from_radian.h2"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_from_radian.parameters"></a></span><a class="link" href="set_from_radian.html#geometry.reference.access.set.set_from_radian.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Dimension
+ </p>
+ </td>
+<td>
+ <p>
+ dimension
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ geometry to assign coordinate to
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename fp_coordinate_type&lt; Geometry &gt;::type const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ radians
+ </p>
+ </td>
+<td>
+ <p>
+ coordinate value to assign
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.access.set.set_from_radian.h3"></a>
+ <span class="phrase"><a name="geometry.reference.access.set.set_from_radian.header"></a></span><a class="link" href="set_from_radian.html#geometry.reference.access.set.set_from_radian.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">radian_access</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="set_2_with_index.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../set.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="../exterior_ring.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted.html b/libs/geometry/doc/html/geometry/reference/adapted.html
new file mode 100644
index 000000000..847173214
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted.html
@@ -0,0 +1,52 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Adapted models</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="access/interior_rings/interior_rings_1_const_version.html" title="interior_rings (const version)">
+<link rel="next" href="adapted/c_array.html" title="C array">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="access/interior_rings/interior_rings_1_const_version.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="adapted/c_array.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.adapted"></a><a class="link" href="adapted.html" title="Adapted models">Adapted models</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="adapted/c_array.html">C array</a></span></dt>
+<dt><span class="section"><a href="adapted/boost_array.html">Boost.Array</a></span></dt>
+<dt><span class="section"><a href="adapted/boost_fusion.html">Boost.Fusion</a></span></dt>
+<dt><span class="section"><a href="adapted/boost_tuple.html">Boost.Tuple</a></span></dt>
+<dt><span class="section"><a href="adapted/boost_polygon.html">Boost.Polygon</a></span></dt>
+<dt><span class="section"><a href="adapted/boost_range.html">Boost.Range</a></span></dt>
+<dt><span class="section"><a href="adapted/register.html">Macro's for adaption</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="access/interior_rings/interior_rings_1_const_version.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="adapted/c_array.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_array.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_array.html
new file mode 100644
index 000000000..cff2653fc
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_array.html
@@ -0,0 +1,123 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Array</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../adapted.html" title="Adapted models">
+<link rel="prev" href="c_array.html" title="C array">
+<link rel="next" href="boost_fusion.html" title="Boost.Fusion">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="c_array.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_fusion.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.adapted.boost_array"></a><a class="link" href="boost_array.html" title="Boost.Array">Boost.Array</a>
+</h4></div></div></div>
+<p>
+ Boost.Array arrays are adapted to the Boost.Geometry point concept
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_array.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_array.description"></a></span><a class="link" href="boost_array.html#geometry.reference.adapted.boost_array.description">Description</a>
+ </h6>
+<p>
+ A boost::array is (optionally) adapted to the Boost.Geometry point concept.
+ It can therefore be used in all Boost.Geometry algorithms.
+ </p>
+<p>
+ A boost::array can be the point type used by the models linestring, polygon,
+ segment, box, and ring
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_array.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_array.model_of"></a></span><a class="link" href="boost_array.html#geometry.reference.adapted.boost_array.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_point.html" title="Point Concept">Point Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_array.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_array.header"></a></span><a class="link" href="boost_array.html#geometry.reference.adapted.boost_array.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_array</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_array.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_array.example"></a></span><a class="link" href="boost_array.html#geometry.reference.adapted.boost_array.example">Example</a>
+ </h6>
+<p>
+ Shows how to use a Boost.Array using Boost.Geometry's distance, set and
+ assign_values algorithms
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_array</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_ARRAY_CS</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</span> <span class="identifier">a</span> <span class="special">=</span> <span class="special">{</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">}</span> <span class="special">};</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</span> <span class="identifier">b</span> <span class="special">=</span> <span class="special">{</span> <span class="special">{</span><span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">}</span> <span class="special">};</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</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">set</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">a</span><span class="special">,</span> <span class="number">1.1</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">set</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">a</span><span class="special">,</span> <span class="number">2.2</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</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">assign_values</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="number">2.2</span><span class="special">,</span> <span class="number">3.3</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</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">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">line</span><span class="special">;</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">b</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">1.41421
+1.20416
+1.55563
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="c_array.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_fusion.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_fusion.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_fusion.html
new file mode 100644
index 000000000..7a59d503f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_fusion.html
@@ -0,0 +1,130 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Fusion</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../adapted.html" title="Adapted models">
+<link rel="prev" href="boost_array.html" title="Boost.Array">
+<link rel="next" href="boost_tuple.html" title="Boost.Tuple">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_array.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_tuple.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.adapted.boost_fusion"></a><a class="link" href="boost_fusion.html" title="Boost.Fusion">Boost.Fusion</a>
+</h4></div></div></div>
+<p>
+ Boost.Fusion adapted structs or classes are adapted to the Boost.Geometry
+ point concept
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_fusion.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_fusion.description"></a></span><a class="link" href="boost_fusion.html#geometry.reference.adapted.boost_fusion.description">Description</a>
+ </h6>
+<p>
+ Boost.Fusion adapted structs are (optionally) adapted to the Boost.Geometry
+ point concept. They can therefore be used in many Boost.Geometry algorithms.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_fusion.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_fusion.model_of"></a></span><a class="link" href="boost_fusion.html#geometry.reference.adapted.boost_fusion.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_point.html" title="Point Concept">Point Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_fusion.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_fusion.header"></a></span><a class="link" href="boost_fusion.html#geometry.reference.adapted.boost_fusion.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_fusion</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_fusion.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_fusion.example"></a></span><a class="link" href="boost_fusion.html#geometry.reference.adapted.boost_fusion.example">Example</a>
+ </h6>
+<p>
+ Shows how to combine Boost.Fusion with Boost.Geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">adapt_struct_named</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_fusion</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">struct</span> <span class="identifier">sample_point</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">z</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="identifier">BOOST_FUSION_ADAPT_STRUCT</span><span class="special">(</span><span class="identifier">sample_point</span><span class="special">,</span> <span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">y</span><span class="special">)</span> <span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">z</span><span class="special">))</span>
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_FUSION_CS</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">sample_point</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">c</span><span class="special">;</span>
+
+ <span class="comment">// Set coordinates the Boost.Geometry way (one of the ways)</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span>
+
+ <span class="comment">// Set coordinates the Boost.Fusion way</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fusion</span><span class="special">::</span><span class="identifier">at_c</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">=</span> <span class="number">6</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fusion</span><span class="special">::</span><span class="identifier">at_c</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">=</span> <span class="number">5</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fusion</span><span class="special">::</span><span class="identifier">at_c</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">=</span> <span class="number">4</span><span class="special">;</span>
+
+ <span class="comment">// Set coordinates the native way</span>
+ <span class="identifier">c</span><span class="special">.</span><span class="identifier">x</span> <span class="special">=</span> <span class="number">9</span><span class="special">;</span>
+ <span class="identifier">c</span><span class="special">.</span><span class="identifier">y</span> <span class="special">=</span> <span class="number">8</span><span class="special">;</span>
+ <span class="identifier">c</span><span class="special">.</span><span class="identifier">z</span> <span class="special">=</span> <span class="number">7</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance a-b: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Distance a-c: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">c</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Distance a-b: 5.19615
+Distance a-c: 10.3923
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_array.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_tuple.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon.html
new file mode 100644
index 000000000..fba8b833d
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon.html
@@ -0,0 +1,53 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Polygon</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../adapted.html" title="Adapted models">
+<link rel="prev" href="boost_tuple.html" title="Boost.Tuple">
+<link rel="next" href="boost_polygon/point_data.html" title="Boost.Polygon's point_data">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_tuple.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_polygon/point_data.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.adapted.boost_polygon"></a><a class="link" href="boost_polygon.html" title="Boost.Polygon">Boost.Polygon</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="boost_polygon/point_data.html">Boost.Polygon's
+ point_data</a></span></dt>
+<dt><span class="section"><a href="boost_polygon/rectangle_data.html">Boost.Polygon's
+ rectangle_data</a></span></dt>
+<dt><span class="section"><a href="boost_polygon/polygon_data.html">Boost.Polygon's
+ polygon_data</a></span></dt>
+<dt><span class="section"><a href="boost_polygon/polygon_with_holes_data.html">Boost.Polygon's
+ polygon_with_holes_data</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_tuple.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_polygon/point_data.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/point_data.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/point_data.html
new file mode 100644
index 000000000..dd033af8f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/point_data.html
@@ -0,0 +1,108 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Polygon's point_data</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../boost_polygon.html" title="Boost.Polygon">
+<link rel="prev" href="../boost_polygon.html" title="Boost.Polygon">
+<link rel="next" href="rectangle_data.html" title="Boost.Polygon's rectangle_data">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../boost_polygon.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_polygon.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="rectangle_data.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.boost_polygon.point_data"></a><a class="link" href="point_data.html" title="Boost.Polygon's point_data">Boost.Polygon's
+ point_data</a>
+</h5></div></div></div>
+<p>
+ The Boost.Polygon point type (boost::polygon::point_data) is adapted
+ to the Boost.Geometry Point Concept.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.point_data.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.point_data.description"></a></span><a class="link" href="point_data.html#geometry.reference.adapted.boost_polygon.point_data.description">Description</a>
+ </h6>
+<p>
+ Boost.Polygon's points (as well as polygons) can be used by Boost.Geometry.
+ The two libraries can therefore be used together. Using a boost::polygon::point_data&lt;...&gt;,
+ algorithms from both Boost.Polygon and Boost.Geometry can be called.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.point_data.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.point_data.model_of"></a></span><a class="link" href="point_data.html#geometry.reference.adapted.boost_polygon.point_data.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../../concepts/concept_point.html" title="Point Concept">Point Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.point_data.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.point_data.header"></a></span><a class="link" href="point_data.html#geometry.reference.adapted.boost_polygon.point_data.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.point_data.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.point_data.example"></a></span><a class="link" href="point_data.html#geometry.reference.adapted.boost_polygon.point_data.example">Example</a>
+ </h6>
+<p>
+ Shows how to use Boost.Polygon points within Boost.Geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">::</span><span class="identifier">point_data</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">a</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance (using Boost.Geometry): "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Distance (using Boost.Polygon): "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">::</span><span class="identifier">euclidean_distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Distance (using Boost.Geometry): 2.82843
+Distance (using Boost.Polygon): 2.82843
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../boost_polygon.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_polygon.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="rectangle_data.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/polygon_data.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/polygon_data.html
new file mode 100644
index 000000000..15fbc393f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/polygon_data.html
@@ -0,0 +1,108 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Polygon's polygon_data</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../boost_polygon.html" title="Boost.Polygon">
+<link rel="prev" href="rectangle_data.html" title="Boost.Polygon's rectangle_data">
+<link rel="next" href="polygon_with_holes_data.html" title="Boost.Polygon's polygon_with_holes_data">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rectangle_data.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_polygon.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="polygon_with_holes_data.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.boost_polygon.polygon_data"></a><a class="link" href="polygon_data.html" title="Boost.Polygon's polygon_data">Boost.Polygon's
+ polygon_data</a>
+</h5></div></div></div>
+<p>
+ Boost.Polygon's polygon type (boost::polygon::polygon_data) is adapted
+ to the Boost.Geometry Ring Concept.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.polygon_data.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.polygon_data.description"></a></span><a class="link" href="polygon_data.html#geometry.reference.adapted.boost_polygon.polygon_data.description">Description</a>
+ </h6>
+<p>
+ Boost.Polygon's points (as well as polygons) can be used by Boost.Geometry.
+ The two libraries can therefore be used together. Using a boost::polygon::point_data&lt;...&gt;,
+ algorithms from both Boost.Polygon and Boost.Geometry can be called.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.polygon_data.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.polygon_data.model_of"></a></span><a class="link" href="polygon_data.html#geometry.reference.adapted.boost_polygon.polygon_data.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../../concepts/concept_ring.html" title="Ring Concept">Ring Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.polygon_data.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.polygon_data.header"></a></span><a class="link" href="polygon_data.html#geometry.reference.adapted.boost_polygon.polygon_data.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.polygon_data.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.polygon_data.example"></a></span><a class="link" href="polygon_data.html#geometry.reference.adapted.boost_polygon.polygon_data.example">Example</a>
+ </h6>
+<p>
+ Shows how to use Boost.Polygon points within Boost.Geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">::</span><span class="identifier">point_data</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">a</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance (using Boost.Geometry): "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Distance (using Boost.Polygon): "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">::</span><span class="identifier">euclidean_distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Distance (using Boost.Geometry): 2.82843
+Distance (using Boost.Polygon): 2.82843
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rectangle_data.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_polygon.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="polygon_with_holes_data.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/polygon_with_holes_data.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/polygon_with_holes_data.html
new file mode 100644
index 000000000..7d97aa639
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/polygon_with_holes_data.html
@@ -0,0 +1,108 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Polygon's polygon_with_holes_data</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../boost_polygon.html" title="Boost.Polygon">
+<link rel="prev" href="polygon_data.html" title="Boost.Polygon's polygon_data">
+<link rel="next" href="../boost_range.html" title="Boost.Range">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="polygon_data.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_polygon.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="../boost_range.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.boost_polygon.polygon_with_holes_data"></a><a class="link" href="polygon_with_holes_data.html" title="Boost.Polygon's polygon_with_holes_data">Boost.Polygon's
+ polygon_with_holes_data</a>
+</h5></div></div></div>
+<p>
+ Boost.Polygon's polygon type supporting holes (boost::polygon::polygon_with_holes_data)
+ is adapted to the Boost.Geometry Polygon Concept.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.polygon_with_holes_data.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.polygon_with_holes_data.description"></a></span><a class="link" href="polygon_with_holes_data.html#geometry.reference.adapted.boost_polygon.polygon_with_holes_data.description">Description</a>
+ </h6>
+<p>
+ Boost.Polygon's points (as well as polygons) can be used by Boost.Geometry.
+ The two libraries can therefore be used together. Using a boost::polygon::point_data&lt;...&gt;,
+ algorithms from both Boost.Polygon and Boost.Geometry can be called.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.polygon_with_holes_data.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.polygon_with_holes_data.model_of"></a></span><a class="link" href="polygon_with_holes_data.html#geometry.reference.adapted.boost_polygon.polygon_with_holes_data.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../../concepts/concept_polygon.html" title="Polygon Concept">Polygon Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.polygon_with_holes_data.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.polygon_with_holes_data.header"></a></span><a class="link" href="polygon_with_holes_data.html#geometry.reference.adapted.boost_polygon.polygon_with_holes_data.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.polygon_with_holes_data.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.polygon_with_holes_data.example"></a></span><a class="link" href="polygon_with_holes_data.html#geometry.reference.adapted.boost_polygon.polygon_with_holes_data.example">Example</a>
+ </h6>
+<p>
+ Shows how to use Boost.Polygon points within Boost.Geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">::</span><span class="identifier">point_data</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">a</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance (using Boost.Geometry): "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Distance (using Boost.Polygon): "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">::</span><span class="identifier">euclidean_distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Distance (using Boost.Geometry): 2.82843
+Distance (using Boost.Polygon): 2.82843
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="polygon_data.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_polygon.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="../boost_range.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/rectangle_data.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/rectangle_data.html
new file mode 100644
index 000000000..436547472
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_polygon/rectangle_data.html
@@ -0,0 +1,108 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Polygon's rectangle_data</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../boost_polygon.html" title="Boost.Polygon">
+<link rel="prev" href="point_data.html" title="Boost.Polygon's point_data">
+<link rel="next" href="polygon_data.html" title="Boost.Polygon's polygon_data">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="point_data.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_polygon.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="polygon_data.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.boost_polygon.rectangle_data"></a><a class="link" href="rectangle_data.html" title="Boost.Polygon's rectangle_data">Boost.Polygon's
+ rectangle_data</a>
+</h5></div></div></div>
+<p>
+ Boost.Polygon's rectangle type (boost::polygon::rectangle_data) is adapted
+ to the Boost.Geometry Point Concept.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.rectangle_data.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.rectangle_data.description"></a></span><a class="link" href="rectangle_data.html#geometry.reference.adapted.boost_polygon.rectangle_data.description">Description</a>
+ </h6>
+<p>
+ Boost.Polygon's points (as well as polygons) can be used by Boost.Geometry.
+ The two libraries can therefore be used together. Using a boost::polygon::point_data&lt;...&gt;,
+ algorithms from both Boost.Polygon and Boost.Geometry can be called.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.rectangle_data.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.rectangle_data.model_of"></a></span><a class="link" href="rectangle_data.html#geometry.reference.adapted.boost_polygon.rectangle_data.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../../concepts/concept_box.html" title="Box Concept">Box Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.rectangle_data.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.rectangle_data.header"></a></span><a class="link" href="rectangle_data.html#geometry.reference.adapted.boost_polygon.rectangle_data.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_polygon.rectangle_data.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_polygon.rectangle_data.example"></a></span><a class="link" href="rectangle_data.html#geometry.reference.adapted.boost_polygon.rectangle_data.example">Example</a>
+ </h6>
+<p>
+ Shows how to use Boost.Polygon points within Boost.Geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">::</span><span class="identifier">point_data</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">a</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance (using Boost.Geometry): "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Distance (using Boost.Polygon): "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">::</span><span class="identifier">euclidean_distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Distance (using Boost.Geometry): 2.82843
+Distance (using Boost.Polygon): 2.82843
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="point_data.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_polygon.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="polygon_data.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_range.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_range.html
new file mode 100644
index 000000000..b44e58620
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_range.html
@@ -0,0 +1,53 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Range</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../adapted.html" title="Adapted models">
+<link rel="prev" href="boost_polygon/polygon_with_holes_data.html" title="Boost.Polygon's polygon_with_holes_data">
+<link rel="next" href="boost_range/filtered.html" title="Boost.Range filtered">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_polygon/polygon_with_holes_data.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_range/filtered.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.adapted.boost_range"></a><a class="link" href="boost_range.html" title="Boost.Range">Boost.Range</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="boost_range/filtered.html">Boost.Range
+ filtered</a></span></dt>
+<dt><span class="section"><a href="boost_range/reversed.html">Boost.Range
+ reversed</a></span></dt>
+<dt><span class="section"><a href="boost_range/sliced.html">Boost.Range
+ sliced</a></span></dt>
+<dt><span class="section"><a href="boost_range/strided.html">Boost.Range
+ strided</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_polygon/polygon_with_holes_data.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_range/filtered.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_range/filtered.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_range/filtered.html
new file mode 100644
index 000000000..a283f0f62
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_range/filtered.html
@@ -0,0 +1,150 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Range filtered</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../boost_range.html" title="Boost.Range">
+<link rel="prev" href="../boost_range.html" title="Boost.Range">
+<link rel="next" href="reversed.html" title="Boost.Range reversed">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../boost_range.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_range.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="reversed.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.boost_range.filtered"></a><a class="link" href="filtered.html" title="Boost.Range filtered">Boost.Range
+ filtered</a>
+</h5></div></div></div>
+<p>
+ Boost.Range filtered range adaptor is adapted to Boost.Geometry
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.filtered.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.filtered.description"></a></span><a class="link" href="filtered.html#geometry.reference.adapted.boost_range.filtered.description">Description</a>
+ </h6>
+<p>
+ Boost.Range filtered range adaptor filters a range.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.filtered.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.filtered.model_of"></a></span><a class="link" href="filtered.html#geometry.reference.adapted.boost_range.filtered.model_of">Model
+ of</a>
+ </h6>
+<p>
+ The Boost.Range filtered range adaptor takes over the model of the original
+ geometry, which might be:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ a linestring
+ </li>
+<li class="listitem">
+ a ring
+ </li>
+<li class="listitem">
+ a multi_point
+ </li>
+<li class="listitem">
+ a multi_linestring
+ </li>
+<li class="listitem">
+ a multi_polygon
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.adapted.boost_range.filtered.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.filtered.header"></a></span><a class="link" href="filtered.html#geometry.reference.adapted.boost_range.filtered.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_range</span><span class="special">/</span><span class="identifier">filtered</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.filtered.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.filtered.example"></a></span><a class="link" href="filtered.html#geometry.reference.adapted.boost_range.filtered.example">Example</a>
+ </h6>
+<p>
+ Shows how to use a Boost.Geometry linestring, filtered by Boost.Range
+ adaptor
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_range</span><span class="special">/</span><span class="identifier">filtered</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">struct</span> <span class="identifier">not_two</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">P</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">!=</span> <span class="number">2</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="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">xy</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">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">xy</span><span class="special">&gt;</span> <span class="identifier">line</span><span class="special">;</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</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">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="number">0</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</span><span class="special">(</span><span class="number">6</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</span><span class="special">(</span><span class="number">7</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</span><span class="special">(</span><span class="number">8</span><span class="special">,</span> <span class="number">0</span><span class="special">));</span>
+
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">filtered</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">line</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">line</span> <span class="special">|</span> <span class="identifier">filtered</span><span class="special">(</span><span class="identifier">not_two</span><span class="special">()))</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">line</span> <span class="special">|</span> <span class="identifier">filtered</span><span class="special">(</span><span class="identifier">not_two</span><span class="special">()))</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">11.3137
+9.65685
+((0, 0), (1, 1), (3, 1), (4, 0), (5, 1), (7, 1), (8, 0))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../boost_range.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_range.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="reversed.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_range/reversed.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_range/reversed.html
new file mode 100644
index 000000000..d95cd5a8c
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_range/reversed.html
@@ -0,0 +1,129 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Range reversed</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../boost_range.html" title="Boost.Range">
+<link rel="prev" href="filtered.html" title="Boost.Range filtered">
+<link rel="next" href="sliced.html" title="Boost.Range sliced">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="filtered.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_range.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="sliced.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.boost_range.reversed"></a><a class="link" href="reversed.html" title="Boost.Range reversed">Boost.Range
+ reversed</a>
+</h5></div></div></div>
+<p>
+ Boost.Range reversed range adaptor is adapted to Boost.Geometry
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.reversed.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.reversed.description"></a></span><a class="link" href="reversed.html#geometry.reference.adapted.boost_range.reversed.description">Description</a>
+ </h6>
+<p>
+ Boost.Range reversed range adaptor reverses a range.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.reversed.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.reversed.model_of"></a></span><a class="link" href="reversed.html#geometry.reference.adapted.boost_range.reversed.model_of">Model
+ of</a>
+ </h6>
+<p>
+ The Boost.Range reversed range adaptor takes over the model of the original
+ geometry, which might be:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ a linestring
+ </li>
+<li class="listitem">
+ a ring
+ </li>
+<li class="listitem">
+ a multi_point
+ </li>
+<li class="listitem">
+ a multi_linestring
+ </li>
+<li class="listitem">
+ a multi_polygon
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.adapted.boost_range.reversed.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.reversed.header"></a></span><a class="link" href="reversed.html#geometry.reference.adapted.boost_range.reversed.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_range</span><span class="special">/</span><span class="identifier">reversed</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.reversed.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.reversed.example"></a></span><a class="link" href="reversed.html#geometry.reference.adapted.boost_range.reversed.example">Example</a>
+ </h6>
+<p>
+ Shows how to use a Boost.Geometry linestring, reversed by Boost.Range
+ adaptor
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_range</span><span class="special">/</span><span class="identifier">reversed</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">xy</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">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">xy</span><span class="special">&gt;</span> <span class="identifier">line</span><span class="special">;</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</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">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">xy</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">line</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">reversed</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">((1, 1), (0, 0))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="filtered.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_range.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="sliced.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_range/sliced.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_range/sliced.html
new file mode 100644
index 000000000..33158dbef
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_range/sliced.html
@@ -0,0 +1,136 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Range sliced</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../boost_range.html" title="Boost.Range">
+<link rel="prev" href="reversed.html" title="Boost.Range reversed">
+<link rel="next" href="strided.html" title="Boost.Range strided">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reversed.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_range.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="strided.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.boost_range.sliced"></a><a class="link" href="sliced.html" title="Boost.Range sliced">Boost.Range
+ sliced</a>
+</h5></div></div></div>
+<p>
+ Boost.Range sliced range adaptor is adapted to Boost.Geometry
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.sliced.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.sliced.description"></a></span><a class="link" href="sliced.html#geometry.reference.adapted.boost_range.sliced.description">Description</a>
+ </h6>
+<p>
+ Boost.Range sliced range adaptor creates a slice of a range (usually
+ a linestring)
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.sliced.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.sliced.model_of"></a></span><a class="link" href="sliced.html#geometry.reference.adapted.boost_range.sliced.model_of">Model
+ of</a>
+ </h6>
+<p>
+ The Boost.Range sliced range adaptor takes over the model of the original
+ geometry, which might be:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ a linestring
+ </li>
+<li class="listitem">
+ a ring
+ </li>
+<li class="listitem">
+ a multi_point
+ </li>
+<li class="listitem">
+ a multi_linestring
+ </li>
+<li class="listitem">
+ a multi_polygon
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.adapted.boost_range.sliced.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.sliced.header"></a></span><a class="link" href="sliced.html#geometry.reference.adapted.boost_range.sliced.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_range</span><span class="special">/</span><span class="identifier">sliced</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.sliced.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.sliced.example"></a></span><a class="link" href="sliced.html#geometry.reference.adapted.boost_range.sliced.example">Example</a>
+ </h6>
+<p>
+ Shows how to use a Boost.Geometry linestring, sliced by Boost.Range adaptor
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_range</span><span class="special">/</span><span class="identifier">sliced</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">xy</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">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">xy</span><span class="special">&gt;</span> <span class="identifier">line</span><span class="special">;</span>
+ <span class="identifier">line</span> <span class="special">+=</span> <span class="identifier">xy</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">line</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span>
+ <span class="identifier">line</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+ <span class="identifier">line</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">3</span><span class="special">);</span>
+ <span class="identifier">line</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">line</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">sliced</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">3</span><span class="special">))</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">((1, 1), (2, 2))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reversed.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_range.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="strided.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_range/strided.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_range/strided.html
new file mode 100644
index 000000000..607f1a998
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_range/strided.html
@@ -0,0 +1,142 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Range strided</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../boost_range.html" title="Boost.Range">
+<link rel="prev" href="sliced.html" title="Boost.Range sliced">
+<link rel="next" href="../register.html" title="Macro's for adaption">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="sliced.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_range.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="../register.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.boost_range.strided"></a><a class="link" href="strided.html" title="Boost.Range strided">Boost.Range
+ strided</a>
+</h5></div></div></div>
+<p>
+ Boost.Range strided range adaptor is adapted to Boost.Geometry
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.strided.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.strided.description"></a></span><a class="link" href="strided.html#geometry.reference.adapted.boost_range.strided.description">Description</a>
+ </h6>
+<p>
+ Boost.Range strided range adaptor makes a strided range (usually begin
+ a linestring or ring) such that traversal is performed in steps of n.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.strided.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.strided.model_of"></a></span><a class="link" href="strided.html#geometry.reference.adapted.boost_range.strided.model_of">Model
+ of</a>
+ </h6>
+<p>
+ The Boost.Range strided range adaptor takes over the model of the original
+ geometry, which might be:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ a linestring
+ </li>
+<li class="listitem">
+ a ring
+ </li>
+<li class="listitem">
+ a multi_point
+ </li>
+<li class="listitem">
+ a multi_linestring
+ </li>
+<li class="listitem">
+ a multi_polygon
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.adapted.boost_range.strided.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.strided.header"></a></span><a class="link" href="strided.html#geometry.reference.adapted.boost_range.strided.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_range</span><span class="special">/</span><span class="identifier">strided</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_range.strided.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_range.strided.example"></a></span><a class="link" href="strided.html#geometry.reference.adapted.boost_range.strided.example">Example</a>
+ </h6>
+<p>
+ Shows how to use a Boost.Geometry ring, strided by Boost.Range adaptor
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_range</span><span class="special">/</span><span class="identifier">strided</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">;</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">strided</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">xy</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">model</span><span class="special">::</span><span class="identifier">ring</span><span class="special">&lt;</span><span class="identifier">xy</span><span class="special">&gt;</span> <span class="identifier">ring</span><span class="special">;</span>
+ <span class="identifier">ring</span> <span class="special">+=</span> <span class="identifier">xy</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">ring</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span>
+ <span class="identifier">ring</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+ <span class="identifier">ring</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+ <span class="identifier">ring</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+ <span class="identifier">ring</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">0</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">correct</span><span class="special">(</span><span class="identifier">ring</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"Normal : "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">ring</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"Strided: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">ring</span> <span class="special">|</span> <span class="identifier">strided</span><span class="special">(</span><span class="number">2</span><span class="special">))</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Normal : ((0, 0), (0, 1), (0, 2), (1, 2), (2, 2), (2, 0), (0, 0))
+Strided: ((0, 0), (0, 2), (2, 2), (0, 0))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="sliced.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_range.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="../register.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/boost_tuple.html b/libs/geometry/doc/html/geometry/reference/adapted/boost_tuple.html
new file mode 100644
index 000000000..b809dab24
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/boost_tuple.html
@@ -0,0 +1,134 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Boost.Tuple</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../adapted.html" title="Adapted models">
+<link rel="prev" href="boost_fusion.html" title="Boost.Fusion">
+<link rel="next" href="boost_polygon.html" title="Boost.Polygon">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_fusion.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.adapted.boost_tuple"></a><a class="link" href="boost_tuple.html" title="Boost.Tuple">Boost.Tuple</a>
+</h4></div></div></div>
+<p>
+ Boost.Tuple tuples with arithmetic elements can be used as points within
+ Boost.Geometry
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_tuple.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_tuple.description"></a></span><a class="link" href="boost_tuple.html#geometry.reference.adapted.boost_tuple.description">Description</a>
+ </h6>
+<p>
+ Boost.Tuple fixed sized collections, such as boost::tuple&lt;double, double&gt;,
+ are (optionally) adapted to the Boost.Geometry point concept.
+ </p>
+<p>
+ Boost.Tuple pairs or triples might have mutually different types, such
+ as a boost::tuple&lt;float, double&gt;. Boost.Geometry reports the first
+ type as its <a class="link" href="../core/coordinate_type.html" title="coordinate_type">coordinate_type</a>.
+ </p>
+<p>
+ Boost.Geometry supports Boost.Tuple pairs, triples, quadruples, etc up
+ to tuples with 10 elements (though most algorithms do not support so many
+ dimensions).
+ </p>
+<p>
+ A tuple can be the point type used by the models linestring, polygon, segment,
+ box, and ring
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_tuple.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_tuple.model_of"></a></span><a class="link" href="boost_tuple.html#geometry.reference.adapted.boost_tuple.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_point.html" title="Point Concept">Point Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_tuple.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_tuple.header"></a></span><a class="link" href="boost_tuple.html#geometry.reference.adapted.boost_tuple.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.boost_tuple.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.boost_tuple.example"></a></span><a class="link" href="boost_tuple.html#geometry.reference.adapted.boost_tuple.example">Example</a>
+ </h6>
+<p>
+ Shows how to use Boost.Tuple points in Boost.Geometry
+ </p>
+<p>
+ Working with Boost.Tuples in Boost.Geometry is straightforward and shown
+ in various other examples as well.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</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">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">poly</span><span class="special">;</span>
+ <span class="identifier">poly</span><span class="special">.</span><span class="identifier">outer</span><span class="special">().</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_tuple</span><span class="special">(</span><span class="number">1.0</span><span class="special">,</span> <span class="number">2.0</span><span class="special">));</span>
+ <span class="identifier">poly</span><span class="special">.</span><span class="identifier">outer</span><span class="special">().</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_tuple</span><span class="special">(</span><span class="number">6.0</span><span class="special">,</span> <span class="number">4.0</span><span class="special">));</span>
+ <span class="identifier">poly</span><span class="special">.</span><span class="identifier">outer</span><span class="special">().</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_tuple</span><span class="special">(</span><span class="number">5.0</span><span class="special">,</span> <span class="number">1.0</span><span class="special">));</span>
+ <span class="identifier">poly</span><span class="special">.</span><span class="identifier">outer</span><span class="special">().</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_tuple</span><span class="special">(</span><span class="number">1.0</span><span class="special">,</span> <span class="number">2.0</span><span class="special">));</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Contains (1.5, 2.5): "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">boolalpha</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">within</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_tuple</span><span class="special">(</span><span class="number">1.5</span><span class="special">,</span> <span class="number">2.5</span><span class="special">),</span> <span class="identifier">poly</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Area: 6.5
+Contains (1.5, 2.5): false
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_fusion.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/c_array.html b/libs/geometry/doc/html/geometry/reference/adapted/c_array.html
new file mode 100644
index 000000000..825ab64f2
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/c_array.html
@@ -0,0 +1,113 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>C array</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../adapted.html" title="Adapted models">
+<link rel="prev" href="../adapted.html" title="Adapted models">
+<link rel="next" href="boost_array.html" title="Boost.Array">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../adapted.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_array.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.adapted.c_array"></a><a class="link" href="c_array.html" title="C array">C array</a>
+</h4></div></div></div>
+<p>
+ C arrays are adapted to the Boost.Geometry point concept
+ </p>
+<h6>
+<a name="geometry.reference.adapted.c_array.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.c_array.description"></a></span><a class="link" href="c_array.html#geometry.reference.adapted.c_array.description">Description</a>
+ </h6>
+<p>
+ C arrays, such as double[2] or int[3], are (optionally) adapted to the
+ Boost.Geometry point concept. They can therefore be used in many Boost.Geometry
+ algorithms.
+ </p>
+<p>
+ Note that a C array cannot be the point type of a linestring or a polygon.
+ The reason for that is that a std::vector does not allow containing C arrays
+ (this is not related to Boost.Geometry). The C array is therefore limited
+ to the point type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.c_array.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.c_array.model_of"></a></span><a class="link" href="c_array.html#geometry.reference.adapted.c_array.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_point.html" title="Point Concept">Point Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.c_array.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.c_array.header"></a></span><a class="link" href="c_array.html#geometry.reference.adapted.c_array.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">c_array</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ The standard header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span></code>
+ does not include this header.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.c_array.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.c_array.example"></a></span><a class="link" href="c_array.html#geometry.reference.adapted.c_array.example">Example</a>
+ </h6>
+<p>
+ Small example showing the combination of an array with a Boost.Geometry
+ algorithm
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">c_array</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_C_ARRAY_CS</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">int</span> <span class="identifier">a</span><span class="special">[</span><span class="number">3</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">};</span>
+ <span class="keyword">int</span> <span class="identifier">b</span><span class="special">[</span><span class="number">3</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span><span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">};</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">1.73205
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../adapted.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="boost_array.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register.html b/libs/geometry/doc/html/geometry/reference/adapted/register.html
new file mode 100644
index 000000000..baf0139d9
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register.html
@@ -0,0 +1,64 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Macro's for adaption</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../adapted.html" title="Adapted models">
+<link rel="prev" href="boost_range/strided.html" title="Boost.Range strided">
+<link rel="next" href="register/boost_geometry_register_box.html" title="BOOST_GEOMETRY_REGISTER_BOX">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_range/strided.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="register/boost_geometry_register_box.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.adapted.register"></a><a class="link" href="register.html" title="Macro's for adaption">Macro's for adaption</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="register/boost_geometry_register_box.html">BOOST_GEOMETRY_REGISTER_BOX</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_box_2d_4values.html">BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_box_templated.html">BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_linestring.html">BOOST_GEOMETRY_REGISTER_LINESTRING</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_linestring_templated.html">BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_multi_linestring.html">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_multi_linestring_templated.html">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_multi_point.html">BOOST_GEOMETRY_REGISTER_MULTI_POINT</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_multi_point_templated.html">BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_multi_polygon.html">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_multi_polygon_templated.html">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_point_2d.html">BOOST_GEOMETRY_REGISTER_POINT_2D</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_point_2d_const.html">BOOST_GEOMETRY_REGISTER_POINT_2D_CONST</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_point_2d_get_set.html">BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_point_3d.html">BOOST_GEOMETRY_REGISTER_POINT_3D</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_point_3d_const.html">BOOST_GEOMETRY_REGISTER_POINT_3D_CONST</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_point_3d_get_set.html">BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_ring.html">BOOST_GEOMETRY_REGISTER_RING</a></span></dt>
+<dt><span class="section"><a href="register/boost_geometry_register_ring_templated.html">BOOST_GEOMETRY_REGISTER_RING_TEMPLATED</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_range/strided.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapted.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="register/boost_geometry_register_box.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box.html
new file mode 100644
index 000000000..6a09ec445
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box.html
@@ -0,0 +1,189 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_BOX</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="../register.html" title="Macro's for adaption">
+<link rel="next" href="boost_geometry_register_box_2d_4values.html" title="BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../register.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_box_2d_4values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_box"></a><a class="link" href="boost_geometry_register_box.html" title="BOOST_GEOMETRY_REGISTER_BOX">BOOST_GEOMETRY_REGISTER_BOX</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp6543200"></a>
+Macro to register a box.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box.description"></a></span><a class="link" href="boost_geometry_register_box.html#geometry.reference.adapted.register.boost_geometry_register_box.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_BOX registers a box such that it is
+ recognized by Boost.Geometry and that Boost.Geometry functionality can
+ used with the specified type. The box may contain template parameters,
+ which must be specified then.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box.synopsis"></a></span><a class="link" href="boost_geometry_register_box.html#geometry.reference.adapted.register.boost_geometry_register_box.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_BOX</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">MinCorner</span><span class="special">,</span> <span class="identifier">MaxCorner</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box.parameters"></a></span><a class="link" href="boost_geometry_register_box.html#geometry.reference.adapted.register.boost_geometry_register_box.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Box type to be registered
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Point type on which box is based. Might be two or three-dimensional
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MinCorner
+ </p>
+ </td>
+<td>
+ <p>
+ minimum corner (should be public member or method)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MaxCorner
+ </p>
+ </td>
+<td>
+ <p>
+ maximum corner (should be public member or method)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box.header"></a></span><a class="link" href="boost_geometry_register_box.html#geometry.reference.adapted.register.boost_geometry_register_box.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">box</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box.example"></a></span><a class="link" href="boost_geometry_register_box.html#geometry.reference.adapted.register.boost_geometry_register_box.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_BOX
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">box</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">struct</span> <span class="identifier">my_point</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">struct</span> <span class="identifier">my_box</span>
+<span class="special">{</span>
+ <span class="identifier">my_point</span> <span class="identifier">ll</span><span class="special">,</span> <span class="identifier">ur</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="comment">// Register the point type</span>
+<span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_2D</span><span class="special">(</span><span class="identifier">my_point</span><span class="special">,</span> <span class="keyword">double</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">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">)</span>
+
+<span class="comment">// Register the box type, also notifying that it is based on "my_point"</span>
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOX</span><span class="special">(</span><span class="identifier">my_box</span><span class="special">,</span> <span class="identifier">my_point</span><span class="special">,</span> <span class="identifier">ll</span><span class="special">,</span> <span class="identifier">ur</span><span class="special">)</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">my_box</span> <span class="identifier">b</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">make</span><span class="special">&lt;</span><span class="identifier">my_box</span><span class="special">&gt;(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Area: 4
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../register.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_box_2d_4values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box_2d_4values.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box_2d_4values.html
new file mode 100644
index 000000000..5ce54beb6
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box_2d_4values.html
@@ -0,0 +1,214 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_box.html" title="BOOST_GEOMETRY_REGISTER_BOX">
+<link rel="next" href="boost_geometry_register_box_templated.html" title="BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_box.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_box_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values"></a><a class="link" href="boost_geometry_register_box_2d_4values.html" title="BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES">BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp6607728"></a>
+Macro to register a box.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.description"></a></span><a class="link" href="boost_geometry_register_box_2d_4values.html#geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES registers a box such
+ that it is recognized by Boost.Geometry and that Boost.Geometry functionality
+ can used with the specified type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.synopsis"></a></span><a class="link" href="boost_geometry_register_box_2d_4values.html#geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES</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">Left</span><span class="special">,</span> <span class="identifier">Bottom</span><span class="special">,</span> <span class="identifier">Right</span><span class="special">,</span> <span class="identifier">Top</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.parameters"></a></span><a class="link" href="boost_geometry_register_box_2d_4values.html#geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Box type to be registered
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Point type reported as point_type by box. Must be two dimensional.
+ Note that these box tyeps do not contain points, but they must
+ have a related point_type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Left
+ </p>
+ </td>
+<td>
+ <p>
+ Left side (must be public member or method)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Bottom
+ </p>
+ </td>
+<td>
+ <p>
+ Bottom side (must be public member or method)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Right
+ </p>
+ </td>
+<td>
+ <p>
+ Right side (must be public member or method)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Top
+ </p>
+ </td>
+<td>
+ <p>
+ Top side (must be public member or method)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.header"></a></span><a class="link" href="boost_geometry_register_box_2d_4values.html#geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">box</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.example"></a></span><a class="link" href="boost_geometry_register_box_2d_4values.html#geometry.reference.adapted.register.boost_geometry_register_box_2d_4values.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">box</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">struct</span> <span class="identifier">my_point</span>
+<span class="special">{</span>
+ <span class="keyword">int</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">struct</span> <span class="identifier">my_box</span>
+<span class="special">{</span>
+ <span class="keyword">int</span> <span class="identifier">left</span><span class="special">,</span> <span class="identifier">top</span><span class="special">,</span> <span class="identifier">right</span><span class="special">,</span> <span class="identifier">bottom</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_2D</span><span class="special">(</span><span class="identifier">my_point</span><span class="special">,</span> <span class="keyword">int</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">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">)</span>
+
+<span class="comment">// Register the box type, also notifying that it is based on "my_point"</span>
+<span class="comment">// (even if it does not contain it)</span>
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES</span><span class="special">(</span><span class="identifier">my_box</span><span class="special">,</span> <span class="identifier">my_point</span><span class="special">,</span> <span class="identifier">left</span><span class="special">,</span> <span class="identifier">top</span><span class="special">,</span> <span class="identifier">right</span><span class="special">,</span> <span class="identifier">bottom</span><span class="special">)</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">my_box</span> <span class="identifier">b</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">make</span><span class="special">&lt;</span><span class="identifier">my_box</span><span class="special">&gt;(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Area: 4
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_box.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_box_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box_templated.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box_templated.html
new file mode 100644
index 000000000..5322cfd27
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_box_templated.html
@@ -0,0 +1,174 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_box_2d_4values.html" title="BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES">
+<link rel="next" href="boost_geometry_register_linestring.html" title="BOOST_GEOMETRY_REGISTER_LINESTRING">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_box_2d_4values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_linestring.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_templated"></a><a class="link" href="boost_geometry_register_box_templated.html" title="BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED">BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp6678304"></a>
+Macro to register a box.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.description"></a></span><a class="link" href="boost_geometry_register_box_templated.html#geometry.reference.adapted.register.boost_geometry_register_box_templated.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED registers a box such
+ that it is recognized by Boost.Geometry and that Boost.Geometry functionality
+ can used with the specified type. The type must have one template parameter,
+ which should be a point type, and should not be specified. Boost.Geometry
+ takes care of inserting the template parameter. Hence all types of this
+ templated box are registered, regardless of their point type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.synopsis"></a></span><a class="link" href="boost_geometry_register_box_templated.html#geometry.reference.adapted.register.boost_geometry_register_box_templated.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED</span><span class="special">(</span><span class="identifier">Box</span><span class="special">,</span> <span class="identifier">MinCorner</span><span class="special">,</span> <span class="identifier">MaxCorner</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.parameters"></a></span><a class="link" href="boost_geometry_register_box_templated.html#geometry.reference.adapted.register.boost_geometry_register_box_templated.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Box type to be registered
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MinCorner
+ </p>
+ </td>
+<td>
+ <p>
+ minimum corner (should be public member or method)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MaxCorner
+ </p>
+ </td>
+<td>
+ <p>
+ maximum corner (should be public member or method)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.header"></a></span><a class="link" href="boost_geometry_register_box_templated.html#geometry.reference.adapted.register.boost_geometry_register_box_templated.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">box</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_box_templated.example"></a></span><a class="link" href="boost_geometry_register_box_templated.html#geometry.reference.adapted.register.boost_geometry_register_box_templated.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">box</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">my_box</span>
+<span class="special">{</span>
+ <span class="identifier">P</span> <span class="identifier">ll</span><span class="special">,</span> <span class="identifier">ur</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="comment">// Register the box type</span>
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED</span><span class="special">(</span><span class="identifier">my_box</span><span class="special">,</span> <span class="identifier">ll</span><span class="special">,</span> <span class="identifier">ur</span><span class="special">)</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">my_box</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">box</span><span class="special">;</span>
+ <span class="identifier">box</span> <span class="identifier">b</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">make</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Area: 4
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_box_2d_4values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_linestring.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_linestring.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_linestring.html
new file mode 100644
index 000000000..9ee1d95e4
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_linestring.html
@@ -0,0 +1,154 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_LINESTRING</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_box_templated.html" title="BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED">
+<link rel="next" href="boost_geometry_register_linestring_templated.html" title="BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_box_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_linestring_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring"></a><a class="link" href="boost_geometry_register_linestring.html" title="BOOST_GEOMETRY_REGISTER_LINESTRING">BOOST_GEOMETRY_REGISTER_LINESTRING</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp6755504"></a>
+Macro to register a linestring.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring.description"></a></span><a class="link" href="boost_geometry_register_linestring.html#geometry.reference.adapted.register.boost_geometry_register_linestring.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_LINESTRING registers a linestring such
+ that it is recognized by Boost.Geometry and that Boost.Geometry functionality
+ can used with the specified type. The linestring may contain template
+ parameters, which must be specified then.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring.synopsis"></a></span><a class="link" href="boost_geometry_register_linestring.html#geometry.reference.adapted.register.boost_geometry_register_linestring.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_LINESTRING</span><span class="special">(</span><span class="identifier">Linestring</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring.parameters"></a></span><a class="link" href="boost_geometry_register_linestring.html#geometry.reference.adapted.register.boost_geometry_register_linestring.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ linestring type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring.header"></a></span><a class="link" href="boost_geometry_register_linestring.html#geometry.reference.adapted.register.boost_geometry_register_linestring.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring.example"></a></span><a class="link" href="boost_geometry_register_linestring.html#geometry.reference.adapted.register.boost_geometry_register_linestring.example">Example</a>
+ </h6>
+<p>
+ Show the use of BOOST_GEOMETRY_REGISTER_LINESTRING
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_2d</span><span class="special">;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_LINESTRING</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">point_2d</span><span class="special">&gt;)</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Normal usage of std::</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">point_2d</span><span class="special">&gt;</span> <span class="identifier">line</span><span class="special">;</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_2d</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_2d</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_2d</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+
+ <span class="comment">// Usage of Boost.Geometry's length and wkt functions</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Length: "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">line</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"WKT: "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">(</span><span class="identifier">line</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Length: 2.82843
+WKT: LINESTRING(1 1,2 2,3 1)
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_box_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_linestring_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_linestring_templated.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_linestring_templated.html
new file mode 100644
index 000000000..bf05f456e
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_linestring_templated.html
@@ -0,0 +1,150 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_linestring.html" title="BOOST_GEOMETRY_REGISTER_LINESTRING">
+<link rel="next" href="boost_geometry_register_multi_linestring.html" title="BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_linestring.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_linestring.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated"></a><a class="link" href="boost_geometry_register_linestring_templated.html" title="BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED">BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp6818992"></a>
+Macro to register a templated linestring.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.description"></a></span><a class="link" href="boost_geometry_register_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_linestring_templated.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED registers a templated
+ linestring such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type. The type must have one
+ template parameter, which should be a point type, and should not be specified.
+ Boost.Geometry takes care of inserting the template parameter. Hence
+ all types of this templated linestring are registered, regardless of
+ their point type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.synopsis"></a></span><a class="link" href="boost_geometry_register_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_linestring_templated.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED</span><span class="special">(</span><span class="identifier">Linestring</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.parameters"></a></span><a class="link" href="boost_geometry_register_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_linestring_templated.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ linestring (without template parameters) type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.header"></a></span><a class="link" href="boost_geometry_register_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_linestring_templated.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_linestring_templated.example"></a></span><a class="link" href="boost_geometry_register_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_linestring_templated.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">deque</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="comment">// Adapt any deque to Boost.Geometry Linestring Concept</span>
+<span class="identifier">BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">)</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">line</span><span class="special">(</span><span class="number">2</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">assign_values</span><span class="special">(</span><span class="identifier">line</span><span class="special">[</span><span class="number">0</span><span class="special">],</span> <span class="number">1</span><span class="special">,</span> <span class="number">1</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">assign_values</span><span class="special">(</span><span class="identifier">line</span><span class="special">[</span><span class="number">1</span><span class="special">],</span> <span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+
+ <span class="comment">// Boost.Geometry algorithms work on any deque now</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Length: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">line</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Line: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">line</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Length: 1.41421
+Line: ((1, 1), (2, 2))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_linestring.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_linestring.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_linestring.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_linestring.html
new file mode 100644
index 000000000..dbae197f1
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_linestring.html
@@ -0,0 +1,151 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_linestring_templated.html" title="BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED">
+<link rel="next" href="boost_geometry_register_multi_linestring_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_linestring_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_linestring_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring"></a><a class="link" href="boost_geometry_register_multi_linestring.html" title="BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp6882000"></a>
+Macro to register a multi_linestring.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.description"></a></span><a class="link" href="boost_geometry_register_multi_linestring.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING registers a multi_linestring
+ such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type. The multi_linestring
+ may contain template parameters, which must be specified then.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.synopsis"></a></span><a class="link" href="boost_geometry_register_multi_linestring.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING</span><span class="special">(</span><span class="identifier">MultiLineString</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.parameters"></a></span><a class="link" href="boost_geometry_register_multi_linestring.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ MultiLineString
+ </p>
+ </td>
+<td>
+ <p>
+ multi_linestring type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.header"></a></span><a class="link" href="boost_geometry_register_multi_linestring.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring.example"></a></span><a class="link" href="boost_geometry_register_multi_linestring.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">linestring</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">linestring_type</span><span class="special">;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">&lt;</span><span class="identifier">linestring_type</span><span class="special">&gt;)</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Normal usage of std::</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">&lt;</span><span class="identifier">linestring_type</span><span class="special">&gt;</span> <span class="identifier">lines</span><span class="special">(</span><span class="number">2</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">read_wkt</span><span class="special">(</span><span class="string">"LINESTRING(0 0,1 1)"</span><span class="special">,</span> <span class="identifier">lines</span><span class="special">[</span><span class="number">0</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">read_wkt</span><span class="special">(</span><span class="string">"LINESTRING(2 2,3 3)"</span><span class="special">,</span> <span class="identifier">lines</span><span class="special">[</span><span class="number">1</span><span class="special">]);</span>
+
+ <span class="comment">// Usage of Boost.Geometry</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"LENGTH: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">lines</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">LENGTH: 2.82843
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_linestring_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_linestring_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_linestring_templated.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_linestring_templated.html
new file mode 100644
index 000000000..0b65697e7
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_linestring_templated.html
@@ -0,0 +1,117 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_multi_linestring.html" title="BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING">
+<link rel="next" href="boost_geometry_register_multi_point.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POINT">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_linestring.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_point.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated"></a><a class="link" href="boost_geometry_register_multi_linestring_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp6947392"></a>
+Macro to register a templated multi_linestring.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.description"></a></span><a class="link" href="boost_geometry_register_multi_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED registers
+ a templated multi_linestring such that it is recognized by Boost.Geometry
+ and that Boost.Geometry functionality can used with the specified type.
+ The type must have one template parameter, which should be a linestring
+ type, and should not be specified. Boost.Geometry takes care of inserting
+ the template parameter. Hence all types of this templated multi_linestring
+ are registered, regardless of their point type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.synopsis"></a></span><a class="link" href="boost_geometry_register_multi_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED</span><span class="special">(</span><span class="identifier">MultiLineString</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.parameters"></a></span><a class="link" href="boost_geometry_register_multi_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ MultiLineString
+ </p>
+ </td>
+<td>
+ <p>
+ multi_linestring (without template parameters) type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.header"></a></span><a class="link" href="boost_geometry_register_multi_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.example"></a></span><a class="link" href="boost_geometry_register_multi_linestring_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated.example">Example</a>
+ </h6>
+<p>
+ [register_multi_linestring_templated] [register_multi_linestring_templated_output]
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_linestring.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_point.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_point.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_point.html
new file mode 100644
index 000000000..216318f22
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_point.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_MULTI_POINT</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_multi_linestring_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED">
+<link rel="next" href="boost_geometry_register_multi_point_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_linestring_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_point_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point"></a><a class="link" href="boost_geometry_register_multi_point.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POINT">BOOST_GEOMETRY_REGISTER_MULTI_POINT</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp6968656"></a>
+Macro to register a multi_point.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.description"></a></span><a class="link" href="boost_geometry_register_multi_point.html#geometry.reference.adapted.register.boost_geometry_register_multi_point.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_MULTI_POINT registers a multi_point
+ such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type. The multi_point may contain
+ template parameters, which must be specified then.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.synopsis"></a></span><a class="link" href="boost_geometry_register_multi_point.html#geometry.reference.adapted.register.boost_geometry_register_multi_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_MULTI_POINT</span><span class="special">(</span><span class="identifier">MultiPoint</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.parameters"></a></span><a class="link" href="boost_geometry_register_multi_point.html#geometry.reference.adapted.register.boost_geometry_register_multi_point.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ multi_point type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.header"></a></span><a class="link" href="boost_geometry_register_multi_point.html#geometry.reference.adapted.register.boost_geometry_register_multi_point.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point.example"></a></span><a class="link" href="boost_geometry_register_multi_point.html#geometry.reference.adapted.register.boost_geometry_register_multi_point.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_MULTI_POINT
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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">BOOST_GEOMETRY_REGISTER_MULTI_POINT</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">&lt;</span> <span class="special">::</span><span class="identifier">point_type</span> <span class="special">&gt;)</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Normal usage of std::</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">multi_point</span><span class="special">;</span>
+ <span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_type</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+ <span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_type</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+
+ <span class="comment">// Usage of Boost.Geometry</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"WKT: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">(</span><span class="identifier">multi_point</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">WKT: MULTIPOINT((1 1),(3 2))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_linestring_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_point_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_point_templated.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_point_templated.html
new file mode 100644
index 000000000..e12553031
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_point_templated.html
@@ -0,0 +1,150 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_multi_point.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POINT">
+<link rel="next" href="boost_geometry_register_multi_polygon.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POLYGON">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_point.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_polygon.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated"></a><a class="link" href="boost_geometry_register_multi_point_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED">BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7031040"></a>
+Macro to register a templated multi_point.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.description"></a></span><a class="link" href="boost_geometry_register_multi_point_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED registers a templated
+ multi_point such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type. The type must have one
+ template parameter, which should be a point type, and should not be specified.
+ Boost.Geometry takes care of inserting the template parameter. Hence
+ all types of this templated multi_point are registered, regardless of
+ their point type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.synopsis"></a></span><a class="link" href="boost_geometry_register_multi_point_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED</span><span class="special">(</span><span class="identifier">MultiPoint</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.parameters"></a></span><a class="link" href="boost_geometry_register_multi_point_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ multi_point (without template parameters) type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.header"></a></span><a class="link" href="boost_geometry_register_multi_point_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.example"></a></span><a class="link" href="boost_geometry_register_multi_point_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_point_templated.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">)</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Normal usage of std::</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">multi_point</span><span class="special">;</span>
+ <span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+ <span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;(</span><span class="number">3</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+
+ <span class="comment">// Usage of Boost.Geometry</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"WKT: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">(</span><span class="identifier">multi_point</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">WKT: MULTIPOINT((1 1),(3 2))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_point.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_polygon.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_polygon.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_polygon.html
new file mode 100644
index 000000000..cbcec12d4
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_polygon.html
@@ -0,0 +1,151 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_MULTI_POLYGON</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_multi_point_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED">
+<link rel="next" href="boost_geometry_register_multi_polygon_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_point_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_polygon_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon"></a><a class="link" href="boost_geometry_register_multi_polygon.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POLYGON">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7094352"></a>
+Macro to register a multi_polygon.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.description"></a></span><a class="link" href="boost_geometry_register_multi_polygon.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_MULTI_POLYGON registers a multi_polygon
+ such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type. The multi_polygon may
+ contain template parameters, which must be specified then.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.synopsis"></a></span><a class="link" href="boost_geometry_register_multi_polygon.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON</span><span class="special">(</span><span class="identifier">MultiPolygon</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.parameters"></a></span><a class="link" href="boost_geometry_register_multi_polygon.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ multi_polygon type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.header"></a></span><a class="link" href="boost_geometry_register_multi_polygon.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon.example"></a></span><a class="link" href="boost_geometry_register_multi_polygon.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_MULTI_POLYGON
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">polygon_type</span><span class="special">&gt;)</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Normal usage of std::</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">polygon_type</span><span class="special">&gt;</span> <span class="identifier">polygons</span><span class="special">(</span><span class="number">2</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">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 1,1 1,1 0,0 0))"</span><span class="special">,</span> <span class="identifier">polygons</span><span class="special">[</span><span class="number">0</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">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((3 0,3 1,4 1,4 0,3 0))"</span><span class="special">,</span> <span class="identifier">polygons</span><span class="special">[</span><span class="number">1</span><span class="special">]);</span>
+
+ <span class="comment">// Usage of Boost.Geometry</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"AREA: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">polygons</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">AREA: 2
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_point_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_multi_polygon_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_polygon_templated.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_polygon_templated.html
new file mode 100644
index 000000000..a03d43a43
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_multi_polygon_templated.html
@@ -0,0 +1,117 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_multi_polygon.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POLYGON">
+<link rel="next" href="boost_geometry_register_point_2d.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_polygon.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_2d.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated"></a><a class="link" href="boost_geometry_register_multi_polygon_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7159760"></a>
+Macro to register a templated multi_polygon.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.description"></a></span><a class="link" href="boost_geometry_register_multi_polygon_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED registers a
+ templated multi_polygon such that it is recognized by Boost.Geometry
+ and that Boost.Geometry functionality can used with the specified type.
+ The type must have one template parameter, which should be a polygon
+ type, and should not be specified. Boost.Geometry takes care of inserting
+ the template parameter. Hence all types of this templated multi_polygon
+ are registered, regardless of their point type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.synopsis"></a></span><a class="link" href="boost_geometry_register_multi_polygon_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED</span><span class="special">(</span><span class="identifier">MultiPolygon</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.parameters"></a></span><a class="link" href="boost_geometry_register_multi_polygon_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ multi_polygon (without template parameters) type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.header"></a></span><a class="link" href="boost_geometry_register_multi_polygon_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="keyword">register</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.example"></a></span><a class="link" href="boost_geometry_register_multi_polygon_templated.html#geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated.example">Example</a>
+ </h6>
+<p>
+ [register_multi_polygon_templated] [register_multi_polygon_templated_output]
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_polygon.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_2d.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d.html
new file mode 100644
index 000000000..7838744fe
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d.html
@@ -0,0 +1,240 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_POINT_2D</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_multi_polygon_templated.html" title="BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED">
+<link rel="next" href="boost_geometry_register_point_2d_const.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D_CONST">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_polygon_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_2d_const.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d"></a><a class="link" href="boost_geometry_register_point_2d.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D">BOOST_GEOMETRY_REGISTER_POINT_2D</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7180960"></a>
+Macro to register a 2D point type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.description"></a></span><a class="link" href="boost_geometry_register_point_2d.html#geometry.reference.adapted.register.boost_geometry_register_point_2d.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_POINT_2D registers a two-dimensional
+ point type such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.synopsis"></a></span><a class="link" href="boost_geometry_register_point_2d.html#geometry.reference.adapted.register.boost_geometry_register_point_2d.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_2D</span><span class="special">(</span><span class="identifier">Point</span><span class="special">,</span> <span class="identifier">CoordinateType</span><span class="special">,</span> <span class="identifier">CoordinateSystem</span><span class="special">,</span> <span class="identifier">Field0</span><span class="special">,</span> <span class="identifier">Field1</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.parameters"></a></span><a class="link" href="boost_geometry_register_point_2d.html#geometry.reference.adapted.register.boost_geometry_register_point_2d.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Point type to be registered
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateType
+ </p>
+ </td>
+<td>
+ <p>
+ Type of the coordinates of the point (e.g. double)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateSystem
+ </p>
+ </td>
+<td>
+ <p>
+ Coordinate system (e.g. cs::cartesian)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field0
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing first (usually x) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field1
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing second (usually y) coordinate
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.header"></a></span><a class="link" href="boost_geometry_register_point_2d.html#geometry.reference.adapted.register.boost_geometry_register_point_2d.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<div class="caution"><table border="0" summary="Caution">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../../doc/src/images/caution.png"></td>
+<th align="left">Caution</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Use the macro outside any namespace
+ </p></td></tr>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ A point can include a namespace
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.examples"></a></span><a class="link" href="boost_geometry_register_point_2d.html#geometry.reference.adapted.register.boost_geometry_register_point_2d.examples">Examples</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_POINT_2D
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<a class="co" name="geometry.reference.adapted.register.boost_geometry_register_point_2d.c0" href="boost_geometry_register_point_2d.html#geometry.reference.adapted.register.boost_geometry_register_point_2d.c1"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+<span class="keyword">struct</span> <span class="identifier">legacy_point</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_2D</span><span class="special">(</span><span class="identifier">legacy_point</span><span class="special">,</span> <span class="keyword">double</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">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">)</span> <a class="co" name="geometry.reference.adapted.register.boost_geometry_register_point_2d.c2" href="boost_geometry_register_point_2d.html#geometry.reference.adapted.register.boost_geometry_register_point_2d.c3"><img src="../../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">legacy_point</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p2</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>
+
+ <a class="co" name="geometry.reference.adapted.register.boost_geometry_register_point_2d.c4" href="boost_geometry_register_point_2d.html#geometry.reference.adapted.register.boost_geometry_register_point_2d.c5"><img src="../../../../../../../../doc/src/images/callouts/3.png" alt="3" border="0"></a>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">p2</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+
+ <span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p2</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Distance: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">d</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list">
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.c1"></a><a href="#geometry.reference.adapted.register.boost_geometry_register_point_2d.c0"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ Somewhere, any legacy point struct is defined
+ </p></td>
+</tr>
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.c3"></a><a href="#geometry.reference.adapted.register.boost_geometry_register_point_2d.c2"><img src="../../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ The magic: adapt it to Boost.Geometry Point Concept
+ </p></td>
+</tr>
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d.c5"></a><a href="#geometry.reference.adapted.register.boost_geometry_register_point_2d.c4"><img src="../../../../../../../../doc/src/images/callouts/3.png" alt="3" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ Any Boost.Geometry function can be used for legacy point now. Here:
+ assign_values and distance
+ </p></td>
+</tr>
+</table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Distance: 1.41421
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_multi_polygon_templated.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_2d_const.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d_const.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d_const.html
new file mode 100644
index 000000000..e14af3c3c
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d_const.html
@@ -0,0 +1,157 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_POINT_2D_CONST</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_point_2d.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D">
+<link rel="next" href="boost_geometry_register_point_2d_get_set.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_2d.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_2d_get_set.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_const"></a><a class="link" href="boost_geometry_register_point_2d_const.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D_CONST">BOOST_GEOMETRY_REGISTER_POINT_2D_CONST</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7249248"></a>
+Macro to register a 2D point type (const version)
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_const.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_const.description"></a></span><a class="link" href="boost_geometry_register_point_2d_const.html#geometry.reference.adapted.register.boost_geometry_register_point_2d_const.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_POINT_2D_CONST registers a two-dimensional
+ point type such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type.. The const version registers
+ only read access to the fields, the point type is therefore read-only
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_const.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_const.synopsis"></a></span><a class="link" href="boost_geometry_register_point_2d_const.html#geometry.reference.adapted.register.boost_geometry_register_point_2d_const.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_2D_CONST</span><span class="special">(</span><span class="identifier">Point</span><span class="special">,</span> <span class="identifier">CoordinateType</span><span class="special">,</span> <span class="identifier">CoordinateSystem</span><span class="special">,</span> <span class="identifier">Field0</span><span class="special">,</span> <span class="identifier">Field1</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_const.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_const.parameters"></a></span><a class="link" href="boost_geometry_register_point_2d_const.html#geometry.reference.adapted.register.boost_geometry_register_point_2d_const.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Point type to be registered
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateType
+ </p>
+ </td>
+<td>
+ <p>
+ Type of the coordinates of the point (e.g. double)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateSystem
+ </p>
+ </td>
+<td>
+ <p>
+ Coordinate system (e.g. cs::cartesian)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field0
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing first (usually x) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field1
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing second (usually y) coordinate
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_const.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_const.header"></a></span><a class="link" href="boost_geometry_register_point_2d_const.html#geometry.reference.adapted.register.boost_geometry_register_point_2d_const.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_2d.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_2d_get_set.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d_get_set.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d_get_set.html
new file mode 100644
index 000000000..c0fc1350d
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_2d_get_set.html
@@ -0,0 +1,182 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_point_2d_const.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D_CONST">
+<link rel="next" href="boost_geometry_register_point_3d.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_2d_const.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_3d.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set"></a><a class="link" href="boost_geometry_register_point_2d_get_set.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET">BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7274992"></a>
+Macro to register a 2D point type (having separate get/set methods)
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.description"></a></span><a class="link" href="boost_geometry_register_point_2d_get_set.html#geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET registers a two-dimensional
+ point type such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type.. The get/set version
+ registers get and set methods separately and can be used for classes
+ with protected member variables and get/set methods to change coordinates
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.synopsis"></a></span><a class="link" href="boost_geometry_register_point_2d_get_set.html#geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET</span><span class="special">(</span><span class="identifier">Point</span><span class="special">,</span> <span class="identifier">CoordinateType</span><span class="special">,</span> <span class="identifier">CoordinateSystem</span><span class="special">,</span> <span class="identifier">Get0</span><span class="special">,</span> <span class="identifier">Get1</span><span class="special">,</span> <span class="identifier">Set0</span><span class="special">,</span> <span class="identifier">Set1</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.parameters"></a></span><a class="link" href="boost_geometry_register_point_2d_get_set.html#geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Point type to be registered
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateType
+ </p>
+ </td>
+<td>
+ <p>
+ Type of the coordinates of the point (e.g. double)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateSystem
+ </p>
+ </td>
+<td>
+ <p>
+ Coordinate system (e.g. cs::cartesian)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Get0
+ </p>
+ </td>
+<td>
+ <p>
+ Method to get the first (usually x) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Get1
+ </p>
+ </td>
+<td>
+ <p>
+ Method to get the second (usually y) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Set0
+ </p>
+ </td>
+<td>
+ <p>
+ Method to set the first (usually x) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Set1
+ </p>
+ </td>
+<td>
+ <p>
+ Method to set the second (usually y) coordinate
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.header"></a></span><a class="link" href="boost_geometry_register_point_2d_get_set.html#geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_2d_const.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_3d.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d.html
new file mode 100644
index 000000000..364791ce0
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d.html
@@ -0,0 +1,168 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_POINT_3D</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_point_2d_get_set.html" title="BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET">
+<link rel="next" href="boost_geometry_register_point_3d_const.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D_CONST">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_2d_get_set.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_3d_const.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d"></a><a class="link" href="boost_geometry_register_point_3d.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D">BOOST_GEOMETRY_REGISTER_POINT_3D</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7304288"></a>
+Macro to register a 3D point type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d.description"></a></span><a class="link" href="boost_geometry_register_point_3d.html#geometry.reference.adapted.register.boost_geometry_register_point_3d.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_POINT_3D registers a three-dimensional
+ point type such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d.synopsis"></a></span><a class="link" href="boost_geometry_register_point_3d.html#geometry.reference.adapted.register.boost_geometry_register_point_3d.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_3D</span><span class="special">(</span><span class="identifier">Point</span><span class="special">,</span> <span class="identifier">CoordinateType</span><span class="special">,</span> <span class="identifier">CoordinateSystem</span><span class="special">,</span> <span class="identifier">Field0</span><span class="special">,</span> <span class="identifier">Field1</span><span class="special">,</span> <span class="identifier">Field2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d.parameters"></a></span><a class="link" href="boost_geometry_register_point_3d.html#geometry.reference.adapted.register.boost_geometry_register_point_3d.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Point type to be registered
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateType
+ </p>
+ </td>
+<td>
+ <p>
+ Type of the coordinates of the point (e.g. double)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateSystem
+ </p>
+ </td>
+<td>
+ <p>
+ Coordinate system (e.g. cs::cartesian)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field0
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing first (usually x) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field1
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing second (usually y) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field2
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing third (usually z) coordinate
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d.header"></a></span><a class="link" href="boost_geometry_register_point_3d.html#geometry.reference.adapted.register.boost_geometry_register_point_3d.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_2d_get_set.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_3d_const.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d_const.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d_const.html
new file mode 100644
index 000000000..2c4e26bb4
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d_const.html
@@ -0,0 +1,169 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_POINT_3D_CONST</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_point_3d.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D">
+<link rel="next" href="boost_geometry_register_point_3d_get_set.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_3d.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_3d_get_set.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_const"></a><a class="link" href="boost_geometry_register_point_3d_const.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D_CONST">BOOST_GEOMETRY_REGISTER_POINT_3D_CONST</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7331392"></a>
+Macro to register a 3D point type (const version)
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_const.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_const.description"></a></span><a class="link" href="boost_geometry_register_point_3d_const.html#geometry.reference.adapted.register.boost_geometry_register_point_3d_const.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_POINT_3D_CONST registers a three-dimensional
+ point type such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type.. The const version registers
+ only read access to the fields, the point type is therefore read-only
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_const.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_const.synopsis"></a></span><a class="link" href="boost_geometry_register_point_3d_const.html#geometry.reference.adapted.register.boost_geometry_register_point_3d_const.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_3D_CONST</span><span class="special">(</span><span class="identifier">Point</span><span class="special">,</span> <span class="identifier">CoordinateType</span><span class="special">,</span> <span class="identifier">CoordinateSystem</span><span class="special">,</span> <span class="identifier">Field0</span><span class="special">,</span> <span class="identifier">Field1</span><span class="special">,</span> <span class="identifier">Field2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_const.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_const.parameters"></a></span><a class="link" href="boost_geometry_register_point_3d_const.html#geometry.reference.adapted.register.boost_geometry_register_point_3d_const.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Point type to be registered
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateType
+ </p>
+ </td>
+<td>
+ <p>
+ Type of the coordinates of the point (e.g. double)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateSystem
+ </p>
+ </td>
+<td>
+ <p>
+ Coordinate system (e.g. cs::cartesian)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field0
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing first (usually x) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field1
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing second (usually y) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Field2
+ </p>
+ </td>
+<td>
+ <p>
+ Member containing third (usually z) coordinate
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_const.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_const.header"></a></span><a class="link" href="boost_geometry_register_point_3d_const.html#geometry.reference.adapted.register.boost_geometry_register_point_3d_const.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_3d.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_point_3d_get_set.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d_get_set.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d_get_set.html
new file mode 100644
index 000000000..62b138a95
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_point_3d_get_set.html
@@ -0,0 +1,206 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_point_3d_const.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D_CONST">
+<link rel="next" href="boost_geometry_register_ring.html" title="BOOST_GEOMETRY_REGISTER_RING">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_3d_const.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_ring.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set"></a><a class="link" href="boost_geometry_register_point_3d_get_set.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET">BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7358752"></a>
+Macro to register a 3D point type (having separate get/set methods)
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.description"></a></span><a class="link" href="boost_geometry_register_point_3d_get_set.html#geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET registers a three-dimensional
+ point type such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type.. The get/set version
+ registers get and set methods separately and can be used for classes
+ with protected member variables and get/set methods to change coordinates
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.synopsis"></a></span><a class="link" href="boost_geometry_register_point_3d_get_set.html#geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET</span><span class="special">(</span><span class="identifier">Point</span><span class="special">,</span> <span class="identifier">CoordinateType</span><span class="special">,</span> <span class="identifier">CoordinateSystem</span><span class="special">,</span> <span class="identifier">Get0</span><span class="special">,</span> <span class="identifier">Get1</span><span class="special">,</span> <span class="identifier">Get2</span><span class="special">,</span> <span class="identifier">Set0</span><span class="special">,</span> <span class="identifier">Set1</span><span class="special">,</span> <span class="identifier">Set2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.parameters"></a></span><a class="link" href="boost_geometry_register_point_3d_get_set.html#geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Point type to be registered
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateType
+ </p>
+ </td>
+<td>
+ <p>
+ Type of the coordinates of the point (e.g. double)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ CoordinateSystem
+ </p>
+ </td>
+<td>
+ <p>
+ Coordinate system (e.g. cs::cartesian)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Get0
+ </p>
+ </td>
+<td>
+ <p>
+ Method to get the first (usually x) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Get1
+ </p>
+ </td>
+<td>
+ <p>
+ Method to get the second (usually y) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Get2
+ </p>
+ </td>
+<td>
+ <p>
+ Method to get the third (usually z) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Set0
+ </p>
+ </td>
+<td>
+ <p>
+ Method to set the first (usually x) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Set1
+ </p>
+ </td>
+<td>
+ <p>
+ Method to set the second (usually y) coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Set2
+ </p>
+ </td>
+<td>
+ <p>
+ Method to set the third (usually z) coordinate
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.header"></a></span><a class="link" href="boost_geometry_register_point_3d_get_set.html#geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_3d_const.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_ring.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring.html
new file mode 100644
index 000000000..b78b485d2
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring.html
@@ -0,0 +1,157 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_RING</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_point_3d_get_set.html" title="BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET">
+<link rel="next" href="boost_geometry_register_ring_templated.html" title="BOOST_GEOMETRY_REGISTER_RING_TEMPLATED">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_3d_get_set.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_ring_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring"></a><a class="link" href="boost_geometry_register_ring.html" title="BOOST_GEOMETRY_REGISTER_RING">BOOST_GEOMETRY_REGISTER_RING</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7391328"></a>
+Macro to register a ring.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring.description"></a></span><a class="link" href="boost_geometry_register_ring.html#geometry.reference.adapted.register.boost_geometry_register_ring.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_RING registers a ring such that it
+ is recognized by Boost.Geometry and that Boost.Geometry functionality
+ can used with the specified type. The ring may contain template parameters,
+ which must be specified then.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring.synopsis"></a></span><a class="link" href="boost_geometry_register_ring.html#geometry.reference.adapted.register.boost_geometry_register_ring.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_RING</span><span class="special">(</span><span class="identifier">Ring</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring.parameters"></a></span><a class="link" href="boost_geometry_register_ring.html#geometry.reference.adapted.register.boost_geometry_register_ring.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ ring type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring.header"></a></span><a class="link" href="boost_geometry_register_ring.html#geometry.reference.adapted.register.boost_geometry_register_ring.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring.example"></a></span><a class="link" href="boost_geometry_register_ring.html#geometry.reference.adapted.register.boost_geometry_register_ring.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_RING
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_2d</span><span class="special">;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_RING</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">point_2d</span><span class="special">&gt;)</span> <a class="co" name="geometry.reference.adapted.register.boost_geometry_register_ring.c0" href="boost_geometry_register_ring.html#geometry.reference.adapted.register.boost_geometry_register_ring.c1"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Normal usage of std::</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">point_2d</span><span class="special">&gt;</span> <span class="identifier">ring</span><span class="special">;</span>
+ <span class="identifier">ring</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_2d</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+ <span class="identifier">ring</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_2d</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+ <span class="identifier">ring</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_2d</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">1</span><span class="special">));</span>
+
+
+ <span class="comment">// Usage of Boost.Geometry</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">correct</span><span class="special">(</span><span class="identifier">ring</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">ring</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"WKT: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">(</span><span class="identifier">ring</span><span class="special">)</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list"><tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.adapted.register.boost_geometry_register_ring.c1"></a><a href="#geometry.reference.adapted.register.boost_geometry_register_ring.c0"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ The magic: adapt vector to Boost.Geometry Ring Concept
+ </p></td>
+</tr></table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Area: 0.5
+WKT: POLYGON((1 1,2 2,2 1,1 1))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_point_3d_get_set.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="boost_geometry_register_ring_templated.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring_templated.html b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring_templated.html
new file mode 100644
index 000000000..5f85ecedf
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/adapted/register/boost_geometry_register_ring_templated.html
@@ -0,0 +1,152 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>BOOST_GEOMETRY_REGISTER_RING_TEMPLATED</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../register.html" title="Macro's for adaption">
+<link rel="prev" href="boost_geometry_register_ring.html" title="BOOST_GEOMETRY_REGISTER_RING">
+<link rel="next" href="../../algorithms.html" title="Algorithms">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_ring.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="../../algorithms.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated"></a><a class="link" href="boost_geometry_register_ring_templated.html" title="BOOST_GEOMETRY_REGISTER_RING_TEMPLATED">BOOST_GEOMETRY_REGISTER_RING_TEMPLATED</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7458960"></a>
+Macro to register a templated ring.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.h0"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.description"></a></span><a class="link" href="boost_geometry_register_ring_templated.html#geometry.reference.adapted.register.boost_geometry_register_ring_templated.description">Description</a>
+ </h6>
+<p>
+ The macro BOOST_GEOMETRY_REGISTER_RING_TEMPLATED registers a templated
+ ring such that it is recognized by Boost.Geometry and that Boost.Geometry
+ functionality can used with the specified type. The type must have one
+ template parameter, which should be a point type, and should not be specified.
+ Boost.Geometry takes care of inserting the template parameter. Hence
+ all types of this templated ring are registered, regardless of their
+ point type.
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.h1"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.synopsis"></a></span><a class="link" href="boost_geometry_register_ring_templated.html#geometry.reference.adapted.register.boost_geometry_register_ring_templated.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_GEOMETRY_REGISTER_RING_TEMPLATED</span><span class="special">(</span><span class="identifier">Ring</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.h2"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.parameters"></a></span><a class="link" href="boost_geometry_register_ring_templated.html#geometry.reference.adapted.register.boost_geometry_register_ring_templated.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ ring (without template parameters) type to be registered
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.h3"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.header"></a></span><a class="link" href="boost_geometry_register_ring_templated.html#geometry.reference.adapted.register.boost_geometry_register_ring_templated.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.h4"></a>
+ <span class="phrase"><a name="geometry.reference.adapted.register.boost_geometry_register_ring_templated.example"></a></span><a class="link" href="boost_geometry_register_ring_templated.html#geometry.reference.adapted.register.boost_geometry_register_ring_templated.example">Example</a>
+ </h6>
+<p>
+ Show the use of the macro BOOST_GEOMETRY_REGISTER_RING_TEMPLATED
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">deque</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="comment">// Adapt any deque to Boost.Geometry Ring Concept</span>
+<span class="identifier">BOOST_GEOMETRY_REGISTER_RING_TEMPLATED</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">)</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">ring</span><span class="special">(</span><span class="number">3</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">assign_values</span><span class="special">(</span><span class="identifier">ring</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">0</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">assign_values</span><span class="special">(</span><span class="identifier">ring</span><span class="special">[</span><span class="number">2</span><span class="special">],</span> <span class="number">4</span><span class="special">,</span> <span class="number">1</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">assign_values</span><span class="special">(</span><span class="identifier">ring</span><span class="special">[</span><span class="number">1</span><span class="special">],</span> <span class="number">1</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span>
+
+ <span class="comment">// Boost.Geometry algorithms work on any deque now</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">correct</span><span class="special">(</span><span class="identifier">ring</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">ring</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Contents: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">(</span><span class="identifier">ring</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Area: 7.5
+Line: ((0, 0), (1, 4), (4, 1), (0, 0))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="boost_geometry_register_ring.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../register.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="../../algorithms.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms.html b/libs/geometry/doc/html/geometry/reference/algorithms.html
new file mode 100644
index 000000000..95cc8d391
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms.html
@@ -0,0 +1,79 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Algorithms</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="adapted/register/boost_geometry_register_ring_templated.html" title="BOOST_GEOMETRY_REGISTER_RING_TEMPLATED">
+<link rel="next" href="algorithms/area.html" title="area">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="adapted/register/boost_geometry_register_ring_templated.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="algorithms/area.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.algorithms"></a><a class="link" href="algorithms.html" title="Algorithms">Algorithms</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="algorithms/area.html">area</a></span></dt>
+<dt><span class="section"><a href="algorithms/assign.html">assign</a></span></dt>
+<dt><span class="section"><a href="algorithms/append.html">append</a></span></dt>
+<dt><span class="section"><a href="algorithms/buffer.html">buffer</a></span></dt>
+<dt><span class="section"><a href="algorithms/centroid.html">centroid</a></span></dt>
+<dt><span class="section"><a href="algorithms/clear.html">clear</a></span></dt>
+<dt><span class="section"><a href="algorithms/convert.html">convert</a></span></dt>
+<dt><span class="section"><a href="algorithms/convex_hull.html">convex_hull</a></span></dt>
+<dt><span class="section"><a href="algorithms/correct.html">correct</a></span></dt>
+<dt><span class="section"><a href="algorithms/covered_by.html">covered_by</a></span></dt>
+<dt><span class="section"><a href="algorithms/difference.html">difference</a></span></dt>
+<dt><span class="section"><a href="algorithms/disjoint.html">disjoint</a></span></dt>
+<dt><span class="section"><a href="algorithms/distance.html">distance</a></span></dt>
+<dt><span class="section"><a href="algorithms/envelope.html">envelope</a></span></dt>
+<dt><span class="section"><a href="algorithms/equals.html">equals</a></span></dt>
+<dt><span class="section"><a href="algorithms/expand.html">expand</a></span></dt>
+<dt><span class="section"><a href="algorithms/for_each.html">for_each</a></span></dt>
+<dt><span class="section"><a href="algorithms/intersection.html">intersection</a></span></dt>
+<dt><span class="section"><a href="algorithms/intersects.html">intersects</a></span></dt>
+<dt><span class="section"><a href="algorithms/length.html">length</a></span></dt>
+<dt><span class="section"><a href="algorithms/make.html">make</a></span></dt>
+<dt><span class="section"><a href="algorithms/num_geometries.html">num_geometries</a></span></dt>
+<dt><span class="section"><a href="algorithms/num_interior_rings.html">num_interior_rings</a></span></dt>
+<dt><span class="section"><a href="algorithms/num_points.html">num_points</a></span></dt>
+<dt><span class="section"><a href="algorithms/overlaps.html">overlaps</a></span></dt>
+<dt><span class="section"><a href="algorithms/perimeter.html">perimeter</a></span></dt>
+<dt><span class="section"><a href="algorithms/reverse.html">reverse</a></span></dt>
+<dt><span class="section"><a href="algorithms/simplify.html">simplify</a></span></dt>
+<dt><span class="section"><a href="algorithms/sym_difference.html">sym_difference</a></span></dt>
+<dt><span class="section"><a href="algorithms/touches.html">touches</a></span></dt>
+<dt><span class="section"><a href="algorithms/transform.html">transform</a></span></dt>
+<dt><span class="section"><a href="algorithms/union_.html">union_</a></span></dt>
+<dt><span class="section"><a href="algorithms/unique.html">unique</a></span></dt>
+<dt><span class="section"><a href="algorithms/within.html">within</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="adapted/register/boost_geometry_register_ring_templated.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="algorithms/area.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/append.html b/libs/geometry/doc/html/geometry/reference/algorithms/append.html
new file mode 100644
index 000000000..6361c59dc
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/append.html
@@ -0,0 +1,543 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>append</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="assign/assign_zero.html" title="assign_zero">
+<link rel="next" href="buffer.html" title="buffer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign/assign_zero.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="buffer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.append"></a><a class="link" href="append.html" title="append">append</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp8308400"></a>
+Appends one or more points to a linestring, ring, polygon, multi-geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.append.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.append.synopsis"></a></span><a class="link" href="append.html#geometry.reference.algorithms.append.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RangeOrPoint</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">append</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">RangeOrPoint</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">range_or_point</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">ring_index</span> <span class="special">=</span> <span class="special">-</span><span class="number">1</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">multi_index</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.append.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.append.parameters"></a></span><a class="link" href="append.html#geometry.reference.algorithms.append.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ RangeOrPoint const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Either a range or a point, fullfilling Boost.Range concept or
+ Boost.Geometry Point Concept
+ </p>
+ </td>
+<td>
+ <p>
+ range_or_point
+ </p>
+ </td>
+<td>
+ <p>
+ The point or range to add
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ ring_index
+ </p>
+ </td>
+<td>
+ <p>
+ The index of the ring in case of a polygon: exterior ring (-1,
+ the default) or interior ring index
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ multi_index
+ </p>
+ </td>
+<td>
+ <p>
+ Reserved for multi polygons or multi linestrings
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.append.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.append.header"></a></span><a class="link" href="append.html#geometry.reference.algorithms.append.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">append</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.append.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.append.conformance"></a></span><a class="link" href="append.html#geometry.reference.algorithms.append.conformance">Conformance</a>
+ </h6>
+<p>
+ The function append is not defined by OGC.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.append.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.append.supported_geometries"></a></span><a class="link" href="append.html#geometry.reference.algorithms.append.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ Point
+ </p>
+ </th>
+<th>
+ <p>
+ Range
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.append.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.append.behavior"></a></span><a class="link" href="append.html#geometry.reference.algorithms.append.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point, Box, Segment
+ </p>
+ </td>
+<td>
+ <p>
+ Compiles, but no action
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ Appends point or range to the end of the linestring
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ Appends point or range to the end of the ring (without explicitly
+ closing it)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Appends point or range to the end of the polygon (without explicitly
+ closing it), either the exterior ring (the default) or specify
+ a zero-based index for one of the interior rings. In the last
+ case, the interior rings are not resized automatically, so ensure
+ that the zero-based index is smaller than the number of interior
+ rings
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.append.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.append.complexity"></a></span><a class="link" href="append.html#geometry.reference.algorithms.append.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.append.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.append.example"></a></span><a class="link" href="append.html#geometry.reference.algorithms.append.example">Example</a>
+ </h6>
+<p>
+ Shows usage of Boost.Geometry's append to append a point or a range to
+ a polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">::</span><span class="identifier">tuple_list_of</span><span class="special">;</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_tuple</span><span class="special">;</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">append</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="identifier">polygon</span> <span class="identifier">poly</span><span class="special">;</span>
+
+ <span class="comment">// Append a range</span>
+ <span class="identifier">append</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">tuple_list_of</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">0</span><span class="special">,</span> <span class="number">10</span><span class="special">)(</span><span class="number">11</span><span class="special">,</span> <span class="number">11</span><span class="special">)(</span><span class="number">10</span><span class="special">,</span> <span class="number">0</span><span class="special">));</span> <a class="co" name="geometry.reference.algorithms.append.c0" href="append.html#geometry.reference.algorithms.append.c1"><img src="../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+ <span class="comment">// Append a point (in this case the closing point)</span>
+ <span class="identifier">append</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">make_tuple</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="comment">// Create an interior ring (append does not do this automatically)</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">interior_rings</span><span class="special">(</span><span class="identifier">poly</span><span class="special">).</span><span class="identifier">resize</span><span class="special">(</span><span class="number">1</span><span class="special">);</span>
+
+ <span class="comment">// Append a range to the interior ring</span>
+ <span class="identifier">append</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">tuple_list_of</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">)(</span><span class="number">2</span><span class="special">,</span> <span class="number">5</span><span class="special">)(</span><span class="number">6</span><span class="special">,</span> <span class="number">6</span><span class="special">)(</span><span class="number">5</span><span class="special">,</span> <span class="number">2</span><span class="special">),</span> <span class="number">0</span><span class="special">);</span> <a class="co" name="geometry.reference.algorithms.append.c2" href="append.html#geometry.reference.algorithms.append.c3"><img src="../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a>
+ <span class="comment">// Append a point to the first interior ring</span>
+ <span class="identifier">append</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">make_tuple</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">),</span> <span class="number">0</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list">
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.append.c1"></a><a href="#geometry.reference.algorithms.append.c0"><img src="../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ tuple_list_of delivers a range and can therefore be used in boost::geometry::append
+ </p></td>
+</tr>
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.append.c3"></a><a href="#geometry.reference.algorithms.append.c2"><img src="../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ The last parameter ring_index 0 denotes the first interior ring
+ </p></td>
+</tr>
+</table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">(((0, 0), (0, 10), (11, 11), (10, 0), (0, 0)), ((2, 2), (2, 5), (6, 6), (5, 2), (2, 2)))
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.append.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.append.see_also"></a></span><a class="link" href="append.html#geometry.reference.algorithms.append.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="assign/assign_points.html" title="assign_points">assign</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign/assign_zero.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="buffer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/area.html b/libs/geometry/doc/html/geometry/reference/algorithms/area.html
new file mode 100644
index 000000000..8d716f8d5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/area.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>area</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="../algorithms.html" title="Algorithms">
+<link rel="next" href="area/area_1.html" title="area">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../algorithms.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="area/area_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.area"></a><a class="link" href="area.html" title="area">area</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="area/area_1.html">area</a></span></dt>
+<dt><span class="section"><a href="area/area_2_with_strategy.html">area
+ (with strategy)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../algorithms.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="area/area_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/area/area_1.html b/libs/geometry/doc/html/geometry/reference/algorithms/area/area_1.html
new file mode 100644
index 000000000..ca45f020a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/area/area_1.html
@@ -0,0 +1,448 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>area</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../area.html" title="area">
+<link rel="prev" href="../area.html" title="area">
+<link rel="next" href="area_2_with_strategy.html" title="area (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../area.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../area.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="area_2_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.area.area_1"></a><a class="link" href="area_1.html" title="area">area</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7529760"></a>
+Calculates the area of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.description"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.description">Description</a>
+ </h6>
+<p>
+ The free function area calculates the area of a geometry. It uses the
+ default strategy, based on the coordinate system of the geometry.
+ </p>
+<p>
+ The area algorithm calculates the surface area of all geometries having
+ a surface, namely box, polygon, ring, multipolygon. The units are the
+ square of the units used for the points defining the surface. If subject
+ geometry is defined in meters, then area is calculated in square meters.
+ </p>
+<p>
+ The area calculation can be done in all three common coordinate systems,
+ Cartesian, Spherical and Geographic as well.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.synopsis"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">default_area_result</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">area</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.parameters"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.returns"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.returns">Returns</a>
+ </h6>
+<p>
+ The calculated area
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.header"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">area</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.conformance"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.conformance">Conformance</a>
+ </h6>
+<p>
+ The function area implements function Area from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.behavior"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ pointlike (e.g. point)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the area
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Cartesian
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the area in the same units as the input coordinates
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the area on a unit sphere (or another sphere, if specified
+ as such in the constructor of the strategy)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Reversed polygon (coordinates not according their orientiation)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the negative area
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.supported_geometries"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Geometry
+ </p>
+ </th>
+<th>
+ <p>
+ Status
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.complexity"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_1.h9"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_1.examples"></a></span><a class="link" href="area_1.html#geometry.reference.algorithms.area.area_1.examples">Examples</a>
+ </h6>
+<p>
+ Calculate the area of a polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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> <a class="co" name="geometry.reference.algorithms.area.area_1.c0" href="area_1.html#geometry.reference.algorithms.area.area_1.c1"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Calculate the area of a cartesian polygon</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">poly</span><span class="special">;</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 7,4 2,2 0,0 0))"</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
+ <span class="keyword">double</span> <span class="identifier">area</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">poly</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="comment">// Calculate the area of a spherical equatorial polygon</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</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">&lt;</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">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">degree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">sph_poly</span><span class="special">;</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 45,45 0,0 0))"</span><span class="special">,</span> <span class="identifier">sph_poly</span><span class="special">);</span>
+ <span class="identifier">area</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">sph_poly</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list"><tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.area.area_1.c1"></a><a href="#geometry.reference.algorithms.area.area_1.c0"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ Convenient namespace alias
+ </p></td>
+</tr></table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Area: 16
+Area: 0.339837
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../area.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../area.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="area_2_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/area/area_2_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/area/area_2_with_strategy.html
new file mode 100644
index 000000000..7a97c366f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/area/area_2_with_strategy.html
@@ -0,0 +1,481 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>area (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../area.html" title="area">
+<link rel="prev" href="area_1.html" title="area">
+<link rel="next" href="../assign.html" title="assign">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="area_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../area.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="../assign.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.area.area_2_with_strategy"></a><a class="link" href="area_2_with_strategy.html" title="area (with strategy)">area
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7648048"></a>
+Calculates the area of a geometry using the specified strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.description"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.description">Description</a>
+ </h6>
+<p>
+ The free function area calculates the area of a geometry using the specified
+ strategy. Reasons to specify a strategy include: use another coordinate
+ system for calculations; construct the strategy beforehand (e.g. with
+ the radius of the Earth); select a strategy when there are more than
+ one available for a calculation.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.synopsis"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="identifier">Strategy</span><span class="special">::</span><span class="identifier">return_type</span> <span class="identifier">area</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.parameters"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Area Strategy Concept
+ </p>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ The strategy which will be used for area calculations
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.returns"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.returns">Returns</a>
+ </h6>
+<p>
+ The calculated area
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.header"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">area</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.conformance"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.conformance">Conformance</a>
+ </h6>
+<p>
+ The function area implements function Area from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.behavior"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ pointlike (e.g. point)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the area
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Cartesian
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the area in the same units as the input coordinates
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the area on a unit sphere (or another sphere, if specified
+ as such in the constructor of the strategy)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Reversed polygon (coordinates not according their orientiation)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the negative area
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.supported_geometries"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Geometry
+ </p>
+ </th>
+<th>
+ <p>
+ Status
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.complexity"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h9"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.example"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.example">Example</a>
+ </h6>
+<p>
+ Calculate the area of a polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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> <a class="co" name="geometry.reference.algorithms.area.area_2_with_strategy.c0" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.c1"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Calculate the area of a cartesian polygon</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">poly</span><span class="special">;</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 7,4 2,2 0,0 0))"</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
+ <span class="keyword">double</span> <span class="identifier">area</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">poly</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="comment">// Calculate the area of a spherical polygon (for latitude: 0 at equator)</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</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">&lt;</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">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">degree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">sph_poly</span><span class="special">;</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 45,45 0,0 0))"</span><span class="special">,</span> <span class="identifier">sph_poly</span><span class="special">);</span>
+ <span class="identifier">area</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">sph_poly</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list"><tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.area.area_2_with_strategy.c1"></a><a href="#geometry.reference.algorithms.area.area_2_with_strategy.c0"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ Convenient namespace alias
+ </p></td>
+</tr></table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Area: 16
+Area: 0.339837
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.area.area_2_with_strategy.h10"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.available_strategies"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.available_strategies">Available
+ Strategies</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="../../strategies/strategy_area_surveyor.html" title="strategy::area::surveyor">Surveyor
+ (cartesian)</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../../strategies/strategy_area_huiller.html" title="strategy::area::huiller">Huiller
+ (spherical)</a>
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="area_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../area.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="../assign.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/assign.html b/libs/geometry/doc/html/geometry/reference/algorithms/assign.html
new file mode 100644
index 000000000..20d2d3feb
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/assign.html
@@ -0,0 +1,55 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="area/area_2_with_strategy.html" title="area (with strategy)">
+<link rel="next" href="assign/assign.html" title="assign">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="area/area_2_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="assign/assign.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.assign"></a><a class="link" href="assign.html" title="assign">assign</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="assign/assign.html">assign</a></span></dt>
+<dt><span class="section"><a href="assign/assign_inverse.html">assign_inverse</a></span></dt>
+<dt><span class="section"><a href="assign/assign_points.html">assign_points</a></span></dt>
+<dt><span class="section"><a href="assign/assign_values_3_2_coordinate_values.html">assign_values
+ (2 coordinate values)</a></span></dt>
+<dt><span class="section"><a href="assign/assign_values_4_3_coordinate_values.html">assign_values
+ (3 coordinate values)</a></span></dt>
+<dt><span class="section"><a href="assign/assign_values_5_4_coordinate_values.html">assign_values
+ (4 coordinate values)</a></span></dt>
+<dt><span class="section"><a href="assign/assign_zero.html">assign_zero</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="area/area_2_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="assign/assign.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign.html b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign.html
new file mode 100644
index 000000000..c151f1ada
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign.html
@@ -0,0 +1,227 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../assign.html" title="assign">
+<link rel="prev" href="../assign.html" title="assign">
+<link rel="next" href="assign_inverse.html" title="assign_inverse">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../assign.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_inverse.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.assign.assign"></a><a class="link" href="assign.html" title="assign">assign</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7791728"></a>
+Assigns one geometry to another geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign.description"></a></span><a class="link" href="assign.html#geometry.reference.algorithms.assign.assign.description">Description</a>
+ </h6>
+<p>
+ The assign algorithm assigns one geometry, e.g. a BOX, to another geometry,
+ e.g. a RING. This only works if it is possible and applicable.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign.synopsis"></a></span><a class="link" href="assign.html#geometry.reference.algorithms.assign.assign.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">assign</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign.parameters"></a></span><a class="link" href="assign.html#geometry.reference.algorithms.assign.assign.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept (target)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept (source)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign.header"></a></span><a class="link" href="assign.html#geometry.reference.algorithms.assign.assign.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign.example"></a></span><a class="link" href="assign.html#geometry.reference.algorithms.assign.assign.example">Example</a>
+ </h6>
+<p>
+ Shows how to assign a geometry from another geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="identifier">point</span> <span class="identifier">p1</span><span class="special">;</span>
+ <span class="identifier">box</span> <span class="identifier">b</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">assign_values</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">1</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">assign_values</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+
+ <span class="comment">// Assign a box to a polygon (target = source)</span>
+ <span class="identifier">polygon</span> <span class="identifier">p</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">assign</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">b</span><span class="special">);</span>
+
+ <span class="comment">// Assign a point to another point type (conversion of point-type)</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">p2</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">assign</span><span class="special">(</span><span class="identifier">p2</span><span class="special">,</span> <span class="identifier">p1</span><span class="special">);</span>
+
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"box: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"polygon: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"point: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"point tuples: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p2</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">box: ((1, 1), (2, 2))
+polygon: (((1, 1), (1, 2), (2, 2), (2, 1), (1, 1)))
+point: (1, 1)
+point tuples: (1, 1)
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign.see_also"></a></span><a class="link" href="assign.html#geometry.reference.algorithms.assign.assign.see_also">See also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../convert.html" title="convert">convert</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../assign.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_inverse.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_inverse.html b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_inverse.html
new file mode 100644
index 000000000..af6fb78e9
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_inverse.html
@@ -0,0 +1,186 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign_inverse</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../assign.html" title="assign">
+<link rel="prev" href="assign.html" title="assign">
+<link rel="next" href="assign_points.html" title="assign_points">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_points.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.assign.assign_inverse"></a><a class="link" href="assign_inverse.html" title="assign_inverse">assign_inverse</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7895664"></a>
+assign to a box inverse infinite
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_inverse.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_inverse.description"></a></span><a class="link" href="assign_inverse.html#geometry.reference.algorithms.assign.assign_inverse.description">Description</a>
+ </h6>
+<p>
+ The assign_inverse function initialize a 2D or 3D box with large coordinates,
+ the min corner is very large, the max corner is very small. This is a
+ convenient starting point to collect the minimum bounding box of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_inverse.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_inverse.synopsis"></a></span><a class="link" href="assign_inverse.html#geometry.reference.algorithms.assign.assign_inverse.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">assign_inverse</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_inverse.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_inverse.parameters"></a></span><a class="link" href="assign_inverse.html#geometry.reference.algorithms.assign.assign_inverse.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_inverse.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_inverse.header"></a></span><a class="link" href="assign_inverse.html#geometry.reference.algorithms.assign.assign_inverse.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_inverse.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_inverse.example"></a></span><a class="link" href="assign_inverse.html#geometry.reference.algorithms.assign.assign_inverse.example">Example</a>
+ </h6>
+<p>
+ Usage of assign_inverse and expand to conveniently determine bounding
+ 3D box of two points
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">box</span><span class="special">;</span>
+
+ <span class="identifier">box</span> <span class="identifier">all</span><span class="special">;</span>
+ <span class="identifier">assign_inverse</span><span class="special">(</span><span class="identifier">all</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">all</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="identifier">expand</span><span class="special">(</span><span class="identifier">all</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">0</span><span class="special">));</span>
+ <span class="identifier">expand</span><span class="special">(</span><span class="identifier">all</span><span class="special">,</span> <span class="identifier">point</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">));</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">all</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">((3.40282e+038, 3.40282e+038, 3.40282e+038), (-3.40282e+038, -3.40282e+038, -3.40282e+038))
+((0, 0, 0), (1, 2, 3))</pre>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_inverse.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_inverse.see_also"></a></span><a class="link" href="assign_inverse.html#geometry.reference.algorithms.assign.assign_inverse.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../make/make_inverse.html" title="make_inverse">make_inverse</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_points.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_points.html b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_points.html
new file mode 100644
index 000000000..b74507de5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_points.html
@@ -0,0 +1,264 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign_points</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../assign.html" title="assign">
+<link rel="prev" href="assign_inverse.html" title="assign_inverse">
+<link rel="next" href="assign_values_3_2_coordinate_values.html" title="assign_values (2 coordinate values)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_inverse.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_values_3_2_coordinate_values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.assign.assign_points"></a><a class="link" href="assign_points.html" title="assign_points">assign_points</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp7964112"></a>
+Assign a range of points to a linestring, ring or polygon.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_points.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_points.synopsis"></a></span><a class="link" href="assign_points.html#geometry.reference.algorithms.assign.assign_points.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">assign_points</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Range</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">range</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_points.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_points.parameters"></a></span><a class="link" href="assign_points.html#geometry.reference.algorithms.assign.assign_points.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Range const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Range Concept where it range_value type
+ fulfills the Point Concept
+ </p>
+ </td>
+<td>
+ <p>
+ range
+ </p>
+ </td>
+<td>
+ <p>
+ A range containg points fulfilling range and point concepts
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_points.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_points.header"></a></span><a class="link" href="assign_points.html#geometry.reference.algorithms.assign.assign_points.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_points.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_points.notes"></a></span><a class="link" href="assign_points.html#geometry.reference.algorithms.assign.assign_points.notes">Notes</a>
+ </h6>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Assign automatically clears the geometry before assigning (use append
+ if you don't want that)
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_points.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_points.example"></a></span><a class="link" href="assign_points.html#geometry.reference.algorithms.assign.assign_points.example">Example</a>
+ </h6>
+<p>
+ Shows usage of Boost.Geometry's assign, Boost.Assign, and Boost.Range
+ to assign ranges of a linestring
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_range</span><span class="special">/</span><span class="identifier">filtered</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">x_between</span>
+<span class="special">{</span>
+ <span class="identifier">x_between</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">b</span><span class="special">)</span>
+ <span class="special">:</span> <span class="identifier">fa</span><span class="special">(</span><span class="identifier">a</span><span class="special">),</span> <span class="identifier">fb</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span>
+ <span class="special">{}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">P</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&gt;=</span> <span class="identifier">fa</span>
+ <span class="special">&amp;&amp;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;=</span> <span class="identifier">fb</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="keyword">private</span> <span class="special">:</span>
+ <span class="identifier">T</span> <span class="identifier">fa</span><span class="special">,</span> <span class="identifier">fb</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="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">ls</span><span class="special">;</span>
+
+ <span class="identifier">ls</span> <span class="identifier">line1</span><span class="special">,</span> <span class="identifier">line2</span><span class="special">,</span> <span class="identifier">line3</span><span class="special">;</span>
+
+ <span class="identifier">line1</span> <span class="special">=</span> <span class="identifier">tuple_list_of</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">2</span><span class="special">,</span> <span class="number">3</span><span class="special">)(</span><span class="number">4</span><span class="special">,</span> <span class="number">0</span><span class="special">)(</span><span class="number">6</span><span class="special">,</span> <span class="number">3</span><span class="special">)(</span><span class="number">8</span><span class="special">,</span> <span class="number">0</span><span class="special">)(</span><span class="number">10</span><span class="special">,</span> <span class="number">3</span><span class="special">)(</span><span class="number">12</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span> <a class="co" name="geometry.reference.algorithms.assign.assign_points.c0" href="assign_points.html#geometry.reference.algorithms.assign.assign_points.c1"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">assign_points</span><span class="special">(</span><span class="identifier">line2</span><span class="special">,</span> <span class="identifier">tuple_list_of</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">2</span><span class="special">,</span> <span class="number">2</span><span class="special">)(</span><span class="number">4</span><span class="special">,</span> <span class="number">0</span><span class="special">)(</span><span class="number">6</span><span class="special">,</span> <span class="number">2</span><span class="special">)(</span><span class="number">8</span><span class="special">,</span> <span class="number">0</span><span class="special">));</span> <a class="co" name="geometry.reference.algorithms.assign.assign_points.c2" href="assign_points.html#geometry.reference.algorithms.assign.assign_points.c3"><img src="../../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">assign_points</span><span class="special">(</span><span class="identifier">line3</span><span class="special">,</span> <span class="identifier">line1</span> <span class="special">|</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">filtered</span><span class="special">(</span><span class="identifier">x_between</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;(</span><span class="number">4</span><span class="special">,</span> <span class="number">8</span><span class="special">)));</span> <a class="co" name="geometry.reference.algorithms.assign.assign_points.c4" href="assign_points.html#geometry.reference.algorithms.assign.assign_points.c5"><img src="../../../../../../../../doc/src/images/callouts/3.png" alt="3" border="0"></a>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"line 1: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">line1</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"line 2: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">line2</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"line 3: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">line3</span><span class="special">)</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list">
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.assign.assign_points.c1"></a><a href="#geometry.reference.algorithms.assign.assign_points.c0"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ tuple_list_of is part of Boost.Assign and can be used for Boost.Geometry
+ if points are tuples
+ </p></td>
+</tr>
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.assign.assign_points.c3"></a><a href="#geometry.reference.algorithms.assign.assign_points.c2"><img src="../../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ tuple_list_of delivers a range and can therefore be used in boost::geometry::assign
+ </p></td>
+</tr>
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.assign.assign_points.c5"></a><a href="#geometry.reference.algorithms.assign.assign_points.c4"><img src="../../../../../../../../doc/src/images/callouts/3.png" alt="3" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ Boost.Range adaptors can also be used in boost::geometry::assign
+ </p></td>
+</tr>
+</table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">line 1: ((0, 0), (2, 3), (4, 0), (6, 3), (8, 0), (10, 3), (12, 0))
+line 2: ((0, 0), (2, 2), (4, 0), (6, 2), (8, 0))
+line 3: ((4, 0), (6, 3), (8, 0))
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_points.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_points.see_also"></a></span><a class="link" href="assign_points.html#geometry.reference.algorithms.assign.assign_points.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../append.html" title="append">append</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_inverse.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_values_3_2_coordinate_values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_3_2_coordinate_values.html b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_3_2_coordinate_values.html
new file mode 100644
index 000000000..066a9bda9
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_3_2_coordinate_values.html
@@ -0,0 +1,237 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign_values (2 coordinate values)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../assign.html" title="assign">
+<link rel="prev" href="assign_points.html" title="assign_points">
+<link rel="next" href="assign_values_4_3_coordinate_values.html" title="assign_values (3 coordinate values)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_points.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_values_4_3_coordinate_values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values"></a><a class="link" href="assign_values_3_2_coordinate_values.html" title="assign_values (2 coordinate values)">assign_values
+ (2 coordinate values)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8099920"></a>
+Assign two coordinates to a geometry (usually a 2D point)
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.synopsis"></a></span><a class="link" href="assign_values_3_2_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Type</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c1</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.parameters"></a></span><a class="link" href="assign_values_3_2_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c1
+ </p>
+ </td>
+<td>
+ <p>
+ First coordinate (usually x-coordinate)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c2
+ </p>
+ </td>
+<td>
+ <p>
+ Second coordinate (usually y-coordinate)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.header"></a></span><a class="link" href="assign_values_3_2_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">assign_values</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.example"></a></span><a class="link" href="assign_values_3_2_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.example">Example</a>
+ </h6>
+<p>
+ Shows the usage of assign to set point coordinates, and, besides that,
+ shows how you can initialize ttmath points with high precision
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iomanip</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">HAVE_TTMATH</span><span class="special">)</span>
+<span class="preprocessor"># include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">extensions</span><span class="special">/</span><span class="identifier">contrib</span><span class="special">/</span><span class="identifier">ttmath_stub</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#endif</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">assign_values</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">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">p1</span><span class="special">;</span>
+ <span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="number">1.2345</span><span class="special">,</span> <span class="number">2.3456</span><span class="special">);</span>
+
+<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">HAVE_TTMATH</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">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="identifier">ttmath</span><span class="special">::</span><span class="identifier">Big</span><span class="special">&lt;</span><span class="number">1</span><span class="special">,</span><span class="number">4</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">p2</span><span class="special">;</span>
+ <span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">p2</span><span class="special">,</span> <span class="string">"1.2345"</span><span class="special">,</span> <span class="string">"2.3456"</span><span class="special">);</span> <a class="co" name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.c0" href="assign_values_3_2_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.c1"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+<span class="preprocessor">#endif</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</span><span class="special">(</span><span class="number">20</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">HAVE_TTMATH</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p2</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+<span class="preprocessor">#endif</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 class="calloutlist"><table border="0" summary="Callout list"><tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.c1"></a><a href="#geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.c0"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ It is possible to assign coordinates with other types than the coordinate
+ type. For ttmath, you can e.g. conveniently use strings. The advantage
+ is that it then has higher precision, because if doubles are used
+ for assignments the double-precision is used.
+ </p></td>
+</tr></table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">(1.2344999999999999, 2.3456000000000001)
+(1.2345, 2.3456)
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.see_also"></a></span><a class="link" href="assign_values_3_2_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../make/make_2_2_coordinate_values.html" title="make (2 coordinate values)">make</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_points.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_values_4_3_coordinate_values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_4_3_coordinate_values.html b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_4_3_coordinate_values.html
new file mode 100644
index 000000000..a4be81cc5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_4_3_coordinate_values.html
@@ -0,0 +1,229 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign_values (3 coordinate values)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../assign.html" title="assign">
+<link rel="prev" href="assign_values_3_2_coordinate_values.html" title="assign_values (2 coordinate values)">
+<link rel="next" href="assign_values_5_4_coordinate_values.html" title="assign_values (4 coordinate values)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_values_3_2_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_values_5_4_coordinate_values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values"></a><a class="link" href="assign_values_4_3_coordinate_values.html" title="assign_values (3 coordinate values)">assign_values
+ (3 coordinate values)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8183792"></a>
+Assign three values to a geometry (usually a 3D point)
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.synopsis"></a></span><a class="link" href="assign_values_4_3_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Type</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c1</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c2</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c3</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.parameters"></a></span><a class="link" href="assign_values_4_3_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c1
+ </p>
+ </td>
+<td>
+ <p>
+ First coordinate (usually x-coordinate)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c2
+ </p>
+ </td>
+<td>
+ <p>
+ Second coordinate (usually y-coordinate)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c3
+ </p>
+ </td>
+<td>
+ <p>
+ Third coordinate (usually z-coordinate)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.header"></a></span><a class="link" href="assign_values_4_3_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">assign_values</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.example"></a></span><a class="link" href="assign_values_4_3_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.example">Example</a>
+ </h6>
+<p>
+ Use assign to set three coordinates of a 3D point
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iomanip</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</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">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">3</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">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">&gt;</span> <span class="identifier">p</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">assign_values</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="number">1.2345</span><span class="special">,</span> <span class="number">2.3456</span><span class="special">,</span> <span class="number">3.4567</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">(1.2345, 2.3456, 3.4567)
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.see_also"></a></span><a class="link" href="assign_values_4_3_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../make/make_3_3_coordinate_values.html" title="make (3 coordinate values)">make</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_values_3_2_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_values_5_4_coordinate_values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_5_4_coordinate_values.html b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_5_4_coordinate_values.html
new file mode 100644
index 000000000..dd9265116
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_values_5_4_coordinate_values.html
@@ -0,0 +1,211 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign_values (4 coordinate values)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../assign.html" title="assign">
+<link rel="prev" href="assign_values_4_3_coordinate_values.html" title="assign_values (3 coordinate values)">
+<link rel="next" href="assign_zero.html" title="assign_zero">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_values_4_3_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_zero.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values"></a><a class="link" href="assign_values_5_4_coordinate_values.html" title="assign_values (4 coordinate values)">assign_values
+ (4 coordinate values)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8247456"></a>
+Assign four values to a geometry (usually a box or segment)
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values.synopsis"></a></span><a class="link" href="assign_values_5_4_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Type</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c1</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c2</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c3</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c4</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values.parameters"></a></span><a class="link" href="assign_values_5_4_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c1
+ </p>
+ </td>
+<td>
+ <p>
+ First coordinate (usually x1)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c2
+ </p>
+ </td>
+<td>
+ <p>
+ Second coordinate (usually y1)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c3
+ </p>
+ </td>
+<td>
+ <p>
+ Third coordinate (usually x2)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c4
+ </p>
+ </td>
+<td>
+ <p>
+ Fourth coordinate (usually y2)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values.header"></a></span><a class="link" href="assign_values_5_4_coordinate_values.html#geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">assign_values</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_values_4_3_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="assign_zero.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_zero.html b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_zero.html
new file mode 100644
index 000000000..3bd09059a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/assign/assign_zero.html
@@ -0,0 +1,137 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign_zero</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../assign.html" title="assign">
+<link rel="prev" href="assign_values_5_4_coordinate_values.html" title="assign_values (4 coordinate values)">
+<link rel="next" href="../append.html" title="append">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_values_5_4_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="../append.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.assign.assign_zero"></a><a class="link" href="assign_zero.html" title="assign_zero">assign_zero</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8283392"></a>
+assign zero values to a box, point
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_zero.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_zero.description"></a></span><a class="link" href="assign_zero.html#geometry.reference.algorithms.assign.assign_zero.description">Description</a>
+ </h6>
+<p>
+ The assign_zero function initializes a 2D or 3D point or box with coordinates
+ of zero
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_zero.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_zero.synopsis"></a></span><a class="link" href="assign_zero.html#geometry.reference.algorithms.assign.assign_zero.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">assign_zero</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_zero.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_zero.parameters"></a></span><a class="link" href="assign_zero.html#geometry.reference.algorithms.assign.assign_zero.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.assign.assign_zero.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.assign.assign_zero.header"></a></span><a class="link" href="assign_zero.html#geometry.reference.algorithms.assign.assign_zero.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_values_5_4_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../assign.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="../append.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/buffer.html b/libs/geometry/doc/html/geometry/reference/algorithms/buffer.html
new file mode 100644
index 000000000..01dfd6d0d
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/buffer.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>buffer</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="append.html" title="append">
+<link rel="next" href="buffer/buffer.html" title="buffer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="append.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="buffer/buffer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.buffer"></a><a class="link" href="buffer.html" title="buffer">buffer</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="buffer/buffer.html">buffer</a></span></dt>
+<dt><span class="section"><a href="buffer/return_buffer.html">return_buffer</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="append.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="buffer/buffer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/buffer/buffer.html b/libs/geometry/doc/html/geometry/reference/algorithms/buffer/buffer.html
new file mode 100644
index 000000000..0451bec85
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/buffer/buffer.html
@@ -0,0 +1,262 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>buffer</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../buffer.html" title="buffer">
+<link rel="prev" href="../buffer.html" title="buffer">
+<link rel="next" href="return_buffer.html" title="return_buffer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../buffer.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../buffer.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="return_buffer.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.buffer.buffer"></a><a class="link" href="buffer.html" title="buffer">buffer</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8454144"></a>
+Calculates the buffer of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.buffer.buffer.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.buffer.description"></a></span><a class="link" href="buffer.html#geometry.reference.algorithms.buffer.buffer.description">Description</a>
+ </h6>
+<p>
+ The free function buffer calculates the buffer (a polygon being the spatial
+ point set collection within a specified maximum distance from a geometry)
+ of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.buffer.buffer.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.buffer.synopsis"></a></span><a class="link" href="buffer.html#geometry.reference.algorithms.buffer.buffer.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Input</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Output</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Distance</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">buffer</span><span class="special">(</span><span class="identifier">Input</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry_in</span><span class="special">,</span> <span class="identifier">Output</span> <span class="special">&amp;</span> <span class="identifier">geometry_out</span><span class="special">,</span> <span class="identifier">Distance</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">distance</span><span class="special">,</span> <span class="identifier">Distance</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">chord_length</span> <span class="special">=</span> <span class="special">-</span><span class="number">1</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.buffer.buffer.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.buffer.parameters"></a></span><a class="link" href="buffer.html#geometry.reference.algorithms.buffer.buffer.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Input const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry_in
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Output &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry_out
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Distance const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...)
+ </p>
+ </td>
+<td>
+ <p>
+ distance
+ </p>
+ </td>
+<td>
+ <p>
+ The distance to be used for the buffer
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Distance const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...)
+ </p>
+ </td>
+<td>
+ <p>
+ chord_length
+ </p>
+ </td>
+<td>
+ <p>
+ (optional) The length of the chord's in the generated arcs
+ around points or bends
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.buffer.buffer.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.buffer.header"></a></span><a class="link" href="buffer.html#geometry.reference.algorithms.buffer.buffer.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">buffer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.buffer.buffer.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.buffer.conformance"></a></span><a class="link" href="buffer.html#geometry.reference.algorithms.buffer.buffer.conformance">Conformance</a>
+ </h6>
+<p>
+ The function buffer implements function Buffer from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ The current implemetation only enlarges a box, which is not defined
+ by OGC. A next version of the library will contain a more complete
+ implementation
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.buffer.buffer.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.buffer.behavior"></a></span><a class="link" href="buffer.html#geometry.reference.algorithms.buffer.buffer.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Box/Box
+ </p>
+ </td>
+<td>
+ <p>
+ Returns a new rectangular box, enlarged with the specified
+ distance. It is allowed that "geometry_out" the same
+ object as "geometry_in"
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../buffer.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../buffer.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="return_buffer.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/buffer/return_buffer.html b/libs/geometry/doc/html/geometry/reference/algorithms/buffer/return_buffer.html
new file mode 100644
index 000000000..754e53f78
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/buffer/return_buffer.html
@@ -0,0 +1,216 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>return_buffer</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../buffer.html" title="buffer">
+<link rel="prev" href="buffer.html" title="buffer">
+<link rel="next" href="../centroid.html" title="centroid">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="buffer.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../buffer.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="../centroid.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.buffer.return_buffer"></a><a class="link" href="return_buffer.html" title="return_buffer">return_buffer</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8500656"></a>
+Calculates the buffer of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.buffer.return_buffer.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.return_buffer.description"></a></span><a class="link" href="return_buffer.html#geometry.reference.algorithms.buffer.return_buffer.description">Description</a>
+ </h6>
+<p>
+ The free function return_buffer calculates the buffer (a polygon being
+ the spatial point set collection within a specified maximum distance
+ from a geometry) of a geometry. This version with the return_ prefix
+ returns the buffer, and a template parameter must therefore be specified
+ in the call..
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.buffer.return_buffer.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.return_buffer.synopsis"></a></span><a class="link" href="return_buffer.html#geometry.reference.algorithms.buffer.return_buffer.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Output</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Input</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Distance</span><span class="special">&gt;</span>
+<span class="identifier">Output</span> <span class="identifier">return_buffer</span><span class="special">(</span><span class="identifier">Input</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Distance</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">distance</span><span class="special">,</span> <span class="identifier">Distance</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">chord_length</span> <span class="special">=</span> <span class="special">-</span><span class="number">1</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.buffer.return_buffer.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.return_buffer.parameters"></a></span><a class="link" href="return_buffer.html#geometry.reference.algorithms.buffer.return_buffer.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Output
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Input const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Distance const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...)
+ </p>
+ </td>
+<td>
+ <p>
+ distance
+ </p>
+ </td>
+<td>
+ <p>
+ The distance to be used for the buffer
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Distance const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...)
+ </p>
+ </td>
+<td>
+ <p>
+ chord_length
+ </p>
+ </td>
+<td>
+ <p>
+ (optional) The length of the chord's in the generated arcs
+ around points or bends
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.buffer.return_buffer.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.return_buffer.returns"></a></span><a class="link" href="return_buffer.html#geometry.reference.algorithms.buffer.return_buffer.returns">Returns</a>
+ </h6>
+<p>
+ The calculated buffer
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.buffer.return_buffer.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.buffer.return_buffer.header"></a></span><a class="link" href="return_buffer.html#geometry.reference.algorithms.buffer.return_buffer.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">buffer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="buffer.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../buffer.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="../centroid.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/centroid.html b/libs/geometry/doc/html/geometry/reference/algorithms/centroid.html
new file mode 100644
index 000000000..b77c50a6c
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/centroid.html
@@ -0,0 +1,51 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>centroid</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="buffer/return_buffer.html" title="return_buffer">
+<link rel="next" href="centroid/centroid_3_with_strategy.html" title="centroid (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="buffer/return_buffer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="centroid/centroid_3_with_strategy.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.centroid"></a><a class="link" href="centroid.html" title="centroid">centroid</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="centroid/centroid_3_with_strategy.html">centroid
+ (with strategy)</a></span></dt>
+<dt><span class="section"><a href="centroid/centroid_2.html">centroid</a></span></dt>
+<dt><span class="section"><a href="centroid/return_centroid_1.html">return_centroid</a></span></dt>
+<dt><span class="section"><a href="centroid/return_centroid_2_with_strategy.html">return_centroid
+ (with strategy)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="buffer/return_buffer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="centroid/centroid_3_with_strategy.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/centroid/centroid_2.html b/libs/geometry/doc/html/geometry/reference/algorithms/centroid/centroid_2.html
new file mode 100644
index 000000000..b35ee4cd7
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/centroid/centroid_2.html
@@ -0,0 +1,515 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>centroid</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../centroid.html" title="centroid">
+<link rel="prev" href="centroid_3_with_strategy.html" title="centroid (with strategy)">
+<link rel="next" href="return_centroid_1.html" title="return_centroid">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="centroid_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../centroid.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="return_centroid_1.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.centroid.centroid_2"></a><a class="link" href="centroid_2.html" title="centroid">centroid</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8627552"></a>
+Calculates the centroid of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_2.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_2.description"></a></span><a class="link" href="centroid_2.html#geometry.reference.algorithms.centroid.centroid_2.description">Description</a>
+ </h6>
+<p>
+ The free function centroid calculates the geometric center (or: center
+ of mass) of a geometry. It uses the default strategy, based on the coordinate
+ system of the geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_2.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_2.synopsis"></a></span><a class="link" href="centroid_2.html#geometry.reference.algorithms.centroid.centroid_2.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">centroid</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">c</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_2.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_2.parameters"></a></span><a class="link" href="centroid_2.html#geometry.reference.algorithms.centroid.centroid_2.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Point &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+<td>
+ <p>
+ c
+ </p>
+ </td>
+<td>
+ <p>
+ The calculated centroid will be assigned to this point reference
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_2.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_2.header"></a></span><a class="link" href="centroid_2.html#geometry.reference.algorithms.centroid.centroid_2.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">centroid</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_2.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_2.conformance"></a></span><a class="link" href="centroid_2.html#geometry.reference.algorithms.centroid.centroid_2.conformance">Conformance</a>
+ </h6>
+<p>
+ The function centroid implements function Centroid from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_2.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_2.behavior"></a></span><a class="link" href="centroid_2.html#geometry.reference.algorithms.centroid.centroid_2.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the point itself as the centroid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Point
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid (based on average)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid (based on weighted length)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Empty (e.g. polygon without points)
+ </p>
+ </td>
+<td>
+ <p>
+ Throws a <a class="link" href="../../exceptions/centroid_exception.html" title="centroid_exception">centroid_exception</a>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Cartesian
+ </p>
+ </td>
+<td>
+ <p>
+ Implemented
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates the centroid as if based on Cartesian coordinates
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_2.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_2.supported_geometries"></a></span><a class="link" href="centroid_2.html#geometry.reference.algorithms.centroid.centroid_2.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ 2D
+ </p>
+ </th>
+<th>
+ <p>
+ 3D
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_2.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_2.complexity"></a></span><a class="link" href="centroid_2.html#geometry.reference.algorithms.centroid.centroid_2.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_2.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_2.example"></a></span><a class="link" href="centroid_2.html#geometry.reference.algorithms.centroid.centroid_2.example">Example</a>
+ </h6>
+<p>
+ Shows calculation of a centroid of a polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">list</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
+
+ <span class="identifier">polygon_type</span> <span class="identifier">poly</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"</span>
+ <span class="string">"(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))"</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
+
+ <span class="identifier">point_type</span> <span class="identifier">p</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">centroid</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">p</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"centroid: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">centroid: (4.04663, 1.6349)
+<img src="../../../../img/algorithms/centroid.png" alt="centroid">
+</pre>
+<p>
+ Note that the centroid might be located in a hole or outside a polygon,
+ easily.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="centroid_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../centroid.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="return_centroid_1.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/centroid/centroid_3_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/centroid/centroid_3_with_strategy.html
new file mode 100644
index 000000000..700ef8957
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/centroid/centroid_3_with_strategy.html
@@ -0,0 +1,501 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>centroid (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../centroid.html" title="centroid">
+<link rel="prev" href="../centroid.html" title="centroid">
+<link rel="next" href="centroid_2.html" title="centroid">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../centroid.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../centroid.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="centroid_2.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy"></a><a class="link" href="centroid_3_with_strategy.html" title="centroid (with strategy)">centroid
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8541424"></a>
+Calculates the centroid of a geometry using the specified strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.description"></a></span><a class="link" href="centroid_3_with_strategy.html#geometry.reference.algorithms.centroid.centroid_3_with_strategy.description">Description</a>
+ </h6>
+<p>
+ The free function centroid calculates the geometric center (or: center
+ of mass) of a geometry. Reasons to specify a strategy include: use another
+ coordinate system for calculations; construct the strategy beforehand
+ (e.g. with the radius of the Earth); select a strategy when there are
+ more than one available for a calculation.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.synopsis"></a></span><a class="link" href="centroid_3_with_strategy.html#geometry.reference.algorithms.centroid.centroid_3_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">centroid</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.parameters"></a></span><a class="link" href="centroid_3_with_strategy.html#geometry.reference.algorithms.centroid.centroid_3_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Point &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+<td>
+ <p>
+ c
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified Point Concept which is set to the
+ centroid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Centroid Strategy Concept
+ </p>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ The strategy which will be used for centroid calculations
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.header"></a></span><a class="link" href="centroid_3_with_strategy.html#geometry.reference.algorithms.centroid.centroid_3_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">centroid</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.conformance"></a></span><a class="link" href="centroid_3_with_strategy.html#geometry.reference.algorithms.centroid.centroid_3_with_strategy.conformance">Conformance</a>
+ </h6>
+<p>
+ The function centroid implements function Centroid from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.behavior"></a></span><a class="link" href="centroid_3_with_strategy.html#geometry.reference.algorithms.centroid.centroid_3_with_strategy.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the point itself as the centroid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Point
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid (based on average)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid (based on weighted length)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Empty (e.g. polygon without points)
+ </p>
+ </td>
+<td>
+ <p>
+ Throws a <a class="link" href="../../exceptions/centroid_exception.html" title="centroid_exception">centroid_exception</a>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Cartesian
+ </p>
+ </td>
+<td>
+ <p>
+ Implemented
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates the centroid as if based on Cartesian coordinates
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.supported_geometries"></a></span><a class="link" href="centroid_3_with_strategy.html#geometry.reference.algorithms.centroid.centroid_3_with_strategy.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ 2D
+ </p>
+ </th>
+<th>
+ <p>
+ 3D
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.complexity"></a></span><a class="link" href="centroid_3_with_strategy.html#geometry.reference.algorithms.centroid.centroid_3_with_strategy.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.centroid_3_with_strategy.available_strategies"></a></span><a class="link" href="centroid_3_with_strategy.html#geometry.reference.algorithms.centroid.centroid_3_with_strategy.available_strategies">Available
+ Strategies</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../../strategies/strategy_centroid_bashein_detmer.html" title="strategy::centroid::bashein_detmer">Bashein
+ Detmer (cartesian)</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../centroid.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../centroid.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="centroid_2.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/centroid/return_centroid_1.html b/libs/geometry/doc/html/geometry/reference/algorithms/centroid/return_centroid_1.html
new file mode 100644
index 000000000..d32b2c4ce
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/centroid/return_centroid_1.html
@@ -0,0 +1,474 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>return_centroid</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../centroid.html" title="centroid">
+<link rel="prev" href="centroid_2.html" title="centroid">
+<link rel="next" href="return_centroid_2_with_strategy.html" title="return_centroid (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="centroid_2.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../centroid.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="return_centroid_2_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.centroid.return_centroid_1"></a><a class="link" href="return_centroid_1.html" title="return_centroid">return_centroid</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8747680"></a>
+Calculates the centroid of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_1.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_1.description"></a></span><a class="link" href="return_centroid_1.html#geometry.reference.algorithms.centroid.return_centroid_1.description">Description</a>
+ </h6>
+<p>
+ The free function centroid calculates the geometric center (or: center
+ of mass) of a geometry. This version with the return_ prefix returns
+ the centroid, and a template parameter must therefore be specified in
+ the call..
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_1.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_1.synopsis"></a></span><a class="link" href="return_centroid_1.html#geometry.reference.algorithms.centroid.return_centroid_1.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">Point</span> <span class="identifier">return_centroid</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_1.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_1.parameters"></a></span><a class="link" href="return_centroid_1.html#geometry.reference.algorithms.centroid.return_centroid_1.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_1.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_1.returns"></a></span><a class="link" href="return_centroid_1.html#geometry.reference.algorithms.centroid.return_centroid_1.returns">Returns</a>
+ </h6>
+<p>
+ The calculated centroid
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_1.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_1.header"></a></span><a class="link" href="return_centroid_1.html#geometry.reference.algorithms.centroid.return_centroid_1.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">centroid</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_1.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_1.conformance"></a></span><a class="link" href="return_centroid_1.html#geometry.reference.algorithms.centroid.return_centroid_1.conformance">Conformance</a>
+ </h6>
+<p>
+ The function centroid implements function Centroid from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_1.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_1.behavior"></a></span><a class="link" href="return_centroid_1.html#geometry.reference.algorithms.centroid.return_centroid_1.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the point itself as the centroid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Point
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid (based on average)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid (based on weighted length)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Empty (e.g. polygon without points)
+ </p>
+ </td>
+<td>
+ <p>
+ Throws a <a class="link" href="../../exceptions/centroid_exception.html" title="centroid_exception">centroid_exception</a>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Cartesian
+ </p>
+ </td>
+<td>
+ <p>
+ Implemented
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates the centroid as if based on Cartesian coordinates
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_1.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_1.supported_geometries"></a></span><a class="link" href="return_centroid_1.html#geometry.reference.algorithms.centroid.return_centroid_1.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ 2D
+ </p>
+ </th>
+<th>
+ <p>
+ 3D
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_1.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_1.complexity"></a></span><a class="link" href="return_centroid_1.html#geometry.reference.algorithms.centroid.return_centroid_1.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="centroid_2.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../centroid.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="return_centroid_2_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/centroid/return_centroid_2_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/centroid/return_centroid_2_with_strategy.html
new file mode 100644
index 000000000..f9f19230d
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/centroid/return_centroid_2_with_strategy.html
@@ -0,0 +1,509 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>return_centroid (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../centroid.html" title="centroid">
+<link rel="prev" href="return_centroid_1.html" title="return_centroid">
+<link rel="next" href="../clear.html" title="clear">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="return_centroid_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../centroid.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="../clear.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy"></a><a class="link" href="return_centroid_2_with_strategy.html" title="return_centroid (with strategy)">return_centroid
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp8842304"></a>
+Calculates the centroid of a geometry using the specified strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.description"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.description">Description</a>
+ </h6>
+<p>
+ The free function centroid calculates the geometric center (or: center
+ of mass) of a geometry. This version with the return_ prefix returns
+ the centroid, and a template parameter must therefore be specified in
+ the call.. Reasons to specify a strategy include: use another coordinate
+ system for calculations; construct the strategy beforehand (e.g. with
+ the radius of the Earth); select a strategy when there are more than
+ one available for a calculation.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.synopsis"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="identifier">Point</span> <span class="identifier">return_centroid</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.parameters"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a centroid Strategy Concept
+ </p>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ The strategy which will be used for centroid calculations
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.returns"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.returns">Returns</a>
+ </h6>
+<p>
+ The calculated centroid
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.header"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">centroid</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.conformance"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.conformance">Conformance</a>
+ </h6>
+<p>
+ The function centroid implements function Centroid from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.behavior"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the point itself as the centroid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Point
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid (based on average)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid (based on weighted length)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates centroid
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Empty (e.g. polygon without points)
+ </p>
+ </td>
+<td>
+ <p>
+ Throws a <a class="link" href="../../exceptions/centroid_exception.html" title="centroid_exception">centroid_exception</a>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Cartesian
+ </p>
+ </td>
+<td>
+ <p>
+ Implemented
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates the centroid as if based on Cartesian coordinates
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.supported_geometries"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ 2D
+ </p>
+ </th>
+<th>
+ <p>
+ 3D
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.complexity"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.h9"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.available_strategies"></a></span><a class="link" href="return_centroid_2_with_strategy.html#geometry.reference.algorithms.centroid.return_centroid_2_with_strategy.available_strategies">Available
+ Strategies</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../../strategies/strategy_centroid_bashein_detmer.html" title="strategy::centroid::bashein_detmer">Bashein
+ Detmer (cartesian)</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="return_centroid_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../centroid.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="../clear.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/clear.html b/libs/geometry/doc/html/geometry/reference/algorithms/clear.html
new file mode 100644
index 000000000..71e97b154
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/clear.html
@@ -0,0 +1,481 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>clear</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="centroid/return_centroid_2_with_strategy.html" title="return_centroid (with strategy)">
+<link rel="next" href="convert.html" title="convert">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="centroid/return_centroid_2_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="convert.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.clear"></a><a class="link" href="clear.html" title="clear">clear</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp8928448"></a>
+Clears a linestring, ring or polygon (exterior+interiors) or multi*.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.clear.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.clear.description"></a></span><a class="link" href="clear.html#geometry.reference.algorithms.clear.description">Description</a>
+ </h6>
+<p>
+ Generic function to clear a geometry. All points will be removed from the
+ collection or collections making up the geometry. In most cases this is
+ equivalent to the .clear() method of a std::vector&lt;...&gt;. In the case
+ of a polygon, this clear functionality is automatically called for the
+ exterior ring, and for the interior ring collection. In the case of a point,
+ boxes and segments, nothing will happen.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.clear.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.clear.synopsis"></a></span><a class="link" href="clear.html#geometry.reference.algorithms.clear.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">clear</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.clear.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.clear.parameters"></a></span><a class="link" href="clear.html#geometry.reference.algorithms.clear.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which will be cleared
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.clear.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.clear.header"></a></span><a class="link" href="clear.html#geometry.reference.algorithms.clear.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">clear</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.clear.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.clear.conformance"></a></span><a class="link" href="clear.html#geometry.reference.algorithms.clear.conformance">Conformance</a>
+ </h6>
+<p>
+ The function clear is not defined by OGC.
+ </p>
+<p>
+ The function clear conforms to the clear() method of the C++ std-library.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.clear.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.clear.supported_geometries"></a></span><a class="link" href="clear.html#geometry.reference.algorithms.clear.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Geometry
+ </p>
+ </th>
+<th>
+ <p>
+ Status
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.clear.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.clear.behavior"></a></span><a class="link" href="clear.html#geometry.reference.algorithms.clear.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ Linestring is cleared
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ Ring is cleared
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ The exterior ring is cleared and all interior rings are removed
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Point
+ </p>
+ </td>
+<td>
+ <p>
+ Multi Point is cleared
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ Multi Linestring is cleared
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Multi Polygon is cleared
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.clear.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.clear.complexity"></a></span><a class="link" href="clear.html#geometry.reference.algorithms.clear.complexity">Complexity</a>
+ </h6>
+<p>
+ Constant
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.clear.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.clear.example"></a></span><a class="link" href="clear.html#geometry.reference.algorithms.clear.example">Example</a>
+ </h6>
+<p>
+ Shows how to clear a ring or polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">::</span><span class="identifier">tuple_list_of</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">ring</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">ring</span><span class="special">;</span>
+
+ <span class="identifier">polygon</span> <span class="identifier">poly</span><span class="special">;</span>
+
+ <span class="comment">// Fill the polygon (using its own methods + Boost.Assign)</span>
+ <span class="identifier">poly</span><span class="special">.</span><span class="identifier">outer</span><span class="special">()</span> <span class="special">=</span> <span class="identifier">tuple_list_of</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">0</span><span class="special">,</span> <span class="number">9</span><span class="special">)(</span><span class="number">10</span><span class="special">,</span> <span class="number">10</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">poly</span><span class="special">.</span><span class="identifier">inners</span><span class="special">().</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">tuple_list_of</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">)(</span><span class="number">4</span><span class="special">,</span> <span class="number">6</span><span class="special">)(</span><span class="number">2</span><span class="special">,</span> <span class="number">8</span><span class="special">)(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</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">clear</span><span class="special">(</span><span class="identifier">poly</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="comment">// Create a ring using Boost.Assign</span>
+ <span class="identifier">ring</span> <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">tuple_list_of</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">0</span><span class="special">,</span> <span class="number">9</span><span class="special">)(</span><span class="number">8</span><span class="special">,</span> <span class="number">8</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">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">r</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</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">clear</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">r</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">(((0, 0), (0, 10), (11, 11), (0, 0)), ((0, 0), (0, 10), (11, 11), (0, 0)))
+(())
+((0, 0), (0, 9), (8, 8), (0, 0))
+()
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="centroid/return_centroid_2_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="convert.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/convert.html b/libs/geometry/doc/html/geometry/reference/algorithms/convert.html
new file mode 100644
index 000000000..239db7d52
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/convert.html
@@ -0,0 +1,802 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>convert</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="clear.html" title="clear">
+<link rel="next" href="convex_hull.html" title="convex_hull">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="clear.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="convex_hull.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.convert"></a><a class="link" href="convert.html" title="convert">convert</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp9070064"></a>
+Converts one geometry to another geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convert.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convert.description"></a></span><a class="link" href="convert.html#geometry.reference.algorithms.convert.description">Description</a>
+ </h6>
+<p>
+ The convert algorithm converts one geometry, e.g. a BOX, to another geometry,
+ e.g. a RING. This only works if it is possible and applicable. If the point-order
+ is different, or the closure is different between two geometry types, it
+ will be converted correctly by explicitly reversing the points or closing
+ or opening the polygon rings.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convert.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convert.synopsis"></a></span><a class="link" href="convert.html#geometry.reference.algorithms.convert.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">convert</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convert.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convert.parameters"></a></span><a class="link" href="convert.html#geometry.reference.algorithms.convert.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept (source)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept (target)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.convert.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convert.header"></a></span><a class="link" href="convert.html#geometry.reference.algorithms.convert.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">convert</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convert.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convert.conformance"></a></span><a class="link" href="convert.html#geometry.reference.algorithms.convert.conformance">Conformance</a>
+ </h6>
+<p>
+ The function convert is not defined by OGC.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convert.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convert.supported_geometries"></a></span><a class="link" href="convert.html#geometry.reference.algorithms.convert.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ Point
+ </p>
+ </th>
+<th>
+ <p>
+ Segment
+ </p>
+ </th>
+<th>
+ <p>
+ Box
+ </p>
+ </th>
+<th>
+ <p>
+ Linestring
+ </p>
+ </th>
+<th>
+ <p>
+ Ring
+ </p>
+ </th>
+<th>
+ <p>
+ Polygon
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPoint
+ </p>
+ </th>
+<th>
+ <p>
+ MultiLinestring
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPolygon
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ In this status matrix above: columns are source types and rows are target
+ types. So a box can be converted to a ring, polygon or multi-polygon,
+ but not vice versa.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.convert.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convert.complexity"></a></span><a class="link" href="convert.html#geometry.reference.algorithms.convert.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convert.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convert.example"></a></span><a class="link" href="convert.html#geometry.reference.algorithms.convert.example">Example</a>
+ </h6>
+<p>
+ Shows how to convert a geometry into another geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="identifier">point</span> <span class="identifier">p1</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span>
+ <span class="identifier">box</span> <span class="identifier">bx</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">make</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+
+ <span class="comment">// Assign a box to a polygon (conversion box-&gt;poly)</span>
+ <span class="identifier">polygon</span> <span class="identifier">poly</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">convert</span><span class="special">(</span><span class="identifier">bx</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
+
+ <span class="comment">// Convert a point to another point type (conversion of point-type)</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">p2</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">convert</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p2</span><span class="special">);</span> <span class="comment">// source -&gt; target</span>
+
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"box: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">bx</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"polygon: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"point: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"point tuples: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p2</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">box: ((1, 1), (2, 2))
+polygon: (((1, 1), (1, 2), (2, 2), (2, 1), (1, 1)))
+point: (1, 1)
+point tuples: (1, 1)
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.convert.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convert.see_also"></a></span><a class="link" href="convert.html#geometry.reference.algorithms.convert.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="assign/assign.html" title="assign">assign</a>
+ </li></ul></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ convert is modelled as source -&gt; target (where assign is modelled
+ as target := source)
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="clear.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="convex_hull.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/convex_hull.html b/libs/geometry/doc/html/geometry/reference/algorithms/convex_hull.html
new file mode 100644
index 000000000..52c1bd9fd
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/convex_hull.html
@@ -0,0 +1,357 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>convex_hull</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="convert.html" title="convert">
+<link rel="next" href="correct.html" title="correct">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="convert.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="correct.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.convex_hull"></a><a class="link" href="convex_hull.html" title="convex_hull">convex_hull</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp9288160"></a>
+Calculates the convex hull of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convex_hull.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convex_hull.description"></a></span><a class="link" href="convex_hull.html#geometry.reference.algorithms.convex_hull.description">Description</a>
+ </h6>
+<p>
+ The free function convex_hull calculates the convex hull of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convex_hull.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convex_hull.synopsis"></a></span><a class="link" href="convex_hull.html#geometry.reference.algorithms.convex_hull.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputGeometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">convex_hull</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">OutputGeometry</span> <span class="special">&amp;</span> <span class="identifier">hull</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convex_hull.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convex_hull.parameters"></a></span><a class="link" href="convex_hull.html#geometry.reference.algorithms.convex_hull.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ the input geometry type
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept, input geometry
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ OutputGeometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ the output geometry type
+ </p>
+ </td>
+<td>
+ <p>
+ hull
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which is set to the convex hull
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.convex_hull.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convex_hull.header"></a></span><a class="link" href="convex_hull.html#geometry.reference.algorithms.convex_hull.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">convex_hull</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convex_hull.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convex_hull.conformance"></a></span><a class="link" href="convex_hull.html#geometry.reference.algorithms.convex_hull.conformance">Conformance</a>
+ </h6>
+<p>
+ The function convex_hull implements function ConvexHull() from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convex_hull.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convex_hull.supported_geometries"></a></span><a class="link" href="convex_hull.html#geometry.reference.algorithms.convex_hull.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Geometry
+ </p>
+ </th>
+<th>
+ <p>
+ Status
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.convex_hull.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convex_hull.complexity"></a></span><a class="link" href="convex_hull.html#geometry.reference.algorithms.convex_hull.complexity">Complexity</a>
+ </h6>
+<p>
+ Logarithmic
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.convex_hull.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.convex_hull.example"></a></span><a class="link" href="convex_hull.html#geometry.reference.algorithms.convex_hull.example">Example</a>
+ </h6>
+<p>
+ Shows how to generate the convex_hull of a geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">int</span> <span class="identifier">main</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">tuple</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="identifier">polygon</span> <span class="identifier">poly</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">read_wkt</span><span class="special">(</span><span class="string">"polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0"</span>
+ <span class="string">", 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))"</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
+
+ <span class="identifier">polygon</span> <span class="identifier">hull</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">convex_hull</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">hull</span><span class="special">);</span>
+
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"polygon: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"hull: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">hull</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">polygon: (((2, 1.3), (2.4, 1.7), (2.8, 1.8), (3.4, 1.2), (3.7, 1.6), (3.4, 2), (4.1, 3), (5.3, 2.6), (5.4, 1.2), (4.9, 0.8), (2.9, 0.7), (2, 1.3)))
+hull: (((2, 1.3), (2.4, 1.7), (4.1, 3), (5.3, 2.6), (5.4, 1.2), (4.9, 0.8), (2.9, 0.7), (2, 1.3)))
+
+<img src="../../../img/algorithms/convex_hull.png" alt="convex_hull">
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="convert.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="correct.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/correct.html b/libs/geometry/doc/html/geometry/reference/algorithms/correct.html
new file mode 100644
index 000000000..243a351da
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/correct.html
@@ -0,0 +1,431 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>correct</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="convex_hull.html" title="convex_hull">
+<link rel="next" href="covered_by.html" title="covered_by">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="convex_hull.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="covered_by.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.correct"></a><a class="link" href="correct.html" title="correct">correct</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp9384880"></a>
+Corrects a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.correct.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.correct.description"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.description">Description</a>
+ </h6>
+<p>
+ Corrects a geometry: all rings which are wrongly oriented with respect
+ to their expected orientation are reversed. To all rings which do not have
+ a closing point and are typed as they should have one, the first point
+ is appended. Also boxes can be corrected.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.correct.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.correct.synopsis"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">correct</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.correct.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.correct.parameters"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which will be corrected if necessary
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.correct.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.correct.header"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">correct</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.correct.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.correct.conformance"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.conformance">Conformance</a>
+ </h6>
+<p>
+ The function correct is not defined by OGC.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.correct.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.correct.supported_geometries"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Geometry
+ </p>
+ </th>
+<th>
+ <p>
+ Status
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.correct.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.correct.behavior"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ Ring is corrected
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Polygon is corrected
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Multi Polygon is corrected
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Box is corrected with respect to minimal and maximal corners
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Other geometries
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.correct.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.correct.complexity"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.correct.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.correct.example"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.example">Example</a>
+ </h6>
+<p>
+ Shows how to correct a polygon with respect to its orientation and closure
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">::</span><span class="identifier">tuple_list_of</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">clockwise_closed_polygon</span><span class="special">;</span>
+
+ <span class="identifier">clockwise_closed_polygon</span> <span class="identifier">cwcp</span><span class="special">;</span>
+
+ <span class="comment">// Fill it counterclockwise (so wrongly), forgetting the closing point</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">exterior_ring</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">tuple_list_of</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">10</span><span class="special">,</span> <span class="number">10</span><span class="special">)(</span><span class="number">0</span><span class="special">,</span> <span class="number">9</span><span class="special">);</span>
+
+ <span class="comment">// Add a counterclockwise closed inner ring (this is correct)</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">interior_rings</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">).</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">tuple_list_of</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">)(</span><span class="number">4</span><span class="special">,</span> <span class="number">6</span><span class="special">)(</span><span class="number">2</span><span class="special">,</span> <span class="number">8</span><span class="special">)(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+
+ <span class="comment">// Its area should be negative (because of wrong orientation)</span>
+ <span class="comment">// and wrong (because of omitted closing point)</span>
+ <span class="keyword">double</span> <span class="identifier">area_before</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">area</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">);</span>
+
+ <span class="comment">// Correct it!</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">correct</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">);</span>
+
+ <span class="comment">// Check its new area</span>
+ <span class="keyword">double</span> <span class="identifier">area_after</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">area</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">);</span>
+
+ <span class="comment">// And output it</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">area_before</span> <span class="special">&lt;&lt;</span> <span class="string">" -&gt; "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area_after</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">(((0, 0), (0, 9), (10, 10), (0, 0)), ((1, 2), (4, 6), (2, 8), (1, 2)))
+-7 -&gt; 38
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="convex_hull.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="covered_by.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/covered_by.html b/libs/geometry/doc/html/geometry/reference/algorithms/covered_by.html
new file mode 100644
index 000000000..2c750a23c
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/covered_by.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>covered_by</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="correct.html" title="correct">
+<link rel="next" href="covered_by/covered_by_2.html" title="covered_by">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="correct.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="covered_by/covered_by_2.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.covered_by"></a><a class="link" href="covered_by.html" title="covered_by">covered_by</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="covered_by/covered_by_2.html">covered_by</a></span></dt>
+<dt><span class="section"><a href="covered_by/covered_by_3_with_strategy.html">covered_by
+ (with strategy)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="correct.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="covered_by/covered_by_2.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/covered_by/covered_by_2.html b/libs/geometry/doc/html/geometry/reference/algorithms/covered_by/covered_by_2.html
new file mode 100644
index 000000000..08ee1e81b
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/covered_by/covered_by_2.html
@@ -0,0 +1,762 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>covered_by</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../covered_by.html" title="covered_by">
+<link rel="prev" href="../covered_by.html" title="covered_by">
+<link rel="next" href="covered_by_3_with_strategy.html" title="covered_by (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../covered_by.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../covered_by.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="covered_by_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.covered_by.covered_by_2"></a><a class="link" href="covered_by_2.html" title="covered_by">covered_by</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp9506576"></a>
+Checks if the first geometry is inside or on border the second geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_2.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_2.description"></a></span><a class="link" href="covered_by_2.html#geometry.reference.algorithms.covered_by.covered_by_2.description">Description</a>
+ </h6>
+<p>
+ The free function covered_by checks if the first geometry is inside or
+ on border the second geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_2.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_2.synopsis"></a></span><a class="link" href="covered_by_2.html#geometry.reference.algorithms.covered_by.covered_by_2.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">covered_by</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_2.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_2.parameters"></a></span><a class="link" href="covered_by_2.html#geometry.reference.algorithms.covered_by.covered_by_2.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which might be inside or on
+ the border of the second geometry
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which might cover the first
+ geometry
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_2.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_2.returns"></a></span><a class="link" href="covered_by_2.html#geometry.reference.algorithms.covered_by.covered_by_2.returns">Returns</a>
+ </h6>
+<p>
+ true if geometry1 is inside of or on the border of geometry2, else false
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_2.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_2.header"></a></span><a class="link" href="covered_by_2.html#geometry.reference.algorithms.covered_by.covered_by_2.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">covered_by</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_2.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_2.conformance"></a></span><a class="link" href="covered_by_2.html#geometry.reference.algorithms.covered_by.covered_by_2.conformance">Conformance</a>
+ </h6>
+<p>
+ The function covered_by is not defined by OGC.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Both PostGIS and Oracle contain an algorithm with the same name and
+ the same functionality. See the <a href="http://www.postgis.org/docs/ST_CoveredBy.html" target="_top">PostGIS
+ documentation</a>.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_2.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_2.supported_geometries"></a></span><a class="link" href="covered_by_2.html#geometry.reference.algorithms.covered_by.covered_by_2.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ Point
+ </p>
+ </th>
+<th>
+ <p>
+ Segment
+ </p>
+ </th>
+<th>
+ <p>
+ Box
+ </p>
+ </th>
+<th>
+ <p>
+ Linestring
+ </p>
+ </th>
+<th>
+ <p>
+ Ring
+ </p>
+ </th>
+<th>
+ <p>
+ Polygon
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPoint
+ </p>
+ </th>
+<th>
+ <p>
+ MultiLinestring
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPolygon
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ In this status matrix above: columns are types of first parameter and
+ rows are types of second parameter. So a point can be checked to be
+ covered by a polygon, but not vice versa.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_2.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_2.complexity"></a></span><a class="link" href="covered_by_2.html#geometry.reference.algorithms.covered_by.covered_by_2.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_2.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_2.see_also"></a></span><a class="link" href="covered_by_2.html#geometry.reference.algorithms.covered_by.covered_by_2.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../within.html" title="within">within</a>
+ </li></ul></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ The difference with the <code class="computeroutput"><span class="identifier">within</span></code>
+ algorithm is that this algorithm checks the border by default
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../covered_by.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../covered_by.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="covered_by_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/covered_by/covered_by_3_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/covered_by/covered_by_3_with_strategy.html
new file mode 100644
index 000000000..5bf47f680
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/covered_by/covered_by_3_with_strategy.html
@@ -0,0 +1,786 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>covered_by (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../covered_by.html" title="covered_by">
+<link rel="prev" href="covered_by_2.html" title="covered_by">
+<link rel="next" href="../difference.html" title="difference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="covered_by_2.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../covered_by.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="../difference.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy"></a><a class="link" href="covered_by_3_with_strategy.html" title="covered_by (with strategy)">covered_by
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp9659568"></a>
+Checks if the first geometry is inside or on border the second geometry
+ using the specified strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.description"></a></span><a class="link" href="covered_by_3_with_strategy.html#geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.description">Description</a>
+ </h6>
+<p>
+ The free function covered_by checks if the first geometry is inside or
+ on border the second geometry, using the specified strategy. Reasons
+ to specify a strategy include: use another coordinate system for calculations;
+ construct the strategy beforehand (e.g. with the radius of the Earth);
+ select a strategy when there are more than one available for a calculation.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.synopsis"></a></span><a class="link" href="covered_by_3_with_strategy.html#geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">covered_by</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.parameters"></a></span><a class="link" href="covered_by_3_with_strategy.html#geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which might be inside or on
+ the border of the second geometry
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which might cover the first
+ geometry
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ strategy to be used
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.returns"></a></span><a class="link" href="covered_by_3_with_strategy.html#geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.returns">Returns</a>
+ </h6>
+<p>
+ true if geometry1 is inside of or on the border of geometry2, else false
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.header"></a></span><a class="link" href="covered_by_3_with_strategy.html#geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">covered_by</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.conformance"></a></span><a class="link" href="covered_by_3_with_strategy.html#geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.conformance">Conformance</a>
+ </h6>
+<p>
+ The function covered_by is not defined by OGC.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Both PostGIS and Oracle contain an algorithm with the same name and
+ the same functionality. See the <a href="http://www.postgis.org/docs/ST_CoveredBy.html" target="_top">PostGIS
+ documentation</a>.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.supported_geometries"></a></span><a class="link" href="covered_by_3_with_strategy.html#geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ Point
+ </p>
+ </th>
+<th>
+ <p>
+ Segment
+ </p>
+ </th>
+<th>
+ <p>
+ Box
+ </p>
+ </th>
+<th>
+ <p>
+ Linestring
+ </p>
+ </th>
+<th>
+ <p>
+ Ring
+ </p>
+ </th>
+<th>
+ <p>
+ Polygon
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPoint
+ </p>
+ </th>
+<th>
+ <p>
+ MultiLinestring
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPolygon
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ In this status matrix above: columns are types of first parameter and
+ rows are types of second parameter. So a point can be checked to be
+ covered by a polygon, but not vice versa.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.complexity"></a></span><a class="link" href="covered_by_3_with_strategy.html#geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.see_also"></a></span><a class="link" href="covered_by_3_with_strategy.html#geometry.reference.algorithms.covered_by.covered_by_3_with_strategy.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../within.html" title="within">within</a>
+ </li></ul></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ The difference with the <code class="computeroutput"><span class="identifier">within</span></code>
+ algorithm is that this algorithm checks the border by default
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="covered_by_2.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../covered_by.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="../difference.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/difference.html b/libs/geometry/doc/html/geometry/reference/algorithms/difference.html
new file mode 100644
index 000000000..c6765b13e
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/difference.html
@@ -0,0 +1,388 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>difference</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="covered_by/covered_by_3_with_strategy.html" title="covered_by (with strategy)">
+<link rel="next" href="disjoint.html" title="disjoint">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="covered_by/covered_by_3_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="disjoint.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.difference"></a><a class="link" href="difference.html" title="difference">difference</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp9817472"></a>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.difference.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.difference.description"></a></span><a class="link" href="difference.html#geometry.reference.algorithms.difference.description">Description</a>
+ </h6>
+<p>
+ Calculate the difference of two geometries
+ </p>
+<p>
+ The free function difference calculates the spatial set theoretic difference
+ of two geometries.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.difference.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.difference.synopsis"></a></span><a class="link" href="difference.html#geometry.reference.algorithms.difference.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Collection</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">difference</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">,</span> <span class="identifier">Collection</span> <span class="special">&amp;</span> <span class="identifier">output_collection</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.difference.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.difference.parameters"></a></span><a class="link" href="difference.html#geometry.reference.algorithms.difference.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Collection &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ output collection, either a multi-geometry, or a std::vector&lt;Geometry&gt;
+ / std::deque&lt;Geometry&gt; etc
+ </p>
+ </td>
+<td>
+ <p>
+ output_collection
+ </p>
+ </td>
+<td>
+ <p>
+ the output collection
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.difference.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.difference.header"></a></span><a class="link" href="difference.html#geometry.reference.algorithms.difference.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">difference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.difference.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.difference.conformance"></a></span><a class="link" href="difference.html#geometry.reference.algorithms.difference.conformance">Conformance</a>
+ </h6>
+<p>
+ The function difference implements function Difference from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.difference.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.difference.behavior"></a></span><a class="link" href="difference.html#geometry.reference.algorithms.difference.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ All combinations of: box, ring, polygon, multi_polygon
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring) / areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ A combinations of a (multi) linestring with a (multi) polygon
+ results in a collection of linestrings
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Other geometries
+ </p>
+ </td>
+<td>
+ <p>
+ Not yet supported in this version
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Not yet supported in this version
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Three dimensional
+ </p>
+ </td>
+<td>
+ <p>
+ Not yet supported in this version
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Check the <a class="link" href="../concepts/concept_polygon.html" title="Polygon Concept">Polygon
+ Concept</a> for the rules that polygon input for this algorithm should
+ fulfill
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.difference.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.difference.example"></a></span><a class="link" href="difference.html#geometry.reference.algorithms.difference.example">Example</a>
+ </h6>
+<p>
+ Shows how to subtract one polygon from another polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">list</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="identifier">polygon</span> <span class="identifier">green</span><span class="special">,</span> <span class="identifier">blue</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"</span>
+ <span class="string">"(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))"</span><span class="special">,</span> <span class="identifier">green</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))"</span><span class="special">,</span> <span class="identifier">blue</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;</span> <span class="identifier">output</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">difference</span><span class="special">(</span><span class="identifier">green</span><span class="special">,</span> <span class="identifier">blue</span><span class="special">,</span> <span class="identifier">output</span><span class="special">);</span>
+
+ <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"green - blue:"</span> <span class="special">&lt;&lt;</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">polygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">output</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">i</span><span class="special">++</span> <span class="special">&lt;&lt;</span> <span class="string">": "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span>
+
+
+ <span class="identifier">output</span><span class="special">.</span><span class="identifier">clear</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">difference</span><span class="special">(</span><span class="identifier">blue</span><span class="special">,</span> <span class="identifier">green</span><span class="special">,</span> <span class="identifier">output</span><span class="special">);</span>
+
+ <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"blue - green:"</span> <span class="special">&lt;&lt;</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">polygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">output</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">i</span><span class="special">++</span> <span class="special">&lt;&lt;</span> <span class="string">": "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">green - blue:
+0: 0.02375
+1: 0.542951
+2: 0.0149697
+3: 0.226855
+4: 0.839424
+
+<img src="../../../img/algorithms/difference_a.png" alt="difference_a">
+
+blue - green:
+0: 0.525154
+1: 0.015
+2: 0.181136
+3: 0.128798
+4: 0.340083
+5: 0.307778
+
+<img src="../../../img/algorithms/difference_b.png" alt="difference_b">
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.difference.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.difference.see_also"></a></span><a class="link" href="difference.html#geometry.reference.algorithms.difference.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="sym_difference.html" title="sym_difference">sym_difference
+ (symmetric difference)</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="intersection.html" title="intersection">intersection</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="union_.html" title="union_">union</a>
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="covered_by/covered_by_3_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="disjoint.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/disjoint.html b/libs/geometry/doc/html/geometry/reference/algorithms/disjoint.html
new file mode 100644
index 000000000..5755934a3
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/disjoint.html
@@ -0,0 +1,168 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>disjoint</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="difference.html" title="difference">
+<link rel="next" href="distance.html" title="distance">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="difference.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="distance.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.disjoint"></a><a class="link" href="disjoint.html" title="disjoint">disjoint</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp9961632"></a>
+Checks if two geometries are disjoint.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.disjoint.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.disjoint.synopsis"></a></span><a class="link" href="disjoint.html#geometry.reference.algorithms.disjoint.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">disjoint</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.disjoint.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.disjoint.parameters"></a></span><a class="link" href="disjoint.html#geometry.reference.algorithms.disjoint.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.disjoint.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.disjoint.returns"></a></span><a class="link" href="disjoint.html#geometry.reference.algorithms.disjoint.returns">Returns</a>
+ </h6>
+<p>
+ Returns true if two geometries are disjoint
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.disjoint.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.disjoint.header"></a></span><a class="link" href="disjoint.html#geometry.reference.algorithms.disjoint.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">disjoint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.disjoint.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.disjoint.conformance"></a></span><a class="link" href="disjoint.html#geometry.reference.algorithms.disjoint.conformance">Conformance</a>
+ </h6>
+<p>
+ The function disjoint implements function Disjoint from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="difference.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="distance.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/distance.html b/libs/geometry/doc/html/geometry/reference/algorithms/distance.html
new file mode 100644
index 000000000..4a26dc1ea
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/distance.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>distance</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="disjoint.html" title="disjoint">
+<link rel="next" href="distance/comparable_distance.html" title="comparable_distance">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="disjoint.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="distance/comparable_distance.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.distance"></a><a class="link" href="distance.html" title="distance">distance</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="distance/comparable_distance.html">comparable_distance</a></span></dt>
+<dt><span class="section"><a href="distance/distance_3_with_strategy.html">distance
+ (with strategy)</a></span></dt>
+<dt><span class="section"><a href="distance/distance_2.html">distance</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="disjoint.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="distance/comparable_distance.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/distance/comparable_distance.html b/libs/geometry/doc/html/geometry/reference/algorithms/distance/comparable_distance.html
new file mode 100644
index 000000000..6b87f869a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/distance/comparable_distance.html
@@ -0,0 +1,257 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>comparable_distance</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../distance.html" title="distance">
+<link rel="prev" href="../distance.html" title="distance">
+<link rel="next" href="distance_3_with_strategy.html" title="distance (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../distance.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../distance.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="distance_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.distance.comparable_distance"></a><a class="link" href="comparable_distance.html" title="comparable_distance">comparable_distance</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp9994448"></a>
+Calculate the comparable distance measurement of two geometries.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.comparable_distance.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.comparable_distance.description"></a></span><a class="link" href="comparable_distance.html#geometry.reference.algorithms.distance.comparable_distance.description">Description</a>
+ </h6>
+<p>
+ The free function comparable_distance does not necessarily calculate
+ the distance, but it calculates a distance measure such that two distances
+ are comparable to each other. For example: for the Cartesian coordinate
+ system, Pythagoras is used but the square root is not taken, which makes
+ it faster and the results of two point pairs can still be compared to
+ each other.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.comparable_distance.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.comparable_distance.synopsis"></a></span><a class="link" href="comparable_distance.html#geometry.reference.algorithms.distance.comparable_distance.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="identifier">default_distance_result</span><span class="special">&lt;</span><span class="identifier">Geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">comparable_distance</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.comparable_distance.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.comparable_distance.parameters"></a></span><a class="link" href="comparable_distance.html#geometry.reference.algorithms.distance.comparable_distance.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ first geometry type
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ second geometry type
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.distance.comparable_distance.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.comparable_distance.returns"></a></span><a class="link" href="comparable_distance.html#geometry.reference.algorithms.distance.comparable_distance.returns">Returns</a>
+ </h6>
+<p>
+ The calculated comparable distance
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.comparable_distance.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.comparable_distance.header"></a></span><a class="link" href="comparable_distance.html#geometry.reference.algorithms.distance.comparable_distance.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">comparable_distance</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.comparable_distance.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.comparable_distance.conformance"></a></span><a class="link" href="comparable_distance.html#geometry.reference.algorithms.distance.comparable_distance.conformance">Conformance</a>
+ </h6>
+<p>
+ The function comparable_distance is not defined by OGC.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.comparable_distance.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.comparable_distance.behaviour"></a></span><a class="link" href="comparable_distance.html#geometry.reference.algorithms.distance.comparable_distance.behaviour">Behaviour</a>
+ </h6>
+<p>
+ There is no (not yet) version with a strategy.
+ </p>
+<p>
+ It depends on the coordinate system of the geometry's point type if there
+ is a strategy available which can determine (more efficient than the
+ standard strategy) a measure of comparable distance.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.comparable_distance.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.comparable_distance.complexity"></a></span><a class="link" href="comparable_distance.html#geometry.reference.algorithms.distance.comparable_distance.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.comparable_distance.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.comparable_distance.example"></a></span><a class="link" href="comparable_distance.html#geometry.reference.algorithms.distance.comparable_distance.example">Example</a>
+ </h6>
+<p>
+ Shows how to efficiently get the closest point
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">numeric</span><span class="special">/</span><span class="identifier">conversion</span><span class="special">/</span><span class="identifier">bounds</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+
+ <span class="identifier">point_type</span> <span class="identifier">p</span><span class="special">(</span><span class="number">1.4</span><span class="special">,</span> <span class="number">2.6</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">v</span><span class="special">;</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span> <span class="identifier">x</span> <span class="special">&lt;=</span> <span class="number">4.0</span><span class="special">;</span> <span class="identifier">x</span><span class="special">++)</span>
+ <span class="special">{</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="keyword">double</span> <span class="identifier">y</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span> <span class="identifier">y</span> <span class="special">&lt;=</span> <span class="number">4.0</span><span class="special">;</span> <span class="identifier">y</span><span class="special">++)</span>
+ <span class="special">{</span>
+ <span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_type</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">));</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+
+ <span class="identifier">point_type</span> <span class="identifier">min_p</span><span class="special">;</span>
+ <span class="keyword">double</span> <span class="identifier">min_d</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">bounds</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">highest</span><span class="special">();</span>
+ <span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="identifier">point_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">pv</span><span class="special">,</span> <span class="identifier">v</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">d</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">comparable_distance</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">pv</span><span class="special">);</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">d</span> <span class="special">&lt;</span> <span class="identifier">min_d</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">min_d</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">;</span>
+ <span class="identifier">min_p</span> <span class="special">=</span> <span class="identifier">pv</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"Closest: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">min_p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"At: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">min_p</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Closest: (1, 3)
+At: 0.565685
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../distance.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../distance.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="distance_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/distance/distance_2.html b/libs/geometry/doc/html/geometry/reference/algorithms/distance/distance_2.html
new file mode 100644
index 000000000..cb644a362
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/distance/distance_2.html
@@ -0,0 +1,784 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>distance</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../distance.html" title="distance">
+<link rel="prev" href="distance_3_with_strategy.html" title="distance (with strategy)">
+<link rel="next" href="../envelope.html" title="envelope">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="distance_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../distance.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="../envelope.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.distance.distance_2"></a><a class="link" href="distance_2.html" title="distance">distance</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp10146496"></a>
+Calculate the distance of two geometries.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_2.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_2.description"></a></span><a class="link" href="distance_2.html#geometry.reference.algorithms.distance.distance_2.description">Description</a>
+ </h6>
+<p>
+ The default strategy is used, corresponding to the coordinate system
+ of the geometries
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_2.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_2.synopsis"></a></span><a class="link" href="distance_2.html#geometry.reference.algorithms.distance.distance_2.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="identifier">default_distance_result</span><span class="special">&lt;</span><span class="identifier">Geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_2.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_2.parameters"></a></span><a class="link" href="distance_2.html#geometry.reference.algorithms.distance.distance_2.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_2.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_2.returns"></a></span><a class="link" href="distance_2.html#geometry.reference.algorithms.distance.distance_2.returns">Returns</a>
+ </h6>
+<p>
+ The calculated distance
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_2.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_2.header"></a></span><a class="link" href="distance_2.html#geometry.reference.algorithms.distance.distance_2.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">distance</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_2.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_2.conformance"></a></span><a class="link" href="distance_2.html#geometry.reference.algorithms.distance.distance_2.conformance">Conformance</a>
+ </h6>
+<p>
+ The function distance implements function Distance from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_2.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_2.supported_geometries"></a></span><a class="link" href="distance_2.html#geometry.reference.algorithms.distance.distance_2.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ Point
+ </p>
+ </th>
+<th>
+ <p>
+ Segment
+ </p>
+ </th>
+<th>
+ <p>
+ Box
+ </p>
+ </th>
+<th>
+ <p>
+ Linestring
+ </p>
+ </th>
+<th>
+ <p>
+ Ring
+ </p>
+ </th>
+<th>
+ <p>
+ Polygon
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPoint
+ </p>
+ </th>
+<th>
+ <p>
+ MultiLinestring
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPolygon
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_2.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_2.complexity"></a></span><a class="link" href="distance_2.html#geometry.reference.algorithms.distance.distance_2.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<p>
+ For multi-geometry to multi-geometry: currently quadratic
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_2.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_2.example"></a></span><a class="link" href="distance_2.html#geometry.reference.algorithms.distance.distance_2.example">Example</a>
+ </h6>
+<p>
+ Shows calculation of distance of point to some other geometries
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">list</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">linestring_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">multi_point</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">multi_point_type</span><span class="special">;</span>
+
+ <span class="identifier">point_type</span> <span class="identifier">p</span><span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">);</span>
+ <span class="identifier">polygon_type</span> <span class="identifier">poly</span><span class="special">;</span>
+ <span class="identifier">linestring_type</span> <span class="identifier">line</span><span class="special">;</span>
+ <span class="identifier">multi_point_type</span> <span class="identifier">mp</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"</span>
+ <span class="string">"(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))"</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_type</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">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_type</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="number">3</span><span class="special">));</span>
+ <span class="identifier">mp</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_type</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">mp</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_type</span><span class="special">(</span><span class="number">3</span><span class="special">,</span><span class="number">3</span><span class="special">));</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"Point-Poly: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"Point-Line: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">line</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"Point-MultiPoint: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">distance</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">mp</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Point-Poly: 1.22066
+Point-Line: 1
+Point-MultiPoint: 2.23607
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="distance_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../distance.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="../envelope.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/distance/distance_3_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/distance/distance_3_with_strategy.html
new file mode 100644
index 000000000..d162f44a5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/distance/distance_3_with_strategy.html
@@ -0,0 +1,220 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>distance (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../distance.html" title="distance">
+<link rel="prev" href="comparable_distance.html" title="comparable_distance">
+<link rel="next" href="distance_2.html" title="distance">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="comparable_distance.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../distance.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="distance_2.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.distance.distance_3_with_strategy"></a><a class="link" href="distance_3_with_strategy.html" title="distance (with strategy)">distance
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp10100208"></a>
+Calculate the distance of two geometries using the specified strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_3_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_3_with_strategy.description"></a></span><a class="link" href="distance_3_with_strategy.html#geometry.reference.algorithms.distance.distance_3_with_strategy.description">Description</a>
+ </h6>
+<p>
+ The free function area calculates the area of a geometry. using the specified
+ strategy. Reasons to specify a strategy include: use another coordinate
+ system for calculations; construct the strategy beforehand (e.g. with
+ the radius of the Earth); select a strategy when there are more than
+ one available for a calculation.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_3_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_3_with_strategy.synopsis"></a></span><a class="link" href="distance_3_with_strategy.html#geometry.reference.algorithms.distance.distance_3_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="identifier">strategy</span><span class="special">::</span><span class="identifier">distance</span><span class="special">::</span><span class="identifier">services</span><span class="special">::</span><span class="identifier">return_type</span><span class="special">&lt;</span><span class="identifier">Strategy</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_3_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_3_with_strategy.parameters"></a></span><a class="link" href="distance_3_with_strategy.html#geometry.reference.algorithms.distance.distance_3_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Distance Strategy Concept
+ </p>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ The strategy which will be used for distance calculations
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_3_with_strategy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_3_with_strategy.returns"></a></span><a class="link" href="distance_3_with_strategy.html#geometry.reference.algorithms.distance.distance_3_with_strategy.returns">Returns</a>
+ </h6>
+<p>
+ The calculated distance
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_3_with_strategy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_3_with_strategy.header"></a></span><a class="link" href="distance_3_with_strategy.html#geometry.reference.algorithms.distance.distance_3_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">distance</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.distance.distance_3_with_strategy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.distance.distance_3_with_strategy.available_strategies"></a></span><a class="link" href="distance_3_with_strategy.html#geometry.reference.algorithms.distance.distance_3_with_strategy.available_strategies">Available
+ Strategies</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="../../strategies/strategy_distance_pythagoras.html" title="strategy::distance::pythagoras">Pythagoras
+ (cartesian)</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../../strategies/strategy_distance_haversine.html" title="strategy::distance::haversine">Haversine
+ (spherical)</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../../strategies/strategy_distance_cross_track.html" title="strategy::distance::cross_track">Cross
+ track (spherical, point-to-segment)</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../../strategies/strategy_distance_projected_point.html" title="strategy::distance::projected_point">Projected
+ point (cartesian, point-to-segment)</a>
+ </li>
+<li class="listitem">
+ more (currently extensions): Vincenty, Andoyer (geographic)
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="comparable_distance.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../distance.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="distance_2.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/envelope.html b/libs/geometry/doc/html/geometry/reference/algorithms/envelope.html
new file mode 100644
index 000000000..ca25677c1
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/envelope.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>envelope</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="distance/distance_2.html" title="distance">
+<link rel="next" href="envelope/envelope.html" title="envelope">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="distance/distance_2.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="envelope/envelope.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.envelope"></a><a class="link" href="envelope.html" title="envelope">envelope</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="envelope/envelope.html">envelope</a></span></dt>
+<dt><span class="section"><a href="envelope/return_envelope.html">return_envelope</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="distance/distance_2.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="envelope/envelope.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/envelope/envelope.html b/libs/geometry/doc/html/geometry/reference/algorithms/envelope/envelope.html
new file mode 100644
index 000000000..83538cacf
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/envelope/envelope.html
@@ -0,0 +1,217 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>envelope</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../envelope.html" title="envelope">
+<link rel="prev" href="../envelope.html" title="envelope">
+<link rel="next" href="return_envelope.html" title="return_envelope">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../envelope.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../envelope.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="return_envelope.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.envelope.envelope"></a><a class="link" href="envelope.html" title="envelope">envelope</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp10370816"></a>
+Calculates the envelope of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.envelope.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.envelope.description"></a></span><a class="link" href="envelope.html#geometry.reference.algorithms.envelope.envelope.description">Description</a>
+ </h6>
+<p>
+ The free function envelope calculates the envelope (also known as axis
+ aligned bounding box, aabb, or minimum bounding rectangle, mbr) of a
+ geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.envelope.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.envelope.synopsis"></a></span><a class="link" href="envelope.html#geometry.reference.algorithms.envelope.envelope.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Box</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">envelope</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Box</span> <span class="special">&amp;</span> <span class="identifier">mbr</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.envelope.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.envelope.parameters"></a></span><a class="link" href="envelope.html#geometry.reference.algorithms.envelope.envelope.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Box Concept
+ </p>
+ </td>
+<td>
+ <p>
+ mbr
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified Box Concept which is set to the envelope
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.envelope.envelope.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.envelope.header"></a></span><a class="link" href="envelope.html#geometry.reference.algorithms.envelope.envelope.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">envelope</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.envelope.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.envelope.conformance"></a></span><a class="link" href="envelope.html#geometry.reference.algorithms.envelope.envelope.conformance">Conformance</a>
+ </h6>
+<p>
+ The function envelope implements function Envelope from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.envelope.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.envelope.example"></a></span><a class="link" href="envelope.html#geometry.reference.algorithms.envelope.envelope.example">Example</a>
+ </h6>
+<p>
+ Shows how to calculate the bounding box of a polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</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">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">polygon</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"</span>
+ <span class="string">"(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))"</span><span class="special">,</span> <span class="identifier">polygon</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">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">box</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">envelope</span><span class="special">(</span><span class="identifier">polygon</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">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"envelope:"</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">box</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">envelope:((2, 0.7), (5.4, 3))
+
+<img src="../../../../img/algorithms/envelope.png" alt="envelope">
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../envelope.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../envelope.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="return_envelope.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/envelope/return_envelope.html b/libs/geometry/doc/html/geometry/reference/algorithms/envelope/return_envelope.html
new file mode 100644
index 000000000..2b699b99e
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/envelope/return_envelope.html
@@ -0,0 +1,233 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>return_envelope</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../envelope.html" title="envelope">
+<link rel="prev" href="envelope.html" title="envelope">
+<link rel="next" href="../equals.html" title="equals">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="envelope.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../envelope.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="../equals.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.envelope.return_envelope"></a><a class="link" href="return_envelope.html" title="return_envelope">return_envelope</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp10440848"></a>
+Calculates the envelope of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.return_envelope.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.return_envelope.description"></a></span><a class="link" href="return_envelope.html#geometry.reference.algorithms.envelope.return_envelope.description">Description</a>
+ </h6>
+<p>
+ The free function return_envelope calculates the envelope (also known
+ as axis aligned bounding box, aabb, or minimum bounding rectangle, mbr)
+ of a geometry. This version with the return_ prefix returns the envelope,
+ and a template parameter must therefore be specified in the call.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.return_envelope.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.return_envelope.synopsis"></a></span><a class="link" href="return_envelope.html#geometry.reference.algorithms.envelope.return_envelope.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Box</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">Box</span> <span class="identifier">return_envelope</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.return_envelope.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.return_envelope.parameters"></a></span><a class="link" href="return_envelope.html#geometry.reference.algorithms.envelope.return_envelope.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Box Concept
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.envelope.return_envelope.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.return_envelope.returns"></a></span><a class="link" href="return_envelope.html#geometry.reference.algorithms.envelope.return_envelope.returns">Returns</a>
+ </h6>
+<p>
+ The calculated envelope
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.return_envelope.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.return_envelope.header"></a></span><a class="link" href="return_envelope.html#geometry.reference.algorithms.envelope.return_envelope.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">envelope</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.return_envelope.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.return_envelope.conformance"></a></span><a class="link" href="return_envelope.html#geometry.reference.algorithms.envelope.return_envelope.conformance">Conformance</a>
+ </h6>
+<p>
+ The function envelope implements function Envelope from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.envelope.return_envelope.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.envelope.return_envelope.example"></a></span><a class="link" href="return_envelope.html#geometry.reference.algorithms.envelope.return_envelope.example">Example</a>
+ </h6>
+<p>
+ Shows how to return the envelope of a ring
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</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">model</span><span class="special">::</span><span class="identifier">ring</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">ring</span><span class="special">;</span>
+ <span class="identifier">ring</span> <span class="special">+=</span>
+ <span class="identifier">point</span><span class="special">(</span><span class="number">4.0</span><span class="special">,</span> <span class="special">-</span><span class="number">0.5</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="number">3.5</span><span class="special">,</span> <span class="number">1.0</span><span class="special">),</span>
+ <span class="identifier">point</span><span class="special">(</span><span class="number">2.0</span><span class="special">,</span> <span class="number">1.5</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="number">3.5</span><span class="special">,</span> <span class="number">2.0</span><span class="special">),</span>
+ <span class="identifier">point</span><span class="special">(</span><span class="number">4.0</span><span class="special">,</span> <span class="number">3.5</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="number">4.5</span><span class="special">,</span> <span class="number">2.0</span><span class="special">),</span>
+ <span class="identifier">point</span><span class="special">(</span><span class="number">6.0</span><span class="special">,</span> <span class="number">1.5</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="number">4.5</span><span class="special">,</span> <span class="number">1.0</span><span class="special">),</span>
+ <span class="identifier">point</span><span class="special">(</span><span class="number">4.0</span><span class="special">,</span> <span class="special">-</span><span class="number">0.5</span><span class="special">);</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">box</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"return_envelope:"</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</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">return_envelope</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">ring</span><span class="special">))</span>
+ <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">return_envelope:((2, -0.5), (6, 3.5))
+
+<img src="../../../../img/algorithms/return_envelope.png" alt="return_envelope">
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="envelope.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../envelope.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="../equals.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/equals.html b/libs/geometry/doc/html/geometry/reference/algorithms/equals.html
new file mode 100644
index 000000000..75849b3c3
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/equals.html
@@ -0,0 +1,779 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>equals</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="envelope/return_envelope.html" title="return_envelope">
+<link rel="next" href="expand.html" title="expand">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="envelope/return_envelope.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="expand.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.equals"></a><a class="link" href="equals.html" title="equals">equals</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp10531856"></a>
+Checks if a geometry are spatially equal.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.equals.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.equals.description"></a></span><a class="link" href="equals.html#geometry.reference.algorithms.equals.description">Description</a>
+ </h6>
+<p>
+ The free function equals checks if the first geometry is spatially equal
+ the second geometry. Spatially equal means that the same point set is included.
+ A box can therefore be spatially equal to a ring or a polygon, or a linestring
+ can be spatially equal to a multi-linestring or a segment. This only works
+ theoretically, not all combinations are implemented yet.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.equals.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.equals.synopsis"></a></span><a class="link" href="equals.html#geometry.reference.algorithms.equals.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">equals</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.equals.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.equals.parameters"></a></span><a class="link" href="equals.html#geometry.reference.algorithms.equals.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.equals.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.equals.returns"></a></span><a class="link" href="equals.html#geometry.reference.algorithms.equals.returns">Returns</a>
+ </h6>
+<p>
+ Returns true if two geometries are spatially equal
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.equals.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.equals.header"></a></span><a class="link" href="equals.html#geometry.reference.algorithms.equals.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">equals</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.equals.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.equals.conformance"></a></span><a class="link" href="equals.html#geometry.reference.algorithms.equals.conformance">Conformance</a>
+ </h6>
+<p>
+ The function equals implements function Equals from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.equals.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.equals.supported_geometries"></a></span><a class="link" href="equals.html#geometry.reference.algorithms.equals.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ Point
+ </p>
+ </th>
+<th>
+ <p>
+ Segment
+ </p>
+ </th>
+<th>
+ <p>
+ Box
+ </p>
+ </th>
+<th>
+ <p>
+ Linestring
+ </p>
+ </th>
+<th>
+ <p>
+ Ring
+ </p>
+ </th>
+<th>
+ <p>
+ Polygon
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPoint
+ </p>
+ </th>
+<th>
+ <p>
+ MultiLinestring
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPolygon
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.equals.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.equals.complexity"></a></span><a class="link" href="equals.html#geometry.reference.algorithms.equals.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.equals.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.equals.example"></a></span><a class="link" href="equals.html#geometry.reference.algorithms.equals.example">Example</a>
+ </h6>
+<p>
+ Shows the predicate equals, which returns true if two geometries are spatially
+ equal
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">::</span><span class="identifier">tuple_list_of</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">point</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">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">poly1</span><span class="special">,</span> <span class="identifier">poly2</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">exterior_ring</span><span class="special">(</span><span class="identifier">poly1</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">tuple_list_of</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">0</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="number">5</span><span class="special">)(</span><span class="number">5</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">0</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">exterior_ring</span><span class="special">(</span><span class="identifier">poly2</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">tuple_list_of</span><span class="special">(</span><span class="number">5</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">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="number">5</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="number">0</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"polygons are spatially "</span>
+ <span class="special">&lt;&lt;</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">equals</span><span class="special">(</span><span class="identifier">poly1</span><span class="special">,</span> <span class="identifier">poly2</span><span class="special">)</span> <span class="special">?</span> <span class="string">"equal"</span> <span class="special">:</span> <span class="string">"not equal"</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</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">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">box</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">assign_values</span><span class="special">(</span><span class="identifier">box</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="number">5</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"polygon and box are spatially "</span>
+ <span class="special">&lt;&lt;</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">equals</span><span class="special">(</span><span class="identifier">box</span><span class="special">,</span> <span class="identifier">poly2</span><span class="special">)</span> <span class="special">?</span> <span class="string">"equal"</span> <span class="special">:</span> <span class="string">"not equal"</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">polygons are spatially equal
+polygon and box are spatially equal
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="envelope/return_envelope.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="expand.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/expand.html b/libs/geometry/doc/html/geometry/reference/algorithms/expand.html
new file mode 100644
index 000000000..34ec8ba91
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/expand.html
@@ -0,0 +1,286 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>expand</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="equals.html" title="equals">
+<link rel="next" href="for_each.html" title="for_each">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="equals.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="for_each.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.expand"></a><a class="link" href="expand.html" title="expand">expand</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp10748048"></a>
+Expands a box using the bounding box (envelope) of another geometry (box,
+ point)
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.expand.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.expand.synopsis"></a></span><a class="link" href="expand.html#geometry.reference.algorithms.expand.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Box</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">expand</span><span class="special">(</span><span class="identifier">Box</span> <span class="special">&amp;</span> <span class="identifier">box</span><span class="special">,</span> <span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.expand.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.expand.parameters"></a></span><a class="link" href="expand.html#geometry.reference.algorithms.expand.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Box &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ type of the box
+ </p>
+ </td>
+<td>
+ <p>
+ box
+ </p>
+ </td>
+<td>
+ <p>
+ box to be expanded using another geometry, mutable
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept geometry which envelope (bounding
+ box) will be added to the box
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.expand.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.expand.header"></a></span><a class="link" href="expand.html#geometry.reference.algorithms.expand.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">expand</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.expand.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.expand.conformance"></a></span><a class="link" href="expand.html#geometry.reference.algorithms.expand.conformance">Conformance</a>
+ </h6>
+<p>
+ The function expand is not defined by OGC.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.expand.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.expand.behavior"></a></span><a class="link" href="expand.html#geometry.reference.algorithms.expand.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Box / Point
+ </p>
+ </td>
+<td>
+ <p>
+ Box is expanded to include the specified Point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box / Box
+ </p>
+ </td>
+<td>
+ <p>
+ Box is expanded to include the specified Box
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box / Other geometries
+ </p>
+ </td>
+<td>
+ <p>
+ Not yet supported in this version
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ To use expand with another geometry type then specified, use expand(make_envelope&lt;box_type&gt;(geometry)
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.expand.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.expand.complexity"></a></span><a class="link" href="expand.html#geometry.reference.algorithms.expand.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.expand.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.expand.example"></a></span><a class="link" href="expand.html#geometry.reference.algorithms.expand.example">Example</a>
+ </h6>
+<p>
+ Shows the usage of expand
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">list</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">short</span> <span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">box_type</span><span class="special">;</span>
+
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">expand</span><span class="special">;</span>
+
+ <span class="identifier">box_type</span> <span class="identifier">box</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">make_inverse</span><span class="special">&lt;</span><span class="identifier">box_type</span><span class="special">&gt;();</span> <a class="co" name="geometry.reference.algorithms.expand.c0" href="expand.html#geometry.reference.algorithms.expand.c1"><img src="../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+
+ <span class="identifier">expand</span><span class="special">(</span><span class="identifier">box</span><span class="special">,</span> <span class="identifier">point_type</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">expand</span><span class="special">(</span><span class="identifier">box</span><span class="special">,</span> <span class="identifier">point_type</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+ <span class="identifier">expand</span><span class="special">(</span><span class="identifier">box</span><span class="special">,</span> <span class="identifier">point_type</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="number">4</span><span class="special">));</span>
+ <span class="identifier">expand</span><span class="special">(</span><span class="identifier">box</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">make</span><span class="special">&lt;</span><span class="identifier">box_type</span><span class="special">&gt;(</span><span class="number">3</span><span class="special">,</span> <span class="number">3</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">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">box</span><span class="special">)</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list"><tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.expand.c1"></a><a href="#geometry.reference.algorithms.expand.c0"><img src="../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ expand is usually preceded by a call to assign_inverse or make_inverse
+ </p></td>
+</tr></table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">((0, 0), (5, 5))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="equals.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="for_each.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/for_each.html b/libs/geometry/doc/html/geometry/reference/algorithms/for_each.html
new file mode 100644
index 000000000..4dcb01237
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/for_each.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>for_each</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="expand.html" title="expand">
+<link rel="next" href="for_each/for_each_point.html" title="for_each_point">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="expand.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="for_each/for_each_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.for_each"></a><a class="link" href="for_each.html" title="for_each">for_each</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="for_each/for_each_point.html">for_each_point</a></span></dt>
+<dt><span class="section"><a href="for_each/for_each_segment.html">for_each_segment</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="expand.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="for_each/for_each_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/for_each/for_each_point.html b/libs/geometry/doc/html/geometry/reference/algorithms/for_each/for_each_point.html
new file mode 100644
index 000000000..efa1be628
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/for_each/for_each_point.html
@@ -0,0 +1,273 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>for_each_point</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../for_each.html" title="for_each">
+<link rel="prev" href="../for_each.html" title="for_each">
+<link rel="next" href="for_each_segment.html" title="for_each_segment">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../for_each.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../for_each.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="for_each_segment.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.for_each.for_each_point"></a><a class="link" href="for_each_point.html" title="for_each_point">for_each_point</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp10837872"></a>
+Applies function <span class="bold"><strong>f</strong></span> to each point.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_point.description"></a></span><a class="link" href="for_each_point.html#geometry.reference.algorithms.for_each.for_each_point.description">Description</a>
+ </h6>
+<p>
+ Applies a function <span class="bold"><strong>f</strong></span> (functor, having
+ operator() defined) to each point making up the geometry
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_point.synopsis"></a></span><a class="link" href="for_each_point.html#geometry.reference.algorithms.for_each.for_each_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Functor</span><span class="special">&gt;</span>
+<span class="identifier">Functor</span> <span class="identifier">for_each_point</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Functor</span> <span class="identifier">f</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_point.parameters"></a></span><a class="link" href="for_each_point.html#geometry.reference.algorithms.for_each.for_each_point.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Functor
+ </p>
+ </td>
+<td>
+ <p>
+ Function or class with operator()
+ </p>
+ </td>
+<td>
+ <p>
+ f
+ </p>
+ </td>
+<td>
+ <p>
+ Unary function, taking a point as argument
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_point.header"></a></span><a class="link" href="for_each_point.html#geometry.reference.algorithms.for_each.for_each_point.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">for_each</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_point.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_point.conformance"></a></span><a class="link" href="for_each_point.html#geometry.reference.algorithms.for_each.for_each_point.conformance">Conformance</a>
+ </h6>
+<p>
+ The function for_each_point is not defined by OGC.
+ </p>
+<p>
+ The function for_each_point conforms to the std::for_each function of
+ the C++ std-library.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_point.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_point.example"></a></span><a class="link" href="for_each_point.html#geometry.reference.algorithms.for_each.for_each_point.example">Example</a>
+ </h6>
+<p>
+ Convenient usage of for_each_point, rounding all points of a geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">round_coordinates</span>
+<span class="special">{</span>
+<span class="keyword">private</span> <span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">Point</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">coordinate_type</span><span class="special">;</span>
+ <span class="identifier">coordinate_type</span> <span class="identifier">factor</span><span class="special">;</span>
+
+ <span class="keyword">inline</span> <span class="identifier">coordinate_type</span> <span class="identifier">round</span><span class="special">(</span><span class="identifier">coordinate_type</span> <span class="identifier">value</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">floor</span><span class="special">(</span><span class="number">0.5</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">value</span> <span class="special">/</span> <span class="identifier">factor</span><span class="special">))</span> <span class="special">*</span> <span class="identifier">factor</span><span class="special">;</span>
+ <span class="special">}</span>
+
+<span class="keyword">public</span> <span class="special">:</span>
+ <span class="identifier">round_coordinates</span><span class="special">(</span><span class="identifier">coordinate_type</span> <span class="identifier">f</span><span class="special">)</span>
+ <span class="special">:</span> <span class="identifier">factor</span><span class="special">(</span><span class="identifier">f</span><span class="special">)</span>
+ <span class="special">{}</span>
+
+ <span class="keyword">inline</span> <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Point</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">get</span><span class="special">;</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">set</span><span class="special">;</span>
+ <span class="identifier">set</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">round</span><span class="special">(</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)));</span>
+ <span class="identifier">set</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">round</span><span class="special">(</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">p</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="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</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">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">poly</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">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,1.123 9.987,8.876 2.234,0 0),(3.345 4.456,7.654 8.765,9.123 5.432,3.345 4.456))"</span><span class="special">,</span> <span class="identifier">poly</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">for_each_point</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">round_coordinates</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</span><span class="number">0.1</span><span class="special">));</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Rounded: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Rounded: POLYGON((0 0,1.1 10,8.9 2.2,0 0),(3.3 4.5,7.7 8.8,9.1 5.4,3.3 4.5))
+</pre>
+<p>
+ Sample using for_each_point, using a function to list coordinates
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">list_coordinates</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">get</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"x = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="string">" y = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</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="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</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">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">poly</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">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 4,4 0,0 0))"</span><span class="special">,</span> <span class="identifier">poly</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">for_each_point</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">list_coordinates</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">x = 0 y = 0
+x = 0 y = 4
+x = 4 y = 0
+x = 0 y = 0
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../for_each.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../for_each.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="for_each_segment.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/for_each/for_each_segment.html b/libs/geometry/doc/html/geometry/reference/algorithms/for_each/for_each_segment.html
new file mode 100644
index 000000000..a8afebd54
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/for_each/for_each_segment.html
@@ -0,0 +1,261 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>for_each_segment</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../for_each.html" title="for_each">
+<link rel="prev" href="for_each_point.html" title="for_each_point">
+<link rel="next" href="../intersection.html" title="intersection">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="for_each_point.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../for_each.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="../intersection.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.for_each.for_each_segment"></a><a class="link" href="for_each_segment.html" title="for_each_segment">for_each_segment</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp11003984"></a>
+Applies function <span class="bold"><strong>f</strong></span> to each segment.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_segment.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_segment.description"></a></span><a class="link" href="for_each_segment.html#geometry.reference.algorithms.for_each.for_each_segment.description">Description</a>
+ </h6>
+<p>
+ Applies a function <span class="bold"><strong>f</strong></span> (functor, having
+ operator() defined) to each segment making up the geometry
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_segment.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_segment.synopsis"></a></span><a class="link" href="for_each_segment.html#geometry.reference.algorithms.for_each.for_each_segment.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Functor</span><span class="special">&gt;</span>
+<span class="identifier">Functor</span> <span class="identifier">for_each_segment</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Functor</span> <span class="identifier">f</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_segment.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_segment.parameters"></a></span><a class="link" href="for_each_segment.html#geometry.reference.algorithms.for_each.for_each_segment.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Functor
+ </p>
+ </td>
+<td>
+ <p>
+ Function or class with operator()
+ </p>
+ </td>
+<td>
+ <p>
+ f
+ </p>
+ </td>
+<td>
+ <p>
+ Unary function, taking a segment as argument
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_segment.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_segment.header"></a></span><a class="link" href="for_each_segment.html#geometry.reference.algorithms.for_each.for_each_segment.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">for_each</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_segment.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_segment.conformance"></a></span><a class="link" href="for_each_segment.html#geometry.reference.algorithms.for_each.for_each_segment.conformance">Conformance</a>
+ </h6>
+<p>
+ The function for_each_segment is not defined by OGC.
+ </p>
+<p>
+ The function for_each_segment conforms to the std::for_each function
+ of the C++ std-library.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.for_each.for_each_segment.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.for_each.for_each_segment.example"></a></span><a class="link" href="for_each_segment.html#geometry.reference.algorithms.for_each.for_each_segment.example">Example</a>
+ </h6>
+<p>
+ Sample using for_each_segment, using a functor to get the minimum and
+ maximum length of a segment in a linestring
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Segment</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">gather_segment_statistics</span>
+<span class="special">{</span>
+ <span class="comment">// Remember that if coordinates are integer, the length might be floating point</span>
+ <span class="comment">// So use "double" for integers. In other cases, use coordinate type</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">select_most_precise</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">Segment</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="keyword">double</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+
+ <span class="identifier">type</span> <span class="identifier">min_length</span><span class="special">,</span> <span class="identifier">max_length</span><span class="special">;</span>
+
+ <span class="comment">// Initialize min and max</span>
+ <span class="identifier">gather_segment_statistics</span><span class="special">()</span>
+ <span class="special">:</span> <span class="identifier">min_length</span><span class="special">(</span><span class="number">1e38</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">max_length</span><span class="special">(-</span><span class="number">1</span><span class="special">)</span>
+ <span class="special">{}</span>
+
+ <span class="comment">// This operator is called for each segment</span>
+ <span class="keyword">inline</span> <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Segment</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">s</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">type</span> <span class="identifier">length</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">length</span><span class="special">(</span><span class="identifier">s</span><span class="special">);</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">length</span> <span class="special">&lt;</span> <span class="identifier">min_length</span><span class="special">)</span> <span class="identifier">min_length</span> <span class="special">=</span> <span class="identifier">length</span><span class="special">;</span>
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">length</span> <span class="special">&gt;</span> <span class="identifier">max_length</span><span class="special">)</span> <span class="identifier">max_length</span> <span class="special">=</span> <span class="identifier">length</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="special">{</span>
+ <span class="comment">// Bring "+=" for a vector into scope</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">;</span>
+
+ <span class="comment">// Define a type</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+
+ <span class="comment">// Declare a linestring</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">polyline</span><span class="special">;</span>
+
+ <span class="comment">// Use Boost.Assign to initialize a linestring</span>
+ <span class="identifier">polyline</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">3</span><span class="special">,</span> <span class="number">3</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">1</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="number">6</span><span class="special">,</span> <span class="number">2</span><span class="special">),</span>
+ <span class="identifier">point</span><span class="special">(</span><span class="number">8</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">4</span><span class="special">,</span> <span class="special">-</span><span class="number">4</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="special">-</span><span class="number">1</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+
+
+ <span class="comment">// Declare the gathering class...</span>
+ <span class="identifier">gather_segment_statistics</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">referring_segment</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">functor</span><span class="special">;</span>
+
+ <span class="comment">// ... and use it, the essention.</span>
+ <span class="comment">// As also in std::for_each it is a const value, so retrieve it as a return value.</span>
+ <span class="identifier">functor</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">for_each_segment</span><span class="special">(</span><span class="identifier">polyline</span><span class="special">,</span> <span class="identifier">functor</span><span class="special">);</span>
+
+ <span class="comment">// Output the results</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"Min segment length: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">functor</span><span class="special">.</span><span class="identifier">min_length</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"Max segment length: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">functor</span><span class="special">.</span><span class="identifier">max_length</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Min segment length: 1.41421
+Max segment length: 5.65685
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="for_each_point.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../for_each.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="../intersection.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/intersection.html b/libs/geometry/doc/html/geometry/reference/algorithms/intersection.html
new file mode 100644
index 000000000..93149f969
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/intersection.html
@@ -0,0 +1,339 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>intersection</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="for_each/for_each_segment.html" title="for_each_segment">
+<link rel="next" href="intersects.html" title="intersects">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="for_each/for_each_segment.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="intersects.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.intersection"></a><a class="link" href="intersection.html" title="intersection">intersection</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp11125152"></a>
+Calculate the intersection of two geometries.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersection.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersection.description"></a></span><a class="link" href="intersection.html#geometry.reference.algorithms.intersection.description">Description</a>
+ </h6>
+<p>
+ The free function intersection calculates the spatial set theoretic intersection
+ of two geometries.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersection.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersection.synopsis"></a></span><a class="link" href="intersection.html#geometry.reference.algorithms.intersection.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">GeometryOut</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">intersection</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">,</span> <span class="identifier">GeometryOut</span> <span class="special">&amp;</span> <span class="identifier">geometry_out</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersection.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersection.parameters"></a></span><a class="link" href="intersection.html#geometry.reference.algorithms.intersection.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ GeometryOut &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Collection of geometries (e.g. std::vector, std::deque, boost::geometry::multi*)
+ of which the value_type fulfills a Point, LineString or Polygon
+ concept, or it is the output geometry (e.g. for a box)
+ </p>
+ </td>
+<td>
+ <p>
+ geometry_out
+ </p>
+ </td>
+<td>
+ <p>
+ The output geometry, either a multi_point, multi_polygon, multi_linestring,
+ or a box (for intersection of two boxes)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.intersection.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersection.header"></a></span><a class="link" href="intersection.html#geometry.reference.algorithms.intersection.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">intersection</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersection.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersection.conformance"></a></span><a class="link" href="intersection.html#geometry.reference.algorithms.intersection.conformance">Conformance</a>
+ </h6>
+<p>
+ The function intersection implements function Intersection from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersection.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersection.behavior"></a></span><a class="link" href="intersection.html#geometry.reference.algorithms.intersection.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ GeometryOut is a Point
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates intersection points of input geometries
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ GeometryOut is a Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates intersection linestrings of input geometries (NYI)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ GeometryOut is a Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates intersection polygons of input (multi)polygons and/or
+ boxes
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Check the <a class="link" href="../concepts/concept_polygon.html" title="Polygon Concept">Polygon
+ Concept</a> for the rules that polygon input for this algorithm should
+ fulfill
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.intersection.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersection.example"></a></span><a class="link" href="intersection.html#geometry.reference.algorithms.intersection.example">Example</a>
+ </h6>
+<p>
+ Shows the intersection of two polygons
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">deque</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="identifier">polygon</span> <span class="identifier">green</span><span class="special">,</span> <span class="identifier">blue</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"</span>
+ <span class="string">"(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))"</span><span class="special">,</span> <span class="identifier">green</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))"</span><span class="special">,</span> <span class="identifier">blue</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;</span> <span class="identifier">output</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">intersection</span><span class="special">(</span><span class="identifier">green</span><span class="special">,</span> <span class="identifier">blue</span><span class="special">,</span> <span class="identifier">output</span><span class="special">);</span>
+
+ <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"green &amp;&amp; blue:"</span> <span class="special">&lt;&lt;</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">polygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">output</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">i</span><span class="special">++</span> <span class="special">&lt;&lt;</span> <span class="string">": "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">green &amp;&amp; blue:
+0: 2.50205
+
+<img src="../../../img/algorithms/intersection.png" alt="intersection">
+
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.intersection.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersection.see_also"></a></span><a class="link" href="intersection.html#geometry.reference.algorithms.intersection.see_also">See also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="union_.html" title="union_">union</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="difference.html" title="difference">difference</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="sym_difference.html" title="sym_difference">sym_difference
+ (symmetric difference)</a>
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="for_each/for_each_segment.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="intersects.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/intersects.html b/libs/geometry/doc/html/geometry/reference/algorithms/intersects.html
new file mode 100644
index 000000000..852184c23
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/intersects.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>intersects</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="intersection.html" title="intersection">
+<link rel="next" href="intersects/intersects_1_one_geometry.html" title="intersects (one geometry)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intersection.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="intersects/intersects_1_one_geometry.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.intersects"></a><a class="link" href="intersects.html" title="intersects">intersects</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="intersects/intersects_1_one_geometry.html">intersects
+ (one geometry)</a></span></dt>
+<dt><span class="section"><a href="intersects/intersects_2_two_geometries.html">intersects
+ (two geometries)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intersection.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="intersects/intersects_1_one_geometry.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/intersects/intersects_1_one_geometry.html b/libs/geometry/doc/html/geometry/reference/algorithms/intersects/intersects_1_one_geometry.html
new file mode 100644
index 000000000..38b23e4ec
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/intersects/intersects_1_one_geometry.html
@@ -0,0 +1,188 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>intersects (one geometry)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../intersects.html" title="intersects">
+<link rel="prev" href="../intersects.html" title="intersects">
+<link rel="next" href="intersects_2_two_geometries.html" title="intersects (two geometries)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../intersects.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../intersects.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="intersects_2_two_geometries.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry"></a><a class="link" href="intersects_1_one_geometry.html" title="intersects (one geometry)">intersects
+ (one geometry)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp11232704"></a>
+Checks if a geometry has at least one intersection (crossing or self-tangency)
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.synopsis"></a></span><a class="link" href="intersects_1_one_geometry.html#geometry.reference.algorithms.intersects.intersects_1_one_geometry.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">intersects</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.parameters"></a></span><a class="link" href="intersects_1_one_geometry.html#geometry.reference.algorithms.intersects.intersects_1_one_geometry.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.returns"></a></span><a class="link" href="intersects_1_one_geometry.html#geometry.reference.algorithms.intersects.intersects_1_one_geometry.returns">Returns</a>
+ </h6>
+<p>
+ Returns true if the geometry is self-intersecting
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.header"></a></span><a class="link" href="intersects_1_one_geometry.html#geometry.reference.algorithms.intersects.intersects_1_one_geometry.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">intersects</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.conformance"></a></span><a class="link" href="intersects_1_one_geometry.html#geometry.reference.algorithms.intersects.intersects_1_one_geometry.conformance">Conformance</a>
+ </h6>
+<p>
+ The function intersects implements function Intersects from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC Simple Feature
+ Specification</a>.
+ </p>
+<p>
+ The version with one parameter is additional and not described in the
+ OGC standard
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_1_one_geometry.examples"></a></span><a class="link" href="intersects_1_one_geometry.html#geometry.reference.algorithms.intersects.intersects_1_one_geometry.examples">Examples</a>
+ </h6>
+<p>
+ Check if two linestrings intersect each other
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Calculate the intersects of a cartesian polygon</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">P</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">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;</span> <span class="identifier">line1</span><span class="special">,</span> <span class="identifier">line2</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">read_wkt</span><span class="special">(</span><span class="string">"linestring(1 1,2 2,3 3)"</span><span class="special">,</span> <span class="identifier">line1</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">read_wkt</span><span class="special">(</span><span class="string">"linestring(2 1,1 2,4 0)"</span><span class="special">,</span> <span class="identifier">line2</span><span class="special">);</span>
+
+ <span class="keyword">bool</span> <span class="identifier">b</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">intersects</span><span class="special">(</span><span class="identifier">line1</span><span class="special">,</span> <span class="identifier">line2</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Intersects: "</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">?</span> <span class="string">"YES"</span> <span class="special">:</span> <span class="string">"NO"</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Intersects: YES
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../intersects.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../intersects.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="intersects_2_two_geometries.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/intersects/intersects_2_two_geometries.html b/libs/geometry/doc/html/geometry/reference/algorithms/intersects/intersects_2_two_geometries.html
new file mode 100644
index 000000000..26dc2a544
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/intersects/intersects_2_two_geometries.html
@@ -0,0 +1,212 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>intersects (two geometries)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../intersects.html" title="intersects">
+<link rel="prev" href="intersects_1_one_geometry.html" title="intersects (one geometry)">
+<link rel="next" href="../length.html" title="length">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intersects_1_one_geometry.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../intersects.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="../length.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries"></a><a class="link" href="intersects_2_two_geometries.html" title="intersects (two geometries)">intersects
+ (two geometries)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp11303664"></a>
+Checks if two geometries have at least one intersection.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.synopsis"></a></span><a class="link" href="intersects_2_two_geometries.html#geometry.reference.algorithms.intersects.intersects_2_two_geometries.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">intersects</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.parameters"></a></span><a class="link" href="intersects_2_two_geometries.html#geometry.reference.algorithms.intersects.intersects_2_two_geometries.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.returns"></a></span><a class="link" href="intersects_2_two_geometries.html#geometry.reference.algorithms.intersects.intersects_2_two_geometries.returns">Returns</a>
+ </h6>
+<p>
+ Returns true if two geometries intersect each other
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.header"></a></span><a class="link" href="intersects_2_two_geometries.html#geometry.reference.algorithms.intersects.intersects_2_two_geometries.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">intersects</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.conformance"></a></span><a class="link" href="intersects_2_two_geometries.html#geometry.reference.algorithms.intersects.intersects_2_two_geometries.conformance">Conformance</a>
+ </h6>
+<p>
+ The function intersects implements function Intersects from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC Simple Feature
+ Specification</a>.
+ </p>
+<p>
+ The version with one parameter is additional and not described in the
+ OGC standard
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.intersects.intersects_2_two_geometries.examples"></a></span><a class="link" href="intersects_2_two_geometries.html#geometry.reference.algorithms.intersects.intersects_2_two_geometries.examples">Examples</a>
+ </h6>
+<p>
+ Check if two linestrings intersect each other
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Calculate the intersects of a cartesian polygon</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">P</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">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;</span> <span class="identifier">line1</span><span class="special">,</span> <span class="identifier">line2</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">read_wkt</span><span class="special">(</span><span class="string">"linestring(1 1,2 2,3 3)"</span><span class="special">,</span> <span class="identifier">line1</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">read_wkt</span><span class="special">(</span><span class="string">"linestring(2 1,1 2,4 0)"</span><span class="special">,</span> <span class="identifier">line2</span><span class="special">);</span>
+
+ <span class="keyword">bool</span> <span class="identifier">b</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">intersects</span><span class="special">(</span><span class="identifier">line1</span><span class="special">,</span> <span class="identifier">line2</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Intersects: "</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">?</span> <span class="string">"YES"</span> <span class="special">:</span> <span class="string">"NO"</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Intersects: YES
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intersects_1_one_geometry.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../intersects.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="../length.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/length.html b/libs/geometry/doc/html/geometry/reference/algorithms/length.html
new file mode 100644
index 000000000..e21f8ba83
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/length.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>length</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="intersects/intersects_2_two_geometries.html" title="intersects (two geometries)">
+<link rel="next" href="length/length_1.html" title="length">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intersects/intersects_2_two_geometries.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="length/length_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.length"></a><a class="link" href="length.html" title="length">length</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="length/length_1.html">length</a></span></dt>
+<dt><span class="section"><a href="length/length_2_with_strategy.html">length
+ (with strategy)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intersects/intersects_2_two_geometries.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="length/length_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/length/length_1.html b/libs/geometry/doc/html/geometry/reference/algorithms/length/length_1.html
new file mode 100644
index 000000000..e948705b4
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/length/length_1.html
@@ -0,0 +1,256 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>length</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../length.html" title="length">
+<link rel="prev" href="../length.html" title="length">
+<link rel="next" href="length_2_with_strategy.html" title="length (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../length.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../length.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="length_2_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.length.length_1"></a><a class="link" href="length_1.html" title="length">length</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp11380112"></a>
+Calculates the length of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_1.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_1.description"></a></span><a class="link" href="length_1.html#geometry.reference.algorithms.length.length_1.description">Description</a>
+ </h6>
+<p>
+ The free function length calculates the length (the sum of distances
+ between consecutive points) of a geometry. It uses the default strategy,
+ based on the coordinate system of the geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_1.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_1.synopsis"></a></span><a class="link" href="length_1.html#geometry.reference.algorithms.length.length_1.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">dispatch</span><span class="special">::</span><span class="identifier">devarianted_length</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;::</span><span class="identifier">result_type</span> <span class="identifier">length</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_1.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_1.parameters"></a></span><a class="link" href="length_1.html#geometry.reference.algorithms.length.length_1.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.length.length_1.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_1.returns"></a></span><a class="link" href="length_1.html#geometry.reference.algorithms.length.length_1.returns">Returns</a>
+ </h6>
+<p>
+ The calculated length
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_1.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_1.header"></a></span><a class="link" href="length_1.html#geometry.reference.algorithms.length.length_1.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">length</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_1.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_1.conformance"></a></span><a class="link" href="length_1.html#geometry.reference.algorithms.length.length_1.conformance">Conformance</a>
+ </h6>
+<p>
+ The function length implements function Length from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_1.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_1.behavior"></a></span><a class="link" href="length_1.html#geometry.reference.algorithms.length.length_1.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ pointlike (e.g. point)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the length
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 0
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.length.length_1.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_1.complexity"></a></span><a class="link" href="length_1.html#geometry.reference.algorithms.length.length_1.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_1.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_1.examples"></a></span><a class="link" href="length_1.html#geometry.reference.algorithms.length.length_1.examples">Examples</a>
+ </h6>
+<p>
+ The following simple example shows the calculation of the length of a
+ linestring containing three points
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span>
+ <span class="identifier">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">line</span><span class="special">;</span>
+ <span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"linestring(0 0,1 1,4 8,3 2)"</span><span class="special">,</span> <span class="identifier">line</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"linestring length is "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">length</span><span class="special">(</span><span class="identifier">line</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" units"</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">linestring length is 15.1127 units
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../length.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../length.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="length_2_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/length/length_2_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/length/length_2_with_strategy.html
new file mode 100644
index 000000000..862a5c42e
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/length/length_2_with_strategy.html
@@ -0,0 +1,292 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>length (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../length.html" title="length">
+<link rel="prev" href="length_1.html" title="length">
+<link rel="next" href="../make.html" title="make">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="length_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../length.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="../make.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.length.length_2_with_strategy"></a><a class="link" href="length_2_with_strategy.html" title="length (with strategy)">length
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp11452064"></a>
+Calculates the length of a geometry using the specified strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_2_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_2_with_strategy.description"></a></span><a class="link" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.description">Description</a>
+ </h6>
+<p>
+ The free function length calculates the length (the sum of distances
+ between consecutive points) of a geometry using the specified strategy.
+ Reasons to specify a strategy include: use another coordinate system
+ for calculations; construct the strategy beforehand (e.g. with the radius
+ of the Earth); select a strategy when there are more than one available
+ for a calculation.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_2_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_2_with_strategy.synopsis"></a></span><a class="link" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="identifier">dispatch</span><span class="special">::</span><span class="identifier">devarianted_length</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;::</span><span class="identifier">result_type</span> <span class="identifier">length</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_2_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_2_with_strategy.parameters"></a></span><a class="link" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a distance Strategy Concept
+ </p>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ The strategy which will be used for distance calculations
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.length.length_2_with_strategy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_2_with_strategy.returns"></a></span><a class="link" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.returns">Returns</a>
+ </h6>
+<p>
+ The calculated length
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_2_with_strategy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_2_with_strategy.header"></a></span><a class="link" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">length</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_2_with_strategy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_2_with_strategy.conformance"></a></span><a class="link" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.conformance">Conformance</a>
+ </h6>
+<p>
+ The function length implements function Length from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_2_with_strategy.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_2_with_strategy.behavior"></a></span><a class="link" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ pointlike (e.g. point)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 0
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the length
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 0
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.length.length_2_with_strategy.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_2_with_strategy.complexity"></a></span><a class="link" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.length.length_2_with_strategy.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.length.length_2_with_strategy.examples"></a></span><a class="link" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.examples">Examples</a>
+ </h6>
+<p>
+ The following example shows the length measured over a sphere, expressed
+ in kilometers. To do that the radius of the sphere must be specified
+ in the constructor of the strategy.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">degree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">P</span><span class="special">;</span>
+ <span class="identifier">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;</span> <span class="identifier">line</span><span class="special">;</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">P</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">41</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">P</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">48</span><span class="special">));</span>
+ <span class="identifier">line</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">P</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="number">52</span><span class="special">));</span>
+ <span class="keyword">double</span> <span class="keyword">const</span> <span class="identifier">mean_radius</span> <span class="special">=</span> <span class="number">6371.0</span><span class="special">;</span> <a class="co" name="geometry.reference.algorithms.length.length_2_with_strategy.c0" href="length_2_with_strategy.html#geometry.reference.algorithms.length.length_2_with_strategy.c1"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"length is "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">length</span><span class="special">(</span><span class="identifier">line</span><span class="special">,</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">distance</span><span class="special">::</span><span class="identifier">haversine</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;(</span><span class="identifier">mean_radius</span><span class="special">)</span> <span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" kilometers "</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list"><tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.length.length_2_with_strategy.c1"></a><a href="#geometry.reference.algorithms.length.length_2_with_strategy.c0"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ <a href="http://en.wikipedia.org/wiki/Earth_radius" target="_top">Wiki</a>
+ </p></td>
+</tr></table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">length is 1272.03 kilometers
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="length_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../length.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="../make.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/make.html b/libs/geometry/doc/html/geometry/reference/algorithms/make.html
new file mode 100644
index 000000000..2fe882ed0
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/make.html
@@ -0,0 +1,51 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>make</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="length/length_2_with_strategy.html" title="length (with strategy)">
+<link rel="next" href="make/make_2_2_coordinate_values.html" title="make (2 coordinate values)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="length/length_2_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="make/make_2_2_coordinate_values.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.make"></a><a class="link" href="make.html" title="make">make</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="make/make_2_2_coordinate_values.html">make
+ (2 coordinate values)</a></span></dt>
+<dt><span class="section"><a href="make/make_3_3_coordinate_values.html">make
+ (3 coordinate values)</a></span></dt>
+<dt><span class="section"><a href="make/make_inverse.html">make_inverse</a></span></dt>
+<dt><span class="section"><a href="make/make_zero.html">make_zero</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="length/length_2_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="make/make_2_2_coordinate_values.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/make/make_2_2_coordinate_values.html b/libs/geometry/doc/html/geometry/reference/algorithms/make/make_2_2_coordinate_values.html
new file mode 100644
index 000000000..82622145c
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/make/make_2_2_coordinate_values.html
@@ -0,0 +1,249 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>make (2 coordinate values)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../make.html" title="make">
+<link rel="prev" href="../make.html" title="make">
+<link rel="next" href="make_3_3_coordinate_values.html" title="make (3 coordinate values)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../make.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../make.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="make_3_3_coordinate_values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.make.make_2_2_coordinate_values"></a><a class="link" href="make_2_2_coordinate_values.html" title="make (2 coordinate values)">make
+ (2 coordinate values)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp11540576"></a>
+Construct a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.synopsis"></a></span><a class="link" href="make_2_2_coordinate_values.html#geometry.reference.algorithms.make.make_2_2_coordinate_values.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Type</span><span class="special">&gt;</span>
+<span class="identifier">Geometry</span> <span class="identifier">make</span><span class="special">(</span><span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c1</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.parameters"></a></span><a class="link" href="make_2_2_coordinate_values.html#geometry.reference.algorithms.make.make_2_2_coordinate_values.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c1
+ </p>
+ </td>
+<td>
+ <p>
+ First coordinate (usually x-coordinate)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c2
+ </p>
+ </td>
+<td>
+ <p>
+ Second coordinate (usually y-coordinate)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.returns"></a></span><a class="link" href="make_2_2_coordinate_values.html#geometry.reference.algorithms.make.make_2_2_coordinate_values.returns">Returns</a>
+ </h6>
+<p>
+ The constructed geometry, here: a 2D point
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.header"></a></span><a class="link" href="make_2_2_coordinate_values.html#geometry.reference.algorithms.make.make_2_2_coordinate_values.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">make</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.example"></a></span><a class="link" href="make_2_2_coordinate_values.html#geometry.reference.algorithms.make.make_2_2_coordinate_values.example">Example</a>
+ </h6>
+<p>
+ Shows the usage of make as a generic constructor for different point
+ types
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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="keyword">register</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">struct</span> <span class="identifier">mypoint</span> <span class="special">{</span> <span class="keyword">float</span> <span class="identifier">_x</span><span class="special">,</span> <span class="identifier">_y</span><span class="special">;</span> <span class="special">};</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_POINT_2D</span><span class="special">(</span><span class="identifier">mypoint</span><span class="special">,</span> <span class="keyword">float</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">_x</span><span class="special">,</span> <span class="identifier">_y</span><span class="special">)</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">construct_and_display</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">make</span><span class="special">;</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">get</span><span class="special">;</span>
+
+ <span class="identifier">Point</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">make</span><span class="special">&lt;</span><span class="identifier">Point</span><span class="special">&gt;(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"x="</span> <span class="special">&lt;&lt;</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="string">" y="</span> <span class="special">&lt;&lt;</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" ("</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">Point</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="string">")"</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</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="special">{</span>
+ <span class="identifier">construct_and_display</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;();</span>
+ <span class="identifier">construct_and_display</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;();</span>
+ <span class="identifier">construct_and_display</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;();</span>
+ <span class="identifier">construct_and_display</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">::</span><span class="identifier">point_data</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;();</span>
+ <span class="identifier">construct_and_display</span><span class="special">&lt;</span><span class="identifier">mypoint</span><span class="special">&gt;();</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Output (compiled using gcc):
+ </p>
+<pre class="programlisting">x=1 y=2 (N5boost8geometry5model2d28point_xyIdNS0_2cs9cartesianEEE)
+x=1 y=2 (N5boost8geometry5model2d28point_xyIiNS0_2cs9cartesianEEE)
+x=1 y=2 (N5boost6tuples5tupleIddNS0_9null_typeES2_S2_S2_S2_S2_S2_S2_EE)
+x=1 y=2 (N5boost7polygon10point_dataIiEE)
+x=1 y=2 (7mypoint)
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_2_2_coordinate_values.see_also"></a></span><a class="link" href="make_2_2_coordinate_values.html#geometry.reference.algorithms.make.make_2_2_coordinate_values.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../assign/assign_values_3_2_coordinate_values.html" title="assign_values (2 coordinate values)">assign</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../make.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../make.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="make_3_3_coordinate_values.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/make/make_3_3_coordinate_values.html b/libs/geometry/doc/html/geometry/reference/algorithms/make/make_3_3_coordinate_values.html
new file mode 100644
index 000000000..3ca452a09
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/make/make_3_3_coordinate_values.html
@@ -0,0 +1,242 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>make (3 coordinate values)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../make.html" title="make">
+<link rel="prev" href="make_2_2_coordinate_values.html" title="make (2 coordinate values)">
+<link rel="next" href="make_inverse.html" title="make_inverse">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="make_2_2_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../make.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="make_inverse.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.make.make_3_3_coordinate_values"></a><a class="link" href="make_3_3_coordinate_values.html" title="make (3 coordinate values)">make
+ (3 coordinate values)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp11645568"></a>
+Construct a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.synopsis"></a></span><a class="link" href="make_3_3_coordinate_values.html#geometry.reference.algorithms.make.make_3_3_coordinate_values.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Type</span><span class="special">&gt;</span>
+<span class="identifier">Geometry</span> <span class="identifier">make</span><span class="special">(</span><span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c1</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c2</span><span class="special">,</span> <span class="identifier">Type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">c3</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.parameters"></a></span><a class="link" href="make_3_3_coordinate_values.html#geometry.reference.algorithms.make.make_3_3_coordinate_values.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c1
+ </p>
+ </td>
+<td>
+ <p>
+ First coordinate (usually x-coordinate)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c2
+ </p>
+ </td>
+<td>
+ <p>
+ Second coordinate (usually y-coordinate)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Type const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...) to specify the coordinates
+ </p>
+ </td>
+<td>
+ <p>
+ c3
+ </p>
+ </td>
+<td>
+ <p>
+ Third coordinate (usually z-coordinate)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.returns"></a></span><a class="link" href="make_3_3_coordinate_values.html#geometry.reference.algorithms.make.make_3_3_coordinate_values.returns">Returns</a>
+ </h6>
+<p>
+ The constructed geometry, here: a 3D point
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.header"></a></span><a class="link" href="make_3_3_coordinate_values.html#geometry.reference.algorithms.make.make_3_3_coordinate_values.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">make</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.example"></a></span><a class="link" href="make_3_3_coordinate_values.html#geometry.reference.algorithms.make.make_3_3_coordinate_values.example">Example</a>
+ </h6>
+<p>
+ Using make to construct a three dimensional point
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">3</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">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="identifier">point_type</span> <span class="identifier">p</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">make</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">(1, 2, 3)
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_3_3_coordinate_values.see_also"></a></span><a class="link" href="make_3_3_coordinate_values.html#geometry.reference.algorithms.make.make_3_3_coordinate_values.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../assign/assign_values_4_3_coordinate_values.html" title="assign_values (3 coordinate values)">assign</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="make_2_2_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../make.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="make_inverse.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/make/make_inverse.html b/libs/geometry/doc/html/geometry/reference/algorithms/make/make_inverse.html
new file mode 100644
index 000000000..c47b8cb3c
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/make/make_inverse.html
@@ -0,0 +1,195 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>make_inverse</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../make.html" title="make">
+<link rel="prev" href="make_3_3_coordinate_values.html" title="make (3 coordinate values)">
+<link rel="next" href="make_zero.html" title="make_zero">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="make_3_3_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../make.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="make_zero.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.make.make_inverse"></a><a class="link" href="make_inverse.html" title="make_inverse">make_inverse</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp11712416"></a>
+Construct a box with inverse infinite coordinates.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_inverse.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_inverse.description"></a></span><a class="link" href="make_inverse.html#geometry.reference.algorithms.make.make_inverse.description">Description</a>
+ </h6>
+<p>
+ The make_inverse function initializes a 2D or 3D box with large coordinates,
+ the min corner is very large, the max corner is very small. This is useful
+ e.g. in combination with the expand function, to determine the bounding
+ box of a series of geometries.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_inverse.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_inverse.synopsis"></a></span><a class="link" href="make_inverse.html#geometry.reference.algorithms.make.make_inverse.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">Geometry</span> <span class="identifier">make_inverse</span><span class="special">()</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_inverse.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_inverse.parameters"></a></span><a class="link" href="make_inverse.html#geometry.reference.algorithms.make.make_inverse.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.make.make_inverse.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_inverse.returns"></a></span><a class="link" href="make_inverse.html#geometry.reference.algorithms.make.make_inverse.returns">Returns</a>
+ </h6>
+<p>
+ The constructed geometry, here: a box
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_inverse.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_inverse.header"></a></span><a class="link" href="make_inverse.html#geometry.reference.algorithms.make.make_inverse.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">make</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_inverse.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_inverse.example"></a></span><a class="link" href="make_inverse.html#geometry.reference.algorithms.make.make_inverse.example">Example</a>
+ </h6>
+<p>
+ Usage of make_inverse and expand to conveniently determine bounding box
+ of several objects
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">box</span><span class="special">;</span>
+
+ <span class="identifier">box</span> <span class="identifier">all</span> <span class="special">=</span> <span class="identifier">make_inverse</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;();</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">all</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="identifier">expand</span><span class="special">(</span><span class="identifier">all</span><span class="special">,</span> <span class="identifier">make</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">));</span>
+ <span class="identifier">expand</span><span class="special">(</span><span class="identifier">all</span><span class="special">,</span> <span class="identifier">make</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="number">2</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">6</span><span class="special">));</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">all</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">((1.79769e+308, 1.79769e+308), (-1.79769e+308, -1.79769e+308))
+((0, 0), (5, 6))
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.make.make_inverse.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_inverse.see_also"></a></span><a class="link" href="make_inverse.html#geometry.reference.algorithms.make.make_inverse.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../assign/assign_inverse.html" title="assign_inverse">assign_inverse</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="make_3_3_coordinate_values.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../make.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="make_zero.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/make/make_zero.html b/libs/geometry/doc/html/geometry/reference/algorithms/make/make_zero.html
new file mode 100644
index 000000000..48a39d971
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/make/make_zero.html
@@ -0,0 +1,144 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>make_zero</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../make.html" title="make">
+<link rel="prev" href="make_inverse.html" title="make_inverse">
+<link rel="next" href="../num_geometries.html" title="num_geometries">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="make_inverse.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../make.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="../num_geometries.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.make.make_zero"></a><a class="link" href="make_zero.html" title="make_zero">make_zero</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp11782448"></a>
+Construct a geometry with its coordinates initialized to zero.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_zero.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_zero.description"></a></span><a class="link" href="make_zero.html#geometry.reference.algorithms.make.make_zero.description">Description</a>
+ </h6>
+<p>
+ The make_zero function initializes a 2D or 3D point or box with coordinates
+ of zero
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_zero.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_zero.synopsis"></a></span><a class="link" href="make_zero.html#geometry.reference.algorithms.make.make_zero.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">Geometry</span> <span class="identifier">make_zero</span><span class="special">()</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_zero.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_zero.parameters"></a></span><a class="link" href="make_zero.html#geometry.reference.algorithms.make.make_zero.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.make.make_zero.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_zero.returns"></a></span><a class="link" href="make_zero.html#geometry.reference.algorithms.make.make_zero.returns">Returns</a>
+ </h6>
+<p>
+ The constructed and zero-initialized geometry
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.make.make_zero.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.make.make_zero.header"></a></span><a class="link" href="make_zero.html#geometry.reference.algorithms.make.make_zero.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">make</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="make_inverse.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../make.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="../num_geometries.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/num_geometries.html b/libs/geometry/doc/html/geometry/reference/algorithms/num_geometries.html
new file mode 100644
index 000000000..84c65d5c8
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/num_geometries.html
@@ -0,0 +1,249 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>num_geometries</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="make/make_zero.html" title="make_zero">
+<link rel="next" href="num_interior_rings.html" title="num_interior_rings">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="make/make_zero.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="num_interior_rings.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.num_geometries"></a><a class="link" href="num_geometries.html" title="num_geometries">num_geometries</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp11807824"></a>
+Calculates the number of geometries of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_geometries.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_geometries.description"></a></span><a class="link" href="num_geometries.html#geometry.reference.algorithms.num_geometries.description">Description</a>
+ </h6>
+<p>
+ The free function num_geometries calculates the number of geometries of
+ a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_geometries.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_geometries.synopsis"></a></span><a class="link" href="num_geometries.html#geometry.reference.algorithms.num_geometries.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">num_geometries</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_geometries.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_geometries.parameters"></a></span><a class="link" href="num_geometries.html#geometry.reference.algorithms.num_geometries.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.num_geometries.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_geometries.returns"></a></span><a class="link" href="num_geometries.html#geometry.reference.algorithms.num_geometries.returns">Returns</a>
+ </h6>
+<p>
+ The calculated number of geometries
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_geometries.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_geometries.header"></a></span><a class="link" href="num_geometries.html#geometry.reference.algorithms.num_geometries.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">num_geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_geometries.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_geometries.conformance"></a></span><a class="link" href="num_geometries.html#geometry.reference.algorithms.num_geometries.conformance">Conformance</a>
+ </h6>
+<p>
+ The function num_geometries implements function NumGeometries from the
+ <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC Simple Feature
+ Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_geometries.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_geometries.behavior"></a></span><a class="link" href="num_geometries.html#geometry.reference.algorithms.num_geometries.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ single (e.g. point, polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 1
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ multiple (e.g. multi_point, multi_polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns boost::size(geometry); the input is considered as a range
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.num_geometries.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_geometries.complexity"></a></span><a class="link" href="num_geometries.html#geometry.reference.algorithms.num_geometries.complexity">Complexity</a>
+ </h6>
+<p>
+ Constant
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_geometries.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_geometries.examples"></a></span><a class="link" href="num_geometries.html#geometry.reference.algorithms.num_geometries.examples">Examples</a>
+ </h6>
+<p>
+ Get the number of geometries making up a multi-geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</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">model</span><span class="special">::</span><span class="identifier">multi_polygon</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">mp</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">read_wkt</span><span class="special">(</span><span class="string">"MULTIPOLYGON(((0 0,0 10,10 0,0 0),(1 1,1 9,9 1,1 1)),((10 10,10 7,7 10,10 10)))"</span><span class="special">,</span> <span class="identifier">mp</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Number of geometries: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">num_geometries</span><span class="special">(</span><span class="identifier">mp</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Number of geometries: 2
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="make/make_zero.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="num_interior_rings.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/num_interior_rings.html b/libs/geometry/doc/html/geometry/reference/algorithms/num_interior_rings.html
new file mode 100644
index 000000000..b84498b8f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/num_interior_rings.html
@@ -0,0 +1,270 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>num_interior_rings</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="num_geometries.html" title="num_geometries">
+<link rel="next" href="num_points.html" title="num_points">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="num_geometries.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="num_points.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.num_interior_rings"></a><a class="link" href="num_interior_rings.html" title="num_interior_rings">num_interior_rings</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp11889664"></a>
+Calculates the number of interior rings of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_interior_rings.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_interior_rings.description"></a></span><a class="link" href="num_interior_rings.html#geometry.reference.algorithms.num_interior_rings.description">Description</a>
+ </h6>
+<p>
+ The free function num_interior_rings calculates the number of interior
+ rings of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_interior_rings.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_interior_rings.synopsis"></a></span><a class="link" href="num_interior_rings.html#geometry.reference.algorithms.num_interior_rings.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">num_interior_rings</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_interior_rings.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_interior_rings.parameters"></a></span><a class="link" href="num_interior_rings.html#geometry.reference.algorithms.num_interior_rings.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.num_interior_rings.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_interior_rings.returns"></a></span><a class="link" href="num_interior_rings.html#geometry.reference.algorithms.num_interior_rings.returns">Returns</a>
+ </h6>
+<p>
+ The calculated number of interior rings
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_interior_rings.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_interior_rings.header"></a></span><a class="link" href="num_interior_rings.html#geometry.reference.algorithms.num_interior_rings.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">num_interior_rings</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_interior_rings.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_interior_rings.conformance"></a></span><a class="link" href="num_interior_rings.html#geometry.reference.algorithms.num_interior_rings.conformance">Conformance</a>
+ </h6>
+<p>
+ The function num_interior_ring implements function NumInteriorRing from
+ the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC Simple
+ Feature Specification</a>.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Boost.Geometry adds an "s"
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.num_interior_rings.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_interior_rings.behavior"></a></span><a class="link" href="num_interior_rings.html#geometry.reference.algorithms.num_interior_rings.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the number of its interior rings
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the number of the interior rings of all polygons
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Other geometries
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 0
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.num_interior_rings.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_interior_rings.complexity"></a></span><a class="link" href="num_interior_rings.html#geometry.reference.algorithms.num_interior_rings.complexity">Complexity</a>
+ </h6>
+<p>
+ Constant
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_interior_rings.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_interior_rings.examples"></a></span><a class="link" href="num_interior_rings.html#geometry.reference.algorithms.num_interior_rings.examples">Examples</a>
+ </h6>
+<p>
+ Get the number of interior rings in a multi-polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</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">model</span><span class="special">::</span><span class="identifier">multi_polygon</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">mp</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">read_wkt</span><span class="special">(</span><span class="string">"MULTIPOLYGON(((0 0,0 10,10 0,0 0),(1 1,1 9,9 1,1 1)),((10 10,10 7,7 10,10 10)))"</span><span class="special">,</span> <span class="identifier">mp</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Number of interior rings: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">num_interior_rings</span><span class="special">(</span><span class="identifier">mp</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Number of interior rings: 1
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="num_geometries.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="num_points.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/num_points.html b/libs/geometry/doc/html/geometry/reference/algorithms/num_points.html
new file mode 100644
index 000000000..8ec55bb2c
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/num_points.html
@@ -0,0 +1,341 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>num_points</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="num_interior_rings.html" title="num_interior_rings">
+<link rel="next" href="overlaps.html" title="overlaps">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="num_interior_rings.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="overlaps.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.num_points"></a><a class="link" href="num_points.html" title="num_points">num_points</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp11989824"></a>
+Calculates the number of points of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_points.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_points.description"></a></span><a class="link" href="num_points.html#geometry.reference.algorithms.num_points.description">Description</a>
+ </h6>
+<p>
+ The free function num_points calculates the number of points of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_points.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_points.synopsis"></a></span><a class="link" href="num_points.html#geometry.reference.algorithms.num_points.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">num_points</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">add_for_open</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_points.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_points.parameters"></a></span><a class="link" href="num_points.html#geometry.reference.algorithms.num_points.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bool
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ add_for_open
+ </p>
+ </td>
+<td>
+ <p>
+ add one for open geometries (i.e. polygon types which are not
+ closed)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.num_points.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_points.returns"></a></span><a class="link" href="num_points.html#geometry.reference.algorithms.num_points.returns">Returns</a>
+ </h6>
+<p>
+ The calculated number of points
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_points.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_points.header"></a></span><a class="link" href="num_points.html#geometry.reference.algorithms.num_points.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">num_points</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_points.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_points.conformance"></a></span><a class="link" href="num_points.html#geometry.reference.algorithms.num_points.conformance">Conformance</a>
+ </h6>
+<p>
+ The function num_points implements function NumPoints from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ num_points can be called for any geometry and not just linestrings (as
+ the standard describes)
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.num_points.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_points.behavior"></a></span><a class="link" href="num_points.html#geometry.reference.algorithms.num_points.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 1
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Returns 4
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Rangelike (linestring, ring)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns boost::size(geometry)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Other geometries
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the sum of the number of points of its elements
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Open geometries
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the sum of the number of points of its elements, it adds
+ one for open (per ring) if specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Closed geometries
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the sum of the number of points of its elements
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.num_points.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_points.complexity"></a></span><a class="link" href="num_points.html#geometry.reference.algorithms.num_points.complexity">Complexity</a>
+ </h6>
+<p>
+ Constant or Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.num_points.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.num_points.examples"></a></span><a class="link" href="num_points.html#geometry.reference.algorithms.num_points.examples">Examples</a>
+ </h6>
+<p>
+ Get the number of points in a geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">multi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</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">model</span><span class="special">::</span><span class="identifier">multi_polygon</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">mp</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">read_wkt</span><span class="special">(</span><span class="string">"MULTIPOLYGON(((0 0,0 10,10 0,0 0),(1 1,1 9,9 1,1 1)),((10 10,10 7,7 10,10 10)))"</span><span class="special">,</span> <span class="identifier">mp</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Number of points: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">num_points</span><span class="special">(</span><span class="identifier">mp</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Number of points: 12
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="num_interior_rings.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="overlaps.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/overlaps.html b/libs/geometry/doc/html/geometry/reference/algorithms/overlaps.html
new file mode 100644
index 000000000..25d8fb530
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/overlaps.html
@@ -0,0 +1,156 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>overlaps</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="num_points.html" title="num_points">
+<link rel="next" href="perimeter.html" title="perimeter">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="num_points.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="perimeter.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.overlaps"></a><a class="link" href="overlaps.html" title="overlaps">overlaps</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp12084400"></a>
+Checks if two geometries overlap.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.overlaps.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.overlaps.synopsis"></a></span><a class="link" href="overlaps.html#geometry.reference.algorithms.overlaps.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">overlaps</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.overlaps.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.overlaps.parameters"></a></span><a class="link" href="overlaps.html#geometry.reference.algorithms.overlaps.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.overlaps.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.overlaps.returns"></a></span><a class="link" href="overlaps.html#geometry.reference.algorithms.overlaps.returns">Returns</a>
+ </h6>
+<p>
+ Returns true if two geometries overlap
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.overlaps.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.overlaps.header"></a></span><a class="link" href="overlaps.html#geometry.reference.algorithms.overlaps.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">overlaps</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.overlaps.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.overlaps.conformance"></a></span><a class="link" href="overlaps.html#geometry.reference.algorithms.overlaps.conformance">Conformance</a>
+ </h6>
+<p>
+ The function overlaps implements function Overlaps from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="num_points.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="perimeter.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/perimeter.html b/libs/geometry/doc/html/geometry/reference/algorithms/perimeter.html
new file mode 100644
index 000000000..0b06f7186
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/perimeter.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>perimeter</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="overlaps.html" title="overlaps">
+<link rel="next" href="perimeter/perimeter_1.html" title="perimeter">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="overlaps.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="perimeter/perimeter_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.perimeter"></a><a class="link" href="perimeter.html" title="perimeter">perimeter</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="perimeter/perimeter_1.html">perimeter</a></span></dt>
+<dt><span class="section"><a href="perimeter/perimeter_2_with_strategy.html">perimeter
+ (with strategy)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="overlaps.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="perimeter/perimeter_1.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/perimeter/perimeter_1.html b/libs/geometry/doc/html/geometry/reference/algorithms/perimeter/perimeter_1.html
new file mode 100644
index 000000000..811f8e318
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/perimeter/perimeter_1.html
@@ -0,0 +1,229 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>perimeter</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../perimeter.html" title="perimeter">
+<link rel="prev" href="../perimeter.html" title="perimeter">
+<link rel="next" href="perimeter_2_with_strategy.html" title="perimeter (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../perimeter.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perimeter.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="perimeter_2_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.perimeter.perimeter_1"></a><a class="link" href="perimeter_1.html" title="perimeter">perimeter</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp12115744"></a>
+Calculates the perimeter of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_1.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_1.description"></a></span><a class="link" href="perimeter_1.html#geometry.reference.algorithms.perimeter.perimeter_1.description">Description</a>
+ </h6>
+<p>
+ The function perimeter returns the perimeter of a geometry, using the
+ default distance-calculation-strategy
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_1.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_1.synopsis"></a></span><a class="link" href="perimeter_1.html#geometry.reference.algorithms.perimeter.perimeter_1.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">default_length_result</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">perimeter</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_1.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_1.parameters"></a></span><a class="link" href="perimeter_1.html#geometry.reference.algorithms.perimeter.perimeter_1.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_1.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_1.returns"></a></span><a class="link" href="perimeter_1.html#geometry.reference.algorithms.perimeter.perimeter_1.returns">Returns</a>
+ </h6>
+<p>
+ The calculated perimeter
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_1.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_1.header"></a></span><a class="link" href="perimeter_1.html#geometry.reference.algorithms.perimeter.perimeter_1.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">perimeter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_1.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_1.conformance"></a></span><a class="link" href="perimeter_1.html#geometry.reference.algorithms.perimeter.perimeter_1.conformance">Conformance</a>
+ </h6>
+<p>
+ The function perimeter is not defined by OGC.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ PostGIS contains an algorithm with the same name and the same functionality.
+ See the <a href="http://www.postgis.org/docs/ST_Perimeter.html" target="_top">PostGIS
+ documentation</a>.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_1.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_1.behavior"></a></span><a class="link" href="perimeter_1.html#geometry.reference.algorithms.perimeter.perimeter_1.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ pointlike (e.g. point)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns zero
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns zero
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the perimeter
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_1.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_1.complexity"></a></span><a class="link" href="perimeter_1.html#geometry.reference.algorithms.perimeter.perimeter_1.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../perimeter.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perimeter.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="perimeter_2_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/perimeter/perimeter_2_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/perimeter/perimeter_2_with_strategy.html
new file mode 100644
index 000000000..3114bc112
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/perimeter/perimeter_2_with_strategy.html
@@ -0,0 +1,254 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>perimeter (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../perimeter.html" title="perimeter">
+<link rel="prev" href="perimeter_1.html" title="perimeter">
+<link rel="next" href="../reverse.html" title="reverse">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="perimeter_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perimeter.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="../reverse.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy"></a><a class="link" href="perimeter_2_with_strategy.html" title="perimeter (with strategy)">perimeter
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp12155616"></a>
+Calculates the perimeter of a geometry using the specified strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.description"></a></span><a class="link" href="perimeter_2_with_strategy.html#geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.description">Description</a>
+ </h6>
+<p>
+ The function perimeter returns the perimeter of a geometry, using specified
+ strategy
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.synopsis"></a></span><a class="link" href="perimeter_2_with_strategy.html#geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="identifier">default_length_result</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">perimeter</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.parameters"></a></span><a class="link" href="perimeter_2_with_strategy.html#geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a distance Strategy Concept
+ </p>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ strategy to be used for distance calculations.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.returns"></a></span><a class="link" href="perimeter_2_with_strategy.html#geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.returns">Returns</a>
+ </h6>
+<p>
+ The calculated perimeter
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.header"></a></span><a class="link" href="perimeter_2_with_strategy.html#geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">perimeter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.conformance"></a></span><a class="link" href="perimeter_2_with_strategy.html#geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.conformance">Conformance</a>
+ </h6>
+<p>
+ The function perimeter is not defined by OGC.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ PostGIS contains an algorithm with the same name and the same functionality.
+ See the <a href="http://www.postgis.org/docs/ST_Perimeter.html" target="_top">PostGIS
+ documentation</a>.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.behavior"></a></span><a class="link" href="perimeter_2_with_strategy.html#geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ pointlike (e.g. point)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns zero
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns zero
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the perimeter
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.complexity"></a></span><a class="link" href="perimeter_2_with_strategy.html#geometry.reference.algorithms.perimeter.perimeter_2_with_strategy.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="perimeter_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perimeter.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="../reverse.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/reverse.html b/libs/geometry/doc/html/geometry/reference/algorithms/reverse.html
new file mode 100644
index 000000000..dac3a7f1b
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/reverse.html
@@ -0,0 +1,357 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>reverse</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="perimeter/perimeter_2_with_strategy.html" title="perimeter (with strategy)">
+<link rel="next" href="simplify.html" title="simplify">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="perimeter/perimeter_2_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="simplify.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.reverse"></a><a class="link" href="reverse.html" title="reverse">reverse</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp12200752"></a>
+Reverses the points within a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.reverse.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.reverse.description"></a></span><a class="link" href="reverse.html#geometry.reference.algorithms.reverse.description">Description</a>
+ </h6>
+<p>
+ Generic function to reverse a geometry. It resembles the std::reverse functionality,
+ but it takes the geometry type into account. Only for a ring or for a linestring
+ it is the same as the std::reverse.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.reverse.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.reverse.synopsis"></a></span><a class="link" href="reverse.html#geometry.reference.algorithms.reverse.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">reverse</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.reverse.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.reverse.parameters"></a></span><a class="link" href="reverse.html#geometry.reference.algorithms.reverse.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which will be reversed
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.reverse.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.reverse.header"></a></span><a class="link" href="reverse.html#geometry.reference.algorithms.reverse.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">reverse</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.reverse.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.reverse.conformance"></a></span><a class="link" href="reverse.html#geometry.reference.algorithms.reverse.conformance">Conformance</a>
+ </h6>
+<p>
+ The function reverse is not defined by OGC.
+ </p>
+<p>
+ The function reverse conforms to the std::reverse function of the C++ std-library.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.reverse.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.reverse.behavior"></a></span><a class="link" href="reverse.html#geometry.reference.algorithms.reverse.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ Not yet supported in this version
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ Reverses the Linestring
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ Reverses the Ring
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Reverses the exterior ring and all interior rings in the polygon
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Point
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ Reverses all contained linestrings individually
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Reverses all contained polygons individually
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ The reverse of a (multi)polygon or ring might make a valid geometry invalid
+ because the (counter)clockwise orientation reverses.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.reverse.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.reverse.complexity"></a></span><a class="link" href="reverse.html#geometry.reference.algorithms.reverse.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.reverse.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.reverse.example"></a></span><a class="link" href="reverse.html#geometry.reference.algorithms.reverse.example">Example</a>
+ </h6>
+<p>
+ Shows how to reverse a ring or polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">::</span><span class="identifier">tuple_list_of</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">ring</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">ring</span><span class="special">;</span>
+
+
+ <span class="identifier">polygon</span> <span class="identifier">poly</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">exterior_ring</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">tuple_list_of</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">0</span><span class="special">,</span> <span class="number">9</span><span class="special">)(</span><span class="number">10</span><span class="special">,</span> <span class="number">10</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">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">interior_rings</span><span class="special">(</span><span class="identifier">poly</span><span class="special">).</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">tuple_list_of</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">)(</span><span class="number">4</span><span class="special">,</span> <span class="number">6</span><span class="special">)(</span><span class="number">2</span><span class="special">,</span> <span class="number">8</span><span class="special">)(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
+
+ <span class="keyword">double</span> <span class="identifier">area_before</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">area</span><span class="special">(</span><span class="identifier">poly</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">reverse</span><span class="special">(</span><span class="identifier">poly</span><span class="special">);</span>
+ <span class="keyword">double</span> <span class="identifier">area_after</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">area</span><span class="special">(</span><span class="identifier">poly</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">area_before</span> <span class="special">&lt;&lt;</span> <span class="string">" -&gt; "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area_after</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="identifier">ring</span> <span class="identifier">r</span> <span class="special">=</span> <span class="identifier">tuple_list_of</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">0</span><span class="special">,</span> <span class="number">9</span><span class="special">)(</span><span class="number">8</span><span class="special">,</span> <span class="number">8</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">area_before</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">area</span><span class="special">(</span><span class="identifier">r</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">reverse</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span>
+ <span class="identifier">area_after</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">area</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">r</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">area_before</span> <span class="special">&lt;&lt;</span> <span class="string">" -&gt; "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area_after</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">(((0, 0), (10, 10), (0, 9), (0, 0)), ((1, 2), (2, 8), (4, 6), (1, 2)))
+38 -&gt; -38
+((0, 0), (8, 8), (0, 9), (0, 0))
+36 -&gt; -36
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="perimeter/perimeter_2_with_strategy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="simplify.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/simplify.html b/libs/geometry/doc/html/geometry/reference/algorithms/simplify.html
new file mode 100644
index 000000000..391f893ce
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/simplify.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>simplify</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="reverse.html" title="reverse">
+<link rel="next" href="simplify/simplify_4_with_strategy.html" title="simplify (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reverse.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="simplify/simplify_4_with_strategy.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.simplify"></a><a class="link" href="simplify.html" title="simplify">simplify</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="simplify/simplify_4_with_strategy.html">simplify
+ (with strategy)</a></span></dt>
+<dt><span class="section"><a href="simplify/simplify_3.html">simplify</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reverse.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="simplify/simplify_4_with_strategy.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/simplify/simplify_3.html b/libs/geometry/doc/html/geometry/reference/algorithms/simplify/simplify_3.html
new file mode 100644
index 000000000..71c69893f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/simplify/simplify_3.html
@@ -0,0 +1,291 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>simplify</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../simplify.html" title="simplify">
+<link rel="prev" href="simplify_4_with_strategy.html" title="simplify (with strategy)">
+<link rel="next" href="../sym_difference.html" title="sym_difference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="simplify_4_with_strategy.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../simplify.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="../sym_difference.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.simplify.simplify_3"></a><a class="link" href="simplify_3.html" title="simplify">simplify</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp12372736"></a>
+Simplify a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_3.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_3.synopsis"></a></span><a class="link" href="simplify_3.html#geometry.reference.algorithms.simplify.simplify_3.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Distance</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">simplify</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">Distance</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">max_distance</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_3.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_3.parameters"></a></span><a class="link" href="simplify_3.html#geometry.reference.algorithms.simplify.simplify_3.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ input geometry, to be simplified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ out
+ </p>
+ </td>
+<td>
+ <p>
+ output geometry, simplified version of the input geometry
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Distance const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...)
+ </p>
+ </td>
+<td>
+ <p>
+ max_distance
+ </p>
+ </td>
+<td>
+ <p>
+ distance (in units of input coordinates) of a vertex to other
+ segments to be removed
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_3.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_3.header"></a></span><a class="link" href="simplify_3.html#geometry.reference.algorithms.simplify.simplify_3.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">simplify</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_3.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_3.conformance"></a></span><a class="link" href="simplify_3.html#geometry.reference.algorithms.simplify.simplify_3.conformance">Conformance</a>
+ </h6>
+<p>
+ The function simplify is not defined by OGC.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ PostGIS contains an algorithm with the same name and the same functionality.
+ See the <a href="http://www.postgis.org/docs/ST_Simplify.html" target="_top">PostGIS
+ documentation</a>.
+ </p></td></tr>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ SQL Server contains an algorithm Reduce() with the same functionality.
+ See the <a href="http://msdn.microsoft.com/en-us/library/bb933814.aspx" target="_top">MSDN
+ documentation</a>.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_3.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_3.behavior"></a></span><a class="link" href="simplify_3.html#geometry.reference.algorithms.simplify.simplify_3.behavior">Behavior</a>
+ </h6>
+<p>
+ Simplification is done using <a href="http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm" target="_top">Douglas-Peucker</a>
+ (if the default strategy is used).
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Geometries might become invalid by using simplify. The simplification
+ process might create self-intersections.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_3.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_3.examples"></a></span><a class="link" href="simplify_3.html#geometry.reference.algorithms.simplify.simplify_3.examples">Examples</a>
+ </h6>
+<p>
+ Example showing how to simplify a linestring
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<a class="co" name="geometry.reference.algorithms.simplify.simplify_3.c0" href="simplify_3.html#geometry.reference.algorithms.simplify.simplify_3.c1"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">xy</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">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">xy</span><span class="special">&gt;</span> <span class="identifier">line</span><span class="special">;</span>
+ <span class="identifier">line</span> <span class="special">+=</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">1.1</span><span class="special">,</span> <span class="number">1.1</span><span class="special">),</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">2.5</span><span class="special">,</span> <span class="number">2.1</span><span class="special">),</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">3.1</span><span class="special">,</span> <span class="number">3.1</span><span class="special">),</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">4.9</span><span class="special">,</span> <span class="number">1.1</span><span class="special">),</span> <span class="identifier">xy</span><span class="special">(</span><span class="number">3.1</span><span class="special">,</span> <span class="number">1.9</span><span class="special">);</span> <a class="co" name="geometry.reference.algorithms.simplify.simplify_3.c2" href="simplify_3.html#geometry.reference.algorithms.simplify.simplify_3.c3"><img src="../../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a>
+
+ <span class="comment">// Simplify it, using distance of 0.5 units</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">xy</span><span class="special">&gt;</span> <span class="identifier">simplified</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">simplify</span><span class="special">(</span><span class="identifier">line</span><span class="special">,</span> <span class="identifier">simplified</span><span class="special">,</span> <span class="number">0.5</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" original: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">line</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"simplified: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">simplified</span><span class="special">)</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list">
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.simplify.simplify_3.c1"></a><a href="#geometry.reference.algorithms.simplify.simplify_3.c0"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ For this example we use Boost.Assign to add points
+ </p></td>
+</tr>
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.simplify.simplify_3.c3"></a><a href="#geometry.reference.algorithms.simplify.simplify_3.c2"><img src="../../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ With Boost.Assign
+ </p></td>
+</tr>
+</table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">original: ((1.1, 1.1), (2.5, 2.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+simplified: ((1.1, 1.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_3.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_3.image_s_"></a></span><a class="link" href="simplify_3.html#geometry.reference.algorithms.simplify.simplify_3.image_s_">Image(s)</a>
+ </h6>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../svg_simplify_country.png" alt="svg_simplify_country"></span>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="simplify_4_with_strategy.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../simplify.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="../sym_difference.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/simplify/simplify_4_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/simplify/simplify_4_with_strategy.html
new file mode 100644
index 000000000..7ce99416f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/simplify/simplify_4_with_strategy.html
@@ -0,0 +1,200 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>simplify (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../simplify.html" title="simplify">
+<link rel="prev" href="../simplify.html" title="simplify">
+<link rel="next" href="simplify_3.html" title="simplify">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../simplify.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../simplify.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="simplify_3.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.simplify.simplify_4_with_strategy"></a><a class="link" href="simplify_4_with_strategy.html" title="simplify (with strategy)">simplify
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp12336432"></a>
+Simplify a geometry using a specified strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_4_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_4_with_strategy.synopsis"></a></span><a class="link" href="simplify_4_with_strategy.html#geometry.reference.algorithms.simplify.simplify_4_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Distance</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">simplify</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">Distance</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">max_distance</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_4_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_4_with_strategy.parameters"></a></span><a class="link" href="simplify_4_with_strategy.html#geometry.reference.algorithms.simplify.simplify_4_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ input geometry, to be simplified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ out
+ </p>
+ </td>
+<td>
+ <p>
+ output geometry, simplified version of the input geometry
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Distance const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ A numerical distance measure
+ </p>
+ </td>
+<td>
+ <p>
+ max_distance
+ </p>
+ </td>
+<td>
+ <p>
+ distance (in units of input coordinates) of a vertex to other
+ segments to be removed
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ A type fulfilling a SimplifyStrategy concept
+ </p>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ simplify strategy to be used for simplification, might include
+ point-distance strategy
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.simplify.simplify_4_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.simplify.simplify_4_with_strategy.header"></a></span><a class="link" href="simplify_4_with_strategy.html#geometry.reference.algorithms.simplify.simplify_4_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">simplify</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../simplify.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../simplify.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="simplify_3.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/sym_difference.html b/libs/geometry/doc/html/geometry/reference/algorithms/sym_difference.html
new file mode 100644
index 000000000..a8652b905
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/sym_difference.html
@@ -0,0 +1,376 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>sym_difference</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="simplify/simplify_3.html" title="simplify">
+<link rel="next" href="touches.html" title="touches">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="simplify/simplify_3.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="touches.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.sym_difference"></a><a class="link" href="sym_difference.html" title="sym_difference">sym_difference</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp12470288"></a>
+Calculate the symmetric difference of two geometries.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.sym_difference.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.sym_difference.description"></a></span><a class="link" href="sym_difference.html#geometry.reference.algorithms.sym_difference.description">Description</a>
+ </h6>
+<p>
+ The free function symmetric difference calculates the spatial set theoretic
+ symmetric difference (XOR) of two geometries.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.sym_difference.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.sym_difference.synopsis"></a></span><a class="link" href="sym_difference.html#geometry.reference.algorithms.sym_difference.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Collection</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">sym_difference</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">,</span> <span class="identifier">Collection</span> <span class="special">&amp;</span> <span class="identifier">output_collection</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.sym_difference.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.sym_difference.parameters"></a></span><a class="link" href="sym_difference.html#geometry.reference.algorithms.sym_difference.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Collection &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ output collection, either a multi-geometry, or a std::vector&lt;Geometry&gt;
+ / std::deque&lt;Geometry&gt; etc
+ </p>
+ </td>
+<td>
+ <p>
+ output_collection
+ </p>
+ </td>
+<td>
+ <p>
+ the output collection
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.sym_difference.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.sym_difference.header"></a></span><a class="link" href="sym_difference.html#geometry.reference.algorithms.sym_difference.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">sym_difference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.sym_difference.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.sym_difference.conformance"></a></span><a class="link" href="sym_difference.html#geometry.reference.algorithms.sym_difference.conformance">Conformance</a>
+ </h6>
+<p>
+ The function sym_difference implements function SymDifference from the
+ <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC Simple Feature
+ Specification</a>.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.sym_difference.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.sym_difference.behavior"></a></span><a class="link" href="sym_difference.html#geometry.reference.algorithms.sym_difference.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ All combinations of: box, ring, polygon, multi_polygon
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ linear (e.g. linestring) / areal (e.g. polygon)
+ </p>
+ </td>
+<td>
+ <p>
+ A combinations of a (multi) linestring with a (multi) polygon
+ results in a collection of linestrings
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Other geometries
+ </p>
+ </td>
+<td>
+ <p>
+ Not yet supported in this version
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical
+ </p>
+ </td>
+<td>
+ <p>
+ Not yet supported in this version
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Three dimensional
+ </p>
+ </td>
+<td>
+ <p>
+ Not yet supported in this version
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Check the <a class="link" href="../concepts/concept_polygon.html" title="Polygon Concept">Polygon
+ Concept</a> for the rules that polygon input for this algorithm should
+ fulfill
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.sym_difference.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.sym_difference.example"></a></span><a class="link" href="sym_difference.html#geometry.reference.algorithms.sym_difference.example">Example</a>
+ </h6>
+<p>
+ Shows how to calculate the symmetric difference (XOR) of two polygons
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="identifier">polygon</span> <span class="identifier">green</span><span class="special">,</span> <span class="identifier">blue</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"</span>
+ <span class="string">"(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))"</span><span class="special">,</span> <span class="identifier">green</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))"</span><span class="special">,</span> <span class="identifier">blue</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">model</span><span class="special">::</span><span class="identifier">multi_polygon</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;</span> <span class="identifier">multi</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">sym_difference</span><span class="special">(</span><span class="identifier">green</span><span class="special">,</span> <span class="identifier">blue</span><span class="special">,</span> <span class="identifier">multi</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"green XOR blue:"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"total: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">multi</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="identifier">polygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">multi</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">i</span><span class="special">++</span> <span class="special">&lt;&lt;</span> <span class="string">": "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">green XOR blue:
+total: 3.1459
+0: 0.02375
+1: 0.542951
+2: 0.0149697
+3: 0.226855
+4: 0.839424
+5: 0.525154
+6: 0.015
+7: 0.181136
+8: 0.128798
+9: 0.340083
+10: 0.307778
+
+<img src="../../../img/algorithms/sym_difference.png" alt="sym_difference">
+
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.sym_difference.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.sym_difference.see_also"></a></span><a class="link" href="sym_difference.html#geometry.reference.algorithms.sym_difference.see_also">See also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="difference.html" title="difference">difference</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="intersection.html" title="intersection">intersection</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="union_.html" title="union_">union</a>
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="simplify/simplify_3.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="touches.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/touches.html b/libs/geometry/doc/html/geometry/reference/algorithms/touches.html
new file mode 100644
index 000000000..ab02cc86d
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/touches.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>touches</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="sym_difference.html" title="sym_difference">
+<link rel="next" href="touches/touches_1_one_geometry.html" title="touches (one geometry)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="sym_difference.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="touches/touches_1_one_geometry.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.touches"></a><a class="link" href="touches.html" title="touches">touches</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="touches/touches_1_one_geometry.html">touches
+ (one geometry)</a></span></dt>
+<dt><span class="section"><a href="touches/touches_2_two_geometries.html">touches
+ (two geometries)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="sym_difference.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="touches/touches_1_one_geometry.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/touches/touches_1_one_geometry.html b/libs/geometry/doc/html/geometry/reference/algorithms/touches/touches_1_one_geometry.html
new file mode 100644
index 000000000..b48ae177f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/touches/touches_1_one_geometry.html
@@ -0,0 +1,158 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>touches (one geometry)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../touches.html" title="touches">
+<link rel="prev" href="../touches.html" title="touches">
+<link rel="next" href="touches_2_two_geometries.html" title="touches (two geometries)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../touches.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../touches.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="touches_2_two_geometries.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.touches.touches_1_one_geometry"></a><a class="link" href="touches_1_one_geometry.html" title="touches (one geometry)">touches
+ (one geometry)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp12588000"></a>
+Checks if a geometry has at least one touching point (self-tangency)
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_1_one_geometry.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_1_one_geometry.synopsis"></a></span><a class="link" href="touches_1_one_geometry.html#geometry.reference.algorithms.touches.touches_1_one_geometry.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">touches</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_1_one_geometry.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_1_one_geometry.parameters"></a></span><a class="link" href="touches_1_one_geometry.html#geometry.reference.algorithms.touches.touches_1_one_geometry.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_1_one_geometry.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_1_one_geometry.returns"></a></span><a class="link" href="touches_1_one_geometry.html#geometry.reference.algorithms.touches.touches_1_one_geometry.returns">Returns</a>
+ </h6>
+<p>
+ Returns true if the geometry is self-touching
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_1_one_geometry.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_1_one_geometry.header"></a></span><a class="link" href="touches_1_one_geometry.html#geometry.reference.algorithms.touches.touches_1_one_geometry.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">touches</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_1_one_geometry.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_1_one_geometry.conformance"></a></span><a class="link" href="touches_1_one_geometry.html#geometry.reference.algorithms.touches.touches_1_one_geometry.conformance">Conformance</a>
+ </h6>
+<p>
+ The function touches implements function Touches from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<p>
+ The version with one parameter is additional and not described in the
+ OGC standard
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ only implemented for polygon/multi_polygon
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../touches.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../touches.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="touches_2_two_geometries.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/touches/touches_2_two_geometries.html b/libs/geometry/doc/html/geometry/reference/algorithms/touches/touches_2_two_geometries.html
new file mode 100644
index 000000000..56f7347ac
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/touches/touches_2_two_geometries.html
@@ -0,0 +1,183 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>touches (two geometries)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../touches.html" title="touches">
+<link rel="prev" href="touches_1_one_geometry.html" title="touches (one geometry)">
+<link rel="next" href="../transform.html" title="transform">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="touches_1_one_geometry.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../touches.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="../transform.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.touches.touches_2_two_geometries"></a><a class="link" href="touches_2_two_geometries.html" title="touches (two geometries)">touches
+ (two geometries)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp12616640"></a>
+Checks if two geometries have at least one touching point (tangent -
+ non overlapping)
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_2_two_geometries.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_2_two_geometries.synopsis"></a></span><a class="link" href="touches_2_two_geometries.html#geometry.reference.algorithms.touches.touches_2_two_geometries.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">touches</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_2_two_geometries.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_2_two_geometries.parameters"></a></span><a class="link" href="touches_2_two_geometries.html#geometry.reference.algorithms.touches.touches_2_two_geometries.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_2_two_geometries.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_2_two_geometries.returns"></a></span><a class="link" href="touches_2_two_geometries.html#geometry.reference.algorithms.touches.touches_2_two_geometries.returns">Returns</a>
+ </h6>
+<p>
+ Returns true if two geometries touch each other
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_2_two_geometries.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_2_two_geometries.header"></a></span><a class="link" href="touches_2_two_geometries.html#geometry.reference.algorithms.touches.touches_2_two_geometries.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">touches</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.touches.touches_2_two_geometries.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.touches.touches_2_two_geometries.conformance"></a></span><a class="link" href="touches_2_two_geometries.html#geometry.reference.algorithms.touches.touches_2_two_geometries.conformance">Conformance</a>
+ </h6>
+<p>
+ The function touches implements function Touches from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<p>
+ The version with one parameter is additional and not described in the
+ OGC standard
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ only implemented for polygon/multi_polygon
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="touches_1_one_geometry.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../touches.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="../transform.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/transform.html b/libs/geometry/doc/html/geometry/reference/algorithms/transform.html
new file mode 100644
index 000000000..c87ebcfd9
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/transform.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>transform</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="touches/touches_2_two_geometries.html" title="touches (two geometries)">
+<link rel="next" href="transform/transform_3_with_strategy.html" title="transform (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="touches/touches_2_two_geometries.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="transform/transform_3_with_strategy.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.transform"></a><a class="link" href="transform.html" title="transform">transform</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="transform/transform_3_with_strategy.html">transform
+ (with strategy)</a></span></dt>
+<dt><span class="section"><a href="transform/transform_2.html">transform</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="touches/touches_2_two_geometries.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="transform/transform_3_with_strategy.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/transform/transform_2.html b/libs/geometry/doc/html/geometry/reference/algorithms/transform/transform_2.html
new file mode 100644
index 000000000..738d399b8
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/transform/transform_2.html
@@ -0,0 +1,297 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>transform</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../transform.html" title="transform">
+<link rel="prev" href="transform_3_with_strategy.html" title="transform (with strategy)">
+<link rel="next" href="../union_.html" title="union_">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="transform_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../transform.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="../union_.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.transform.transform_2"></a><a class="link" href="transform_2.html" title="transform">transform</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp12750512"></a>
+Transforms from one geometry to another geometry using a strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_2.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_2.synopsis"></a></span><a class="link" href="transform_2.html#geometry.reference.algorithms.transform.transform_2.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">transform</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_2.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_2.parameters"></a></span><a class="link" href="transform_2.html#geometry.reference.algorithms.transform.transform_2.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_2.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_2.returns"></a></span><a class="link" href="transform_2.html#geometry.reference.algorithms.transform.transform_2.returns">Returns</a>
+ </h6>
+<p>
+ True if the transformation could be done
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_2.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_2.header"></a></span><a class="link" href="transform_2.html#geometry.reference.algorithms.transform.transform_2.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">transform</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_2.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_2.conformance"></a></span><a class="link" href="transform_2.html#geometry.reference.algorithms.transform.transform_2.conformance">Conformance</a>
+ </h6>
+<p>
+ The function transform is not defined by OGC.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_2.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_2.behavior"></a></span><a class="link" href="transform_2.html#geometry.reference.algorithms.transform.transform_2.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Spherical (degree) / Spherical (radian)
+ </p>
+ </td>
+<td>
+ <p>
+ Transforms coordinates from degree to radian, or vice versa
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical / Cartesian (3D)
+ </p>
+ </td>
+<td>
+ <p>
+ Transforms coordinates from spherical coordinates to X,Y,Z,
+ or vice versa, on a unit sphere
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical (degree, with radius) / Spherical (radian, with radius)
+ </p>
+ </td>
+<td>
+ <p>
+ Transforms coordinates from degree to radian, or vice versa.
+ Third coordinate (radius) is untouched
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Spherical (with radius) / Cartesian (3D)
+ </p>
+ </td>
+<td>
+ <p>
+ Transforms coordinates from spherical coordinates to X,Y,Z,
+ or vice versa, on a unit sphere. Third coordinate (radius)
+ is taken into account
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_2.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_2.complexity"></a></span><a class="link" href="transform_2.html#geometry.reference.algorithms.transform.transform_2.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_2.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_2.example"></a></span><a class="link" href="transform_2.html#geometry.reference.algorithms.transform.transform_2.example">Example</a>
+ </h6>
+<p>
+ Shows how points can be transformed using the default strategy
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</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="comment">// Select a point near the pole (theta=5.0, phi=15.0)</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">&lt;</span><span class="keyword">long</span> <span class="keyword">double</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">spherical</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">degree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">p1</span><span class="special">(</span><span class="number">15.0</span><span class="special">,</span> <span class="number">5.0</span><span class="special">);</span>
+
+ <span class="comment">// Transform from degree to radian. Default strategy is automatically selected,</span>
+ <span class="comment">// it will convert from degree to radian</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">&lt;</span><span class="keyword">long</span> <span class="keyword">double</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">spherical</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">radian</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">p2</span><span class="special">;</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">transform</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p2</span><span class="special">);</span>
+
+ <span class="comment">// Transform from degree (lon-lat) to 3D (x,y,z). Default strategy is automatically selected, </span>
+ <span class="comment">// it will consider points on a unit sphere</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">&lt;</span><span class="keyword">long</span> <span class="keyword">double</span><span class="special">,</span> <span class="number">3</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">&gt;</span> <span class="identifier">p3</span><span class="special">;</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">transform</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p3</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"p1: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"p2: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p2</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"p3: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p3</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">p1: (15, 5)
+p2: (0.261799, 0.0872665)
+p3: (0.084186, 0.0225576, 0.996195)
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="transform_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../transform.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="../union_.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/transform/transform_3_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/transform/transform_3_with_strategy.html
new file mode 100644
index 000000000..bd85c6b16
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/transform/transform_3_with_strategy.html
@@ -0,0 +1,247 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>transform (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../transform.html" title="transform">
+<link rel="prev" href="../transform.html" title="transform">
+<link rel="next" href="transform_2.html" title="transform">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../transform.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../transform.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="transform_2.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.transform.transform_3_with_strategy"></a><a class="link" href="transform_3_with_strategy.html" title="transform (with strategy)">transform
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp12651200"></a>
+Transforms from one geometry to another geometry using the specified
+ strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_3_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_3_with_strategy.synopsis"></a></span><a class="link" href="transform_3_with_strategy.html#geometry.reference.algorithms.transform.transform_3_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">transform</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_3_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_3_with_strategy.parameters"></a></span><a class="link" href="transform_3_with_strategy.html#geometry.reference.algorithms.transform.transform_3_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ The strategy to be used for transformation
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_3_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_3_with_strategy.returns"></a></span><a class="link" href="transform_3_with_strategy.html#geometry.reference.algorithms.transform.transform_3_with_strategy.returns">Returns</a>
+ </h6>
+<p>
+ True if the transformation could be done
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_3_with_strategy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_3_with_strategy.header"></a></span><a class="link" href="transform_3_with_strategy.html#geometry.reference.algorithms.transform.transform_3_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">transform</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_3_with_strategy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_3_with_strategy.complexity"></a></span><a class="link" href="transform_3_with_strategy.html#geometry.reference.algorithms.transform.transform_3_with_strategy.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.transform.transform_3_with_strategy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.transform.transform_3_with_strategy.example"></a></span><a class="link" href="transform_3_with_strategy.html#geometry.reference.algorithms.transform.transform_3_with_strategy.example">Example</a>
+ </h6>
+<p>
+ Shows how points can be scaled, translated or rotated
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">trans</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">strategy</span><span class="special">::</span><span class="identifier">transform</span><span class="special">;</span>
+ <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</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">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+
+ <span class="identifier">point_type</span> <span class="identifier">p1</span><span class="special">(</span><span class="number">1.0</span><span class="special">,</span> <span class="number">1.0</span><span class="special">);</span>
+
+ <span class="comment">// Translate over (1.5, 1.5)</span>
+ <span class="identifier">point_type</span> <span class="identifier">p2</span><span class="special">;</span>
+ <span class="identifier">trans</span><span class="special">::</span><span class="identifier">translate_transformer</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">,</span> <span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">translate</span><span class="special">(</span><span class="number">1.5</span><span class="special">,</span> <span class="number">1.5</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">transform</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p2</span><span class="special">,</span> <span class="identifier">translate</span><span class="special">);</span>
+
+ <span class="comment">// Scale with factor 3.0</span>
+ <span class="identifier">point_type</span> <span class="identifier">p3</span><span class="special">;</span>
+ <span class="identifier">trans</span><span class="special">::</span><span class="identifier">scale_transformer</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">,</span> <span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">scale</span><span class="special">(</span><span class="number">3.0</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">transform</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p3</span><span class="special">,</span> <span class="identifier">scale</span><span class="special">);</span>
+
+ <span class="comment">// Rotate with respect to the origin (0,0) over 90 degrees (clockwise)</span>
+ <span class="identifier">point_type</span> <span class="identifier">p4</span><span class="special">;</span>
+ <span class="identifier">trans</span><span class="special">::</span><span class="identifier">rotate_transformer</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">,</span> <span class="identifier">point_type</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">degree</span><span class="special">&gt;</span> <span class="identifier">rotate</span><span class="special">(</span><span class="number">90.0</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">transform</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p4</span><span class="special">,</span> <span class="identifier">rotate</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"p1: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"p2: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p2</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"p3: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p3</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"p4: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p4</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">p1: (1, 1)
+p2: (2.5, 2.5)
+p3: (3, 3)
+p4: (1, -1)
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../transform.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../transform.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="transform_2.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/union_.html b/libs/geometry/doc/html/geometry/reference/algorithms/union_.html
new file mode 100644
index 000000000..2b92e1776
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/union_.html
@@ -0,0 +1,322 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>union_</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="transform/transform_2.html" title="transform">
+<link rel="next" href="unique.html" title="unique">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="transform/transform_2.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="unique.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.union_"></a><a class="link" href="union_.html" title="union_">union_</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp12841888"></a>
+Combines two geometries which each other.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.union_.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.union_.description"></a></span><a class="link" href="union_.html#geometry.reference.algorithms.union_.description">Description</a>
+ </h6>
+<p>
+ The free function union calculates the spatial set theoretic union of two
+ geometries.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.union_.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.union_.synopsis"></a></span><a class="link" href="union_.html#geometry.reference.algorithms.union_.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Collection</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">union_</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">,</span> <span class="identifier">Collection</span> <span class="special">&amp;</span> <span class="identifier">output_collection</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.union_.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.union_.parameters"></a></span><a class="link" href="union_.html#geometry.reference.algorithms.union_.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Collection &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ output collection, either a multi-geometry, or a std::vector&lt;Geometry&gt;
+ / std::deque&lt;Geometry&gt; etc
+ </p>
+ </td>
+<td>
+ <p>
+ output_collection
+ </p>
+ </td>
+<td>
+ <p>
+ the output collection
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.union_.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.union_.header"></a></span><a class="link" href="union_.html#geometry.reference.algorithms.union_.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="keyword">union</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.union_.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.union_.conformance"></a></span><a class="link" href="union_.html#geometry.reference.algorithms.union_.conformance">Conformance</a>
+ </h6>
+<p>
+ The function union implements function Union from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Boost.Geometry adds an underscore to avoid using the <code class="computeroutput"><span class="keyword">union</span></code>
+ keyword
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.union_.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.union_.behavior"></a></span><a class="link" href="union_.html#geometry.reference.algorithms.union_.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ GeometryOut is a Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Calculates union polygons of input (multi)polygons and/or boxes
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Check the <a class="link" href="../concepts/concept_polygon.html" title="Polygon Concept">Polygon
+ Concept</a> for the rules that polygon input for this algorithm should
+ fulfill
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.union_.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.union_.example"></a></span><a class="link" href="union_.html#geometry.reference.algorithms.union_.example">Example</a>
+ </h6>
+<p>
+ Shows how to get a united geometry of two polygons
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="identifier">polygon</span> <span class="identifier">green</span><span class="special">,</span> <span class="identifier">blue</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"</span>
+ <span class="string">"(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))"</span><span class="special">,</span> <span class="identifier">green</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))"</span><span class="special">,</span> <span class="identifier">blue</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;</span> <span class="identifier">output</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">union_</span><span class="special">(</span><span class="identifier">green</span><span class="special">,</span> <span class="identifier">blue</span><span class="special">,</span> <span class="identifier">output</span><span class="special">);</span>
+
+ <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"green || blue:"</span> <span class="special">&lt;&lt;</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">polygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">output</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">i</span><span class="special">++</span> <span class="special">&lt;&lt;</span> <span class="string">": "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">green || blue:
+0: 5.64795
+
+<img src="../../../img/algorithms/union.png" alt="union">
+
+</pre>
+<h6>
+<a name="geometry.reference.algorithms.union_.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.union_.see_also"></a></span><a class="link" href="union_.html#geometry.reference.algorithms.union_.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="intersection.html" title="intersection">intersection</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="difference.html" title="difference">difference</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="sym_difference.html" title="sym_difference">sym_difference
+ (symmetric difference)</a>
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="transform/transform_2.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="unique.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/unique.html b/libs/geometry/doc/html/geometry/reference/algorithms/unique.html
new file mode 100644
index 000000000..8ce028c5a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/unique.html
@@ -0,0 +1,323 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>unique</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="union_.html" title="union_">
+<link rel="next" href="within.html" title="within">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="union_.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="within.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.unique"></a><a class="link" href="unique.html" title="unique">unique</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp12946416"></a>
+Calculates the minimal set of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.unique.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.unique.description"></a></span><a class="link" href="unique.html#geometry.reference.algorithms.unique.description">Description</a>
+ </h6>
+<p>
+ The free function unique calculates the minimal set (where duplicate consecutive
+ points are removed) of a geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.unique.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.unique.synopsis"></a></span><a class="link" href="unique.html#geometry.reference.algorithms.unique.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">unique</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.unique.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.unique.parameters"></a></span><a class="link" href="unique.html#geometry.reference.algorithms.unique.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ Geometry &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which will be made unique
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.unique.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.unique.header"></a></span><a class="link" href="unique.html#geometry.reference.algorithms.unique.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">unique</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.unique.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.unique.conformance"></a></span><a class="link" href="unique.html#geometry.reference.algorithms.unique.conformance">Conformance</a>
+ </h6>
+<p>
+ The function unique is not defined by OGC.
+ </p>
+<p>
+ The function unique conforms to the std::unique function of the C++ std-library.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.unique.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.unique.behavior"></a></span><a class="link" href="unique.html#geometry.reference.algorithms.unique.behavior">Behavior</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Case
+ </p>
+ </th>
+<th>
+ <p>
+ Behavior
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ Removes all consecutive duplicate points
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ Removes all consecutive duplicate points
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Removes all consecutive duplicate points in all rings
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Point
+ </p>
+ </td>
+<td>
+ <p>
+ Nothing happens, geometry is unchanged. Even if two equal points
+ happen to be stored consecutively, they are kept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ Removes all consecutive duplicate points in all contained linestrings
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Multi Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ Removes all consecutive duplicate points in all contained polygons
+ (all rings)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.unique.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.unique.complexity"></a></span><a class="link" href="unique.html#geometry.reference.algorithms.unique.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.unique.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.unique.example"></a></span><a class="link" href="unique.html#geometry.reference.algorithms.unique.example">Example</a>
+ </h6>
+<p>
+ Shows how to make a so-called minimal set of a polygon by removing duplicate
+ points
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</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">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">poly</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">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 0,0 5,5 5,5 5,5 5,5 0,5 0,0 0,0 0,0 0,0 0))"</span><span class="special">,</span> <span class="identifier">poly</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">unique</span><span class="special">(</span><span class="identifier">poly</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">POLYGON((0 0,0 5,5 5,5 0,0 0))
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="union_.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="within.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/within.html b/libs/geometry/doc/html/geometry/reference/algorithms/within.html
new file mode 100644
index 000000000..fbcb34fa8
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/within.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>within</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../algorithms.html" title="Algorithms">
+<link rel="prev" href="unique.html" title="unique">
+<link rel="next" href="within/within_2.html" title="within">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="unique.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="within/within_2.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.algorithms.within"></a><a class="link" href="within.html" title="within">within</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="within/within_2.html">within</a></span></dt>
+<dt><span class="section"><a href="within/within_3_with_strategy.html">within
+ (with strategy)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="unique.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.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="within/within_2.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/within/within_2.html b/libs/geometry/doc/html/geometry/reference/algorithms/within/within_2.html
new file mode 100644
index 000000000..47a886365
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/within/within_2.html
@@ -0,0 +1,812 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>within</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../within.html" title="within">
+<link rel="prev" href="../within.html" title="within">
+<link rel="next" href="within_3_with_strategy.html" title="within (with strategy)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../within.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../within.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="within_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.within.within_2"></a><a class="link" href="within_2.html" title="within">within</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp13038400"></a>
+Checks if the first geometry is completely inside the second geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.description"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.description">Description</a>
+ </h6>
+<p>
+ The free function within checks if the first geometry is completely inside
+ the second geometry.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.synopsis"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">within</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.parameters"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which might be within the
+ second geometry
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which might contain the first
+ geometry
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.returns"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.returns">Returns</a>
+ </h6>
+<p>
+ true if geometry1 is completely contained within geometry2, else false
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.header"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">within</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.conformance"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.conformance">Conformance</a>
+ </h6>
+<p>
+ The function within implements function Within from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ OGC defines within as completely within and not on the border. See
+ the notes for within / on the border
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.supported_geometries"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ Point
+ </p>
+ </th>
+<th>
+ <p>
+ Segment
+ </p>
+ </th>
+<th>
+ <p>
+ Box
+ </p>
+ </th>
+<th>
+ <p>
+ Linestring
+ </p>
+ </th>
+<th>
+ <p>
+ Ring
+ </p>
+ </th>
+<th>
+ <p>
+ Polygon
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPoint
+ </p>
+ </th>
+<th>
+ <p>
+ MultiLinestring
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPolygon
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ In this status matrix above: columns are types of first parameter and
+ rows are types of second parameter. So a point can be checked to be
+ within a polygon, but not vice versa.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.notes"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.notes">Notes</a>
+ </h6>
+<p>
+ If a point is located exactly on the border of a geometry, the result
+ depends on the strategy. The default strategy (<a class="link" href="../../strategies/strategy_within_winding.html" title="strategy::within::winding">Winding
+ (coordinate system agnostic)</a>) returns false in that case.
+ </p>
+<p>
+ If a polygon has a reverse oriented (e.g. counterclockwise for a clockwise
+ typed polygon), the result also depends on the strategy. The default
+ strategy returns still true if a point is completely within the reversed
+ polygon. There is a specific strategy which returns false in this case.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.complexity"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h9"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.see_also"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../covered_by.html" title="covered_by">covered_by</a>
+ </li></ul></div>
+<h6>
+<a name="geometry.reference.algorithms.within.within_2.h10"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_2.example"></a></span><a class="link" href="within_2.html#geometry.reference.algorithms.within.within_2.example">Example</a>
+ </h6>
+<p>
+ Shows how to detect if a point is inside a polygon, or not
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">list</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
+
+ <span class="identifier">polygon_type</span> <span class="identifier">poly</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">read_wkt</span><span class="special">(</span>
+ <span class="string">"POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"</span>
+ <span class="string">"(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))"</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
+
+ <span class="identifier">point_type</span> <span class="identifier">p</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"within: "</span> <span class="special">&lt;&lt;</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">within</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">)</span> <span class="special">?</span> <span class="string">"yes"</span> <span class="special">:</span> <span class="string">"no"</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">within: yes
+
+<img src="../../../../img/algorithms/within.png" alt="within">
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../within.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../within.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="within_3_with_strategy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/algorithms/within/within_3_with_strategy.html b/libs/geometry/doc/html/geometry/reference/algorithms/within/within_3_with_strategy.html
new file mode 100644
index 000000000..26bbd1033
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/algorithms/within/within_3_with_strategy.html
@@ -0,0 +1,817 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>within (with strategy)</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../within.html" title="within">
+<link rel="prev" href="within_2.html" title="within">
+<link rel="next" href="../../arithmetic.html" title="Arithmetic">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="within_2.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../within.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="../../arithmetic.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.algorithms.within.within_3_with_strategy"></a><a class="link" href="within_3_with_strategy.html" title="within (with strategy)">within
+ (with strategy)</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp13235648"></a>
+Checks if the first geometry is completely inside the second geometry
+ using the specified strategy.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.description"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.description">Description</a>
+ </h6>
+<p>
+ The free function within checks if the first geometry is completely inside
+ the second geometry, using the specified strategy. Reasons to specify
+ a strategy include: use another coordinate system for calculations; construct
+ the strategy beforehand (e.g. with the radius of the Earth); select a
+ strategy when there are more than one available for a calculation.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.synopsis"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Geometry2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">within</span><span class="special">(</span><span class="identifier">Geometry1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry1</span><span class="special">,</span> <span class="identifier">Geometry2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry2</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.parameters"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry1 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry1
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which might be within the
+ second geometry
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Geometry2 const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry2
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept which might contain the first
+ geometry
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Strategy const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ strategy
+ </p>
+ </td>
+<td>
+ <p>
+ strategy to be used
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.returns"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.returns">Returns</a>
+ </h6>
+<p>
+ true if geometry1 is completely contained within geometry2, else false
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.header"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">within</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.conformance"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.conformance">Conformance</a>
+ </h6>
+<p>
+ The function within implements function Within from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ OGC defines within as completely within and not on the border. See
+ the notes for within / on the border
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h6"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.supported_geometries"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.supported_geometries">Supported
+ geometries</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ Point
+ </p>
+ </th>
+<th>
+ <p>
+ Segment
+ </p>
+ </th>
+<th>
+ <p>
+ Box
+ </p>
+ </th>
+<th>
+ <p>
+ Linestring
+ </p>
+ </th>
+<th>
+ <p>
+ Ring
+ </p>
+ </th>
+<th>
+ <p>
+ Polygon
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPoint
+ </p>
+ </th>
+<th>
+ <p>
+ MultiLinestring
+ </p>
+ </th>
+<th>
+ <p>
+ MultiPolygon
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Segment
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Box
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Linestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Ring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Polygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPoint
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiLinestring
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ MultiPolygon
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../../../img/nyi.png" alt="nyi"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ In this status matrix above: columns are types of first parameter and
+ rows are types of second parameter. So a point can be checked to be
+ within a polygon, but not vice versa.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h7"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.notes"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.notes">Notes</a>
+ </h6>
+<p>
+ If a point is located exactly on the border of a geometry, the result
+ depends on the strategy. The default strategy (<a class="link" href="../../strategies/strategy_within_winding.html" title="strategy::within::winding">Winding
+ (coordinate system agnostic)</a>) returns false in that case.
+ </p>
+<p>
+ If a polygon has a reverse oriented (e.g. counterclockwise for a clockwise
+ typed polygon), the result also depends on the strategy. The default
+ strategy returns still true if a point is completely within the reversed
+ polygon. There is a specific strategy which returns false in this case.
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h8"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.complexity"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.complexity">Complexity</a>
+ </h6>
+<p>
+ Linear
+ </p>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h9"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.see_also"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../covered_by.html" title="covered_by">covered_by</a>
+ </li></ul></div>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h10"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.available_strategies"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.available_strategies">Available
+ Strategies</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="../../strategies/strategy_within_winding.html" title="strategy::within::winding">Winding
+ (coordinate system agnostic)</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../../strategies/strategy_within_franklin.html" title="strategy::within::franklin">Franklin
+ (cartesian)</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../../strategies/strategy_within_crossings_multiply.html" title="strategy::within::crossings_multiply">Crossings
+ Multiply (cartesian)</a>
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.algorithms.within.within_3_with_strategy.h11"></a>
+ <span class="phrase"><a name="geometry.reference.algorithms.within.within_3_with_strategy.example"></a></span><a class="link" href="within_3_with_strategy.html#geometry.reference.algorithms.within.within_3_with_strategy.example">Example</a>
+ </h6>
+<p>
+ [within_strategy] [within_strategy_output]
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="within_2.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../within.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="../../arithmetic.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic.html b/libs/geometry/doc/html/geometry/reference/arithmetic.html
new file mode 100644
index 000000000..87dd8086b
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic.html
@@ -0,0 +1,56 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Arithmetic</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="algorithms/within/within_3_with_strategy.html" title="within (with strategy)">
+<link rel="next" href="arithmetic/add_point.html" title="add_point">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="algorithms/within/within_3_with_strategy.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="arithmetic/add_point.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.arithmetic"></a><a class="link" href="arithmetic.html" title="Arithmetic">Arithmetic</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="arithmetic/add_point.html">add_point</a></span></dt>
+<dt><span class="section"><a href="arithmetic/add_value.html">add_value</a></span></dt>
+<dt><span class="section"><a href="arithmetic/assign_point.html">assign_point</a></span></dt>
+<dt><span class="section"><a href="arithmetic/assign_value.html">assign_value</a></span></dt>
+<dt><span class="section"><a href="arithmetic/divide_point.html">divide_point</a></span></dt>
+<dt><span class="section"><a href="arithmetic/divide_value.html">divide_value</a></span></dt>
+<dt><span class="section"><a href="arithmetic/dot_product.html">dot_product</a></span></dt>
+<dt><span class="section"><a href="arithmetic/multiply_point.html">multiply_point</a></span></dt>
+<dt><span class="section"><a href="arithmetic/multiply_value.html">multiply_value</a></span></dt>
+<dt><span class="section"><a href="arithmetic/subtract_point.html">subtract_point</a></span></dt>
+<dt><span class="section"><a href="arithmetic/subtract_value.html">subtract_value</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="algorithms/within/within_3_with_strategy.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="arithmetic/add_point.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/add_point.html b/libs/geometry/doc/html/geometry/reference/arithmetic/add_point.html
new file mode 100644
index 000000000..72f8e116a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/add_point.html
@@ -0,0 +1,155 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>add_point</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="../arithmetic.html" title="Arithmetic">
+<link rel="next" href="add_value.html" title="add_value">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../arithmetic.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="add_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.add_point"></a><a class="link" href="add_point.html" title="add_point">add_point</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13402816"></a>
+Adds a point to another.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.add_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.add_point.description"></a></span><a class="link" href="add_point.html#geometry.reference.arithmetic.add_point.description">Description</a>
+ </h6>
+<p>
+ The coordinates of the second point will be added to those of the first
+ point. The second point is not modified.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.add_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.add_point.synopsis"></a></span><a class="link" href="add_point.html#geometry.reference.arithmetic.add_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point2</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">add_point</span><span class="special">(</span><span class="identifier">Point1</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">Point2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.add_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.add_point.parameters"></a></span><a class="link" href="add_point.html#geometry.reference.arithmetic.add_point.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point1 &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p1
+ </p>
+ </td>
+<td>
+ <p>
+ first point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Point2 const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p2
+ </p>
+ </td>
+<td>
+ <p>
+ second point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.add_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.add_point.header"></a></span><a class="link" href="add_point.html#geometry.reference.arithmetic.add_point.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../arithmetic.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="add_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/add_value.html b/libs/geometry/doc/html/geometry/reference/arithmetic/add_value.html
new file mode 100644
index 000000000..7e252a22a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/add_value.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>add_value</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="add_point.html" title="add_point">
+<link rel="next" href="assign_point.html" title="assign_point">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="add_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="assign_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.add_value"></a><a class="link" href="add_value.html" title="add_value">add_value</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13431376"></a>
+Adds the same value to each coordinate of a point.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.add_value.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.add_value.synopsis"></a></span><a class="link" href="add_value.html#geometry.reference.arithmetic.add_value.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">add_value</span><span class="special">(</span><span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">param</span><span class="special">&lt;</span> <span class="identifier">Point</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.add_value.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.add_value.parameters"></a></span><a class="link" href="add_value.html#geometry.reference.arithmetic.add_value.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p
+ </p>
+ </td>
+<td>
+ <p>
+ point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename detail::param&lt; Point &gt;::type
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ value
+ </p>
+ </td>
+<td>
+ <p>
+ value to add
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.add_value.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.add_value.header"></a></span><a class="link" href="add_value.html#geometry.reference.arithmetic.add_value.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="add_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="assign_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/assign_point.html b/libs/geometry/doc/html/geometry/reference/arithmetic/assign_point.html
new file mode 100644
index 000000000..ae05e52e5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/assign_point.html
@@ -0,0 +1,174 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign_point</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="add_value.html" title="add_value">
+<link rel="next" href="assign_value.html" title="assign_value">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="add_value.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="assign_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.assign_point"></a><a class="link" href="assign_point.html" title="assign_point">assign_point</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13458592"></a>
+Assign a point with another.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.assign_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.assign_point.description"></a></span><a class="link" href="assign_point.html#geometry.reference.arithmetic.assign_point.description">Description</a>
+ </h6>
+<p>
+ The coordinates of the first point will be assigned those of the second
+ point. The second point is not modified.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.assign_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.assign_point.synopsis"></a></span><a class="link" href="assign_point.html#geometry.reference.arithmetic.assign_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point2</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">assign_point</span><span class="special">(</span><span class="identifier">Point1</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Point2</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.assign_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.assign_point.parameters"></a></span><a class="link" href="assign_point.html#geometry.reference.arithmetic.assign_point.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point2
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ Must be specified
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Point1 &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p1
+ </p>
+ </td>
+<td>
+ <p>
+ first point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ const Point2 &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p2
+ </p>
+ </td>
+<td>
+ <p>
+ second point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.assign_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.assign_point.header"></a></span><a class="link" href="assign_point.html#geometry.reference.arithmetic.assign_point.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="add_value.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="assign_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/assign_value.html b/libs/geometry/doc/html/geometry/reference/arithmetic/assign_value.html
new file mode 100644
index 000000000..e8c14e22f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/assign_value.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>assign_value</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="assign_point.html" title="assign_point">
+<link rel="next" href="divide_point.html" title="divide_point">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="divide_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.assign_value"></a><a class="link" href="assign_value.html" title="assign_value">assign_value</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13488976"></a>
+Assign each coordinate of a point the same value.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.assign_value.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.assign_value.synopsis"></a></span><a class="link" href="assign_value.html#geometry.reference.arithmetic.assign_value.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">assign_value</span><span class="special">(</span><span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">param</span><span class="special">&lt;</span> <span class="identifier">Point</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.assign_value.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.assign_value.parameters"></a></span><a class="link" href="assign_value.html#geometry.reference.arithmetic.assign_value.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p
+ </p>
+ </td>
+<td>
+ <p>
+ point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename detail::param&lt; Point &gt;::type
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ value
+ </p>
+ </td>
+<td>
+ <p>
+ value to assign
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.assign_value.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.assign_value.header"></a></span><a class="link" href="assign_value.html#geometry.reference.arithmetic.assign_value.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="divide_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/divide_point.html b/libs/geometry/doc/html/geometry/reference/arithmetic/divide_point.html
new file mode 100644
index 000000000..ac4073da5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/divide_point.html
@@ -0,0 +1,155 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>divide_point</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="assign_value.html" title="assign_value">
+<link rel="next" href="divide_value.html" title="divide_value">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_value.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="divide_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.divide_point"></a><a class="link" href="divide_point.html" title="divide_point">divide_point</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13516192"></a>
+Divides a point by another.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.divide_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.divide_point.description"></a></span><a class="link" href="divide_point.html#geometry.reference.arithmetic.divide_point.description">Description</a>
+ </h6>
+<p>
+ The coordinates of the first point will be divided by those of the second
+ point. The second point is not modified.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.divide_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.divide_point.synopsis"></a></span><a class="link" href="divide_point.html#geometry.reference.arithmetic.divide_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point2</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">divide_point</span><span class="special">(</span><span class="identifier">Point1</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">Point2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.divide_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.divide_point.parameters"></a></span><a class="link" href="divide_point.html#geometry.reference.arithmetic.divide_point.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point1 &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p1
+ </p>
+ </td>
+<td>
+ <p>
+ first point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Point2 const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p2
+ </p>
+ </td>
+<td>
+ <p>
+ second point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.divide_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.divide_point.header"></a></span><a class="link" href="divide_point.html#geometry.reference.arithmetic.divide_point.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="assign_value.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="divide_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/divide_value.html b/libs/geometry/doc/html/geometry/reference/arithmetic/divide_value.html
new file mode 100644
index 000000000..fe551850f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/divide_value.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>divide_value</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="divide_point.html" title="divide_point">
+<link rel="next" href="dot_product.html" title="dot_product">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="divide_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="dot_product.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.divide_value"></a><a class="link" href="divide_value.html" title="divide_value">divide_value</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13544800"></a>
+Divides each coordinate of the same point by a value.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.divide_value.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.divide_value.synopsis"></a></span><a class="link" href="divide_value.html#geometry.reference.arithmetic.divide_value.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">divide_value</span><span class="special">(</span><span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">param</span><span class="special">&lt;</span> <span class="identifier">Point</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.divide_value.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.divide_value.parameters"></a></span><a class="link" href="divide_value.html#geometry.reference.arithmetic.divide_value.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p
+ </p>
+ </td>
+<td>
+ <p>
+ point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename detail::param&lt; Point &gt;::type
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ value
+ </p>
+ </td>
+<td>
+ <p>
+ value to divide by
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.divide_value.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.divide_value.header"></a></span><a class="link" href="divide_value.html#geometry.reference.arithmetic.divide_value.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="divide_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="dot_product.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/dot_product.html b/libs/geometry/doc/html/geometry/reference/arithmetic/dot_product.html
new file mode 100644
index 000000000..d59497ea4
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/dot_product.html
@@ -0,0 +1,154 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>dot_product</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="divide_value.html" title="divide_value">
+<link rel="next" href="multiply_point.html" title="multiply_point">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="divide_value.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="multiply_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.dot_product"></a><a class="link" href="dot_product.html" title="dot_product">dot_product</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13572080"></a>
+Computes the dot product (or scalar product) of 2 vectors (points).
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.dot_product.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.dot_product.synopsis"></a></span><a class="link" href="dot_product.html#geometry.reference.arithmetic.dot_product.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">&gt;</span>
+<span class="identifier">select_coordinate_type</span><span class="special">&lt;</span><span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">dot_product</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.dot_product.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.dot_product.parameters"></a></span><a class="link" href="dot_product.html#geometry.reference.arithmetic.dot_product.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ P1 const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p1
+ </p>
+ </td>
+<td>
+ <p>
+ first point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ P2 const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p2
+ </p>
+ </td>
+<td>
+ <p>
+ second point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.dot_product.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.dot_product.returns"></a></span><a class="link" href="dot_product.html#geometry.reference.arithmetic.dot_product.returns">Returns</a>
+ </h6>
+<p>
+ the dot product
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.dot_product.h3"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.dot_product.header"></a></span><a class="link" href="dot_product.html#geometry.reference.arithmetic.dot_product.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">dot_product</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="divide_value.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="multiply_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/multiply_point.html b/libs/geometry/doc/html/geometry/reference/arithmetic/multiply_point.html
new file mode 100644
index 000000000..d745660cb
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/multiply_point.html
@@ -0,0 +1,155 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>multiply_point</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="dot_product.html" title="dot_product">
+<link rel="next" href="multiply_value.html" title="multiply_value">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dot_product.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="multiply_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.multiply_point"></a><a class="link" href="multiply_point.html" title="multiply_point">multiply_point</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13602560"></a>
+Multiplies a point by another.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.multiply_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.multiply_point.description"></a></span><a class="link" href="multiply_point.html#geometry.reference.arithmetic.multiply_point.description">Description</a>
+ </h6>
+<p>
+ The coordinates of the first point will be multiplied by those of the second
+ point. The second point is not modified.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.multiply_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.multiply_point.synopsis"></a></span><a class="link" href="multiply_point.html#geometry.reference.arithmetic.multiply_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point2</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">multiply_point</span><span class="special">(</span><span class="identifier">Point1</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">Point2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.multiply_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.multiply_point.parameters"></a></span><a class="link" href="multiply_point.html#geometry.reference.arithmetic.multiply_point.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point1 &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p1
+ </p>
+ </td>
+<td>
+ <p>
+ first point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Point2 const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p2
+ </p>
+ </td>
+<td>
+ <p>
+ second point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.multiply_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.multiply_point.header"></a></span><a class="link" href="multiply_point.html#geometry.reference.arithmetic.multiply_point.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dot_product.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="multiply_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/multiply_value.html b/libs/geometry/doc/html/geometry/reference/arithmetic/multiply_value.html
new file mode 100644
index 000000000..503fafe4e
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/multiply_value.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>multiply_value</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="multiply_point.html" title="multiply_point">
+<link rel="next" href="subtract_point.html" title="subtract_point">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="multiply_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="subtract_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.multiply_value"></a><a class="link" href="multiply_value.html" title="multiply_value">multiply_value</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13631200"></a>
+Multiplies each coordinate of a point by the same value.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.multiply_value.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.multiply_value.synopsis"></a></span><a class="link" href="multiply_value.html#geometry.reference.arithmetic.multiply_value.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">multiply_value</span><span class="special">(</span><span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">param</span><span class="special">&lt;</span> <span class="identifier">Point</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.multiply_value.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.multiply_value.parameters"></a></span><a class="link" href="multiply_value.html#geometry.reference.arithmetic.multiply_value.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p
+ </p>
+ </td>
+<td>
+ <p>
+ point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename detail::param&lt; Point &gt;::type
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ value
+ </p>
+ </td>
+<td>
+ <p>
+ value to multiply by
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.multiply_value.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.multiply_value.header"></a></span><a class="link" href="multiply_value.html#geometry.reference.arithmetic.multiply_value.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="multiply_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="subtract_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/subtract_point.html b/libs/geometry/doc/html/geometry/reference/arithmetic/subtract_point.html
new file mode 100644
index 000000000..9c3080f80
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/subtract_point.html
@@ -0,0 +1,155 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>subtract_point</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="multiply_value.html" title="multiply_value">
+<link rel="next" href="subtract_value.html" title="subtract_value">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="multiply_value.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="subtract_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.subtract_point"></a><a class="link" href="subtract_point.html" title="subtract_point">subtract_point</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13658496"></a>
+Subtracts a point to another.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.subtract_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.subtract_point.description"></a></span><a class="link" href="subtract_point.html#geometry.reference.arithmetic.subtract_point.description">Description</a>
+ </h6>
+<p>
+ The coordinates of the second point will be subtracted to those of the
+ first point. The second point is not modified.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.subtract_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.subtract_point.synopsis"></a></span><a class="link" href="subtract_point.html#geometry.reference.arithmetic.subtract_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point2</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">subtract_point</span><span class="special">(</span><span class="identifier">Point1</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">Point2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.subtract_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.subtract_point.parameters"></a></span><a class="link" href="subtract_point.html#geometry.reference.arithmetic.subtract_point.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point1 &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p1
+ </p>
+ </td>
+<td>
+ <p>
+ first point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Point2 const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p2
+ </p>
+ </td>
+<td>
+ <p>
+ second point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.subtract_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.subtract_point.header"></a></span><a class="link" href="subtract_point.html#geometry.reference.arithmetic.subtract_point.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="multiply_value.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="subtract_value.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/arithmetic/subtract_value.html b/libs/geometry/doc/html/geometry/reference/arithmetic/subtract_value.html
new file mode 100644
index 000000000..491332307
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/arithmetic/subtract_value.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>subtract_value</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../arithmetic.html" title="Arithmetic">
+<link rel="prev" href="subtract_point.html" title="subtract_point">
+<link rel="next" href="../concepts.html" title="Concepts">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="subtract_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="../concepts.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.arithmetic.subtract_value"></a><a class="link" href="subtract_value.html" title="subtract_value">subtract_value</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp13686976"></a>
+Subtracts the same value to each coordinate of a point.
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.subtract_value.h0"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.subtract_value.synopsis"></a></span><a class="link" href="subtract_value.html#geometry.reference.arithmetic.subtract_value.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">subtract_value</span><span class="special">(</span><span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">param</span><span class="special">&lt;</span> <span class="identifier">Point</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.arithmetic.subtract_value.h1"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.subtract_value.parameters"></a></span><a class="link" href="subtract_value.html#geometry.reference.arithmetic.subtract_value.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Point &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ p
+ </p>
+ </td>
+<td>
+ <p>
+ point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename detail::param&lt; Point &gt;::type
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ value
+ </p>
+ </td>
+<td>
+ <p>
+ value to subtract
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.arithmetic.subtract_value.h2"></a>
+ <span class="phrase"><a name="geometry.reference.arithmetic.subtract_value.header"></a></span><a class="link" href="subtract_value.html#geometry.reference.arithmetic.subtract_value.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="subtract_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../arithmetic.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="../concepts.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts.html b/libs/geometry/doc/html/geometry/reference/concepts.html
new file mode 100644
index 000000000..bf2615d33
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts.html
@@ -0,0 +1,60 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Concepts</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="arithmetic/subtract_value.html" title="subtract_value">
+<link rel="next" href="concepts/concept_point.html" title="Point Concept">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="arithmetic/subtract_value.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="concepts/concept_point.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.concepts"></a><a class="link" href="concepts.html" title="Concepts">Concepts</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="concepts/concept_point.html">Point Concept</a></span></dt>
+<dt><span class="section"><a href="concepts/concept_linestring.html">Linestring
+ Concept</a></span></dt>
+<dt><span class="section"><a href="concepts/concept_polygon.html">Polygon
+ Concept</a></span></dt>
+<dt><span class="section"><a href="concepts/concept_multi_point.html">MultiPoint
+ Concept</a></span></dt>
+<dt><span class="section"><a href="concepts/concept_multi_linestring.html">MultiLinestring
+ Concept</a></span></dt>
+<dt><span class="section"><a href="concepts/concept_multi_polygon.html">MultiPolygon
+ Concept</a></span></dt>
+<dt><span class="section"><a href="concepts/concept_box.html">Box Concept</a></span></dt>
+<dt><span class="section"><a href="concepts/concept_ring.html">Ring Concept</a></span></dt>
+<dt><span class="section"><a href="concepts/concept_segment.html">Segment
+ Concept</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="arithmetic/subtract_value.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="concepts/concept_point.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts/concept_box.html b/libs/geometry/doc/html/geometry/reference/concepts/concept_box.html
new file mode 100644
index 000000000..9c8c71cf5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts/concept_box.html
@@ -0,0 +1,113 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Box Concept</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="concept_multi_polygon.html" title="MultiPolygon Concept">
+<link rel="next" href="concept_ring.html" title="Ring Concept">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_multi_polygon.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_ring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.concepts.concept_box"></a><a class="link" href="concept_box.html" title="Box Concept">Box Concept</a>
+</h4></div></div></div>
+<h6>
+<a name="geometry.reference.concepts.concept_box.h0"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_box.description"></a></span><a class="link" href="concept_box.html#geometry.reference.concepts.concept_box.description">Description</a>
+ </h6>
+<p>
+ The Box Concept describes the requirements for a box type. All algorithms
+ in Boost.Geometry will check any geometry arguments against the concept
+ requirements.
+ </p>
+<p>
+ A box is a geometry with (usually) two or three dimensions, having its
+ axis aligned to the coordinate system.
+ </p>
+<p>
+ The box is not one of the basic types in Boost.Geometry (point, linestring,
+ polygon) but it is a <span class="emphasis"><em>helper type</em></span>. The main reasons
+ for the box existance are its usefulness for indexing (a spatial index,
+ or splitting a geometry into monotonic sections) and it is the output of
+ the <a class="link" href="../algorithms/envelope.html" title="envelope">envelope</a>
+ algorithm.
+ </p>
+<p>
+ Therefore, a box is axis aligned (the envelope is also called aabb, axis
+ aligned bounding box).
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_box.h1"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_box.concept_definition"></a></span><a class="link" href="concept_box.html#geometry.reference.concepts.concept_box.concept_definition">Concept
+ Definition</a>
+ </h6>
+<p>
+ The Box Concept is defined as following:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>,
+ defining <code class="computeroutput"><span class="identifier">box_tag</span></code> as
+ type
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">point_type</span></code>
+ to define the underlying point type (even if it does not consist of
+ points, it should define this type, to indicate the points it can work
+ with)
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">indexed_access</span></code>,
+ per index (<code class="computeroutput"><span class="identifier">min_corner</span></code>,
+ <code class="computeroutput"><span class="identifier">max_corner</span></code>) and per
+ dimension, with two functions:
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">get</span></code> to get a
+ coordinate value
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">set</span></code> to set a
+ coordinate value (this one is not checked for ConstBox)
+ </li>
+</ul></div>
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.concepts.concept_box.h2"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_box.available_models"></a></span><a class="link" href="concept_box.html#geometry.reference.concepts.concept_box.available_models">Available
+ Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../models/model_box.html" title="model::box">model::box</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_multi_polygon.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_ring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts/concept_linestring.html b/libs/geometry/doc/html/geometry/reference/concepts/concept_linestring.html
new file mode 100644
index 000000000..ecd794e9e
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts/concept_linestring.html
@@ -0,0 +1,120 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Linestring Concept</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="concept_point.html" title="Point Concept">
+<link rel="next" href="concept_polygon.html" title="Polygon Concept">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.concepts.concept_linestring"></a><a class="link" href="concept_linestring.html" title="Linestring Concept">Linestring
+ Concept</a>
+</h4></div></div></div>
+<h6>
+<a name="geometry.reference.concepts.concept_linestring.h0"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_linestring.description"></a></span><a class="link" href="concept_linestring.html#geometry.reference.concepts.concept_linestring.description">Description</a>
+ </h6>
+<p>
+ The Linestring Concept describes the requirements for a linestring type.
+ All algorithms in Boost.Geometry will check any geometry arguments against
+ the concept requirements.
+ </p>
+<p>
+ A linestring is <span class="emphasis"><em>a Curve with linear interpolation between Points</em></span>.
+ (<a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC Simple Feature
+ Specification</a>).
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_linestring.h1"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_linestring.concept_definition"></a></span><a class="link" href="concept_linestring.html#geometry.reference.concepts.concept_linestring.concept_definition">Concept
+ Definition</a>
+ </h6>
+<p>
+ The Linestring Concept is defined as following:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>
+ defining <code class="computeroutput"><span class="identifier">linestring_tag</span></code>
+ as type
+ </li>
+<li class="listitem">
+ it must behave like a Boost.Range Random Access Range
+ </li>
+<li class="listitem">
+ The type defined by the metafunction <code class="computeroutput"><span class="identifier">range_value</span><span class="special">&lt;...&gt;::</span><span class="identifier">type</span></code>
+ must fulfill the <a class="link" href="concept_point.html" title="Point Concept">Point
+ Concept</a>
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.concepts.concept_linestring.h2"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_linestring.rules"></a></span><a class="link" href="concept_linestring.html#geometry.reference.concepts.concept_linestring.rules">Rules</a>
+ </h6>
+<p>
+ Besides the Concepts, which are checks on compile-time, there are rules
+ that valid linestrings must fulfill. Most algorithms work on any linestring,
+ so either self-crossing or not. However, for correct results using the
+ overlay algorithms (intersection and difference algorithms in combination
+ with a polygon) self-intersections can disturb the process and result in
+ incorrect results.
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_linestring.h3"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_linestring.available_models"></a></span><a class="link" href="concept_linestring.html#geometry.reference.concepts.concept_linestring.available_models">Available
+ Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="../models/model_linestring.html" title="model::linestring">model::linestring</a>
+ </li>
+<li class="listitem">
+ a std::vector (requires registration)
+ </li>
+<li class="listitem">
+ a std::deque (requires registration)
+ </li>
+</ul></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ See also the sample in the <a href="../../../../../../range/doc/html/range/reference/extending/method_2.html" target="_top">Boost.Range
+ documentation</a> showing how a type can be adapted to a Boost.Range
+ to fulfill the concept of a Linestring
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts/concept_multi_linestring.html b/libs/geometry/doc/html/geometry/reference/concepts/concept_multi_linestring.html
new file mode 100644
index 000000000..5e37d7342
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts/concept_multi_linestring.html
@@ -0,0 +1,84 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>MultiLinestring Concept</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="concept_multi_point.html" title="MultiPoint Concept">
+<link rel="next" href="concept_multi_polygon.html" title="MultiPolygon Concept">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_multi_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_multi_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.concepts.concept_multi_linestring"></a><a class="link" href="concept_multi_linestring.html" title="MultiLinestring Concept">MultiLinestring
+ Concept</a>
+</h4></div></div></div>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_linestring.h0"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_linestring.description"></a></span><a class="link" href="concept_multi_linestring.html#geometry.reference.concepts.concept_multi_linestring.description">Description</a>
+ </h6>
+<p>
+ The MultiLinestring Concept describes the requirements for a multi linestring
+ type. All algorithms in Boost.Geometry will check any geometry arguments
+ against the concept requirements.
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_linestring.h1"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_linestring.concept_definition"></a></span><a class="link" href="concept_multi_linestring.html#geometry.reference.concepts.concept_multi_linestring.concept_definition">Concept
+ Definition</a>
+ </h6>
+<p>
+ The MultiLinestring Concept is defined as following:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ There must be a specialization of the metafunction <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>,
+ defining <code class="computeroutput"><span class="identifier">multi_linestring_tag</span></code>
+ as type
+ </li>
+<li class="listitem">
+ It must behave like a Boost.Range Random Access Range
+ </li>
+<li class="listitem">
+ The type defined by the metafunction <code class="computeroutput"><span class="identifier">range_value</span><span class="special">&lt;...&gt;::</span><span class="identifier">type</span></code>
+ must fulfill the <a class="link" href="concept_linestring.html" title="Linestring Concept">Linestring
+ Concept</a>
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_linestring.h2"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_linestring.available_models"></a></span><a class="link" href="concept_multi_linestring.html#geometry.reference.concepts.concept_multi_linestring.available_models">Available
+ Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../models/model_multi_linestring.html" title="model::multi_linestring">model::multi_linestring</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_multi_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_multi_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts/concept_multi_point.html b/libs/geometry/doc/html/geometry/reference/concepts/concept_multi_point.html
new file mode 100644
index 000000000..8ad8710c5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts/concept_multi_point.html
@@ -0,0 +1,84 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>MultiPoint Concept</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="concept_polygon.html" title="Polygon Concept">
+<link rel="next" href="concept_multi_linestring.html" title="MultiLinestring Concept">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_polygon.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_multi_linestring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.concepts.concept_multi_point"></a><a class="link" href="concept_multi_point.html" title="MultiPoint Concept">MultiPoint
+ Concept</a>
+</h4></div></div></div>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_point.description"></a></span><a class="link" href="concept_multi_point.html#geometry.reference.concepts.concept_multi_point.description">Description</a>
+ </h6>
+<p>
+ The MultiPoint Concept describes the requirements for a multi point type.
+ All algorithms in Boost.Geometry will check any geometry arguments against
+ the concept requirements.
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_point.concept_definition"></a></span><a class="link" href="concept_multi_point.html#geometry.reference.concepts.concept_multi_point.concept_definition">Concept
+ Definition</a>
+ </h6>
+<p>
+ The MultiPoint Concept is defined as following:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ There must be a specialization of the metafunction <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>,
+ defining <code class="computeroutput"><span class="identifier">multi_point_tag</span></code>
+ as type
+ </li>
+<li class="listitem">
+ It must behave like a Boost.Range Random Access Range
+ </li>
+<li class="listitem">
+ The type defined by the metafunction <code class="computeroutput"><span class="identifier">range_value</span><span class="special">&lt;...&gt;::</span><span class="identifier">type</span></code>
+ must fulfill the <a class="link" href="concept_point.html" title="Point Concept">Point
+ Concept</a>
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_point.available_models"></a></span><a class="link" href="concept_multi_point.html#geometry.reference.concepts.concept_multi_point.available_models">Available
+ Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../models/model_multi_point.html" title="model::multi_point">model::multi_point</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_polygon.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_multi_linestring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts/concept_multi_polygon.html b/libs/geometry/doc/html/geometry/reference/concepts/concept_multi_polygon.html
new file mode 100644
index 000000000..c252c40f9
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts/concept_multi_polygon.html
@@ -0,0 +1,106 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>MultiPolygon Concept</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="concept_multi_linestring.html" title="MultiLinestring Concept">
+<link rel="next" href="concept_box.html" title="Box Concept">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_multi_linestring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_box.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.concepts.concept_multi_polygon"></a><a class="link" href="concept_multi_polygon.html" title="MultiPolygon Concept">MultiPolygon
+ Concept</a>
+</h4></div></div></div>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_polygon.h0"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_polygon.description"></a></span><a class="link" href="concept_multi_polygon.html#geometry.reference.concepts.concept_multi_polygon.description">Description</a>
+ </h6>
+<p>
+ The MultiPolygon Concept describes the requirements for a multi polygon
+ type. All algorithms in Boost.Geometry will check any geometry arguments
+ against the concept requirements.
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_polygon.h1"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_polygon.concept_definition"></a></span><a class="link" href="concept_multi_polygon.html#geometry.reference.concepts.concept_multi_polygon.concept_definition">Concept
+ Definition</a>
+ </h6>
+<p>
+ The MultiPolygon Concept is defined as following:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ There must be a specialization of the metafunction <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>,
+ defining <code class="computeroutput"><span class="identifier">multi_polygon_tag</span></code>
+ as type
+ </li>
+<li class="listitem">
+ It must behave like a Boost.Range Random Access Range
+ </li>
+<li class="listitem">
+ The type defined by the metafunction <code class="computeroutput"><span class="identifier">range_value</span><span class="special">&lt;...&gt;::</span><span class="identifier">type</span></code>
+ must fulfill the <a class="link" href="concept_polygon.html" title="Polygon Concept">Polygon
+ Concept</a>
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_polygon.h2"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_polygon.rules"></a></span><a class="link" href="concept_multi_polygon.html#geometry.reference.concepts.concept_multi_polygon.rules">Rules</a>
+ </h6>
+<p>
+ Besides the Concepts, which are checks on compile-time, there are rules
+ that valid MultiPolygons must fulfill. See the <a class="link" href="concept_polygon.html" title="Polygon Concept">Polygon
+ Concept</a> for more information on the rules a polygon (and also a
+ multi polygon) must fulfill.
+ </p>
+<p>
+ Additionally:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Individual polygons making up a multi-polygon may not intersect each
+ other, but tangencies are allowed.
+ </li>
+<li class="listitem">
+ One polygon might be located within the interior ring of another polygon.
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.concepts.concept_multi_polygon.h3"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_multi_polygon.available_models"></a></span><a class="link" href="concept_multi_polygon.html#geometry.reference.concepts.concept_multi_polygon.available_models">Available
+ Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../models/model_multi_polygon.html" title="model::multi_polygon">model::multi_polygon</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_multi_linestring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_box.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts/concept_point.html b/libs/geometry/doc/html/geometry/reference/concepts/concept_point.html
new file mode 100644
index 000000000..1adfec012
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts/concept_point.html
@@ -0,0 +1,137 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Point Concept</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="../concepts.html" title="Concepts">
+<link rel="next" href="concept_linestring.html" title="Linestring Concept">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../concepts.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_linestring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.concepts.concept_point"></a><a class="link" href="concept_point.html" title="Point Concept">Point Concept</a>
+</h4></div></div></div>
+<h6>
+<a name="geometry.reference.concepts.concept_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_point.description"></a></span><a class="link" href="concept_point.html#geometry.reference.concepts.concept_point.description">Description</a>
+ </h6>
+<p>
+ The Point Concept describes the requirements for a point type. All algorithms
+ in Boost.Geometry will check any geometry arguments against the concept
+ requirements.
+ </p>
+<p>
+ A point is <span class="emphasis"><em>an entity that has a location in space or on a plane,
+ but has no extent</em></span> (<a href="http://en.wikipedia.org/wiki/Point_(geometry)" target="_top">wiki</a>).
+ The point is the most basic geometry of Boost.Geometry, most other geometries
+ consist of points. <span class="emphasis"><em>(Exceptions are box and segment, which might
+ consist of two points but that is not necessarily the case.)</em></span>
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_point.concept_definition"></a></span><a class="link" href="concept_point.html#geometry.reference.concepts.concept_point.concept_definition">Concept
+ Definition</a>
+ </h6>
+<p>
+ The Point Concept is defined as following:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>,
+ defining <code class="computeroutput"><span class="identifier">point_tag</span></code>
+ as type
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">coordinate_type</span></code>,
+ defining the type of its coordinates
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">coordinate_system</span></code>,
+ defining its coordinate system (cartesian, spherical, etc)
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">dimension</span></code>,
+ defining its number of dimensions (2, 3, ...) (hint: derive it conveniently
+ from <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="identifier">X</span><span class="special">&gt;</span></code>
+ for X Dimensional)
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">access</span></code>,
+ per dimension, with two functions:
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">get</span></code> to get a
+ coordinate value
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">set</span></code> to set a
+ coordinate value (this one is not checked for ConstPoint)
+ </li>
+</ul></div>
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.concepts.concept_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_point.available_models"></a></span><a class="link" href="concept_point.html#geometry.reference.concepts.concept_point.available_models">Available
+ Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="../models/model_point.html" title="model::point">model::point</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../models/model_d2_point_xy.html" title="model::d2::point_xy">model::d2::point_xy</a>
+ </li>
+<li class="listitem">
+ a lat long point (currently in an extension)
+ </li>
+<li class="listitem">
+ <a class="link" href="../adapted/c_array.html" title="C array">C array</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../adapted/boost_array.html" title="Boost.Array">Boost.Array</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../adapted/boost_fusion.html" title="Boost.Fusion">Boost.Fusion</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../adapted/boost_polygon.html" title="Boost.Polygon">Boost.Polygon</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../adapted/boost_tuple.html" title="Boost.Tuple">Boost.Tuple</a>
+ </li>
+<li class="listitem">
+ other point types, adapted e.g. using one of the <a class="link" href="../adapted.html" title="Adapted models">registration
+ macro's</a>
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../concepts.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_linestring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts/concept_polygon.html b/libs/geometry/doc/html/geometry/reference/concepts/concept_polygon.html
new file mode 100644
index 000000000..18b3231c3
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts/concept_polygon.html
@@ -0,0 +1,172 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Polygon Concept</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="concept_linestring.html" title="Linestring Concept">
+<link rel="next" href="concept_multi_point.html" title="MultiPoint Concept">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_linestring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_multi_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.concepts.concept_polygon"></a><a class="link" href="concept_polygon.html" title="Polygon Concept">Polygon
+ Concept</a>
+</h4></div></div></div>
+<h6>
+<a name="geometry.reference.concepts.concept_polygon.h0"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_polygon.description"></a></span><a class="link" href="concept_polygon.html#geometry.reference.concepts.concept_polygon.description">Description</a>
+ </h6>
+<p>
+ The Polygon Concept describes the requirements for a polygon type. All
+ algorithms in Boost.Geometry will check any geometry arguments against
+ the concept requirements.
+ </p>
+<p>
+ A polygon is <span class="emphasis"><em>A polygon is a planar surface defined by one exterior
+ boundary and zero or more interior boundaries</em></span> (<a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
+ Simple Feature Specification</a>).
+ </p>
+<p>
+ So the definition of a Boost.Geometry polygon differs a bit from e.g. Wiki,
+ where a polygon does not have holes. A polygon of Boost.Geometry is a polygon
+ with or without holes. <span class="emphasis"><em>(A polygon without holes is a <span class="emphasis"><em>helper
+ geometry</em></span> within Boost.Geometry, and referred to as a ring.)</em></span>
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_polygon.h1"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_polygon.concept_definition"></a></span><a class="link" href="concept_polygon.html#geometry.reference.concepts.concept_polygon.concept_definition">Concept
+ Definition</a>
+ </h6>
+<p>
+ The Polygon Concept is defined as following:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>
+ defining <code class="computeroutput"><span class="identifier">polygon_tag</span></code>
+ as type
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">ring_type</span></code>
+ defining the type of its exterior ring and interior rings as type
+ </li>
+<li class="listitem">
+ this type defined by <code class="computeroutput"><span class="identifier">ring_type</span></code>
+ must fulfill the <a class="link" href="concept_ring.html" title="Ring Concept">Ring
+ Concept</a>
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">interior_type</span></code>
+ defining the type of the collection of its interior rings as type;
+ this collection itself must fulfill a Boost.Range Random Access Range
+ Concept
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">exterior_ring</span></code>
+ with two functions named <code class="computeroutput"><span class="identifier">get</span></code>,
+ returning the exterior ring, one being const, the other being non const
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">interior_rings</span></code>
+ with two functions named <code class="computeroutput"><span class="identifier">get</span></code>,
+ returning the interior rings, one being const, the other being non
+ const
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.concepts.concept_polygon.h2"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_polygon.rules"></a></span><a class="link" href="concept_polygon.html#geometry.reference.concepts.concept_polygon.rules">Rules</a>
+ </h6>
+<p>
+ Besides the Concepts, which are checks on compile-time, there are some
+ other rules that valid polygons must fulfill. This follows the opengeospatial
+ rules (see link above).
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Polygons are simple geometric objects (See also <a href="http://en.wikipedia.org/wiki/Simple_polygon" target="_top">wiki</a>
+ but holes are allowed in Boost.Geometry polygons).
+ </li>
+<li class="listitem">
+ If the polygons underlying <code class="computeroutput"><span class="identifier">ring_type</span></code>
+ is defined as clockwise, the exterior ring must have the clockwise
+ orientation, and any interior ring must be reversed w.r.t. the defined
+ orientation (so: counter clockwise for clockwise exterior rings). If
+ the <code class="computeroutput"><span class="identifier">ring_type</span></code> is defined
+ counter clockwise, it is vice versa.
+ </li>
+<li class="listitem">
+ If the polygons underlying <code class="computeroutput"><span class="identifier">ring_type</span></code>
+ is defined as closed, all rings must be closed: the first point must
+ be spatially equal to the last point.
+ </li>
+<li class="listitem">
+ The interior is a connected point set.
+ </li>
+<li class="listitem">
+ There should be no self intersections, but self tangencies (between
+ exterior/interior rings) are allowed (as long as the interior is a
+ connected point set.
+ </li>
+<li class="listitem">
+ There should be no cut lines, spikes or punctures.
+ </li>
+<li class="listitem">
+ The interior rings should be located within the exterior ring. Interior
+ rings may not be located within each other.
+ </li>
+</ul></div>
+<p>
+ The algorithms such as intersection, area, centroid, union, etc. do not
+ check validity. There will be an algorithm is_valid which checks for validity
+ against these rules, at runtime, and which can be called (by the library
+ user) before.
+ </p>
+<p>
+ If the input is invalid, the output might be invalid too. For example:
+ if a polygon which should be closed is not closed, the area will be incorrect.
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_polygon.h3"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_polygon.available_models"></a></span><a class="link" href="concept_polygon.html#geometry.reference.concepts.concept_polygon.available_models">Available
+ Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="../models/model_polygon.html" title="model::polygon">polygon</a>
+ </li>
+<li class="listitem">
+ a Boost.Polygon polygon_with_holes_data (requires <code class="computeroutput"><span class="preprocessor">#include</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">/</span><span class="identifier">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>)
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_linestring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_multi_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts/concept_ring.html b/libs/geometry/doc/html/geometry/reference/concepts/concept_ring.html
new file mode 100644
index 000000000..7eee22c00
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts/concept_ring.html
@@ -0,0 +1,138 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Ring Concept</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="concept_box.html" title="Box Concept">
+<link rel="next" href="concept_segment.html" title="Segment Concept">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_box.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_segment.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.concepts.concept_ring"></a><a class="link" href="concept_ring.html" title="Ring Concept">Ring Concept</a>
+</h4></div></div></div>
+<h6>
+<a name="geometry.reference.concepts.concept_ring.h0"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_ring.description"></a></span><a class="link" href="concept_ring.html#geometry.reference.concepts.concept_ring.description">Description</a>
+ </h6>
+<p>
+ The Ring Concept describes the requirements for a ring type. All algorithms
+ in Boost.Geometry will check any geometry arguments against the concept
+ requirements.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Also called linear ring, but we explicitly refer to a filled feature
+ here
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.concepts.concept_ring.h1"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_ring.concept_definition"></a></span><a class="link" href="concept_ring.html#geometry.reference.concepts.concept_ring.concept_definition">Concept
+ Definition</a>
+ </h6>
+<p>
+ The Ring Concept is defined as following:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>
+ defining <code class="computeroutput"><span class="identifier">ring_tag</span></code> as
+ type
+ </li>
+<li class="listitem">
+ it must behave like a Boost.Range Random Access Range
+ </li>
+<li class="listitem">
+ The type defined by the metafunction <code class="computeroutput"><span class="identifier">range_value</span><span class="special">&lt;...&gt;::</span><span class="identifier">type</span></code>
+ must fulfill the <a class="link" href="concept_point.html" title="Point Concept">Point
+ Concept</a>
+ </li>
+<li class="listitem">
+ there might be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">point_order</span></code>
+ defining the order or orientation of its points, <code class="computeroutput"><span class="identifier">clockwise</span></code>
+ or <code class="computeroutput"><span class="identifier">counterclockwise</span></code>
+ </li>
+<li class="listitem">
+ there might be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">closure</span></code>
+ defining the closure, <code class="computeroutput"><span class="identifier">open</span></code>
+ or <code class="computeroutput"><span class="identifier">closed</span></code>
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.concepts.concept_ring.h2"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_ring.rules"></a></span><a class="link" href="concept_ring.html#geometry.reference.concepts.concept_ring.rules">Rules</a>
+ </h6>
+<p>
+ Besides the Concepts, which are checks on compile-time, there are rules
+ that valid rings must fulfill. See the <a class="link" href="concept_polygon.html" title="Polygon Concept">Polygon
+ Concept</a> for more information on the rules a polygon (and also a
+ ring) must fulfill.
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_ring.h3"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_ring.available_models"></a></span><a class="link" href="concept_ring.html#geometry.reference.concepts.concept_ring.available_models">Available
+ Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="../models/model_ring.html" title="model::ring">ring</a>
+ </li>
+<li class="listitem">
+ a Boost.Polygon polygon_data (requires <code class="computeroutput"><span class="preprocessor">#include</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">adapted</span><span class="special">/</span><span class="identifier">boost_polygon</span><span class="special">/</span><span class="identifier">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>)
+ </li>
+<li class="listitem">
+ a std::vector (requires <code class="computeroutput"><span class="preprocessor">#include</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">adapted</span><span class="special">/</span><span class="identifier">std_as_ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>)
+ </li>
+<li class="listitem">
+ a std::deque (requires <code class="computeroutput"><span class="preprocessor">#include</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">adapted</span><span class="special">/</span><span class="identifier">std_as_ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>)
+ </li>
+</ul></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ See also the sample in the <a href="../../../../../../range/doc/html/range/reference/extending/method_2.html" target="_top">Boost.Range
+ documentation</a> showing how a type can be adapted to a Boost.Range
+ to fulfill the concept of a Ring
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_box.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="concept_segment.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/concepts/concept_segment.html b/libs/geometry/doc/html/geometry/reference/concepts/concept_segment.html
new file mode 100644
index 000000000..deb9cd281
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/concepts/concept_segment.html
@@ -0,0 +1,111 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Segment Concept</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../concepts.html" title="Concepts">
+<link rel="prev" href="concept_ring.html" title="Ring Concept">
+<link rel="next" href="../constants.html" title="Constants">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_ring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../constants.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.concepts.concept_segment"></a><a class="link" href="concept_segment.html" title="Segment Concept">Segment
+ Concept</a>
+</h4></div></div></div>
+<h6>
+<a name="geometry.reference.concepts.concept_segment.h0"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_segment.description"></a></span><a class="link" href="concept_segment.html#geometry.reference.concepts.concept_segment.description">Description</a>
+ </h6>
+<p>
+ The Segment Concept describes the requirements for a segment type. All
+ algorithms in Boost.Geometry will check any geometry arguments against
+ the concept requirements.
+ </p>
+<h6>
+<a name="geometry.reference.concepts.concept_segment.h1"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_segment.concept_definition"></a></span><a class="link" href="concept_segment.html#geometry.reference.concepts.concept_segment.concept_definition">Concept
+ Definition</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">tag</span></code>
+ defining <code class="computeroutput"><span class="identifier">segment_tag</span></code>
+ as type
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">point_type</span></code>
+ to define the underlying point type (even if it does not consist of
+ points, it should define this type, to indicate the points it can work
+ with)
+ </li>
+<li class="listitem">
+ there must be a specialization of <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">indexed_access</span></code>,
+ per index and per dimension, with two functions:
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">get</span></code> to get a
+ coordinate value
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">set</span></code> to set a
+ coordinate value (this one is not checked for ConstSegment)
+ </li>
+</ul></div>
+ </li>
+</ul></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ The segment concept is similar to the box concept, defining using another
+ tag. However, the box concept assumes the index as <code class="computeroutput"><span class="identifier">min_corner</span></code>,
+ <code class="computeroutput"><span class="identifier">max_corner</span></code>, while for
+ the segment concept, there is no assumption.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.concepts.concept_segment.h2"></a>
+ <span class="phrase"><a name="geometry.reference.concepts.concept_segment.available_models"></a></span><a class="link" href="concept_segment.html#geometry.reference.concepts.concept_segment.available_models">Available
+ Models</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="../models/model_segment.html" title="model::segment">model::segment</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../models/model_referring_segment.html" title="model::referring_segment">referring
+ segment</a>
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concept_ring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.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="../constants.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/constants.html b/libs/geometry/doc/html/geometry/reference/constants.html
new file mode 100644
index 000000000..9a7a3a6dc
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/constants.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Constants</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="concepts/concept_segment.html" title="Segment Concept">
+<link rel="next" href="constants/min_corner.html" title="min_corner">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concepts/concept_segment.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="constants/min_corner.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.constants"></a><a class="link" href="constants.html" title="Constants">Constants</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="constants/min_corner.html">min_corner</a></span></dt>
+<dt><span class="section"><a href="constants/max_corner.html">max_corner</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concepts/concept_segment.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="constants/min_corner.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/constants/max_corner.html b/libs/geometry/doc/html/geometry/reference/constants/max_corner.html
new file mode 100644
index 000000000..896c3ef93
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/constants/max_corner.html
@@ -0,0 +1,149 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>max_corner</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../constants.html" title="Constants">
+<link rel="prev" href="min_corner.html" title="min_corner">
+<link rel="next" href="../cs.html" title="Coordinate Systems">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="min_corner.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../constants.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="../cs.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.constants.max_corner"></a><a class="link" href="max_corner.html" title="max_corner">max_corner</a>
+</h4></div></div></div>
+<p>
+ Indicates the maximal corner (upper right) of a box to be get, set or processed
+ </p>
+<h6>
+<a name="geometry.reference.constants.max_corner.h0"></a>
+ <span class="phrase"><a name="geometry.reference.constants.max_corner.synopsis"></a></span><a class="link" href="max_corner.html#geometry.reference.constants.max_corner.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="keyword">const</span> <span class="identifier">max_corner</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.constants.max_corner.h1"></a>
+ <span class="phrase"><a name="geometry.reference.constants.max_corner.header"></a></span><a class="link" href="max_corner.html#geometry.reference.constants.max_corner.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">access</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ min_corner and max_corner are only applicable for boxes and not for,
+ e.g., a segment
+ </p></td></tr>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ min_corner should be the minimal corner of a box, but that is not guaranteed.
+ Use correct to make min_corner the minimal corner. The same applies for
+ max_corner.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.constants.max_corner.h2"></a>
+ <span class="phrase"><a name="geometry.reference.constants.max_corner.example"></a></span><a class="link" href="max_corner.html#geometry.reference.constants.max_corner.example">Example</a>
+ </h6>
+<p>
+ Get the coordinate of a box
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">box</span><span class="special">;</span>
+
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">box</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">6</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Box:"</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">min_corner</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">min_corner</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">max_corner</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">max_corner</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Box: 1 3 5 6
+</pre>
+<h6>
+<a name="geometry.reference.constants.max_corner.h3"></a>
+ <span class="phrase"><a name="geometry.reference.constants.max_corner.see_also"></a></span><a class="link" href="max_corner.html#geometry.reference.constants.max_corner.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="min_corner.html" title="min_corner">min_corner</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../access/get/get_1_with_index.html" title="get (with index)">get
+ with index</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../access/set/set_2_with_index.html" title="set (with index)">set
+ with index</a>
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="min_corner.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../constants.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="../cs.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/constants/min_corner.html b/libs/geometry/doc/html/geometry/reference/constants/min_corner.html
new file mode 100644
index 000000000..1f6e6b6dd
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/constants/min_corner.html
@@ -0,0 +1,149 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>min_corner</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../constants.html" title="Constants">
+<link rel="prev" href="../constants.html" title="Constants">
+<link rel="next" href="max_corner.html" title="max_corner">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../constants.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../constants.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="max_corner.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.constants.min_corner"></a><a class="link" href="min_corner.html" title="min_corner">min_corner</a>
+</h4></div></div></div>
+<p>
+ Indicates the minimal corner (lower left) of a box to be get, set or processed
+ </p>
+<h6>
+<a name="geometry.reference.constants.min_corner.h0"></a>
+ <span class="phrase"><a name="geometry.reference.constants.min_corner.synopsis"></a></span><a class="link" href="min_corner.html#geometry.reference.constants.min_corner.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="keyword">const</span> <span class="identifier">min_corner</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.constants.min_corner.h1"></a>
+ <span class="phrase"><a name="geometry.reference.constants.min_corner.header"></a></span><a class="link" href="min_corner.html#geometry.reference.constants.min_corner.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">access</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ min_corner and max_corner are only applicable for boxes and not for,
+ e.g., a segment
+ </p></td></tr>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ min_corner should be the minimal corner of a box, but that is not guaranteed.
+ Use correct to make min_corner the minimal corner. The same applies for
+ max_corner.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.constants.min_corner.h2"></a>
+ <span class="phrase"><a name="geometry.reference.constants.min_corner.example"></a></span><a class="link" href="min_corner.html#geometry.reference.constants.min_corner.example">Example</a>
+ </h6>
+<p>
+ Get the coordinate of a box
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">box</span><span class="special">;</span>
+
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">assign_values</span><span class="special">(</span><span class="identifier">box</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">6</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Box:"</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">min_corner</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">min_corner</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">max_corner</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">max_corner</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;(</span><span class="identifier">box</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Box: 1 3 5 6
+</pre>
+<h6>
+<a name="geometry.reference.constants.min_corner.h3"></a>
+ <span class="phrase"><a name="geometry.reference.constants.min_corner.see_also"></a></span><a class="link" href="min_corner.html#geometry.reference.constants.min_corner.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a class="link" href="max_corner.html" title="max_corner">max_corner</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../access/get/get_1_with_index.html" title="get (with index)">get
+ with index</a>
+ </li>
+<li class="listitem">
+ <a class="link" href="../access/set/set_2_with_index.html" title="set (with index)">set
+ with index</a>
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../constants.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../constants.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="max_corner.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core.html b/libs/geometry/doc/html/geometry/reference/core.html
new file mode 100644
index 000000000..5bcb06549
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core.html
@@ -0,0 +1,59 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Core Metafunctions</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="cs/cs_geographic.html" title="cs::geographic">
+<link rel="next" href="core/closure.html" title="closure">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs/cs_geographic.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="core/closure.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.core"></a><a class="link" href="core.html" title="Core Metafunctions">Core Metafunctions</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="core/closure.html">closure</a></span></dt>
+<dt><span class="section"><a href="core/coordinate_system.html">coordinate_system</a></span></dt>
+<dt><span class="section"><a href="core/coordinate_type.html">coordinate_type</a></span></dt>
+<dt><span class="section"><a href="core/cs_tag.html">cs_tag</a></span></dt>
+<dt><span class="section"><a href="core/degree.html">degree</a></span></dt>
+<dt><span class="section"><a href="core/dimension.html">dimension</a></span></dt>
+<dt><span class="section"><a href="core/interior_type.html">interior_type</a></span></dt>
+<dt><span class="section"><a href="core/is_radian.html">is_radian</a></span></dt>
+<dt><span class="section"><a href="core/point_order.html">point_order</a></span></dt>
+<dt><span class="section"><a href="core/point_type.html">point_type</a></span></dt>
+<dt><span class="section"><a href="core/radian.html">radian</a></span></dt>
+<dt><span class="section"><a href="core/ring_type.html">ring_type</a></span></dt>
+<dt><span class="section"><a href="core/tag.html">tag</a></span></dt>
+<dt><span class="section"><a href="core/tag_cast.html">tag_cast</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs/cs_geographic.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="core/closure.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/closure.html b/libs/geometry/doc/html/geometry/reference/core/closure.html
new file mode 100644
index 000000000..01f0a03d0
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/closure.html
@@ -0,0 +1,168 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>closure</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="../core.html" title="Core Metafunctions">
+<link rel="next" href="coordinate_system.html" title="coordinate_system">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../core.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="coordinate_system.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.closure"></a><a class="link" href="closure.html" title="closure">closure</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14143744"></a>
+Metafunction defining <span class="bold"><strong>value</strong></span> as the closure
+ (clockwise, counterclockwise) of the specified geometry type.
+ </p>
+<h6>
+<a name="geometry.reference.core.closure.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.closure.synopsis"></a></span><a class="link" href="closure.html#geometry.reference.core.closure.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">closure</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.closure.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.closure.template_parameter_s_"></a></span><a class="link" href="closure.html#geometry.reference.core.closure.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.closure.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.closure.header"></a></span><a class="link" href="closure.html#geometry.reference.core.closure.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">closure</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ The closure is defined for any geometry type, but only has a real meaning
+ for areal geometry types (ring, polygon, multi_polygon)
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.core.closure.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.closure.complexity"></a></span><a class="link" href="closure.html#geometry.reference.core.closure.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.closure.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.closure.example"></a></span><a class="link" href="closure.html#geometry.reference.core.closure.example">Example</a>
+ </h6>
+<p>
+ Examine if a polygon is defined as "should be closed"
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">polygon_type</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">closure_selector</span> <span class="identifier">clos</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">closure</span><span class="special">&lt;</span><span class="identifier">polygon_type</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"closure: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">clos</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"(open = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">open</span>
+ <span class="special">&lt;&lt;</span> <span class="string">", closed = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">closed</span>
+ <span class="special">&lt;&lt;</span> <span class="string">") "</span><span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">closure: 1
+(open = 0, closed = 1)
+</pre>
+<h6>
+<a name="geometry.reference.core.closure.h5"></a>
+ <span class="phrase"><a name="geometry.reference.core.closure.see_also"></a></span><a class="link" href="closure.html#geometry.reference.core.closure.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../enumerations/closure_selector.html" title="closure_selector">The
+ closure_selector enumeration</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../core.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="coordinate_system.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/coordinate_system.html b/libs/geometry/doc/html/geometry/reference/core/coordinate_system.html
new file mode 100644
index 000000000..73ac081ff
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/coordinate_system.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>coordinate_system</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="closure.html" title="closure">
+<link rel="next" href="coordinate_type.html" title="coordinate_type">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="closure.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="coordinate_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.coordinate_system"></a><a class="link" href="coordinate_system.html" title="coordinate_system">coordinate_system</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14199264"></a>
+Metafunction defining <span class="bold"><strong>type</strong></span> as the coordinate
+ system (cartesian, spherical, etc) of the point type making up the specified
+ geometry type.
+ </p>
+<h6>
+<a name="geometry.reference.core.coordinate_system.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_system.synopsis"></a></span><a class="link" href="coordinate_system.html#geometry.reference.core.coordinate_system.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">coordinate_system</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.coordinate_system.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_system.template_parameter_s_"></a></span><a class="link" href="coordinate_system.html#geometry.reference.core.coordinate_system.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.coordinate_system.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_system.header"></a></span><a class="link" href="coordinate_system.html#geometry.reference.core.coordinate_system.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">coordinate_system</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.core.coordinate_system.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_system.complexity"></a></span><a class="link" href="coordinate_system.html#geometry.reference.core.coordinate_system.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.coordinate_system.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_system.example"></a></span><a class="link" href="coordinate_system.html#geometry.reference.core.coordinate_system.example">Example</a>
+ </h6>
+<p>
+ Examine the coordinate system of a point
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">typeinfo</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">coordinate_system</span><span class="special">&lt;</span><span class="identifier">polygon_type</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">system</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"system: "</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">system</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output (using MSVC):
+ </p>
+<pre class="programlisting">system: struct boost::geometry::cs::cartesian
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="closure.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="coordinate_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/coordinate_type.html b/libs/geometry/doc/html/geometry/reference/core/coordinate_type.html
new file mode 100644
index 000000000..68b0e115a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/coordinate_type.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>coordinate_type</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="coordinate_system.html" title="coordinate_system">
+<link rel="next" href="cs_tag.html" title="cs_tag">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="coordinate_system.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="cs_tag.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.coordinate_type"></a><a class="link" href="coordinate_type.html" title="coordinate_type">coordinate_type</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14245984"></a>
+Metafunction defining <span class="bold"><strong>type</strong></span> as the coordinate
+ type (int, float, double, etc) of the point type making up the specified
+ geometry type.
+ </p>
+<h6>
+<a name="geometry.reference.core.coordinate_type.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_type.synopsis"></a></span><a class="link" href="coordinate_type.html#geometry.reference.core.coordinate_type.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">coordinate_type</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.coordinate_type.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_type.template_parameter_s_"></a></span><a class="link" href="coordinate_type.html#geometry.reference.core.coordinate_type.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.coordinate_type.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_type.header"></a></span><a class="link" href="coordinate_type.html#geometry.reference.core.coordinate_type.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">coordinate_type</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.core.coordinate_type.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_type.complexity"></a></span><a class="link" href="coordinate_type.html#geometry.reference.core.coordinate_type.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.coordinate_type.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.coordinate_type.example"></a></span><a class="link" href="coordinate_type.html#geometry.reference.core.coordinate_type.example">Example</a>
+ </h6>
+<p>
+ Examine the coordinate type of a point
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">typeinfo</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">coordinate_type</span><span class="special">&lt;</span><span class="identifier">polygon_type</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">ctype</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"type: "</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">ctype</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output (using MSVC):
+ </p>
+<pre class="programlisting">type: double
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="coordinate_system.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="cs_tag.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/cs_tag.html b/libs/geometry/doc/html/geometry/reference/core/cs_tag.html
new file mode 100644
index 000000000..f411c6f74
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/cs_tag.html
@@ -0,0 +1,109 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cs_tag</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="coordinate_type.html" title="coordinate_type">
+<link rel="next" href="degree.html" title="degree">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="coordinate_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="degree.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.cs_tag"></a><a class="link" href="cs_tag.html" title="cs_tag">cs_tag</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14292288"></a>
+Meta-function returning coordinate system tag (cs family) of any geometry.
+ </p>
+<h6>
+<a name="geometry.reference.core.cs_tag.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.cs_tag.synopsis"></a></span><a class="link" href="cs_tag.html#geometry.reference.core.cs_tag.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">G</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">cs_tag</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.cs_tag.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.cs_tag.template_parameter_s_"></a></span><a class="link" href="cs_tag.html#geometry.reference.core.cs_tag.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename G
+ </p>
+ </td>
+<td>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.cs_tag.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.cs_tag.header"></a></span><a class="link" href="cs_tag.html#geometry.reference.core.cs_tag.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">cs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="coordinate_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="degree.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/degree.html b/libs/geometry/doc/html/geometry/reference/core/degree.html
new file mode 100644
index 000000000..2fe9aefe9
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/degree.html
@@ -0,0 +1,125 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>degree</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="cs_tag.html" title="cs_tag">
+<link rel="next" href="dimension.html" title="dimension">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs_tag.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="dimension.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.degree"></a><a class="link" href="degree.html" title="degree">degree</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14310112"></a>
+Unit of plane angle: Degrees.
+ </p>
+<h6>
+<a name="geometry.reference.core.degree.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.degree.description"></a></span><a class="link" href="degree.html#geometry.reference.core.degree.description">Description</a>
+ </h6>
+<p>
+ Tag defining the unit of plane angle for spherical coordinate systems.
+ This tag specifies that coordinates are defined in degrees (-180 .. 180).
+ It has to be specified for some coordinate systems.
+ </p>
+<h6>
+<a name="geometry.reference.core.degree.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.degree.synopsis"></a></span><a class="link" href="degree.html#geometry.reference.core.degree.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">degree</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.degree.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.degree.header"></a></span><a class="link" href="degree.html#geometry.reference.core.degree.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">cs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.core.degree.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.degree.example"></a></span><a class="link" href="degree.html#geometry.reference.core.degree.example">example</a>
+ </h6>
+<p>
+ Specify two coordinate systems, one in degrees, one in radians.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">degree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">degree_point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">radian</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">radian_point</span><span class="special">;</span>
+
+ <span class="identifier">degree_point</span> <span class="identifier">d</span><span class="special">(</span><span class="number">4.893</span><span class="special">,</span> <span class="number">52.373</span><span class="special">);</span>
+ <span class="identifier">radian_point</span> <span class="identifier">r</span><span class="special">(</span><span class="number">0.041</span><span class="special">,</span> <span class="number">0.8527</span><span class="special">);</span>
+
+ <span class="keyword">double</span> <span class="identifier">dist</span> <span class="special">=</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">d</span><span class="special">,</span> <span class="identifier">r</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"distance:"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">dist</span> <span class="special">&lt;&lt;</span> <span class="string">" over unit sphere"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">dist</span> <span class="special">*</span> <span class="number">3959</span> <span class="special">&lt;&lt;</span> <span class="string">" over a spherical earth, in miles"</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">distance:
+0.0675272 over unit sphere
+267.34 over a spherical earth, in miles
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs_tag.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="dimension.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/dimension.html b/libs/geometry/doc/html/geometry/reference/core/dimension.html
new file mode 100644
index 000000000..7288d7d18
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/dimension.html
@@ -0,0 +1,153 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>dimension</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="degree.html" title="degree">
+<link rel="next" href="interior_type.html" title="interior_type">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="degree.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="interior_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.dimension"></a><a class="link" href="dimension.html" title="dimension">dimension</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14362752"></a>
+Metafunction defining <span class="bold"><strong>value</strong></span> as the number
+ of coordinates (the number of axes of any geometry) of the point type making
+ up the specified geometry type.
+ </p>
+<h6>
+<a name="geometry.reference.core.dimension.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.dimension.synopsis"></a></span><a class="link" href="dimension.html#geometry.reference.core.dimension.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">dimension</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">core_dispatch</span><span class="special">::</span><span class="identifier">dimension</span><span class="special">&lt;</span> <span class="identifier">tag</span><span class="special">&lt;</span> <span class="identifier">Geometry</span> <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">geometry</span><span class="special">::</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">bare_type</span><span class="special">&lt;</span> <span class="identifier">Geometry</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.dimension.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.dimension.template_parameter_s_"></a></span><a class="link" href="dimension.html#geometry.reference.core.dimension.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.dimension.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.dimension.header"></a></span><a class="link" href="dimension.html#geometry.reference.core.dimension.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">coordinate_dimension</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.core.dimension.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.dimension.complexity"></a></span><a class="link" href="dimension.html#geometry.reference.core.dimension.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.dimension.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.dimension.example"></a></span><a class="link" href="dimension.html#geometry.reference.core.dimension.example">Example</a>
+ </h6>
+<p>
+ Examine the number of coordinates making up the points in a linestring
+ type
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">int</span> <span class="identifier">dim</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">dimension</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">linestring</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="keyword">float</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">value</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"dimensions: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">dim</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">dimensions: 3
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="degree.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="interior_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/interior_type.html b/libs/geometry/doc/html/geometry/reference/core/interior_type.html
new file mode 100644
index 000000000..0f5e593c2
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/interior_type.html
@@ -0,0 +1,163 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>interior_type</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="dimension.html" title="dimension">
+<link rel="next" href="is_radian.html" title="is_radian">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dimension.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="is_radian.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.interior_type"></a><a class="link" href="interior_type.html" title="interior_type">interior_type</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14418672"></a>
+Metafunction defining <span class="bold"><strong>type</strong></span> as the interior_type
+ (container type of inner rings) of the specified geometry type.
+ </p>
+<h6>
+<a name="geometry.reference.core.interior_type.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.interior_type.description"></a></span><a class="link" href="interior_type.html#geometry.reference.core.interior_type.description">Description</a>
+ </h6>
+<p>
+ Interior rings should be organized as a container (std::vector, std::deque,
+ boost::array) with Boost.Range support. This metafunction defines the type
+ of the container.
+ </p>
+<h6>
+<a name="geometry.reference.core.interior_type.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.interior_type.synopsis"></a></span><a class="link" href="interior_type.html#geometry.reference.core.interior_type.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">interior_type</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.interior_type.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.interior_type.template_parameter_s_"></a></span><a class="link" href="interior_type.html#geometry.reference.core.interior_type.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A type fullfilling the Polygon or MultiPolygon concept.
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.interior_type.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.interior_type.header"></a></span><a class="link" href="interior_type.html#geometry.reference.core.interior_type.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">interior_type</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.core.interior_type.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.interior_type.complexity"></a></span><a class="link" href="interior_type.html#geometry.reference.core.interior_type.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.interior_type.h5"></a>
+ <span class="phrase"><a name="geometry.reference.core.interior_type.example"></a></span><a class="link" href="interior_type.html#geometry.reference.core.interior_type.example">Example</a>
+ </h6>
+<p>
+ Shows how to use the interior_type metafunction
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">typeinfo</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_array</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_ARRAY_CS</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Define a polygon storing points in a deque and storing interior rings</span>
+ <span class="comment">// in a list (note that std::list is not supported by most algorithms </span>
+ <span class="comment">// because not supporting a random access iterator)</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special">&lt;</span><span class="keyword">short</span><span class="special">,</span> <span class="number">3</span><span class="special">&gt;,</span>
+ <span class="keyword">true</span><span class="special">,</span> <span class="keyword">true</span><span class="special">,</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">deque</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span>
+ <span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</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">interior_type</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output (using MSVC) is a long story (part manually replaced with ellipsis):
+ </p>
+<pre class="programlisting">class std::list&lt;class boost::geometry::model::ring&lt;class boost::array&lt;short,3&gt;,1,1,class std::deque,class std::allocator&gt;,class std::allocator&lt;...&gt; &gt; &gt;
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="dimension.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="is_radian.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/is_radian.html b/libs/geometry/doc/html/geometry/reference/core/is_radian.html
new file mode 100644
index 000000000..7bb5e7e18
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/is_radian.html
@@ -0,0 +1,110 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_radian</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="interior_type.html" title="interior_type">
+<link rel="next" href="point_order.html" title="point_order">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="interior_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="point_order.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.is_radian"></a><a class="link" href="is_radian.html" title="is_radian">is_radian</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14478672"></a>
+Meta-function to verify if a coordinate system is radian.
+ </p>
+<h6>
+<a name="geometry.reference.core.is_radian.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.is_radian.synopsis"></a></span><a class="link" href="is_radian.html#geometry.reference.core.is_radian.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CoordinateSystem</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_radian</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">true_type</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.is_radian.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.is_radian.template_parameter_s_"></a></span><a class="link" href="is_radian.html#geometry.reference.core.is_radian.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename CoordinateSystem
+ </p>
+ </td>
+<td>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.is_radian.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.is_radian.header"></a></span><a class="link" href="is_radian.html#geometry.reference.core.is_radian.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">cs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="interior_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="point_order.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/point_order.html b/libs/geometry/doc/html/geometry/reference/core/point_order.html
new file mode 100644
index 000000000..12a271a31
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/point_order.html
@@ -0,0 +1,168 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>point_order</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="is_radian.html" title="is_radian">
+<link rel="next" href="point_type.html" title="point_type">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_radian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="point_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.point_order"></a><a class="link" href="point_order.html" title="point_order">point_order</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14499872"></a>
+Metafunction defining <span class="bold"><strong>value</strong></span> as the point
+ order (clockwise, counterclockwise) of the specified geometry type.
+ </p>
+<h6>
+<a name="geometry.reference.core.point_order.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_order.synopsis"></a></span><a class="link" href="point_order.html#geometry.reference.core.point_order.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">point_order</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.point_order.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_order.template_parameter_s_"></a></span><a class="link" href="point_order.html#geometry.reference.core.point_order.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.point_order.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_order.header"></a></span><a class="link" href="point_order.html#geometry.reference.core.point_order.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">point_order</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ The point order is defined for any geometry type, but only has a real
+ meaning for areal geometry types (ring, polygon, multi_polygon)
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.core.point_order.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_order.complexity"></a></span><a class="link" href="point_order.html#geometry.reference.core.point_order.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.point_order.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_order.example"></a></span><a class="link" href="point_order.html#geometry.reference.core.point_order.example">Example</a>
+ </h6>
+<p>
+ Examine the expected point order of a polygon type
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">,</span> <span class="keyword">false</span><span class="special">&gt;</span> <span class="identifier">polygon_type</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">order_selector</span> <span class="identifier">order</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">point_order</span><span class="special">&lt;</span><span class="identifier">polygon_type</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"order: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">order</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"(clockwise = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">clockwise</span>
+ <span class="special">&lt;&lt;</span> <span class="string">", counterclockwise = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">counterclockwise</span>
+ <span class="special">&lt;&lt;</span> <span class="string">") "</span><span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">order: 2
+(clockwise = 1, counterclockwise = 2)
+</pre>
+<h6>
+<a name="geometry.reference.core.point_order.h5"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_order.see_also"></a></span><a class="link" href="point_order.html#geometry.reference.core.point_order.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../enumerations/order_selector.html" title="order_selector">The
+ order_selector enumeration</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_radian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="point_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/point_type.html b/libs/geometry/doc/html/geometry/reference/core/point_type.html
new file mode 100644
index 000000000..4b1e140aa
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/point_type.html
@@ -0,0 +1,148 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>point_type</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="point_order.html" title="point_order">
+<link rel="next" href="radian.html" title="radian">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="point_order.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="radian.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.point_type"></a><a class="link" href="point_type.html" title="point_type">point_type</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14560896"></a>
+Metafunction defining <span class="bold"><strong>type</strong></span> as the point_type
+ of the specified geometry type.
+ </p>
+<h6>
+<a name="geometry.reference.core.point_type.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_type.synopsis"></a></span><a class="link" href="point_type.html#geometry.reference.core.point_type.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">point_type</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.point_type.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_type.template_parameter_s_"></a></span><a class="link" href="point_type.html#geometry.reference.core.point_type.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.point_type.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_type.header"></a></span><a class="link" href="point_type.html#geometry.reference.core.point_type.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">point_type</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.core.point_type.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_type.complexity"></a></span><a class="link" href="point_type.html#geometry.reference.core.point_type.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.point_type.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.point_type.example"></a></span><a class="link" href="point_type.html#geometry.reference.core.point_type.example">Example</a>
+ </h6>
+<p>
+ Examine the point type of a multi_polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">typeinfo</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">multi_polygon</span><span class="special">&lt;</span><span class="identifier">polygon_type</span><span class="special">&gt;</span> <span class="identifier">mp_type</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">point_type</span><span class="special">&lt;</span><span class="identifier">mp_type</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">ptype</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"point type: "</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">ptype</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output (in MSVC):
+ </p>
+<pre class="programlisting">point type: class boost::geometry::model::d2::point_xy&lt;double,struct boost::geometry::cs::cartesian&gt;
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="point_order.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="radian.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/radian.html b/libs/geometry/doc/html/geometry/reference/core/radian.html
new file mode 100644
index 000000000..c7db85e97
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/radian.html
@@ -0,0 +1,125 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>radian</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="point_type.html" title="point_type">
+<link rel="next" href="ring_type.html" title="ring_type">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="point_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="ring_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.radian"></a><a class="link" href="radian.html" title="radian">radian</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14620176"></a>
+Unit of plane angle: Radians.
+ </p>
+<h6>
+<a name="geometry.reference.core.radian.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.radian.description"></a></span><a class="link" href="radian.html#geometry.reference.core.radian.description">Description</a>
+ </h6>
+<p>
+ Tag defining the unit of plane angle for spherical coordinate systems.
+ This tag specifies that coordinates are defined in radians (-PI .. PI).
+ It has to be specified for some coordinate systems.
+ </p>
+<h6>
+<a name="geometry.reference.core.radian.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.radian.synopsis"></a></span><a class="link" href="radian.html#geometry.reference.core.radian.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">radian</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.radian.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.radian.header"></a></span><a class="link" href="radian.html#geometry.reference.core.radian.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">cs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.core.radian.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.radian.example"></a></span><a class="link" href="radian.html#geometry.reference.core.radian.example">example</a>
+ </h6>
+<p>
+ Specify two coordinate systems, one in degrees, one in radians.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">degree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">degree_point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">radian</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">radian_point</span><span class="special">;</span>
+
+ <span class="identifier">degree_point</span> <span class="identifier">d</span><span class="special">(</span><span class="number">4.893</span><span class="special">,</span> <span class="number">52.373</span><span class="special">);</span>
+ <span class="identifier">radian_point</span> <span class="identifier">r</span><span class="special">(</span><span class="number">0.041</span><span class="special">,</span> <span class="number">0.8527</span><span class="special">);</span>
+
+ <span class="keyword">double</span> <span class="identifier">dist</span> <span class="special">=</span> <span class="identifier">distance</span><span class="special">(</span><span class="identifier">d</span><span class="special">,</span> <span class="identifier">r</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"distance:"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">dist</span> <span class="special">&lt;&lt;</span> <span class="string">" over unit sphere"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">dist</span> <span class="special">*</span> <span class="number">3959</span> <span class="special">&lt;&lt;</span> <span class="string">" over a spherical earth, in miles"</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">distance:
+0.0675272 over unit sphere
+267.34 over a spherical earth, in miles
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="point_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="ring_type.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/ring_type.html b/libs/geometry/doc/html/geometry/reference/core/ring_type.html
new file mode 100644
index 000000000..d36010666
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/ring_type.html
@@ -0,0 +1,170 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ring_type</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="radian.html" title="radian">
+<link rel="next" href="tag.html" title="tag">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="radian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="tag.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.ring_type"></a><a class="link" href="ring_type.html" title="ring_type">ring_type</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14672816"></a>
+Metafunction defining <span class="bold"><strong>type</strong></span> as the ring_type
+ of the specified geometry type.
+ </p>
+<h6>
+<a name="geometry.reference.core.ring_type.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.ring_type.description"></a></span><a class="link" href="ring_type.html#geometry.reference.core.ring_type.description">Description</a>
+ </h6>
+<p>
+ A polygon contains one exterior ring and zero or more interior rings (holes).
+ This metafunction retrieves the type of the rings. Exterior ring and each
+ of the interior rings all have the same ring_type.
+ </p>
+<h6>
+<a name="geometry.reference.core.ring_type.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.ring_type.synopsis"></a></span><a class="link" href="ring_type.html#geometry.reference.core.ring_type.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">ring_type</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.ring_type.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.ring_type.template_parameter_s_"></a></span><a class="link" href="ring_type.html#geometry.reference.core.ring_type.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A type fullfilling the Ring, Polygon or MultiPolygon concept.
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.ring_type.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.ring_type.header"></a></span><a class="link" href="ring_type.html#geometry.reference.core.ring_type.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">ring_type</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.core.ring_type.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.ring_type.complexity"></a></span><a class="link" href="ring_type.html#geometry.reference.core.ring_type.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.ring_type.h5"></a>
+ <span class="phrase"><a name="geometry.reference.core.ring_type.example"></a></span><a class="link" href="ring_type.html#geometry.reference.core.ring_type.example">Example</a>
+ </h6>
+<p>
+ Shows how to use the ring_type metafunction, as well as interior_type
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">typeinfo</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">ring_type</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">ring_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">interior_type</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">int_type</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">ring_type</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">int_type</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="comment">// So int_type defines a collection of rings, </span>
+ <span class="comment">// which is a Boost.Range compatible range</span>
+ <span class="comment">// The type of an element of the collection is the very same ring type again.</span>
+ <span class="comment">// We show that.</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_value</span><span class="special">&lt;</span><span class="identifier">int_type</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">int_ring_type</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">boolalpha</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">ring_type</span><span class="special">,</span> <span class="identifier">int_ring_type</span><span class="special">&gt;::</span><span class="identifier">value</span>
+ <span class="special">&lt;&lt;</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>
+<p>
+ Output (using gcc):
+ </p>
+<pre class="programlisting">N5boost8geometry5model4ringINS1_2d28point_xyIdNS0_2cs9cartesianEEELb1ELb1ESt6vectorSaEE
+St6vectorIN5boost8geometry5model4ringINS2_2d28point_xyIdNS1_2cs9cartesianEEELb1ELb1ES_SaEESaIS9_EE
+true
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="radian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="tag.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/tag.html b/libs/geometry/doc/html/geometry/reference/core/tag.html
new file mode 100644
index 000000000..e2aea5139
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/tag.html
@@ -0,0 +1,270 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>tag</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="ring_type.html" title="ring_type">
+<link rel="next" href="tag_cast.html" title="tag_cast">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="ring_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="tag_cast.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.tag"></a><a class="link" href="tag.html" title="tag">tag</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14744400"></a>
+Metafunction defining <span class="bold"><strong>type</strong></span> as the tag
+ of the specified geometry type.
+ </p>
+<h6>
+<a name="geometry.reference.core.tag.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag.description"></a></span><a class="link" href="tag.html#geometry.reference.core.tag.description">Description</a>
+ </h6>
+<p>
+ With Boost.Geometry, tags are the driving force of the tag dispatching
+ mechanism. The tag metafunction is therefore used in every free function.
+ </p>
+<h6>
+<a name="geometry.reference.core.tag.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag.synopsis"></a></span><a class="link" href="tag.html#geometry.reference.core.tag.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">tag</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.tag.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag.template_parameter_s_"></a></span><a class="link" href="tag.html#geometry.reference.core.tag.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Geometry
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.tag.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag.header"></a></span><a class="link" href="tag.html#geometry.reference.core.tag.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">tag</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.core.tag.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag.metafunction_result_type"></a></span><a class="link" href="tag.html#geometry.reference.core.tag.metafunction_result_type">Metafunction
+ result type</a>
+ </h6>
+<p>
+ The metafunction tag defines <span class="bold"><strong>type</strong></span> as one
+ of the following tags:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ point_tag
+ </li>
+<li class="listitem">
+ linestring_tag
+ </li>
+<li class="listitem">
+ polygon_tag
+ </li>
+<li class="listitem">
+ multi_point_tag
+ </li>
+<li class="listitem">
+ multi_linestring_tag
+ </li>
+<li class="listitem">
+ multi_polygon_tag
+ </li>
+<li class="listitem">
+ box_tag
+ </li>
+<li class="listitem">
+ segment_tag
+ </li>
+<li class="listitem">
+ ring_tag
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.core.tag.h5"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag.complexity"></a></span><a class="link" href="tag.html#geometry.reference.core.tag.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.tag.h6"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag.example"></a></span><a class="link" href="tag.html#geometry.reference.core.tag.example">Example</a>
+ </h6>
+<p>
+ Shows how tag dispatching essentially works in Boost.Geometry
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</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="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">dispatch</span> <span class="special">{};</span>
+
+<span class="comment">// Specialization for points</span>
+<span class="keyword">template</span> <span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">dispatch</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">point_tag</span><span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+ <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="comment">// Use the Boost.Geometry free function "get"</span>
+ <span class="comment">// working on all supported point types</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Hello POINT, you are located at: "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="string">", "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="comment">// Specialization for polygons</span>
+<span class="keyword">template</span> <span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">dispatch</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">polygon_tag</span><span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Polygon</span><span class="special">&gt;</span>
+ <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Polygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="comment">// Use the Boost.Geometry manipulator "dsv" </span>
+ <span class="comment">// working on all supported geometries</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Hello POLYGON, you look like: "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="comment">// Specialization for multipolygons</span>
+<span class="keyword">template</span> <span class="special">&lt;&gt;</span> <span class="keyword">struct</span> <span class="identifier">dispatch</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">multi_polygon_tag</span><span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">MultiPolygon</span><span class="special">&gt;</span>
+ <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">MultiPolygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">m</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="comment">// Use the Boost.Range free function "size" because all</span>
+ <span class="comment">// multigeometries comply to Boost.Range</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Hello MULTIPOLYGON, you contain: "</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">size</span><span class="special">(</span><span class="identifier">m</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="string">" polygon(s)"</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">hello</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="comment">// Call the metafunction "tag" to dispatch, and call method (here "apply")</span>
+ <span class="identifier">dispatch</span>
+ <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">geometry</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="special">{</span>
+ <span class="comment">// Define polygon type (here: based on a Boost.Tuple)</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
+
+ <span class="comment">// Declare and fill a polygon and a multipolygon</span>
+ <span class="identifier">polygon_type</span> <span class="identifier">poly</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">exterior_ring</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">::</span><span class="identifier">tuple_list_of</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">0</span><span class="special">,</span> <span class="number">10</span><span class="special">)(</span><span class="number">10</span><span class="special">,</span> <span class="number">5</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">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">multi_polygon</span><span class="special">&lt;</span><span class="identifier">polygon_type</span><span class="special">&gt;</span> <span class="identifier">multi</span><span class="special">;</span>
+ <span class="identifier">multi</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">poly</span><span class="special">);</span>
+
+ <span class="comment">// Call "hello" for point, polygon, multipolygon</span>
+ <span class="identifier">hello</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_tuple</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">));</span>
+ <span class="identifier">hello</span><span class="special">(</span><span class="identifier">poly</span><span class="special">);</span>
+ <span class="identifier">hello</span><span class="special">(</span><span class="identifier">multi</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Hello POINT, you are located at: 2, 3
+Hello POLYGON, you look like: (((0, 0), (0, 10), (10, 5), (0, 0)))
+Hello MULTIPOLYGON, you contain: 1 polygon(s)
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="ring_type.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="tag_cast.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/core/tag_cast.html b/libs/geometry/doc/html/geometry/reference/core/tag_cast.html
new file mode 100644
index 000000000..a07203c1f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/core/tag_cast.html
@@ -0,0 +1,317 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>tag_cast</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../core.html" title="Core Metafunctions">
+<link rel="prev" href="tag.html" title="tag">
+<link rel="next" href="../enumerations.html" title="Enumerations">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tag.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="../enumerations.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.core.tag_cast"></a><a class="link" href="tag_cast.html" title="tag_cast">tag_cast</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14888992"></a>
+Metafunction defining a type being either the specified tag, or one of
+ the specified basetags if the type inherits from them.
+ </p>
+<h6>
+<a name="geometry.reference.core.tag_cast.h0"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag_cast.description"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.description">Description</a>
+ </h6>
+<p>
+ Tags can inherit each other. A multi_point inherits, for example, both
+ the multi_tag and the pointlike tag. Often behaviour can be shared between
+ different geometry types. A tag, found by the metafunction tag, can be
+ casted to a more basic tag, and then dispatched by that tag.
+ </p>
+<h6>
+<a name="geometry.reference.core.tag_cast.h1"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag_cast.synopsis"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag3</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag4</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag5</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag6</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">BaseTag7</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">tag_cast</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.core.tag_cast.h2"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag_cast.template_parameter_s_"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Tag
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ The tag to be casted to one of the base tags
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename BaseTag
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ First base tag
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename BaseTag2
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Optional second base tag
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename BaseTag3
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Optional third base tag
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename BaseTag4
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Optional fourth base tag
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename BaseTag5
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Optional fifth base tag
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename BaseTag6
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Optional sixth base tag
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename BaseTag7
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Optional seventh base tag
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.core.tag_cast.h3"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag_cast.header"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">tag_cast</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ The specified tag list is handled in the specified order: as soon as
+ a tag inheriting the specified tag is found, it is defined as the metafunction
+ typedef <span class="bold"><strong>type</strong></span>.
+ </p></td></tr>
+</table></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ If none of the specified possible base tags is a base class of the specified
+ tag, the tag itself is defined as the <span class="bold"><strong>type</strong></span>
+ result of the metafunction.
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.core.tag_cast.h4"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag_cast.complexity"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.core.tag_cast.h5"></a>
+ <span class="phrase"><a name="geometry.reference.core.tag_cast.example"></a></span><a class="link" href="tag_cast.html#geometry.reference.core.tag_cast.example">Example</a>
+ </h6>
+<p>
+ Check if the polygon_tag can be casted to the areal_tag
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">typeinfo</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">namespace</span> <span class="identifier">geo</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">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">polygon_type</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">tag</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">tag_cast</span><span class="special">&lt;</span><span class="identifier">tag</span><span class="special">,</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">linear_tag</span><span class="special">,</span> <span class="identifier">geo</span><span class="special">::</span><span class="identifier">areal_tag</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">base_tag</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"tag: "</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">tag</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">&lt;&lt;</span> <span class="string">"base tag: "</span> <span class="special">&lt;&lt;</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">base_tag</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output (in MSVC):
+ </p>
+<pre class="programlisting">tag: struct boost::geometry::polygon_tag
+base tag: struct boost::geometry::areal_tag
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tag.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.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="../enumerations.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/cs.html b/libs/geometry/doc/html/geometry/reference/cs.html
new file mode 100644
index 000000000..72aef4b4e
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/cs.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Coordinate Systems</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="constants/max_corner.html" title="max_corner">
+<link rel="next" href="cs/cs_cartesian.html" title="cs::cartesian">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="constants/max_corner.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="cs/cs_cartesian.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.cs"></a><a class="link" href="cs.html" title="Coordinate Systems">Coordinate Systems</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="cs/cs_cartesian.html">cs::cartesian</a></span></dt>
+<dt><span class="section"><a href="cs/cs_spherical.html">cs::spherical</a></span></dt>
+<dt><span class="section"><a href="cs/cs_spherical_equatorial.html">cs::spherical_equatorial</a></span></dt>
+<dt><span class="section"><a href="cs/cs_geographic.html">cs::geographic</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="constants/max_corner.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="cs/cs_cartesian.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/cs/cs_cartesian.html b/libs/geometry/doc/html/geometry/reference/cs/cs_cartesian.html
new file mode 100644
index 000000000..a7aaa768a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/cs/cs_cartesian.html
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cs::cartesian</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../cs.html" title="Coordinate Systems">
+<link rel="prev" href="../cs.html" title="Coordinate Systems">
+<link rel="next" href="cs_spherical.html" title="cs::spherical">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../cs.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs.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="cs_spherical.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.cs.cs_cartesian"></a><a class="link" href="cs_cartesian.html" title="cs::cartesian">cs::cartesian</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14056640"></a><a class="indexterm" name="idp14056912"></a>
+Cartesian coordinate system.
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_cartesian.h0"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_cartesian.description"></a></span><a class="link" href="cs_cartesian.html#geometry.reference.cs.cs_cartesian.description">Description</a>
+ </h6>
+<p>
+ Defines the Cartesian or rectangular coordinate system where points are
+ defined in 2 or 3 (or more) dimensions and usually (but not always) known
+ as x,y,z
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_cartesian.h1"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_cartesian.synopsis"></a></span><a class="link" href="cs_cartesian.html#geometry.reference.cs.cs_cartesian.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">cartesian</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_cartesian.h2"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_cartesian.header"></a></span><a class="link" href="cs_cartesian.html#geometry.reference.cs.cs_cartesian.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">cs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../cs.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs.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="cs_spherical.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/cs/cs_geographic.html b/libs/geometry/doc/html/geometry/reference/cs/cs_geographic.html
new file mode 100644
index 000000000..5450121bf
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/cs/cs_geographic.html
@@ -0,0 +1,117 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cs::geographic</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../cs.html" title="Coordinate Systems">
+<link rel="prev" href="cs_spherical_equatorial.html" title="cs::spherical_equatorial">
+<link rel="next" href="../core.html" title="Core Metafunctions">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs_spherical_equatorial.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs.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="../core.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.cs.cs_geographic"></a><a class="link" href="cs_geographic.html" title="cs::geographic">cs::geographic</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14119968"></a><a class="indexterm" name="idp14120240"></a>
+Geographic coordinate system, in degree or in radian.
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_geographic.h0"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_geographic.description"></a></span><a class="link" href="cs_geographic.html#geometry.reference.cs.cs_geographic.description">Description</a>
+ </h6>
+<p>
+ Defines the geographic coordinate system where points are defined in two
+ angles and usually known as lat,long or lo,la or phi,lambda
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_geographic.h1"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_geographic.synopsis"></a></span><a class="link" href="cs_geographic.html#geometry.reference.cs.cs_geographic.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">DegreeOrRadian</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">geographic</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_geographic.h2"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_geographic.template_parameter_s_"></a></span><a class="link" href="cs_geographic.html#geometry.reference.cs.cs_geographic.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename DegreeOrRadian
+ </p>
+ </td>
+<td>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.cs.cs_geographic.h3"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_geographic.header"></a></span><a class="link" href="cs_geographic.html#geometry.reference.cs.cs_geographic.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">cs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs_spherical_equatorial.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs.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="../core.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/cs/cs_spherical.html b/libs/geometry/doc/html/geometry/reference/cs/cs_spherical.html
new file mode 100644
index 000000000..31b349e77
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/cs/cs_spherical.html
@@ -0,0 +1,117 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cs::spherical</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../cs.html" title="Coordinate Systems">
+<link rel="prev" href="cs_cartesian.html" title="cs::cartesian">
+<link rel="next" href="cs_spherical_equatorial.html" title="cs::spherical_equatorial">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs_cartesian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs.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="cs_spherical_equatorial.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.cs.cs_spherical"></a><a class="link" href="cs_spherical.html" title="cs::spherical">cs::spherical</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14073600"></a><a class="indexterm" name="idp14073872"></a>
+Spherical (polar) coordinate system, in degree or in radian.
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_spherical.h0"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_spherical.description"></a></span><a class="link" href="cs_spherical.html#geometry.reference.cs.cs_spherical.description">Description</a>
+ </h6>
+<p>
+ Defines the spherical coordinate system where points are defined in two
+ angles and an optional radius usually known as r, theta, phi
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_spherical.h1"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_spherical.synopsis"></a></span><a class="link" href="cs_spherical.html#geometry.reference.cs.cs_spherical.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">DegreeOrRadian</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">spherical</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_spherical.h2"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_spherical.template_parameter_s_"></a></span><a class="link" href="cs_spherical.html#geometry.reference.cs.cs_spherical.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename DegreeOrRadian
+ </p>
+ </td>
+<td>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.cs.cs_spherical.h3"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_spherical.header"></a></span><a class="link" href="cs_spherical.html#geometry.reference.cs.cs_spherical.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">cs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs_cartesian.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs.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="cs_spherical_equatorial.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/cs/cs_spherical_equatorial.html b/libs/geometry/doc/html/geometry/reference/cs/cs_spherical_equatorial.html
new file mode 100644
index 000000000..243e171a2
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/cs/cs_spherical_equatorial.html
@@ -0,0 +1,119 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cs::spherical_equatorial</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../cs.html" title="Coordinate Systems">
+<link rel="prev" href="cs_spherical.html" title="cs::spherical">
+<link rel="next" href="cs_geographic.html" title="cs::geographic">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs_spherical.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs.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="cs_geographic.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.cs.cs_spherical_equatorial"></a><a class="link" href="cs_spherical_equatorial.html" title="cs::spherical_equatorial">cs::spherical_equatorial</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14096608"></a><a class="indexterm" name="idp14096880"></a>
+Spherical equatorial coordinate system, in degree or in radian.
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_spherical_equatorial.h0"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_spherical_equatorial.description"></a></span><a class="link" href="cs_spherical_equatorial.html#geometry.reference.cs.cs_spherical_equatorial.description">Description</a>
+ </h6>
+<p>
+ This one resembles the geographic coordinate system, and has latitude up
+ from zero at the equator, to 90 at the pole (opposite to the spherical(polar)
+ coordinate system). Used in astronomy and in GIS (but there is also the
+ geographic)
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_spherical_equatorial.h1"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_spherical_equatorial.synopsis"></a></span><a class="link" href="cs_spherical_equatorial.html#geometry.reference.cs.cs_spherical_equatorial.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">DegreeOrRadian</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">cs</span><span class="special">::</span><span class="identifier">spherical_equatorial</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.cs.cs_spherical_equatorial.h2"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_spherical_equatorial.template_parameter_s_"></a></span><a class="link" href="cs_spherical_equatorial.html#geometry.reference.cs.cs_spherical_equatorial.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename DegreeOrRadian
+ </p>
+ </td>
+<td>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.cs.cs_spherical_equatorial.h3"></a>
+ <span class="phrase"><a name="geometry.reference.cs.cs_spherical_equatorial.header"></a></span><a class="link" href="cs_spherical_equatorial.html#geometry.reference.cs.cs_spherical_equatorial.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">cs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cs_spherical.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs.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="cs_geographic.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/enumerations.html b/libs/geometry/doc/html/geometry/reference/enumerations.html
new file mode 100644
index 000000000..0da84000a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/enumerations.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Enumerations</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="core/tag_cast.html" title="tag_cast">
+<link rel="next" href="enumerations/closure_selector.html" title="closure_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="core/tag_cast.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="enumerations/closure_selector.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.enumerations"></a><a class="link" href="enumerations.html" title="Enumerations">Enumerations</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="enumerations/closure_selector.html">closure_selector</a></span></dt>
+<dt><span class="section"><a href="enumerations/order_selector.html">order_selector</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="core/tag_cast.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="enumerations/closure_selector.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/enumerations/closure_selector.html b/libs/geometry/doc/html/geometry/reference/enumerations/closure_selector.html
new file mode 100644
index 000000000..e43625322
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/enumerations/closure_selector.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>closure_selector</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../enumerations.html" title="Enumerations">
+<link rel="prev" href="../enumerations.html" title="Enumerations">
+<link rel="next" href="order_selector.html" title="order_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../enumerations.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../enumerations.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="order_selector.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.enumerations.closure_selector"></a><a class="link" href="closure_selector.html" title="closure_selector">closure_selector</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp14976208"></a>
+<a class="indexterm" name="idp14976624"></a>
+<a class="indexterm" name="idp14977024"></a>
+<a class="indexterm" name="idp14977424"></a>
+Enumerates options for defining if polygons are open or closed.
+ </p>
+<h6>
+<a name="geometry.reference.enumerations.closure_selector.h0"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.closure_selector.description"></a></span><a class="link" href="closure_selector.html#geometry.reference.enumerations.closure_selector.description">Description</a>
+ </h6>
+<p>
+ The enumeration closure_selector describes options for if a polygon is
+ open or closed. In a closed polygon the very first point (per ring) should
+ be equal to the very last point. The specific closing property of a polygon
+ type is defined by the closure metafunction. The closure metafunction defines
+ a value, which is one of the values enumerated in the closure_selector
+ </p>
+<h6>
+<a name="geometry.reference.enumerations.closure_selector.h1"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.closure_selector.synopsis"></a></span><a class="link" href="closure_selector.html#geometry.reference.enumerations.closure_selector.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">enum</span> <span class="identifier">closure_selector</span> <span class="special">{</span><span class="identifier">open</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">closed</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">closure_undertermined</span> <span class="special">=</span> <span class="special">-</span><span class="number">1</span><span class="special">};</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.enumerations.closure_selector.h2"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.closure_selector.values"></a></span><a class="link" href="closure_selector.html#geometry.reference.enumerations.closure_selector.values">Values</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Value
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ open
+ </p>
+ </td>
+<td>
+ <p>
+ Rings are open: first point and last point are different, algorithms
+ close them explicitly on the fly
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ closed
+ </p>
+ </td>
+<td>
+ <p>
+ Rings are closed: first point and last point must be the same.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ closure_undertermined
+ </p>
+ </td>
+<td>
+ <p>
+ (Not yet implemented): algorithms first figure out if ring must
+ be closed on the fly
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.enumerations.closure_selector.h3"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.closure_selector.header"></a></span><a class="link" href="closure_selector.html#geometry.reference.enumerations.closure_selector.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">closure</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.enumerations.closure_selector.h4"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.closure_selector.see_also"></a></span><a class="link" href="closure_selector.html#geometry.reference.enumerations.closure_selector.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../core/closure.html" title="closure">The closure metafunction</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../enumerations.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../enumerations.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="order_selector.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/enumerations/order_selector.html b/libs/geometry/doc/html/geometry/reference/enumerations/order_selector.html
new file mode 100644
index 000000000..c8e6e8a87
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/enumerations/order_selector.html
@@ -0,0 +1,145 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>order_selector</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../enumerations.html" title="Enumerations">
+<link rel="prev" href="closure_selector.html" title="closure_selector">
+<link rel="next" href="../exceptions.html" title="Exceptions">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="closure_selector.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../enumerations.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="../exceptions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.enumerations.order_selector"></a><a class="link" href="order_selector.html" title="order_selector">order_selector</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15002896"></a>
+<a class="indexterm" name="idp15003248"></a>
+<a class="indexterm" name="idp15003648"></a>
+<a class="indexterm" name="idp15004064"></a>
+Enumerates options for the order of points within polygons.
+ </p>
+<h6>
+<a name="geometry.reference.enumerations.order_selector.h0"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.order_selector.description"></a></span><a class="link" href="order_selector.html#geometry.reference.enumerations.order_selector.description">Description</a>
+ </h6>
+<p>
+ The enumeration order_selector describes options for the order of points
+ within a polygon. Polygons can be ordered either clockwise or counterclockwise.
+ The specific order of a polygon type is defined by the point_order metafunction.
+ The point_order metafunction defines a value, which is one of the values
+ enumerated in the order_selector
+ </p>
+<h6>
+<a name="geometry.reference.enumerations.order_selector.h1"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.order_selector.synopsis"></a></span><a class="link" href="order_selector.html#geometry.reference.enumerations.order_selector.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">enum</span> <span class="identifier">order_selector</span> <span class="special">{</span><span class="identifier">clockwise</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">counterclockwise</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">order_undetermined</span> <span class="special">=</span> <span class="number">0</span><span class="special">};</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.enumerations.order_selector.h2"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.order_selector.values"></a></span><a class="link" href="order_selector.html#geometry.reference.enumerations.order_selector.values">Values</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Value
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ clockwise
+ </p>
+ </td>
+<td>
+ <p>
+ Points are ordered clockwise.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ counterclockwise
+ </p>
+ </td>
+<td>
+ <p>
+ Points are ordered counter clockwise.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ order_undetermined
+ </p>
+ </td>
+<td>
+ <p>
+ Points might be stored in any order, algorithms will determine
+ it on the fly (not yet supported)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.enumerations.order_selector.h3"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.order_selector.header"></a></span><a class="link" href="order_selector.html#geometry.reference.enumerations.order_selector.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">point_order</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.enumerations.order_selector.h4"></a>
+ <span class="phrase"><a name="geometry.reference.enumerations.order_selector.see_also"></a></span><a class="link" href="order_selector.html#geometry.reference.enumerations.order_selector.see_also">See also</a>
+ </h6>
+<p>
+ <a class="link" href="../core/point_order.html" title="point_order">The point_order metafunction</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="closure_selector.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../enumerations.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="../exceptions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/exceptions.html b/libs/geometry/doc/html/geometry/reference/exceptions.html
new file mode 100644
index 000000000..5151d64df
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/exceptions.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Exceptions</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="enumerations/order_selector.html" title="order_selector">
+<link rel="next" href="exceptions/exception.html" title="exception">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="enumerations/order_selector.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="exceptions/exception.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.exceptions"></a><a class="link" href="exceptions.html" title="Exceptions">Exceptions</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="exceptions/exception.html">exception</a></span></dt>
+<dt><span class="section"><a href="exceptions/centroid_exception.html">centroid_exception</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="enumerations/order_selector.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="exceptions/exception.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/exceptions/centroid_exception.html b/libs/geometry/doc/html/geometry/reference/exceptions/centroid_exception.html
new file mode 100644
index 000000000..43c7d9df7
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/exceptions/centroid_exception.html
@@ -0,0 +1,183 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>centroid_exception</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../exceptions.html" title="Exceptions">
+<link rel="prev" href="exception.html" title="exception">
+<link rel="next" href="../io.html" title="IO (input/output)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exception.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../exceptions.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="../io.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.exceptions.centroid_exception"></a><a class="link" href="centroid_exception.html" title="centroid_exception">centroid_exception</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15044384"></a>
+Centroid Exception.
+ </p>
+<h6>
+<a name="geometry.reference.exceptions.centroid_exception.h0"></a>
+ <span class="phrase"><a name="geometry.reference.exceptions.centroid_exception.description"></a></span><a class="link" href="centroid_exception.html#geometry.reference.exceptions.centroid_exception.description">Description</a>
+ </h6>
+<p>
+ The centroid_exception is thrown if the free centroid function is called
+ with geometries for which the centroid cannot be calculated. For example:
+ a linestring without points, a polygon without points, an empty multi-geometry.
+ </p>
+<h6>
+<a name="geometry.reference.exceptions.centroid_exception.h1"></a>
+ <span class="phrase"><a name="geometry.reference.exceptions.centroid_exception.synopsis"></a></span><a class="link" href="centroid_exception.html#geometry.reference.exceptions.centroid_exception.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">centroid_exception</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">exception</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.exceptions.centroid_exception.h2"></a>
+ <span class="phrase"><a name="geometry.reference.exceptions.centroid_exception.constructor_s_"></a></span><a class="link" href="centroid_exception.html#geometry.reference.exceptions.centroid_exception.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">centroid_exception</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.exceptions.centroid_exception.h3"></a>
+ <span class="phrase"><a name="geometry.reference.exceptions.centroid_exception.member_function_s_"></a></span><a class="link" href="centroid_exception.html#geometry.reference.exceptions.centroid_exception.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">char</span> <span class="keyword">const</span> <span class="special">*</span> <span class="identifier">what</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.exceptions.centroid_exception.h4"></a>
+ <span class="phrase"><a name="geometry.reference.exceptions.centroid_exception.header"></a></span><a class="link" href="centroid_exception.html#geometry.reference.exceptions.centroid_exception.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">centroid</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.exceptions.centroid_exception.h5"></a>
+ <span class="phrase"><a name="geometry.reference.exceptions.centroid_exception.see_also"></a></span><a class="link" href="centroid_exception.html#geometry.reference.exceptions.centroid_exception.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="../algorithms/centroid.html" title="centroid">the centroid
+ function</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exception.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../exceptions.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="../io.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/exceptions/exception.html b/libs/geometry/doc/html/geometry/reference/exceptions/exception.html
new file mode 100644
index 000000000..cad531486
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/exceptions/exception.html
@@ -0,0 +1,76 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>exception</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../exceptions.html" title="Exceptions">
+<link rel="prev" href="../exceptions.html" title="Exceptions">
+<link rel="next" href="centroid_exception.html" title="centroid_exception">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../exceptions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../exceptions.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="centroid_exception.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.exceptions.exception"></a><a class="link" href="exception.html" title="exception">exception</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15030448"></a>
+Base exception class for Boost.Geometry algorithms.
+ </p>
+<h6>
+<a name="geometry.reference.exceptions.exception.h0"></a>
+ <span class="phrase"><a name="geometry.reference.exceptions.exception.description"></a></span><a class="link" href="exception.html#geometry.reference.exceptions.exception.description">Description</a>
+ </h6>
+<p>
+ This class is never thrown. All exceptions thrown in Boost.Geometry are
+ derived from exception, so it might be convenient to catch it.
+ </p>
+<h6>
+<a name="geometry.reference.exceptions.exception.h1"></a>
+ <span class="phrase"><a name="geometry.reference.exceptions.exception.synopsis"></a></span><a class="link" href="exception.html#geometry.reference.exceptions.exception.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">exception</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exception</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.exceptions.exception.h2"></a>
+ <span class="phrase"><a name="geometry.reference.exceptions.exception.header"></a></span><a class="link" href="exception.html#geometry.reference.exceptions.exception.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">exception</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../exceptions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../exceptions.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="centroid_exception.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/io.html b/libs/geometry/doc/html/geometry/reference/io.html
new file mode 100644
index 000000000..0f106e68e
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/io.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>IO (input/output)</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="exceptions/centroid_exception.html" title="centroid_exception">
+<link rel="next" href="io/wkt.html" title="WKT (Well-Known Text)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exceptions/centroid_exception.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="io/wkt.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.io"></a><a class="link" href="io.html" title="IO (input/output)">IO (input/output)</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="io/wkt.html">WKT (Well-Known Text)</a></span></dt>
+<dt><span class="section"><a href="io/svg.html">SVG (Scalable Vector Graphics)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="exceptions/centroid_exception.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="io/wkt.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/io/svg.html b/libs/geometry/doc/html/geometry/reference/io/svg.html
new file mode 100644
index 000000000..aa9e7b5f8
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/io/svg.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>SVG (Scalable Vector Graphics)</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../io.html" title="IO (input/output)">
+<link rel="prev" href="wkt.html" title="WKT (Well-Known Text)">
+<link rel="next" href="svg/svg.html" title="svg">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="wkt.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../io.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="svg/svg.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.io.svg"></a><a class="link" href="svg.html" title="SVG (Scalable Vector Graphics)">SVG (Scalable Vector Graphics)</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="svg/svg.html">svg</a></span></dt>
+<dt><span class="section"><a href="svg/svg_mapper.html">svg_mapper</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="wkt.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../io.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="svg/svg.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/io/svg/svg.html b/libs/geometry/doc/html/geometry/reference/io/svg/svg.html
new file mode 100644
index 000000000..5ea55a899
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/io/svg/svg.html
@@ -0,0 +1,161 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>svg</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../svg.html" title="SVG (Scalable Vector Graphics)">
+<link rel="prev" href="../svg.html" title="SVG (Scalable Vector Graphics)">
+<link rel="next" href="svg_mapper.html" title="svg_mapper">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../svg.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../svg.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="svg_mapper.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.io.svg.svg"></a><a class="link" href="svg.html" title="svg">svg</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp15080800"></a>
+Manipulator to stream geometries as SVG.
+ </p>
+<h6>
+<a name="geometry.reference.io.svg.svg.h0"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg.synopsis"></a></span><a class="link" href="svg.html#geometry.reference.io.svg.svg.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="identifier">svg_manipulator</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">&gt;</span> <span class="identifier">svg</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">style</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">size</span> <span class="special">=</span> <span class="special">-</span><span class="number">1</span><span class="special">)</span></pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.io.svg.svg.h1"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg.parameters"></a></span><a class="link" href="svg.html#geometry.reference.io.svg.svg.parameters">Parameters</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Concept
+ </p>
+ </th>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Geometry const &amp;
+ </p>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Geometry Concept
+ </p>
+ </td>
+<td>
+ <p>
+ geometry
+ </p>
+ </td>
+<td>
+ <p>
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::string const &amp;
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ style
+ </p>
+ </td>
+<td>
+ <p>
+ String containing verbatim SVG style information
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ size
+ </p>
+ </td>
+<td>
+ <p>
+ Optional size (used for SVG points) in SVG pixels. For linestrings,
+ specify linewidth in the SVG style information
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.io.svg.svg.h2"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg.header"></a></span><a class="link" href="svg.html#geometry.reference.io.svg.svg.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">svg</span><span class="special">/</span><span class="identifier">write_svg</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../svg.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../svg.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="svg_mapper.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/io/svg/svg_mapper.html b/libs/geometry/doc/html/geometry/reference/io/svg/svg_mapper.html
new file mode 100644
index 000000000..f002d4f10
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/io/svg/svg_mapper.html
@@ -0,0 +1,421 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>svg_mapper</title>
+<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../svg.html" title="SVG (Scalable Vector Graphics)">
+<link rel="prev" href="svg.html" title="svg">
+<link rel="next" href="../../iterators.html" title="Iterators">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="svg.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../svg.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="../../iterators.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="geometry.reference.io.svg.svg_mapper"></a><a class="link" href="svg_mapper.html" title="svg_mapper">svg_mapper</a>
+</h5></div></div></div>
+<p>
+ <a class="indexterm" name="idp15125328"></a>
+Helper class to create SVG maps.
+ </p>
+<h6>
+<a name="geometry.reference.io.svg.svg_mapper.h0"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg_mapper.synopsis"></a></span><a class="link" href="svg_mapper.html#geometry.reference.io.svg.svg_mapper.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">SameScale</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">svg_mapper</span>
+ <span class="special">:</span> <span class="identifier">noncopyable</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.io.svg.svg_mapper.h1"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg_mapper.template_parameter_s_"></a></span><a class="link" href="svg_mapper.html#geometry.reference.io.svg.svg_mapper.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Point type, for input geometries.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bool SameScale
+ </p>
+ </td>
+<td>
+ <p>
+ true
+ </p>
+ </td>
+<td>
+ <p>
+ Boolean flag indicating if horizontal and vertical scale should
+ be the same. The default value is true
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.io.svg.svg_mapper.h2"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg_mapper.constructor_s_"></a></span><a class="link" href="svg_mapper.html#geometry.reference.io.svg.svg_mapper.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">svg_mapper</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span> <span class="special">&amp;</span> <span class="identifier">stream</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">width</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">height</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">width_height</span> <span class="special">=</span> <span class="string">"width=\"100%\" height=\"100%\""</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor, initializing the SVG map. Opens and initializes
+ the SVG. Should be called explicitly.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>std::ostream &amp;</strong></span>: <span class="emphasis"><em>stream</em></span>:
+ Output stream, should be a stream already open
+ </p>
+ <p>
+ <span class="bold"><strong>int</strong></span>: <span class="emphasis"><em>width</em></span>:
+ Width of the SVG map (in SVG pixels)
+ </p>
+ <p>
+ <span class="bold"><strong>int</strong></span>: <span class="emphasis"><em>height</em></span>:
+ Height of the SVG map (in SVG pixels)
+ </p>
+ <p>
+ <span class="bold"><strong>std::string const &amp;</strong></span>:
+ <span class="emphasis"><em>width_height</em></span>: Optional information to
+ increase width and/or height
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">~</span><span class="identifier">svg_mapper</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Destructor, called automatically. Closes the SVG by streaming
+ &lt;/svg&gt;
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.io.svg.svg_mapper.h3"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg_mapper.member_function_s_"></a></span><a class="link" href="svg_mapper.html#geometry.reference.io.svg.svg_mapper.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Adds a geometry to the transformation matrix. After doing this,
+ the specified geometry can be mapped fully into the SVG map.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Geometry const &amp;</strong></span>: <span class="emphasis"><em>geometry</em></span>:
+ A model of the specified concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">map</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">style</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">size</span> <span class="special">=</span> <span class="special">-</span><span class="number">1</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Maps a geometry into the SVG map using the specified style.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Geometry const &amp;</strong></span>: <span class="emphasis"><em>geometry</em></span>:
+ A model of the specified concept
+ </p>
+ <p>
+ <span class="bold"><strong>std::string const &amp;</strong></span>:
+ <span class="emphasis"><em>style</em></span>: String containing verbatim SVG
+ style information
+ </p>
+ <p>
+ <span class="bold"><strong>int</strong></span>: <span class="emphasis"><em>size</em></span>:
+ Optional size (used for SVG points) in SVG pixels. For linestrings,
+ specify linewidth in the SVG style information
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">TextPoint</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">text</span><span class="special">(</span><span class="identifier">TextPoint</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">point</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">style</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">offset_x</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">offset_y</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">lineheight</span> <span class="special">=</span> <span class="number">10</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Adds a text to the SVG map.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>TextPoint const &amp;</strong></span>: <span class="emphasis"><em>point</em></span>:
+ Location of the text (in map units)
+ </p>
+ <p>
+ <span class="bold"><strong>std::string const &amp;</strong></span>:
+ <span class="emphasis"><em>s</em></span>: The text itself
+ </p>
+ <p>
+ <span class="bold"><strong>std::string const &amp;</strong></span>:
+ <span class="emphasis"><em>style</em></span>: String containing verbatim SVG
+ style information, of the text
+ </p>
+ <p>
+ <span class="bold"><strong>int</strong></span>: <span class="emphasis"><em>offset_x</em></span>:
+ Offset in SVG pixels, defaults to 0
+ </p>
+ <p>
+ <span class="bold"><strong>int</strong></span>: <span class="emphasis"><em>offset_y</em></span>:
+ Offset in SVG pixels, defaults to 0
+ </p>
+ <p>
+ <span class="bold"><strong>int</strong></span>: <span class="emphasis"><em>lineheight</em></span>:
+ Line height in SVG pixels, in case the text contains
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.io.svg.svg_mapper.h4"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg_mapper.header"></a></span><a class="link" href="svg_mapper.html#geometry.reference.io.svg.svg_mapper.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">svg</span><span class="special">/</span><span class="identifier">svg_mapper</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.io.svg.svg_mapper.h5"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg_mapper.example"></a></span><a class="link" href="svg_mapper.html#geometry.reference.io.svg.svg_mapper.example">Example</a>
+ </h6>
+<p>
+ Shows the usage of svg_mapper
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">fstream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Specify the basic type</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
+
+ <span class="comment">// Declare some geometries and set their values</span>
+ <span class="identifier">point_type</span> <span class="identifier">a</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">assign_values</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">6</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">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">b</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">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 7,4 2,2 0,0 0))"</span><span class="special">,</span> <span class="identifier">b</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">model</span><span class="special">::</span><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">c</span><span class="special">;</span>
+ <span class="identifier">c</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_type</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">));</span>
+ <span class="identifier">c</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point_type</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="number">5</span><span class="special">));</span>
+
+ <span class="comment">// Declare a stream and an SVG mapper</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">ofstream</span> <span class="identifier">svg</span><span class="special">(</span><span class="string">"my_map.svg"</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">svg_mapper</span><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">mapper</span><span class="special">(</span><span class="identifier">svg</span><span class="special">,</span> <span class="number">400</span><span class="special">,</span> <span class="number">400</span><span class="special">);</span>
+
+ <span class="comment">// Add geometries such that all these geometries fit on the map</span>
+ <span class="identifier">mapper</span><span class="special">.</span><span class="identifier">add</span><span class="special">(</span><span class="identifier">a</span><span class="special">);</span>
+ <span class="identifier">mapper</span><span class="special">.</span><span class="identifier">add</span><span class="special">(</span><span class="identifier">b</span><span class="special">);</span>
+ <span class="identifier">mapper</span><span class="special">.</span><span class="identifier">add</span><span class="special">(</span><span class="identifier">c</span><span class="special">);</span>
+
+ <span class="comment">// Draw the geometries on the SVG map, using a specific SVG style</span>
+ <span class="identifier">mapper</span><span class="special">.</span><span class="identifier">map</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="string">"fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:2"</span><span class="special">,</span> <span class="number">5</span><span class="special">);</span>
+ <span class="identifier">mapper</span><span class="special">.</span><span class="identifier">map</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="string">"fill-opacity:0.3;fill:rgb(51,51,153);stroke:rgb(51,51,153);stroke-width:2"</span><span class="special">);</span>
+ <span class="identifier">mapper</span><span class="special">.</span><span class="identifier">map</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> <span class="string">"opacity:0.4;fill:none;stroke:rgb(212,0,0);stroke-width:5"</span><span class="special">);</span>
+
+ <span class="comment">// Destructor of map will be called - adding &lt;/svg&gt;</span>
+ <span class="comment">// Destructor of stream will be called, closing the file</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Output:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../img/io/svg_mapper.png" alt="svg_mapper"></span>
+ </p>
+<h6>
+<a name="geometry.reference.io.svg.svg_mapper.h6"></a>
+ <span class="phrase"><a name="geometry.reference.io.svg.svg_mapper.see_also"></a></span><a class="link" href="svg_mapper.html#geometry.reference.io.svg.svg_mapper.see_also">See
+ also</a>
+ </h6>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a class="link" href="svg.html" title="svg">The SVG manipulator</a>
+ </li></ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="svg.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../svg.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="../../iterators.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/io/wkt.html b/libs/geometry/doc/html/geometry/reference/io/wkt.html
new file mode 100644
index 000000000..a603accec
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/io/wkt.html
@@ -0,0 +1,41 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>WKT (Well-Known Text)</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../io.html" title="IO (input/output)">
+<link rel="prev" href="../io.html" title="IO (input/output)">
+<link rel="next" href="svg.html" title="SVG (Scalable Vector Graphics)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../io.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../io.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="svg.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section"><div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.io.wkt"></a><a class="link" href="wkt.html" title="WKT (Well-Known Text)">WKT (Well-Known Text)</a>
+</h4></div></div></div></div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../io.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../io.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="svg.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/iterators.html b/libs/geometry/doc/html/geometry/reference/iterators.html
new file mode 100644
index 000000000..08c42c172
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/iterators.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Iterators</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="io/svg/svg_mapper.html" title="svg_mapper">
+<link rel="next" href="iterators/closing_iterator.html" title="closing_iterator">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="io/svg/svg_mapper.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="iterators/closing_iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.iterators"></a><a class="link" href="iterators.html" title="Iterators">Iterators</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="iterators/closing_iterator.html">closing_iterator</a></span></dt>
+<dt><span class="section"><a href="iterators/ever_circling_iterator.html">ever_circling_iterator</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="io/svg/svg_mapper.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="iterators/closing_iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/iterators/closing_iterator.html b/libs/geometry/doc/html/geometry/reference/iterators/closing_iterator.html
new file mode 100644
index 000000000..cc114236f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/iterators/closing_iterator.html
@@ -0,0 +1,243 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>closing_iterator</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../iterators.html" title="Iterators">
+<link rel="prev" href="../iterators.html" title="Iterators">
+<link rel="next" href="ever_circling_iterator.html" title="ever_circling_iterator">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../iterators.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../iterators.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="ever_circling_iterator.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.iterators.closing_iterator"></a><a class="link" href="closing_iterator.html" title="closing_iterator">closing_iterator</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15276736"></a>
+Iterator which iterates through a range, but adds first element at end
+ of the range.
+ </p>
+<h6>
+<a name="geometry.reference.iterators.closing_iterator.h0"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.closing_iterator.synopsis"></a></span><a class="link" href="closing_iterator.html#geometry.reference.iterators.closing_iterator.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">closing_iterator</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_facade</span><span class="special">&lt;</span> <span class="identifier">closing_iterator</span><span class="special">&lt;</span> <span class="identifier">Range</span> <span class="special">&gt;,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_value</span><span class="special">&lt;</span> <span class="identifier">Range</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="keyword">const</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random_access_traversal_tag</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.iterators.closing_iterator.h1"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.closing_iterator.template_parameter_s_"></a></span><a class="link" href="closing_iterator.html#geometry.reference.iterators.closing_iterator.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Range
+ </p>
+ </td>
+<td>
+ <p>
+ range on which this class is based on
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.iterators.closing_iterator.h2"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.closing_iterator.constructor_s_"></a></span><a class="link" href="closing_iterator.html#geometry.reference.iterators.closing_iterator.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">closing_iterator</span><span class="special">(</span><span class="identifier">Range</span> <span class="special">&amp;</span> <span class="identifier">range</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor including the range it is based on.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Range &amp;</strong></span>: <span class="emphasis"><em>range</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">closing_iterator</span><span class="special">(</span><span class="identifier">Range</span> <span class="special">&amp;</span> <span class="identifier">range</span><span class="special">,</span> <span class="keyword">bool</span> <span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor to indicate the end of a range.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Range &amp;</strong></span>: <span class="emphasis"><em>range</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>bool</strong></span>: <span class="emphasis"><em></em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">closing_iterator</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Default constructor.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.iterators.closing_iterator.h3"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.closing_iterator.member_function_s_"></a></span><a class="link" href="closing_iterator.html#geometry.reference.iterators.closing_iterator.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">closing_iterator</span><span class="special">&lt;</span> <span class="identifier">Range</span> <span class="special">&gt;</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">closing_iterator</span><span class="special">&lt;</span> <span class="identifier">Range</span> <span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">source</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>closing_iterator&lt; Range &gt; const &amp;</strong></span>:
+ <span class="emphasis"><em>source</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.iterators.closing_iterator.h4"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.closing_iterator.header"></a></span><a class="link" href="closing_iterator.html#geometry.reference.iterators.closing_iterator.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">iterators</span><span class="special">/</span><span class="identifier">closing_iterator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../iterators.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../iterators.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="ever_circling_iterator.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/iterators/ever_circling_iterator.html b/libs/geometry/doc/html/geometry/reference/iterators/ever_circling_iterator.html
new file mode 100644
index 000000000..cd69c6162
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/iterators/ever_circling_iterator.html
@@ -0,0 +1,231 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ever_circling_iterator</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../iterators.html" title="Iterators">
+<link rel="prev" href="closing_iterator.html" title="closing_iterator">
+<link rel="next" href="../models.html" title="Models">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="closing_iterator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../iterators.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="../models.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.iterators.ever_circling_iterator"></a><a class="link" href="ever_circling_iterator.html" title="ever_circling_iterator">ever_circling_iterator</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15328032"></a>
+Iterator which ever circles through a range.
+ </p>
+<h6>
+<a name="geometry.reference.iterators.ever_circling_iterator.h0"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.ever_circling_iterator.synopsis"></a></span><a class="link" href="ever_circling_iterator.html#geometry.reference.iterators.ever_circling_iterator.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">ever_circling_iterator</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">iterators</span><span class="special">::</span><span class="identifier">iterator_base</span><span class="special">&lt;</span> <span class="identifier">ever_circling_iterator</span><span class="special">&lt;</span> <span class="identifier">Iterator</span> <span class="special">&gt;,</span> <span class="identifier">Iterator</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.iterators.ever_circling_iterator.h1"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.ever_circling_iterator.template_parameter_s_"></a></span><a class="link" href="ever_circling_iterator.html#geometry.reference.iterators.ever_circling_iterator.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Iterator
+ </p>
+ </td>
+<td>
+ <p>
+ iterator on which this class is based on
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.iterators.ever_circling_iterator.h2"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.ever_circling_iterator.constructor_s_"></a></span><a class="link" href="ever_circling_iterator.html#geometry.reference.iterators.ever_circling_iterator.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">ever_circling_iterator</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">end</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">skip_first</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>begin</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>end</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>bool</strong></span>: <span class="emphasis"><em>skip_first</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">ever_circling_iterator</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">end</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">start</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">skip_first</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>begin</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>end</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>start</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>bool</strong></span>: <span class="emphasis"><em>skip_first</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.iterators.ever_circling_iterator.h3"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.ever_circling_iterator.member_function_s_"></a></span><a class="link" href="ever_circling_iterator.html#geometry.reference.iterators.ever_circling_iterator.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">moveto</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">it</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>it</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.iterators.ever_circling_iterator.h4"></a>
+ <span class="phrase"><a name="geometry.reference.iterators.ever_circling_iterator.header"></a></span><a class="link" href="ever_circling_iterator.html#geometry.reference.iterators.ever_circling_iterator.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">iterators</span><span class="special">/</span><span class="identifier">ever_circling_iterator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="closing_iterator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../iterators.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="../models.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models.html b/libs/geometry/doc/html/geometry/reference/models.html
new file mode 100644
index 000000000..776502cba
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models.html
@@ -0,0 +1,56 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Models</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="iterators/ever_circling_iterator.html" title="ever_circling_iterator">
+<link rel="next" href="models/model_point.html" title="model::point">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="iterators/ever_circling_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="models/model_point.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.models"></a><a class="link" href="models.html" title="Models">Models</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="models/model_point.html">model::point</a></span></dt>
+<dt><span class="section"><a href="models/model_d2_point_xy.html">model::d2::point_xy</a></span></dt>
+<dt><span class="section"><a href="models/model_linestring.html">model::linestring</a></span></dt>
+<dt><span class="section"><a href="models/model_polygon.html">model::polygon</a></span></dt>
+<dt><span class="section"><a href="models/model_multi_point.html">model::multi_point</a></span></dt>
+<dt><span class="section"><a href="models/model_multi_linestring.html">model::multi_linestring</a></span></dt>
+<dt><span class="section"><a href="models/model_multi_polygon.html">model::multi_polygon</a></span></dt>
+<dt><span class="section"><a href="models/model_box.html">model::box</a></span></dt>
+<dt><span class="section"><a href="models/model_ring.html">model::ring</a></span></dt>
+<dt><span class="section"><a href="models/model_segment.html">model::segment</a></span></dt>
+<dt><span class="section"><a href="models/model_referring_segment.html">model::referring_segment</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="iterators/ever_circling_iterator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="models/model_point.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_box.html b/libs/geometry/doc/html/geometry/reference/models/model_box.html
new file mode 100644
index 000000000..d95a55c0b
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_box.html
@@ -0,0 +1,277 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::box</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_multi_polygon.html" title="model::multi_polygon">
+<link rel="next" href="model_ring.html" title="model::ring">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_multi_polygon.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_ring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_box"></a><a class="link" href="model_box.html" title="model::box">model::box</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15789136"></a><a class="indexterm" name="idp15789424"></a>
+Class box: defines a box made of two describing points.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_box.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_box.description"></a></span><a class="link" href="model_box.html#geometry.reference.models.model_box.description">Description</a>
+ </h6>
+<p>
+ Box is always described by a min_corner() and a max_corner() point. If
+ another rectangle is used, use linear_ring or polygon.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_box.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_box.synopsis"></a></span><a class="link" href="model_box.html#geometry.reference.models.model_box.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_box.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_box.template_parameter_s_"></a></span><a class="link" href="model_box.html#geometry.reference.models.model_box.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ <p>
+ point type. The box takes a point type as template parameter.
+ The point type can be any point type. It can be 2D but can also
+ be 3D or more dimensional. The box can also take a latlong point
+ type as template parameter.
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_box.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_box.constructor_s_"></a></span><a class="link" href="model_box.html#geometry.reference.models.model_box.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">box</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">box</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">min_corner</span><span class="special">,</span> <span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">max_corner</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor taking the minimum corner point and the maximum corner
+ point.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>min_corner</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>max_corner</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_box.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_box.member_function_s_"></a></span><a class="link" href="model_box.html#geometry.reference.models.model_box.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">min_corner</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">max_corner</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">min_corner</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">max_corner</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_box.h5"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_box.header"></a></span><a class="link" href="model_box.html#geometry.reference.models.model_box.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_multi_polygon.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_ring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_d2_point_xy.html b/libs/geometry/doc/html/geometry/reference/models/model_d2_point_xy.html
new file mode 100644
index 000000000..f79813cda
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_d2_point_xy.html
@@ -0,0 +1,332 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::d2::point_xy</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_point.html" title="model::point">
+<link rel="next" href="model_linestring.html" title="model::linestring">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_linestring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_d2_point_xy"></a><a class="link" href="model_d2_point_xy.html" title="model::d2::point_xy">model::d2::point_xy</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15495920"></a><a class="indexterm" name="idp15496208"></a><a class="indexterm" name="idp15496528"></a>
+2D point in Cartesian coordinate system
+ </p>
+<h6>
+<a name="geometry.reference.models.model_d2_point_xy.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_d2_point_xy.model_of"></a></span><a class="link" href="model_d2_point_xy.html#geometry.reference.models.model_d2_point_xy.model_of">Model of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_point.html" title="Point Concept">Point Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_d2_point_xy.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_d2_point_xy.synopsis"></a></span><a class="link" href="model_d2_point_xy.html#geometry.reference.models.model_d2_point_xy.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CoordinateType</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CoordinateSystem</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span> <span class="identifier">CoordinateType</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">CoordinateSystem</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_d2_point_xy.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_d2_point_xy.template_parameter_s_"></a></span><a class="link" href="model_d2_point_xy.html#geometry.reference.models.model_d2_point_xy.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename CoordinateType
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ numeric type, for example, double, float, int
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CoordinateSystem
+ </p>
+ </td>
+<td>
+ <p>
+ cs::cartesian
+ </p>
+ </td>
+<td>
+ <p>
+ coordinate system, defaults to cs::cartesian
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_d2_point_xy.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_d2_point_xy.constructor_s_"></a></span><a class="link" href="model_d2_point_xy.html#geometry.reference.models.model_d2_point_xy.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">point_xy</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Default constructor, does not initialize anything.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">point_xy</span><span class="special">(</span><span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor with x/y values.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>CoordinateType const &amp;</strong></span>:
+ <span class="emphasis"><em>x</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>CoordinateType const &amp;</strong></span>:
+ <span class="emphasis"><em>y</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_d2_point_xy.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_d2_point_xy.member_function_s_"></a></span><a class="link" href="model_d2_point_xy.html#geometry.reference.models.model_d2_point_xy.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">x</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Get x-value.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">y</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Get y-value.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">x</span><span class="special">(</span><span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">v</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Set x-value.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>CoordinateType const &amp;</strong></span>:
+ <span class="emphasis"><em>v</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">y</span><span class="special">(</span><span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">v</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Set y-value.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>CoordinateType const &amp;</strong></span>:
+ <span class="emphasis"><em>v</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_d2_point_xy.h5"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_d2_point_xy.header"></a></span><a class="link" href="model_d2_point_xy.html#geometry.reference.models.model_d2_point_xy.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_d2_point_xy.h6"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_d2_point_xy.notes"></a></span><a class="link" href="model_d2_point_xy.html#geometry.reference.models.model_d2_point_xy.notes">Notes</a>
+ </h6>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Coordinates are not initialized. If the constructor with parameters is
+ not called and points are not assigned using <code class="computeroutput"><span class="identifier">set</span></code>
+ or <code class="computeroutput"><span class="identifier">assign</span></code> then the coordinate
+ values will contain garbage
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_linestring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_linestring.html b/libs/geometry/doc/html/geometry/reference/models/model_linestring.html
new file mode 100644
index 000000000..a385cea8d
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_linestring.html
@@ -0,0 +1,234 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::linestring</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_d2_point_xy.html" title="model::d2::point_xy">
+<link rel="next" href="model_polygon.html" title="model::polygon">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_d2_point_xy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_linestring"></a><a class="link" href="model_linestring.html" title="model::linestring">model::linestring</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15560128"></a><a class="indexterm" name="idp15560416"></a>
+A linestring (named so by OGC) is a collection (default a vector) of points.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_linestring.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_linestring.model_of"></a></span><a class="link" href="model_linestring.html#geometry.reference.models.model_linestring.model_of">Model of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_linestring.html" title="Linestring Concept">Linestring
+ Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_linestring.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_linestring.synopsis"></a></span><a class="link" href="model_linestring.html#geometry.reference.models.model_linestring.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Container</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">linestring</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">Container</span><span class="special">&lt;</span> <span class="identifier">Point</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">&lt;</span> <span class="identifier">Point</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_linestring.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_linestring.template_parameter_s_"></a></span><a class="link" href="model_linestring.html#geometry.reference.models.model_linestring.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename, typename &gt; class Container
+ </p>
+ </td>
+<td>
+ <p>
+ std::vector
+ </p>
+ </td>
+<td>
+ <p>
+ container type, for example std::vector, std::deque
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename &gt; class Allocator
+ </p>
+ </td>
+<td>
+ <p>
+ std::allocator
+ </p>
+ </td>
+<td>
+ <p>
+ container-allocator-type
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_linestring.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_linestring.constructor_s_"></a></span><a class="link" href="model_linestring.html#geometry.reference.models.model_linestring.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">linestring</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Default constructor, creating an empty linestring.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">&gt;</span>
+<span class="identifier">linestring</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">end</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor with begin and end, filling the linestring.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>begin</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>end</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_linestring.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_linestring.header"></a></span><a class="link" href="model_linestring.html#geometry.reference.models.model_linestring.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_d2_point_xy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_multi_linestring.html b/libs/geometry/doc/html/geometry/reference/models/model_multi_linestring.html
new file mode 100644
index 000000000..18b3a3e70
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_multi_linestring.html
@@ -0,0 +1,156 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::multi_linestring</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_multi_point.html" title="model::multi_point">
+<link rel="next" href="model_multi_polygon.html" title="model::multi_polygon">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_multi_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_multi_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_multi_linestring"></a><a class="link" href="model_multi_linestring.html" title="model::multi_linestring">model::multi_linestring</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15720400"></a><a class="indexterm" name="idp15720736"></a>
+multi_line, a collection of linestring
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_linestring.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_linestring.description"></a></span><a class="link" href="model_multi_linestring.html#geometry.reference.models.model_multi_linestring.description">Description</a>
+ </h6>
+<p>
+ Multi-linestring can be used to group lines belonging to each other, e.g.
+ a highway (with interruptions)
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_linestring.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_linestring.model_of"></a></span><a class="link" href="model_multi_linestring.html#geometry.reference.models.model_multi_linestring.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_multi_linestring.html" title="MultiLinestring Concept">MultiLineString
+ Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_linestring.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_linestring.synopsis"></a></span><a class="link" href="model_multi_linestring.html#geometry.reference.models.model_multi_linestring.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">LineString</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Container</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">multi_linestring</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">Container</span><span class="special">&lt;</span> <span class="identifier">LineString</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">&lt;</span> <span class="identifier">LineString</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_linestring.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_linestring.template_parameter_s_"></a></span><a class="link" href="model_multi_linestring.html#geometry.reference.models.model_multi_linestring.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename LineString
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename, typename &gt; class Container
+ </p>
+ </td>
+<td>
+ <p>
+ std::vector
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename &gt; class Allocator
+ </p>
+ </td>
+<td>
+ <p>
+ std::allocator
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_multi_linestring.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_linestring.header"></a></span><a class="link" href="model_multi_linestring.html#geometry.reference.models.model_multi_linestring.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_multi_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_multi_polygon.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_multi_point.html b/libs/geometry/doc/html/geometry/reference/models/model_multi_point.html
new file mode 100644
index 000000000..26aa3844e
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_multi_point.html
@@ -0,0 +1,225 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::multi_point</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_polygon.html" title="model::polygon">
+<link rel="next" href="model_multi_linestring.html" title="model::multi_linestring">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_polygon.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_multi_linestring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_multi_point"></a><a class="link" href="model_multi_point.html" title="model::multi_point">model::multi_point</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15674240"></a><a class="indexterm" name="idp15674528"></a>
+multi_point, a collection of points
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_point.model_of"></a></span><a class="link" href="model_multi_point.html#geometry.reference.models.model_multi_point.model_of">Model of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_multi_point.html" title="MultiPoint Concept">MultiPoint
+ Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_point.synopsis"></a></span><a class="link" href="model_multi_point.html#geometry.reference.models.model_multi_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Container</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">multi_point</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">Container</span><span class="special">&lt;</span> <span class="identifier">Point</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">&lt;</span> <span class="identifier">Point</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_point.template_parameter_s_"></a></span><a class="link" href="model_multi_point.html#geometry.reference.models.model_multi_point.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename, typename &gt; class Container
+ </p>
+ </td>
+<td>
+ <p>
+ std::vector
+ </p>
+ </td>
+<td>
+ <p>
+ container type, for example std::vector, std::deque
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename &gt; class Allocator
+ </p>
+ </td>
+<td>
+ <p>
+ std::allocator
+ </p>
+ </td>
+<td>
+ <p>
+ container-allocator-type
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_multi_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_point.constructor_s_"></a></span><a class="link" href="model_multi_point.html#geometry.reference.models.model_multi_point.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">multi_point</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Default constructor, creating an empty multi_point.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">&gt;</span>
+<span class="identifier">multi_point</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">end</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor with begin and end, filling the multi_point.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>begin</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>end</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_multi_point.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_point.header"></a></span><a class="link" href="model_multi_point.html#geometry.reference.models.model_multi_point.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_polygon.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_multi_linestring.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_multi_polygon.html b/libs/geometry/doc/html/geometry/reference/models/model_multi_polygon.html
new file mode 100644
index 000000000..6a54ab5e1
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_multi_polygon.html
@@ -0,0 +1,156 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::multi_polygon</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_multi_linestring.html" title="model::multi_linestring">
+<link rel="next" href="model_box.html" title="model::box">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_multi_linestring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_box.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_multi_polygon"></a><a class="link" href="model_multi_polygon.html" title="model::multi_polygon">model::multi_polygon</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15754768"></a><a class="indexterm" name="idp15755056"></a>
+multi_polygon, a collection of polygons
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_polygon.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_polygon.description"></a></span><a class="link" href="model_multi_polygon.html#geometry.reference.models.model_multi_polygon.description">Description</a>
+ </h6>
+<p>
+ Multi-polygon can be used to group polygons belonging to each other, e.g.
+ Hawaii
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_polygon.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_polygon.model_of"></a></span><a class="link" href="model_multi_polygon.html#geometry.reference.models.model_multi_polygon.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_multi_polygon.html" title="MultiPolygon Concept">MultiPolygon
+ Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_polygon.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_polygon.synopsis"></a></span><a class="link" href="model_multi_polygon.html#geometry.reference.models.model_multi_polygon.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Polygon</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Container</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">multi_polygon</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">Container</span><span class="special">&lt;</span> <span class="identifier">Polygon</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">&lt;</span> <span class="identifier">Polygon</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_multi_polygon.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_polygon.template_parameter_s_"></a></span><a class="link" href="model_multi_polygon.html#geometry.reference.models.model_multi_polygon.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Polygon
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename, typename &gt; class Container
+ </p>
+ </td>
+<td>
+ <p>
+ std::vector
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename &gt; class Allocator
+ </p>
+ </td>
+<td>
+ <p>
+ std::allocator
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_multi_polygon.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_multi_polygon.header"></a></span><a class="link" href="model_multi_polygon.html#geometry.reference.models.model_multi_polygon.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">multi_polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_multi_linestring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_box.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_point.html b/libs/geometry/doc/html/geometry/reference/models/model_point.html
new file mode 100644
index 000000000..2e236e8f0
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_point.html
@@ -0,0 +1,386 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::point</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="../models.html" title="Models">
+<link rel="next" href="model_d2_point_xy.html" title="model::d2::point_xy">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../models.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_d2_point_xy.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_point"></a><a class="link" href="model_point.html" title="model::point">model::point</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15379472"></a><a class="indexterm" name="idp15379760"></a>
+Basic point class, having coordinates defined in a neutral way.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_point.description"></a></span><a class="link" href="model_point.html#geometry.reference.models.model_point.description">Description</a>
+ </h6>
+<p>
+ Defines a neutral point class, fulfilling the Point Concept. Library users
+ can use this point class, or use their own point classes. This point class
+ is used in most of the samples and tests of Boost.Geometry This point class
+ is used occasionally within the library, where a temporary point class
+ is necessary.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_point.model_of"></a></span><a class="link" href="model_point.html#geometry.reference.models.model_point.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_point.html" title="Point Concept">Point Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_point.synopsis"></a></span><a class="link" href="model_point.html#geometry.reference.models.model_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CoordinateType</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">DimensionCount</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CoordinateSystem</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_point.template_parameter_s_"></a></span><a class="link" href="model_point.html#geometry.reference.models.model_point.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename CoordinateType
+ </p>
+ </td>
+<td>
+ <p>
+ numerical type (int, double, ttmath, ...)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::size_t DimensionCount
+ </p>
+ </td>
+<td>
+ <p>
+ number of coordinates, usually 2 or 3
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CoordinateSystem
+ </p>
+ </td>
+<td>
+ <p>
+ coordinate system, for example cs::cartesian
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_point.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_point.constructor_s_"></a></span><a class="link" href="model_point.html#geometry.reference.models.model_point.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">point</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Default constructor, no initialization.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">point</span><span class="special">(</span><span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">v0</span><span class="special">,</span> <span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">v1</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">v2</span> <span class="special">=</span> <span class="number">0</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor to set one, two or three values.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>CoordinateType const &amp;</strong></span>:
+ <span class="emphasis"><em>v0</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>CoordinateType const &amp;</strong></span>:
+ <span class="emphasis"><em>v1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>CoordinateType const &amp;</strong></span>:
+ <span class="emphasis"><em>v2</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_point.h5"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_point.member_function_s_"></a></span><a class="link" href="model_point.html#geometry.reference.models.model_point.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">K</span><span class="special">&gt;</span>
+<span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">get</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Get a coordinate.
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ the coordinate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">K</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="identifier">CoordinateType</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">value</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Set a coordinate.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>CoordinateType const &amp;</strong></span>:
+ <span class="emphasis"><em>value</em></span>: value to set
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_point.h6"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_point.header"></a></span><a class="link" href="model_point.html#geometry.reference.models.model_point.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_point.h7"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_point.examples"></a></span><a class="link" href="model_point.html#geometry.reference.models.model_point.examples">Examples</a>
+ </h6>
+<p>
+ Declaration and use of the Boost.Geometry model::point, modelling the Point
+ Concept
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</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">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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">&lt;</span><span class="keyword">double</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">&gt;</span> <span class="identifier">point1</span><span class="special">;</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">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">3</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">&gt;</span> <span class="identifier">point2</span><span class="special">(</span><span class="number">1.0</span><span class="special">,</span> <span class="number">2.0</span><span class="special">,</span> <span class="number">3.0</span><span class="special">);</span> <a class="co" name="geometry.reference.models.model_point.c0" href="model_point.html#geometry.reference.models.model_point.c1"><img src="../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+ <span class="identifier">point1</span><span class="special">.</span><span class="identifier">set</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="number">1.0</span><span class="special">);</span> <a class="co" name="geometry.reference.models.model_point.c2" href="model_point.html#geometry.reference.models.model_point.c3"><img src="../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a>
+ <span class="identifier">point1</span><span class="special">.</span><span class="identifier">set</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="number">2.0</span><span class="special">);</span>
+
+ <span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">point1</span><span class="special">.</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;();</span> <a class="co" name="geometry.reference.models.model_point.c4" href="model_point.html#geometry.reference.models.model_point.c5"><img src="../../../../../../../doc/src/images/callouts/3.png" alt="3" border="0"></a>
+ <span class="keyword">double</span> <span class="identifier">y</span> <span class="special">=</span> <span class="identifier">point1</span><span class="special">.</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;();</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">x</span> <span class="special">&lt;&lt;</span> <span class="string">", "</span> <span class="special">&lt;&lt;</span> <span class="identifier">y</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list">
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.models.model_point.c1"></a><a href="#geometry.reference.models.model_point.c0"><img src="../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ Construct, assigning three coordinates
+ </p></td>
+</tr>
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.models.model_point.c3"></a><a href="#geometry.reference.models.model_point.c2"><img src="../../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ Set a coordinate. <span class="bold"><strong>Note</strong></span>: prefer using
+ <code class="computeroutput"><span class="identifier">bg</span><span class="special">::</span><span class="identifier">set</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">point1</span><span class="special">,</span>
+ <span class="number">1.0</span><span class="special">);</span></code>
+ </p></td>
+</tr>
+<tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.models.model_point.c5"></a><a href="#geometry.reference.models.model_point.c4"><img src="../../../../../../../doc/src/images/callouts/3.png" alt="3" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ Get a coordinate. <span class="bold"><strong>Note</strong></span>: prefer using
+ <code class="computeroutput"><span class="identifier">x</span> <span class="special">=</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">point1</span><span class="special">);</span></code>
+ </p></td>
+</tr>
+</table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">1, 2
+</pre>
+<h6>
+<a name="geometry.reference.models.model_point.h8"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_point.notes"></a></span><a class="link" href="model_point.html#geometry.reference.models.model_point.notes">Notes</a>
+ </h6>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Coordinates are not initialized. If the constructor with parameters is
+ not called and points are not assigned using <code class="computeroutput"><span class="identifier">set</span></code>
+ or <code class="computeroutput"><span class="identifier">assign</span></code> then the coordinate
+ values will contain garbage
+ </p></td></tr>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../models.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_d2_point_xy.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_polygon.html b/libs/geometry/doc/html/geometry/reference/models/model_polygon.html
new file mode 100644
index 000000000..2fea797d1
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_polygon.html
@@ -0,0 +1,339 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::polygon</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_linestring.html" title="model::linestring">
+<link rel="next" href="model_multi_point.html" title="model::multi_point">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_linestring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_multi_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_polygon"></a><a class="link" href="model_polygon.html" title="model::polygon">model::polygon</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15609984"></a><a class="indexterm" name="idp15610272"></a>
+The polygon contains an outer ring and zero or more inner rings.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_polygon.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_polygon.model_of"></a></span><a class="link" href="model_polygon.html#geometry.reference.models.model_polygon.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_polygon.html" title="Polygon Concept">Polygon Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_polygon.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_polygon.synopsis"></a></span><a class="link" href="model_polygon.html#geometry.reference.models.model_polygon.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">ClockWise</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">Closed</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">PointList</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">RingList</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">PointAlloc</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">RingAlloc</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_polygon.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_polygon.template_parameter_s_"></a></span><a class="link" href="model_polygon.html#geometry.reference.models.model_polygon.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bool ClockWise
+ </p>
+ </td>
+<td>
+ <p>
+ true
+ </p>
+ </td>
+<td>
+ <p>
+ true for clockwise direction, false for CounterClockWise direction
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bool Closed
+ </p>
+ </td>
+<td>
+ <p>
+ true
+ </p>
+ </td>
+<td>
+ <p>
+ true for closed polygons (last point == first point), false open
+ points
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename, typename &gt; class PointList
+ </p>
+ </td>
+<td>
+ <p>
+ std::vector
+ </p>
+ </td>
+<td>
+ <p>
+ container type for points, for example std::vector, std::list,
+ std::deque
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename, typename &gt; class RingList
+ </p>
+ </td>
+<td>
+ <p>
+ std::vector
+ </p>
+ </td>
+<td>
+ <p>
+ container type for inner rings, for example std::vector, std::list,
+ std::deque
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename &gt; class PointAlloc
+ </p>
+ </td>
+<td>
+ <p>
+ std::allocator
+ </p>
+ </td>
+<td>
+ <p>
+ container-allocator-type, for the points
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename &gt; class RingAlloc
+ </p>
+ </td>
+<td>
+ <p>
+ std::allocator
+ </p>
+ </td>
+<td>
+ <p>
+ container-allocator-type, for the rings
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_polygon.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_polygon.member_function_s_"></a></span><a class="link" href="model_polygon.html#geometry.reference.models.model_polygon.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">ring_type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">outer</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">inner_container_type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">inners</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">ring_type</span> <span class="special">&amp;</span> <span class="identifier">outer</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">inner_container_type</span> <span class="special">&amp;</span> <span class="identifier">inners</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">clear</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Utility method, clears outer and inner rings.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_polygon.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_polygon.header"></a></span><a class="link" href="model_polygon.html#geometry.reference.models.model_polygon.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_linestring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_multi_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_referring_segment.html b/libs/geometry/doc/html/geometry/reference/models/model_referring_segment.html
new file mode 100644
index 000000000..acb08f4ed
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_referring_segment.html
@@ -0,0 +1,168 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::referring_segment</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_segment.html" title="model::segment">
+<link rel="next" href="../spatial_indexes.html" title="Spatial Indexes">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_segment.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="../spatial_indexes.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_referring_segment"></a><a class="link" href="model_referring_segment.html" title="model::referring_segment">model::referring_segment</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15934464"></a><a class="indexterm" name="idp15934800"></a>
+Class segment: small class containing two (templatized) point references.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_referring_segment.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_referring_segment.description"></a></span><a class="link" href="model_referring_segment.html#geometry.reference.models.model_referring_segment.description">Description</a>
+ </h6>
+<p>
+ From Wikipedia: In geometry, a line segment is a part of a line that is
+ bounded by two distinct end points, and contains every point on the line
+ between its end points.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_referring_segment.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_referring_segment.synopsis"></a></span><a class="link" href="model_referring_segment.html#geometry.reference.models.model_referring_segment.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ConstOrNonConstPoint</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">referring_segment</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_referring_segment.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_referring_segment.template_parameter_s_"></a></span><a class="link" href="model_referring_segment.html#geometry.reference.models.model_referring_segment.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename ConstOrNonConstPoint
+ </p>
+ </td>
+<td>
+ <p>
+ point type of the segment, maybe a point or a const point
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_referring_segment.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_referring_segment.constructor_s_"></a></span><a class="link" href="model_referring_segment.html#geometry.reference.models.model_referring_segment.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">referring_segment</span><span class="special">(</span><span class="identifier">point_type</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">point_type</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>point_type &amp;</strong></span>: <span class="emphasis"><em>p1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>point_type &amp;</strong></span>: <span class="emphasis"><em>p2</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_referring_segment.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_referring_segment.header"></a></span><a class="link" href="model_referring_segment.html#geometry.reference.models.model_referring_segment.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">segment</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_segment.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="../spatial_indexes.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_ring.html b/libs/geometry/doc/html/geometry/reference/models/model_ring.html
new file mode 100644
index 000000000..3346ae664
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_ring.html
@@ -0,0 +1,269 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::ring</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_box.html" title="model::box">
+<link rel="next" href="model_segment.html" title="model::segment">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_box.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_segment.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_ring"></a><a class="link" href="model_ring.html" title="model::ring">model::ring</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15840912"></a><a class="indexterm" name="idp15841200"></a>
+A ring (aka linear ring) is a closed line which should not be selfintersecting.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_ring.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_ring.model_of"></a></span><a class="link" href="model_ring.html#geometry.reference.models.model_ring.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_ring.html" title="Ring Concept">Ring Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_ring.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_ring.synopsis"></a></span><a class="link" href="model_ring.html#geometry.reference.models.model_ring.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">ClockWise</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">Closed</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Container</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">ring</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">Container</span><span class="special">&lt;</span> <span class="identifier">Point</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">&lt;</span> <span class="identifier">Point</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_ring.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_ring.template_parameter_s_"></a></span><a class="link" href="model_ring.html#geometry.reference.models.model_ring.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bool ClockWise
+ </p>
+ </td>
+<td>
+ <p>
+ true
+ </p>
+ </td>
+<td>
+ <p>
+ true for clockwise direction, false for CounterClockWise direction
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bool Closed
+ </p>
+ </td>
+<td>
+ <p>
+ true
+ </p>
+ </td>
+<td>
+ <p>
+ true for closed polygons (last point == first point), false open
+ points
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename, typename &gt; class Container
+ </p>
+ </td>
+<td>
+ <p>
+ std::vector
+ </p>
+ </td>
+<td>
+ <p>
+ container type, for example std::vector, std::deque
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ template&lt; typename &gt; class Allocator
+ </p>
+ </td>
+<td>
+ <p>
+ std::allocator
+ </p>
+ </td>
+<td>
+ <p>
+ container-allocator-type
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_ring.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_ring.constructor_s_"></a></span><a class="link" href="model_ring.html#geometry.reference.models.model_ring.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">ring</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Default constructor, creating an empty ring.
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">&gt;</span>
+<span class="identifier">ring</span><span class="special">(</span><span class="identifier">Iterator</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">end</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor with begin and end, filling the ring.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>begin</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>Iterator</strong></span>: <span class="emphasis"><em>end</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_ring.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_ring.header"></a></span><a class="link" href="model_ring.html#geometry.reference.models.model_ring.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_box.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_segment.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/models/model_segment.html b/libs/geometry/doc/html/geometry/reference/models/model_segment.html
new file mode 100644
index 000000000..6b83b3dc8
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/models/model_segment.html
@@ -0,0 +1,181 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>model::segment</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../models.html" title="Models">
+<link rel="prev" href="model_ring.html" title="model::ring">
+<link rel="next" href="model_referring_segment.html" title="model::referring_segment">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_ring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_referring_segment.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.models.model_segment"></a><a class="link" href="model_segment.html" title="model::segment">model::segment</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15895392"></a><a class="indexterm" name="idp15895680"></a>
+Class segment: small class containing two points.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_segment.h0"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_segment.description"></a></span><a class="link" href="model_segment.html#geometry.reference.models.model_segment.description">Description</a>
+ </h6>
+<p>
+ From Wikipedia: In geometry, a line segment is a part of a line that is
+ bounded by two distinct end points, and contains every point on the line
+ between its end points.
+ </p>
+<h6>
+<a name="geometry.reference.models.model_segment.h1"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_segment.synopsis"></a></span><a class="link" href="model_segment.html#geometry.reference.models.model_segment.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">model</span><span class="special">::</span><span class="identifier">segment</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span> <span class="identifier">Point</span><span class="special">,</span> <span class="identifier">Point</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.models.model_segment.h2"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_segment.template_parameter_s_"></a></span><a class="link" href="model_segment.html#geometry.reference.models.model_segment.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_segment.h3"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_segment.constructor_s_"></a></span><a class="link" href="model_segment.html#geometry.reference.models.model_segment.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">segment</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">segment</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>p1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>p2</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.models.model_segment.h4"></a>
+ <span class="phrase"><a name="geometry.reference.models.model_segment.header"></a></span><a class="link" href="model_segment.html#geometry.reference.models.model_segment.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">geometries</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">segment</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="model_ring.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../models.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="model_referring_segment.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/spatial_indexes.html b/libs/geometry/doc/html/geometry/reference/spatial_indexes.html
new file mode 100644
index 000000000..e4fe402ee
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/spatial_indexes.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Spatial Indexes</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="models/model_referring_segment.html" title="model::referring_segment">
+<link rel="next" href="spatial_indexes/parameters.html" title="R-tree parameters (boost::geometry::index::)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="models/model_referring_segment.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="spatial_indexes/parameters.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.spatial_indexes"></a><a class="link" href="spatial_indexes.html" title="Spatial Indexes">Spatial Indexes</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="spatial_indexes/parameters.html">R-tree
+ parameters (boost::geometry::index::)</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/observers.html">Observers
+ (boost::geometry::index::)</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="models/model_referring_segment.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="spatial_indexes/parameters.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/spatial_indexes/observers.html b/libs/geometry/doc/html/geometry/reference/spatial_indexes/observers.html
new file mode 100644
index 000000000..36d9d1e48
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/spatial_indexes/observers.html
@@ -0,0 +1,42 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Observers (boost::geometry::index::)</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../spatial_indexes.html" title="Spatial Indexes">
+<link rel="prev" href="parameters.html" title="R-tree parameters (boost::geometry::index::)">
+<link rel="next" href="../strategies.html" title="Strategies">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="parameters.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="../strategies.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section"><div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.spatial_indexes.observers"></a><a class="link" href="observers.html" title="Observers (boost::geometry::index::)">Observers
+ (boost::geometry::index::)</a>
+</h4></div></div></div></div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="parameters.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="../strategies.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/spatial_indexes/parameters.html b/libs/geometry/doc/html/geometry/reference/spatial_indexes/parameters.html
new file mode 100644
index 000000000..bbe818982
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/spatial_indexes/parameters.html
@@ -0,0 +1,42 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>R-tree parameters (boost::geometry::index::)</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../spatial_indexes.html" title="Spatial Indexes">
+<link rel="prev" href="../spatial_indexes.html" title="Spatial Indexes">
+<link rel="next" href="observers.html" title="Observers (boost::geometry::index::)">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../spatial_indexes.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="observers.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section"><div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.spatial_indexes.parameters"></a><a class="link" href="parameters.html" title="R-tree parameters (boost::geometry::index::)">R-tree
+ parameters (boost::geometry::index::)</a>
+</h4></div></div></div></div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../spatial_indexes.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="observers.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies.html b/libs/geometry/doc/html/geometry/reference/strategies.html
new file mode 100644
index 000000000..5df0af096
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies.html
@@ -0,0 +1,67 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Strategies</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="spatial_indexes/observers.html" title="Observers (boost::geometry::index::)">
+<link rel="next" href="strategies/strategy_distance_pythagoras.html" title="strategy::distance::pythagoras">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="spatial_indexes/observers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="strategies/strategy_distance_pythagoras.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.strategies"></a><a class="link" href="strategies.html" title="Strategies">Strategies</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="strategies/strategy_distance_pythagoras.html">strategy::distance::pythagoras</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_distance_haversine.html">strategy::distance::haversine</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_distance_projected_point.html">strategy::distance::projected_point</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_distance_cross_track.html">strategy::distance::cross_track</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_area_surveyor.html">strategy::area::surveyor</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_area_huiller.html">strategy::area::huiller</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_centroid_average.html">strategy::centroid::average</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_centroid_bashein_detmer.html">strategy::centroid::bashein_detmer</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_convex_hull_graham_andrew.html">strategy::convex_hull::graham_andrew</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_side_side_by_triangle.html">strategy::side::side_by_triangle</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_side_side_by_cross_track.html">strategy::side::side_by_cross_track</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_side_spherical_side_formula.html">strategy::side::spherical_side_formula</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_simplify_douglas_peucker.html">strategy::simplify::douglas_peucker</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_transform_inverse_transformer.html">strategy::transform::inverse_transformer</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_transform_map_transformer.html">strategy::transform::map_transformer</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_transform_rotate_transformer.html">strategy::transform::rotate_transformer</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_transform_scale_transformer.html">strategy::transform::scale_transformer</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_transform_translate_transformer.html">strategy::transform::translate_transformer</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_transform_ublas_transformer.html">strategy::transform::ublas_transformer</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_within_winding.html">strategy::within::winding</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_within_franklin.html">strategy::within::franklin</a></span></dt>
+<dt><span class="section"><a href="strategies/strategy_within_crossings_multiply.html">strategy::within::crossings_multiply</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="spatial_indexes/observers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="strategies/strategy_distance_pythagoras.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_area_huiller.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_area_huiller.html
new file mode 100644
index 000000000..62fbdd1ad
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_area_huiller.html
@@ -0,0 +1,310 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::area::huiller</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_area_surveyor.html" title="strategy::area::surveyor">
+<link rel="next" href="strategy_centroid_average.html" title="strategy::centroid::average">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_area_surveyor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_centroid_average.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_area_huiller"></a><a class="link" href="strategy_area_huiller.html" title="strategy::area::huiller">strategy::area::huiller</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16238496"></a><a class="indexterm" name="idp16238832"></a><a class="indexterm" name="idp16239168"></a>
+Area calculation by spherical excess / Huiller's formula.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_huiller.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_huiller.synopsis"></a></span><a class="link" href="strategy_area_huiller.html#geometry.reference.strategies.strategy_area_huiller.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">PointOfSegment</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">area</span><span class="special">::</span><span class="identifier">huiller</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_huiller.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_huiller.template_parameter_s_"></a></span><a class="link" href="strategy_area_huiller.html#geometry.reference.strategies.strategy_area_huiller.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename PointOfSegment
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ point type of segments of rings/polygons
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_huiller.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_huiller.constructor_s_"></a></span><a class="link" href="strategy_area_huiller.html#geometry.reference.strategies.strategy_area_huiller.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">huiller</span><span class="special">(</span><span class="identifier">calculation_type</span> <span class="identifier">radius</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>calculation_type</strong></span>: <span class="emphasis"><em>radius</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_huiller.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_huiller.member_function_s_"></a></span><a class="link" href="strategy_area_huiller.html#geometry.reference.strategies.strategy_area_huiller.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">,</span> <span class="identifier">excess_sum</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>p1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>p2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>excess_sum &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">return_type</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">excess_sum</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>excess_sum const &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_huiller.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_huiller.header"></a></span><a class="link" href="strategy_area_huiller.html#geometry.reference.strategies.strategy_area_huiller.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">spherical</span><span class="special">/</span><span class="identifier">area_huiller</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_huiller.h5"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_huiller.example"></a></span><a class="link" href="strategy_area_huiller.html#geometry.reference.strategies.strategy_area_huiller.example">Example</a>
+ </h6>
+<p>
+ Calculate the area of a polygon
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">io</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">/</span><span class="identifier">wkt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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> <a class="co" name="geometry.reference.strategies.strategy_area_huiller.c0" href="strategy_area_huiller.html#geometry.reference.strategies.strategy_area_huiller.c1"><img src="../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="comment">// Calculate the area of a cartesian polygon</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">poly</span><span class="special">;</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 7,4 2,2 0,0 0))"</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
+ <span class="keyword">double</span> <span class="identifier">area</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">poly</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="comment">// Calculate the area of a spherical polygon (for latitude: 0 at equator)</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</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">&lt;</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">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">degree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">sph_poly</span><span class="special">;</span>
+ <span class="identifier">bg</span><span class="special">::</span><span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 45,45 0,0 0))"</span><span class="special">,</span> <span class="identifier">sph_poly</span><span class="special">);</span>
+ <span class="identifier">area</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">sph_poly</span><span class="special">);</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area</span> <span class="special">&lt;&lt;</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 class="calloutlist"><table border="0" summary="Callout list"><tr>
+<td width="5%" valign="top" align="left"><p><a name="geometry.reference.strategies.strategy_area_huiller.c1"></a><a href="#geometry.reference.strategies.strategy_area_huiller.c0"><img src="../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
+<td valign="top" align="left"><p>
+ Convenient namespace alias
+ </p></td>
+</tr></table></div>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">Area: 16
+Area: 0.339837
+</pre>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_huiller.h6"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_huiller.see_also"></a></span><a class="link" href="strategy_area_huiller.html#geometry.reference.strategies.strategy_area_huiller.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../algorithms/area/area_2_with_strategy.html" title="area (with strategy)">area
+ (with strategy)</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_area_surveyor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_centroid_average.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_area_surveyor.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_area_surveyor.html
new file mode 100644
index 000000000..a44638e24
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_area_surveyor.html
@@ -0,0 +1,225 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::area::surveyor</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_distance_cross_track.html" title="strategy::distance::cross_track">
+<link rel="next" href="strategy_area_huiller.html" title="strategy::area::huiller">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_distance_cross_track.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_area_huiller.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_area_surveyor"></a><a class="link" href="strategy_area_surveyor.html" title="strategy::area::surveyor">strategy::area::surveyor</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16193152"></a><a class="indexterm" name="idp16193488"></a><a class="indexterm" name="idp16193824"></a>
+Area calculation for cartesian points.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_surveyor.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_surveyor.description"></a></span><a class="link" href="strategy_area_surveyor.html#geometry.reference.strategies.strategy_area_surveyor.description">Description</a>
+ </h6>
+<p>
+ Calculates area using the Surveyor's formula, a well-known triangulation
+ algorithm
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_surveyor.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_surveyor.synopsis"></a></span><a class="link" href="strategy_area_surveyor.html#geometry.reference.strategies.strategy_area_surveyor.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">PointOfSegment</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">area</span><span class="special">::</span><span class="identifier">surveyor</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_surveyor.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_surveyor.template_parameter_s_"></a></span><a class="link" href="strategy_area_surveyor.html#geometry.reference.strategies.strategy_area_surveyor.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename PointOfSegment
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ segment point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_surveyor.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_surveyor.member_function_s_"></a></span><a class="link" href="strategy_area_surveyor.html#geometry.reference.strategies.strategy_area_surveyor.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">,</span> <span class="identifier">summation</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>p1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>p2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>summation &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">return_type</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">summation</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>summation const &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_surveyor.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_surveyor.header"></a></span><a class="link" href="strategy_area_surveyor.html#geometry.reference.strategies.strategy_area_surveyor.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">cartesian</span><span class="special">/</span><span class="identifier">area_surveyor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_area_surveyor.h5"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_area_surveyor.see_also"></a></span><a class="link" href="strategy_area_surveyor.html#geometry.reference.strategies.strategy_area_surveyor.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../algorithms/area/area_2_with_strategy.html" title="area (with strategy)">area
+ (with strategy)</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_distance_cross_track.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_area_huiller.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_centroid_average.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_centroid_average.html
new file mode 100644
index 000000000..0fefe6e81
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_centroid_average.html
@@ -0,0 +1,207 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::centroid::average</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_area_huiller.html" title="strategy::area::huiller">
+<link rel="next" href="strategy_centroid_bashein_detmer.html" title="strategy::centroid::bashein_detmer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_area_huiller.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_centroid_bashein_detmer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_centroid_average"></a><a class="link" href="strategy_centroid_average.html" title="strategy::centroid::average">strategy::centroid::average</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16344640"></a><a class="indexterm" name="idp16344976"></a><a class="indexterm" name="idp16345312"></a>
+Centroid calculation taking average of points.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_average.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_average.synopsis"></a></span><a class="link" href="strategy_centroid_average.html#geometry.reference.strategies.strategy_centroid_average.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">PointCentroid</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">centroid</span><span class="special">::</span><span class="identifier">average</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_average.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_average.template_parameter_s_"></a></span><a class="link" href="strategy_centroid_average.html#geometry.reference.strategies.strategy_centroid_average.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename PointCentroid
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ <p>
+ PointCentroid
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_average.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_average.member_function_s_"></a></span><a class="link" href="strategy_centroid_average.html#geometry.reference.strategies.strategy_centroid_average.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">sum</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>p</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>sum &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">sum</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">,</span> <span class="identifier">PointCentroid</span> <span class="special">&amp;</span> <span class="identifier">centroid</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>sum const &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointCentroid &amp;</strong></span>: <span class="emphasis"><em>centroid</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_average.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_average.header"></a></span><a class="link" href="strategy_centroid_average.html#geometry.reference.strategies.strategy_centroid_average.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">multi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">multi</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">cartesian</span><span class="special">/</span><span class="identifier">centroid_average</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_area_huiller.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_centroid_bashein_detmer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_centroid_bashein_detmer.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_centroid_bashein_detmer.html
new file mode 100644
index 000000000..895fecfe8
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_centroid_bashein_detmer.html
@@ -0,0 +1,300 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::centroid::bashein_detmer</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_centroid_average.html" title="strategy::centroid::average">
+<link rel="next" href="strategy_convex_hull_graham_andrew.html" title="strategy::convex_hull::graham_andrew">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_centroid_average.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_convex_hull_graham_andrew.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_centroid_bashein_detmer"></a><a class="link" href="strategy_centroid_bashein_detmer.html" title="strategy::centroid::bashein_detmer">strategy::centroid::bashein_detmer</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16388928"></a><a class="indexterm" name="idp16389264"></a><a class="indexterm" name="idp16389600"></a>
+Centroid calculation using algorith Bashein / Detmer.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.description"></a></span><a class="link" href="strategy_centroid_bashein_detmer.html#geometry.reference.strategies.strategy_centroid_bashein_detmer.description">Description</a>
+ </h6>
+<p>
+ Calculates centroid using triangulation method published by Bashein / Detmer
+ </p>
+<p>
+ Statements:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <span class="bold"><strong>MySQL/PostGIS</strong></span>: select AsText(Centroid(GeomFromText(
+ 'POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6
+ ,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))')))
+ </li>
+<li class="listitem">
+ <span class="bold"><strong>Oracle:</strong></span> select sdo_geom.sdo_centroid(sdo_geometry(2003,
+ null, null, sdo_elem_info_array(1, 1003, 1), sdo_ordinate_array( 2,1.3,2.4,1.7,2.8,1.8,3.4,1.2,3.7,1.6,3.4,2,4.1,3,5.3,2.6
+ ,5.4,1.2,4.9,0.8,2.9,0.7,2,1.3)) , mdsys.sdo_dim_array(mdsys.sdo_dim_element('x',0,10,.00000005)
+ ,mdsys.sdo_dim_element('y',0,10,.00000005))) from dual
+ </li>
+<li class="listitem">
+ <span class="bold"><strong>SQL</strong></span> Server 2008: select geometry::STGeomFromText(
+ 'POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6
+ ,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))',0) .STCentroid() .STAsText()
+ </li>
+</ul></div>
+<p>
+ With holes:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ this: POINT(4.04663 1.6349)
+ </li>
+<li class="listitem">
+ geolib: POINT(4.04675 1.65735)
+ </li>
+<li class="listitem">
+ MySQL: POINT(3.6090580503834 1.607573932092)
+ </li>
+<li class="listitem">
+ PostGIS: POINT(4.0466265060241 1.63489959839357)
+ </li>
+<li class="listitem">
+ Oracle: 4.0466265060241 1.63489959839357
+ </li>
+<li class="listitem">
+ SQL Server: POINT(4.0466264962959677 1.6348996057331333)
+ </li>
+</ul></div>
+<p>
+ Statements:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <span class="bold"><strong>MySQL/PostGIS</strong></span>: select AsText(Centroid(GeomFromText(
+ 'POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2 ,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4
+ 1.2,4.9 0.8,2.9 0.7,2 1.3) ,(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))')));
+ </li>
+<li class="listitem">
+ <span class="bold"><strong>Oracle:</strong></span> select sdo_geom.sdo_centroid(sdo_geometry(2003,
+ null, null , sdo_elem_info_array(1, 1003, 1, 25, 2003, 1) , sdo_ordinate_array(2,1.3,2.4,1.7,2.8,1.8,3.4,1.2,3.7,1.6,3.4,
+ 2,4.1,3,5.3,2.6,5.4,1.2,4.9,0.8,2.9,0.7,2,1.3,4,2, 4.2,1.4, 4.8,1.9,
+ 4.4,2.2, 4,2)) , mdsys.sdo_dim_array(mdsys.sdo_dim_element('x',0,10,.00000005)
+ ,mdsys.sdo_dim_element('y',0,10,.00000005))) from dual
+ </li>
+</ul></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.synopsis"></a></span><a class="link" href="strategy_centroid_bashein_detmer.html#geometry.reference.strategies.strategy_centroid_bashein_detmer.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointOfSegment</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">centroid</span><span class="special">::</span><span class="identifier">bashein_detmer</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.template_parameter_s_"></a></span><a class="link" href="strategy_centroid_bashein_detmer.html#geometry.reference.strategies.strategy_centroid_bashein_detmer.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ point type of centroid to calculate
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename PointOfSegment
+ </p>
+ </td>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ point type of segments, defaults to Point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.member_function_s_"></a></span><a class="link" href="strategy_centroid_bashein_detmer.html#geometry.reference.strategies.strategy_centroid_bashein_detmer.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">,</span> <span class="identifier">sums</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>p1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>p2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>sums &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">sums</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">,</span> <span class="identifier">Point</span> <span class="special">&amp;</span> <span class="identifier">centroid</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>sums const &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>Point &amp;</strong></span>: <span class="emphasis"><em>centroid</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.header"></a></span><a class="link" href="strategy_centroid_bashein_detmer.html#geometry.reference.strategies.strategy_centroid_bashein_detmer.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">cartesian</span><span class="special">/</span><span class="identifier">centroid_bashein_detmer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.h5"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_centroid_bashein_detmer.see_also"></a></span><a class="link" href="strategy_centroid_bashein_detmer.html#geometry.reference.strategies.strategy_centroid_bashein_detmer.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../algorithms/centroid/centroid_3_with_strategy.html" title="centroid (with strategy)">centroid
+ (with strategy)</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_centroid_average.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_convex_hull_graham_andrew.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_convex_hull_graham_andrew.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_convex_hull_graham_andrew.html
new file mode 100644
index 000000000..004740d26
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_convex_hull_graham_andrew.html
@@ -0,0 +1,190 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::convex_hull::graham_andrew</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_centroid_bashein_detmer.html" title="strategy::centroid::bashein_detmer">
+<link rel="next" href="strategy_side_side_by_triangle.html" title="strategy::side::side_by_triangle">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_centroid_bashein_detmer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_side_side_by_triangle.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_convex_hull_graham_andrew"></a><a class="link" href="strategy_convex_hull_graham_andrew.html" title="strategy::convex_hull::graham_andrew">strategy::convex_hull::graham_andrew</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16447744"></a><a class="indexterm" name="idp16448080"></a><a class="indexterm" name="idp16448416"></a>
+Graham scan strategy to calculate convex hull.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_convex_hull_graham_andrew.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_convex_hull_graham_andrew.synopsis"></a></span><a class="link" href="strategy_convex_hull_graham_andrew.html#geometry.reference.strategies.strategy_convex_hull_graham_andrew.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">InputGeometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputPoint</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">convex_hull</span><span class="special">::</span><span class="identifier">graham_andrew</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_convex_hull_graham_andrew.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_convex_hull_graham_andrew.template_parameter_s_"></a></span><a class="link" href="strategy_convex_hull_graham_andrew.html#geometry.reference.strategies.strategy_convex_hull_graham_andrew.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename InputGeometry
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename OutputPoint
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_convex_hull_graham_andrew.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_convex_hull_graham_andrew.member_function_s_"></a></span><a class="link" href="strategy_convex_hull_graham_andrew.html#geometry.reference.strategies.strategy_convex_hull_graham_andrew.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">InputGeometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">partitions</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>InputGeometry const &amp;</strong></span>:
+ <span class="emphasis"><em>geometry</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>partitions &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">partitions</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">clockwise</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>partitions const &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>OutputIterator</strong></span>: <span class="emphasis"><em>out</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>bool</strong></span>: <span class="emphasis"><em>clockwise</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_convex_hull_graham_andrew.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_convex_hull_graham_andrew.header"></a></span><a class="link" href="strategy_convex_hull_graham_andrew.html#geometry.reference.strategies.strategy_convex_hull_graham_andrew.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">agnostic</span><span class="special">/</span><span class="identifier">hull_graham_andrew</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_centroid_bashein_detmer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_side_side_by_triangle.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_cross_track.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_cross_track.html
new file mode 100644
index 000000000..01c70e089
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_cross_track.html
@@ -0,0 +1,331 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::distance::cross_track</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_distance_projected_point.html" title="strategy::distance::projected_point">
+<link rel="next" href="strategy_area_surveyor.html" title="strategy::area::surveyor">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_distance_projected_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_area_surveyor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_distance_cross_track"></a><a class="link" href="strategy_distance_cross_track.html" title="strategy::distance::cross_track">strategy::distance::cross_track</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16114208"></a><a class="indexterm" name="idp16114544"></a><a class="indexterm" name="idp16114880"></a>
+Strategy functor for distance point to segment calculation.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_cross_track.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_cross_track.description"></a></span><a class="link" href="strategy_distance_cross_track.html#geometry.reference.strategies.strategy_distance_cross_track.description">Description</a>
+ </h6>
+<p>
+ Class which calculates the distance of a point to a segment, using latlong
+ points
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_cross_track.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_cross_track.synopsis"></a></span><a class="link" href="strategy_distance_cross_track.html#geometry.reference.strategies.strategy_distance_cross_track.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointOfSegment</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">distance</span><span class="special">::</span><span class="identifier">cross_track</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_cross_track.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_cross_track.template_parameter_s_"></a></span><a class="link" href="strategy_distance_cross_track.html#geometry.reference.strategies.strategy_distance_cross_track.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename PointOfSegment
+ </p>
+ </td>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ segment point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename Strategy
+ </p>
+ </td>
+<td>
+ <p>
+ typename services::default_strategy&lt;point_tag, Point&gt;::type
+ </p>
+ </td>
+<td>
+ <p>
+ underlying point-point distance strategy, defaults to haversine
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_cross_track.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_cross_track.constructor_s_"></a></span><a class="link" href="strategy_distance_cross_track.html#geometry.reference.strategies.strategy_distance_cross_track.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">cross_track</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">cross_track</span><span class="special">(</span><span class="identifier">return_type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>return_type const &amp;</strong></span>: <span class="emphasis"><em>r</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">cross_track</span><span class="special">(</span><span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">s</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Strategy const &amp;</strong></span>: <span class="emphasis"><em>s</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_cross_track.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_cross_track.member_function_s_"></a></span><a class="link" href="strategy_distance_cross_track.html#geometry.reference.strategies.strategy_distance_cross_track.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">return_type</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">sp1</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">sp2</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>p</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>sp1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>sp2</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">return_type</span> <span class="identifier">radius</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_cross_track.h5"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_cross_track.header"></a></span><a class="link" href="strategy_distance_cross_track.html#geometry.reference.strategies.strategy_distance_cross_track.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">spherical</span><span class="special">/</span><span class="identifier">distance_cross_track</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_cross_track.h6"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_cross_track.see_also"></a></span><a class="link" href="strategy_distance_cross_track.html#geometry.reference.strategies.strategy_distance_cross_track.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../algorithms/distance/distance_3_with_strategy.html" title="distance (with strategy)">distance
+ (with strategy)</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_distance_projected_point.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_area_surveyor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_haversine.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_haversine.html
new file mode 100644
index 000000000..ad2ed36cc
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_haversine.html
@@ -0,0 +1,295 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::distance::haversine</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_distance_pythagoras.html" title="strategy::distance::pythagoras">
+<link rel="next" href="strategy_distance_projected_point.html" title="strategy::distance::projected_point">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_distance_pythagoras.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_distance_projected_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_distance_haversine"></a><a class="link" href="strategy_distance_haversine.html" title="strategy::distance::haversine">strategy::distance::haversine</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16015312"></a><a class="indexterm" name="idp16015648"></a><a class="indexterm" name="idp16015984"></a>
+Distance calculation for spherical coordinates on a perfect sphere using
+ haversine.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_haversine.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_haversine.synopsis"></a></span><a class="link" href="strategy_distance_haversine.html#geometry.reference.strategies.strategy_distance_haversine.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">distance</span><span class="special">::</span><span class="identifier">haversine</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_haversine.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_haversine.template_parameter_s_"></a></span><a class="link" href="strategy_distance_haversine.html#geometry.reference.strategies.strategy_distance_haversine.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point1
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename Point2
+ </p>
+ </td>
+<td>
+ <p>
+ Point1
+ </p>
+ </td>
+<td>
+ <p>
+ second point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_haversine.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_haversine.constructor_s_"></a></span><a class="link" href="strategy_distance_haversine.html#geometry.reference.strategies.strategy_distance_haversine.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">haversine</span><span class="special">(</span><span class="identifier">calculation_type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">radius</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>calculation_type const &amp;</strong></span>:
+ <span class="emphasis"><em>radius</em></span>: radius of the sphere, defaults to
+ 1.0 for the unit sphere
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_haversine.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_haversine.member_function_s_"></a></span><a class="link" href="strategy_distance_haversine.html#geometry.reference.strategies.strategy_distance_haversine.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">calculation_type</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Point1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">Point2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ applies the distance calculation
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point1 const &amp;</strong></span>: <span class="emphasis"><em>p1</em></span>:
+ first point
+ </p>
+ <p>
+ <span class="bold"><strong>Point2 const &amp;</strong></span>: <span class="emphasis"><em>p2</em></span>:
+ second point
+ </p>
+ </td>
+<td>
+ <p>
+ the calculated distance (including multiplying with radius)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">calculation_type</span> <span class="identifier">radius</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ access to radius value
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ the radius
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_haversine.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_haversine.header"></a></span><a class="link" href="strategy_distance_haversine.html#geometry.reference.strategies.strategy_distance_haversine.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">spherical</span><span class="special">/</span><span class="identifier">distance_haversine</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_haversine.h5"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_haversine.see_also"></a></span><a class="link" href="strategy_distance_haversine.html#geometry.reference.strategies.strategy_distance_haversine.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../algorithms/distance/distance_3_with_strategy.html" title="distance (with strategy)">distance
+ (with strategy)</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_distance_pythagoras.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_distance_projected_point.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_projected_point.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_projected_point.html
new file mode 100644
index 000000000..1d0cdd08b
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_projected_point.html
@@ -0,0 +1,240 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::distance::projected_point</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_distance_haversine.html" title="strategy::distance::haversine">
+<link rel="next" href="strategy_distance_cross_track.html" title="strategy::distance::cross_track">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_distance_haversine.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_distance_cross_track.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_distance_projected_point"></a><a class="link" href="strategy_distance_projected_point.html" title="strategy::distance::projected_point">strategy::distance::projected_point</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16067600"></a><a class="indexterm" name="idp16067936"></a><a class="indexterm" name="idp16068272"></a>
+Strategy for distance point to segment.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_projected_point.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_projected_point.description"></a></span><a class="link" href="strategy_distance_projected_point.html#geometry.reference.strategies.strategy_distance_projected_point.description">Description</a>
+ </h6>
+<p>
+ Calculates distance using projected-point method, and (optionally) Pythagoras
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_projected_point.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_projected_point.synopsis"></a></span><a class="link" href="strategy_distance_projected_point.html#geometry.reference.strategies.strategy_distance_projected_point.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointOfSegment</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">distance</span><span class="special">::</span><span class="identifier">projected_point</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_projected_point.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_projected_point.template_parameter_s_"></a></span><a class="link" href="strategy_distance_projected_point.html#geometry.reference.strategies.strategy_distance_projected_point.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename PointOfSegment
+ </p>
+ </td>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ segment point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename Strategy
+ </p>
+ </td>
+<td>
+ <p>
+ pythagoras&lt;Point, PointOfSegment, CalculationType&gt;
+ </p>
+ </td>
+<td>
+ <p>
+ underlying point-point distance strategy
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_projected_point.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_projected_point.member_function_s_"></a></span><a class="link" href="strategy_distance_projected_point.html#geometry.reference.strategies.strategy_distance_projected_point.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">calculation_type</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>p</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>p1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>p2</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_projected_point.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_projected_point.header"></a></span><a class="link" href="strategy_distance_projected_point.html#geometry.reference.strategies.strategy_distance_projected_point.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">cartesian</span><span class="special">/</span><span class="identifier">distance_projected_point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_projected_point.h5"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_projected_point.see_also"></a></span><a class="link" href="strategy_distance_projected_point.html#geometry.reference.strategies.strategy_distance_projected_point.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../algorithms/distance/distance_3_with_strategy.html" title="distance (with strategy)">distance
+ (with strategy)</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_distance_haversine.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_distance_cross_track.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_pythagoras.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_pythagoras.html
new file mode 100644
index 000000000..c66cd8e23
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_distance_pythagoras.html
@@ -0,0 +1,235 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::distance::pythagoras</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="../strategies.html" title="Strategies">
+<link rel="next" href="strategy_distance_haversine.html" title="strategy::distance::haversine">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../strategies.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_distance_haversine.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_distance_pythagoras"></a><a class="link" href="strategy_distance_pythagoras.html" title="strategy::distance::pythagoras">strategy::distance::pythagoras</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp15973024"></a><a class="indexterm" name="idp15973360"></a><a class="indexterm" name="idp15973696"></a>
+Strategy to calculate the distance between two points.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_pythagoras.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_pythagoras.synopsis"></a></span><a class="link" href="strategy_distance_pythagoras.html#geometry.reference.strategies.strategy_distance_pythagoras.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Point2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">distance</span><span class="special">::</span><span class="identifier">pythagoras</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_pythagoras.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_pythagoras.template_parameter_s_"></a></span><a class="link" href="strategy_distance_pythagoras.html#geometry.reference.strategies.strategy_distance_pythagoras.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point1
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename Point2
+ </p>
+ </td>
+<td>
+ <p>
+ Point1
+ </p>
+ </td>
+<td>
+ <p>
+ second point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_pythagoras.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_pythagoras.member_function_s_"></a></span><a class="link" href="strategy_distance_pythagoras.html#geometry.reference.strategies.strategy_distance_pythagoras.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">calculation_type</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Point1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">Point2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ applies the distance calculation using pythagoras
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point1 const &amp;</strong></span>: <span class="emphasis"><em>p1</em></span>:
+ first point
+ </p>
+ <p>
+ <span class="bold"><strong>Point2 const &amp;</strong></span>: <span class="emphasis"><em>p2</em></span>:
+ second point
+ </p>
+ </td>
+<td>
+ <p>
+ the calculated distance (including taking the square root)
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_pythagoras.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_pythagoras.header"></a></span><a class="link" href="strategy_distance_pythagoras.html#geometry.reference.strategies.strategy_distance_pythagoras.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">cartesian</span><span class="special">/</span><span class="identifier">distance_pythagoras</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_pythagoras.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_pythagoras.notes"></a></span><a class="link" href="strategy_distance_pythagoras.html#geometry.reference.strategies.strategy_distance_pythagoras.notes">Notes</a>
+ </h6>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Can be used for points with two, three or more dimensions
+ </p></td></tr>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_distance_pythagoras.h5"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_distance_pythagoras.see_also"></a></span><a class="link" href="strategy_distance_pythagoras.html#geometry.reference.strategies.strategy_distance_pythagoras.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../algorithms/distance/distance_3_with_strategy.html" title="distance (with strategy)">distance
+ (with strategy)</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../strategies.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_distance_haversine.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_side_side_by_cross_track.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_side_side_by_cross_track.html
new file mode 100644
index 000000000..ac652b5c6
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_side_side_by_cross_track.html
@@ -0,0 +1,174 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::side::side_by_cross_track</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_side_side_by_triangle.html" title="strategy::side::side_by_triangle">
+<link rel="next" href="strategy_side_spherical_side_formula.html" title="strategy::side::spherical_side_formula">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_side_side_by_triangle.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_side_spherical_side_formula.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_side_side_by_cross_track"></a><a class="link" href="strategy_side_side_by_cross_track.html" title="strategy::side::side_by_cross_track">strategy::side::side_by_cross_track</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16527664"></a><a class="indexterm" name="idp16528000"></a><a class="indexterm" name="idp16528336"></a>
+Check at which side of a Great Circle segment a point lies left of segment
+ (&gt; 0), right of segment (&lt; 0), on segment (0)
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_side_by_cross_track.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_side_by_cross_track.synopsis"></a></span><a class="link" href="strategy_side_side_by_cross_track.html#geometry.reference.strategies.strategy_side_side_by_cross_track.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">side</span><span class="special">::</span><span class="identifier">side_by_cross_track</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_side_by_cross_track.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_side_by_cross_track.template_parameter_s_"></a></span><a class="link" href="strategy_side_side_by_cross_track.html#geometry.reference.strategies.strategy_side_side_by_cross_track.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_side_by_cross_track.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_side_by_cross_track.member_function_s_"></a></span><a class="link" href="strategy_side_side_by_cross_track.html#geometry.reference.strategies.strategy_side_side_by_cross_track.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+<span class="keyword">int</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">,</span> <span class="identifier">P</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>P1 const &amp;</strong></span>: <span class="emphasis"><em>p1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>P2 const &amp;</strong></span>: <span class="emphasis"><em>p2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>P const &amp;</strong></span>: <span class="emphasis"><em>p</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_side_by_cross_track.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_side_by_cross_track.header"></a></span><a class="link" href="strategy_side_side_by_cross_track.html#geometry.reference.strategies.strategy_side_side_by_cross_track.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">spherical</span><span class="special">/</span><span class="identifier">side_by_cross_track</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_side_side_by_triangle.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_side_spherical_side_formula.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_side_side_by_triangle.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_side_side_by_triangle.html
new file mode 100644
index 000000000..614b5fe72
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_side_side_by_triangle.html
@@ -0,0 +1,174 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::side::side_by_triangle</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_convex_hull_graham_andrew.html" title="strategy::convex_hull::graham_andrew">
+<link rel="next" href="strategy_side_side_by_cross_track.html" title="strategy::side::side_by_cross_track">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_convex_hull_graham_andrew.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_side_side_by_cross_track.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_side_side_by_triangle"></a><a class="link" href="strategy_side_side_by_triangle.html" title="strategy::side::side_by_triangle">strategy::side::side_by_triangle</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16489488"></a><a class="indexterm" name="idp16489824"></a><a class="indexterm" name="idp16490160"></a>
+Check at which side of a segment a point lies: left of segment (&gt; 0),
+ right of segment (&lt; 0), on segment (0)
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_side_by_triangle.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_side_by_triangle.synopsis"></a></span><a class="link" href="strategy_side_side_by_triangle.html#geometry.reference.strategies.strategy_side_side_by_triangle.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">side</span><span class="special">::</span><span class="identifier">side_by_triangle</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_side_by_triangle.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_side_by_triangle.template_parameter_s_"></a></span><a class="link" href="strategy_side_side_by_triangle.html#geometry.reference.strategies.strategy_side_side_by_triangle.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_side_by_triangle.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_side_by_triangle.member_function_s_"></a></span><a class="link" href="strategy_side_side_by_triangle.html#geometry.reference.strategies.strategy_side_side_by_triangle.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+<span class="keyword">int</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">,</span> <span class="identifier">P</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>P1 const &amp;</strong></span>: <span class="emphasis"><em>p1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>P2 const &amp;</strong></span>: <span class="emphasis"><em>p2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>P const &amp;</strong></span>: <span class="emphasis"><em>p</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_side_by_triangle.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_side_by_triangle.header"></a></span><a class="link" href="strategy_side_side_by_triangle.html#geometry.reference.strategies.strategy_side_side_by_triangle.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">cartesian</span><span class="special">/</span><span class="identifier">side_by_triangle</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_convex_hull_graham_andrew.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_side_side_by_cross_track.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_side_spherical_side_formula.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_side_spherical_side_formula.html
new file mode 100644
index 000000000..d93024619
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_side_spherical_side_formula.html
@@ -0,0 +1,174 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::side::spherical_side_formula</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_side_side_by_cross_track.html" title="strategy::side::side_by_cross_track">
+<link rel="next" href="strategy_simplify_douglas_peucker.html" title="strategy::simplify::douglas_peucker">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_side_side_by_cross_track.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_simplify_douglas_peucker.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_side_spherical_side_formula"></a><a class="link" href="strategy_side_spherical_side_formula.html" title="strategy::side::spherical_side_formula">strategy::side::spherical_side_formula</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16566192"></a><a class="indexterm" name="idp16566528"></a><a class="indexterm" name="idp16566864"></a>
+Check at which side of a Great Circle segment a point lies left of segment
+ (&gt; 0), right of segment (&lt; 0), on segment (0)
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_spherical_side_formula.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_spherical_side_formula.synopsis"></a></span><a class="link" href="strategy_side_spherical_side_formula.html#geometry.reference.strategies.strategy_side_spherical_side_formula.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">side</span><span class="special">::</span><span class="identifier">spherical_side_formula</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_spherical_side_formula.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_spherical_side_formula.template_parameter_s_"></a></span><a class="link" href="strategy_side_spherical_side_formula.html#geometry.reference.strategies.strategy_side_spherical_side_formula.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_spherical_side_formula.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_spherical_side_formula.member_function_s_"></a></span><a class="link" href="strategy_side_spherical_side_formula.html#geometry.reference.strategies.strategy_side_spherical_side_formula.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P</span><span class="special">&gt;</span>
+<span class="keyword">int</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">P1</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">P2</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p2</span><span class="special">,</span> <span class="identifier">P</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>P1 const &amp;</strong></span>: <span class="emphasis"><em>p1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>P2 const &amp;</strong></span>: <span class="emphasis"><em>p2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>P const &amp;</strong></span>: <span class="emphasis"><em>p</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_side_spherical_side_formula.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_side_spherical_side_formula.header"></a></span><a class="link" href="strategy_side_spherical_side_formula.html#geometry.reference.strategies.strategy_side_spherical_side_formula.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">spherical</span><span class="special">/</span><span class="identifier">ssf</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_side_side_by_cross_track.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_simplify_douglas_peucker.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_simplify_douglas_peucker.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_simplify_douglas_peucker.html
new file mode 100644
index 000000000..7dfbc6be3
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_simplify_douglas_peucker.html
@@ -0,0 +1,183 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::simplify::douglas_peucker</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_side_spherical_side_formula.html" title="strategy::side::spherical_side_formula">
+<link rel="next" href="strategy_transform_inverse_transformer.html" title="strategy::transform::inverse_transformer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_side_spherical_side_formula.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_inverse_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_simplify_douglas_peucker"></a><a class="link" href="strategy_simplify_douglas_peucker.html" title="strategy::simplify::douglas_peucker">strategy::simplify::douglas_peucker</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16604432"></a><a class="indexterm" name="idp16604768"></a><a class="indexterm" name="idp16605104"></a>
+Implements the simplify algorithm.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.description"></a></span><a class="link" href="strategy_simplify_douglas_peucker.html#geometry.reference.strategies.strategy_simplify_douglas_peucker.description">Description</a>
+ </h6>
+<p>
+ The douglas_peucker strategy simplifies a linestring, ring or vector of
+ points using the well-known Douglas-Peucker algorithm. For the algorithm,
+ see for example:
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.synopsis"></a></span><a class="link" href="strategy_simplify_douglas_peucker.html#geometry.reference.strategies.strategy_simplify_douglas_peucker.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointDistanceStrategy</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">simplify</span><span class="special">::</span><span class="identifier">douglas_peucker</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.template_parameter_s_"></a></span><a class="link" href="strategy_simplify_douglas_peucker.html#geometry.reference.strategies.strategy_simplify_douglas_peucker.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ <p>
+ the point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename PointDistanceStrategy
+ </p>
+ </td>
+<td>
+ <p>
+ point-segment distance strategy to be used
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.member_function_s_"></a></span><a class="link" href="strategy_simplify_douglas_peucker.html#geometry.reference.strategies.strategy_simplify_douglas_peucker.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">&gt;</span>
+<span class="identifier">OutputIterator</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Range</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">range</span><span class="special">,</span> <span class="identifier">OutputIterator</span> <span class="identifier">out</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">max_distance</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Range const &amp;</strong></span>: <span class="emphasis"><em>range</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>OutputIterator</strong></span>: <span class="emphasis"><em>out</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>double</strong></span>: <span class="emphasis"><em>max_distance</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_simplify_douglas_peucker.header"></a></span><a class="link" href="strategy_simplify_douglas_peucker.html#geometry.reference.strategies.strategy_simplify_douglas_peucker.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">agnostic</span><span class="special">/</span><span class="identifier">simplify_douglas_peucker</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_side_spherical_side_formula.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_inverse_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_inverse_transformer.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_inverse_transformer.html
new file mode 100644
index 000000000..5c85e7edb
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_inverse_transformer.html
@@ -0,0 +1,163 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::transform::inverse_transformer</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_simplify_douglas_peucker.html" title="strategy::simplify::douglas_peucker">
+<link rel="next" href="strategy_transform_map_transformer.html" title="strategy::transform::map_transformer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_simplify_douglas_peucker.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_map_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_transform_inverse_transformer"></a><a class="link" href="strategy_transform_inverse_transformer.html" title="strategy::transform::inverse_transformer">strategy::transform::inverse_transformer</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16643312"></a><a class="indexterm" name="idp16643648"></a><a class="indexterm" name="idp16643984"></a>
+Transformation strategy to do an inverse ransformation in Cartesian system.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_inverse_transformer.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_inverse_transformer.synopsis"></a></span><a class="link" href="strategy_transform_inverse_transformer.html#geometry.reference.strategies.strategy_transform_inverse_transformer.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">transform</span><span class="special">::</span><span class="identifier">inverse_transformer</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">transform</span><span class="special">::</span><span class="identifier">ublas_transformer</span><span class="special">&lt;</span> <span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">dimension</span><span class="special">&lt;</span> <span class="identifier">P1</span> <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">dimension</span><span class="special">&lt;</span> <span class="identifier">P2</span> <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_inverse_transformer.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_inverse_transformer.template_parameter_s_"></a></span><a class="link" href="strategy_transform_inverse_transformer.html#geometry.reference.strategies.strategy_transform_inverse_transformer.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename P1
+ </p>
+ </td>
+<td>
+ <p>
+ first point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename P2
+ </p>
+ </td>
+<td>
+ <p>
+ second point type
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_inverse_transformer.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_inverse_transformer.constructor_s_"></a></span><a class="link" href="strategy_transform_inverse_transformer.html#geometry.reference.strategies.strategy_transform_inverse_transformer.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Transformer</span><span class="special">&gt;</span>
+<span class="identifier">inverse_transformer</span><span class="special">(</span><span class="identifier">Transformer</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">input</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Transformer const &amp;</strong></span>: <span class="emphasis"><em>input</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_inverse_transformer.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_inverse_transformer.header"></a></span><a class="link" href="strategy_transform_inverse_transformer.html#geometry.reference.strategies.strategy_transform_inverse_transformer.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">transform</span><span class="special">/</span><span class="identifier">inverse_transformer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_simplify_douglas_peucker.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_map_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_map_transformer.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_map_transformer.html
new file mode 100644
index 000000000..0adc8ad93
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_map_transformer.html
@@ -0,0 +1,273 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::transform::map_transformer</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_transform_inverse_transformer.html" title="strategy::transform::inverse_transformer">
+<link rel="next" href="strategy_transform_rotate_transformer.html" title="strategy::transform::rotate_transformer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_inverse_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_rotate_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_transform_map_transformer"></a><a class="link" href="strategy_transform_map_transformer.html" title="strategy::transform::map_transformer">strategy::transform::map_transformer</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16683280"></a><a class="indexterm" name="idp16683616"></a><a class="indexterm" name="idp16683952"></a>
+Transformation strategy to do map from one to another Cartesian system.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_map_transformer.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_map_transformer.synopsis"></a></span><a class="link" href="strategy_transform_map_transformer.html#geometry.reference.strategies.strategy_transform_map_transformer.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">Mirror</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">SameScale</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension1</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension2</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">transform</span><span class="special">::</span><span class="identifier">map_transformer</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">transform</span><span class="special">::</span><span class="identifier">ublas_transformer</span><span class="special">&lt;</span> <span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">Dimension1</span><span class="special">,</span> <span class="identifier">Dimension2</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_map_transformer.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_map_transformer.template_parameter_s_"></a></span><a class="link" href="strategy_transform_map_transformer.html#geometry.reference.strategies.strategy_transform_map_transformer.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename P1
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ first point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename P2
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ second point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bool Mirror
+ </p>
+ </td>
+<td>
+ <p>
+ false
+ </p>
+ </td>
+<td>
+ <p>
+ if true map is mirrored upside-down (in most cases pixels are
+ from top to bottom, while map is from bottom to top)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bool SameScale
+ </p>
+ </td>
+<td>
+ <p>
+ true
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::size_t Dimension1
+ </p>
+ </td>
+<td>
+ <p>
+ dimension&lt;P1&gt;::type::value
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::size_t Dimension2
+ </p>
+ </td>
+<td>
+ <p>
+ dimension&lt;P2&gt;::type::value
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_map_transformer.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_map_transformer.constructor_s_"></a></span><a class="link" href="strategy_transform_map_transformer.html#geometry.reference.strategies.strategy_transform_map_transformer.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">B</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="identifier">map_transformer</span><span class="special">(</span><span class="identifier">B</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">box</span><span class="special">,</span> <span class="identifier">D</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">width</span><span class="special">,</span> <span class="identifier">D</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">height</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>B const &amp;</strong></span>: <span class="emphasis"><em>box</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>D const &amp;</strong></span>: <span class="emphasis"><em>width</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>D const &amp;</strong></span>: <span class="emphasis"><em>height</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">W</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="identifier">map_transformer</span><span class="special">(</span><span class="identifier">W</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">wx1</span><span class="special">,</span> <span class="identifier">W</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">wy1</span><span class="special">,</span> <span class="identifier">W</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">wx2</span><span class="special">,</span> <span class="identifier">W</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">wy2</span><span class="special">,</span> <span class="identifier">D</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">width</span><span class="special">,</span> <span class="identifier">D</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">height</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>W const &amp;</strong></span>: <span class="emphasis"><em>wx1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>W const &amp;</strong></span>: <span class="emphasis"><em>wy1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>W const &amp;</strong></span>: <span class="emphasis"><em>wx2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>W const &amp;</strong></span>: <span class="emphasis"><em>wy2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>D const &amp;</strong></span>: <span class="emphasis"><em>width</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>D const &amp;</strong></span>: <span class="emphasis"><em>height</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_map_transformer.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_map_transformer.header"></a></span><a class="link" href="strategy_transform_map_transformer.html#geometry.reference.strategies.strategy_transform_map_transformer.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">transform</span><span class="special">/</span><span class="identifier">map_transformer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_inverse_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_rotate_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_rotate_transformer.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_rotate_transformer.html
new file mode 100644
index 000000000..7971c6fa1
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_rotate_transformer.html
@@ -0,0 +1,182 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::transform::rotate_transformer</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_transform_map_transformer.html" title="strategy::transform::map_transformer">
+<link rel="next" href="strategy_transform_scale_transformer.html" title="strategy::transform::scale_transformer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_map_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_scale_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_transform_rotate_transformer"></a><a class="link" href="strategy_transform_rotate_transformer.html" title="strategy::transform::rotate_transformer">strategy::transform::rotate_transformer</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16754816"></a><a class="indexterm" name="idp16755152"></a><a class="indexterm" name="idp16755488"></a>
+Strategy of rotate transformation in Cartesian system.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_rotate_transformer.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_rotate_transformer.description"></a></span><a class="link" href="strategy_transform_rotate_transformer.html#geometry.reference.strategies.strategy_transform_rotate_transformer.description">Description</a>
+ </h6>
+<p>
+ Rotate rotates a geometry of specified angle about a fixed point (e.g.
+ origin).
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_rotate_transformer.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_rotate_transformer.synopsis"></a></span><a class="link" href="strategy_transform_rotate_transformer.html#geometry.reference.strategies.strategy_transform_rotate_transformer.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">DegreeOrRadian</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">transform</span><span class="special">::</span><span class="identifier">rotate_transformer</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">rad_rotate_transformer</span><span class="special">&lt;</span> <span class="identifier">P1</span><span class="special">,</span> <span class="identifier">P2</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_rotate_transformer.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_rotate_transformer.template_parameter_s_"></a></span><a class="link" href="strategy_transform_rotate_transformer.html#geometry.reference.strategies.strategy_transform_rotate_transformer.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename P1
+ </p>
+ </td>
+<td>
+ <p>
+ first point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename P2
+ </p>
+ </td>
+<td>
+ <p>
+ second point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename DegreeOrRadian
+ </p>
+ </td>
+<td>
+ <p>
+ degree/or/radian, type of rotation angle specification
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_rotate_transformer.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_rotate_transformer.constructor_s_"></a></span><a class="link" href="strategy_transform_rotate_transformer.html#geometry.reference.strategies.strategy_transform_rotate_transformer.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">rotate_transformer</span><span class="special">(</span><span class="identifier">angle_type</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">angle</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>angle_type const &amp;</strong></span>: <span class="emphasis"><em>angle</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_rotate_transformer.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_rotate_transformer.header"></a></span><a class="link" href="strategy_transform_rotate_transformer.html#geometry.reference.strategies.strategy_transform_rotate_transformer.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">transform</span><span class="special">/</span><span class="identifier">matrix_transformers</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_map_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_scale_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_scale_transformer.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_scale_transformer.html
new file mode 100644
index 000000000..4387529e5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_scale_transformer.html
@@ -0,0 +1,168 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::transform::scale_transformer</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_transform_rotate_transformer.html" title="strategy::transform::rotate_transformer">
+<link rel="next" href="strategy_transform_translate_transformer.html" title="strategy::transform::translate_transformer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_rotate_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_translate_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_transform_scale_transformer"></a><a class="link" href="strategy_transform_scale_transformer.html" title="strategy::transform::scale_transformer">strategy::transform::scale_transformer</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16792144"></a><a class="indexterm" name="idp16792480"></a><a class="indexterm" name="idp16792816"></a>
+Strategy of scale transformation in Cartesian system.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_scale_transformer.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_scale_transformer.description"></a></span><a class="link" href="strategy_transform_scale_transformer.html#geometry.reference.strategies.strategy_transform_scale_transformer.description">Description</a>
+ </h6>
+<p>
+ Scale scales a geometry up or down in all its dimensions.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_scale_transformer.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_scale_transformer.synopsis"></a></span><a class="link" href="strategy_transform_scale_transformer.html#geometry.reference.strategies.strategy_transform_scale_transformer.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension1</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension2</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">transform</span><span class="special">::</span><span class="identifier">scale_transformer</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_scale_transformer.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_scale_transformer.template_parameter_s_"></a></span><a class="link" href="strategy_transform_scale_transformer.html#geometry.reference.strategies.strategy_transform_scale_transformer.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename P1
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ first point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename P2
+ </p>
+ </td>
+<td>
+ <p>
+ P1
+ </p>
+ </td>
+<td>
+ <p>
+ second point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::size_t Dimension1
+ </p>
+ </td>
+<td>
+ <p>
+ geometry::dimension&lt;P1&gt;::type::value
+ </p>
+ </td>
+<td>
+ <p>
+ number of dimensions to transform to second point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::size_t Dimension2
+ </p>
+ </td>
+<td>
+ <p>
+ geometry::dimension&lt;P2&gt;::type::value
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_scale_transformer.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_scale_transformer.header"></a></span><a class="link" href="strategy_transform_scale_transformer.html#geometry.reference.strategies.strategy_transform_scale_transformer.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">transform</span><span class="special">/</span><span class="identifier">matrix_transformers</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_rotate_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_translate_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_translate_transformer.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_translate_transformer.html
new file mode 100644
index 000000000..cc88b3a0f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_translate_transformer.html
@@ -0,0 +1,165 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::transform::translate_transformer</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_transform_scale_transformer.html" title="strategy::transform::scale_transformer">
+<link rel="next" href="strategy_transform_ublas_transformer.html" title="strategy::transform::ublas_transformer">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_scale_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_ublas_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_transform_translate_transformer"></a><a class="link" href="strategy_transform_translate_transformer.html" title="strategy::transform::translate_transformer">strategy::transform::translate_transformer</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16822704"></a><a class="indexterm" name="idp16823040"></a><a class="indexterm" name="idp16823376"></a>
+Strategy of translate transformation in Cartesian system.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_translate_transformer.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_translate_transformer.description"></a></span><a class="link" href="strategy_transform_translate_transformer.html#geometry.reference.strategies.strategy_transform_translate_transformer.description">Description</a>
+ </h6>
+<p>
+ Translate moves a geometry a fixed distance in 2 or 3 dimensions.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_translate_transformer.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_translate_transformer.synopsis"></a></span><a class="link" href="strategy_transform_translate_transformer.html#geometry.reference.strategies.strategy_transform_translate_transformer.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension1</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension2</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">transform</span><span class="special">::</span><span class="identifier">translate_transformer</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_translate_transformer.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_translate_transformer.template_parameter_s_"></a></span><a class="link" href="strategy_transform_translate_transformer.html#geometry.reference.strategies.strategy_transform_translate_transformer.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename P1
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ first point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename P2
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ second point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::size_t Dimension1
+ </p>
+ </td>
+<td>
+ <p>
+ geometry::dimension&lt;P1&gt;::type::value
+ </p>
+ </td>
+<td>
+ <p>
+ number of dimensions to transform to second point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::size_t Dimension2
+ </p>
+ </td>
+<td>
+ <p>
+ geometry::dimension&lt;P2&gt;::type::value
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_translate_transformer.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_translate_transformer.header"></a></span><a class="link" href="strategy_transform_translate_transformer.html#geometry.reference.strategies.strategy_transform_translate_transformer.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">transform</span><span class="special">/</span><span class="identifier">matrix_transformers</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_scale_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_transform_ublas_transformer.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_ublas_transformer.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_ublas_transformer.html
new file mode 100644
index 000000000..ff14fe2c0
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_transform_ublas_transformer.html
@@ -0,0 +1,146 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::transform::ublas_transformer</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_transform_translate_transformer.html" title="strategy::transform::translate_transformer">
+<link rel="next" href="strategy_within_winding.html" title="strategy::within::winding">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_translate_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_within_winding.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_transform_ublas_transformer"></a><a class="link" href="strategy_transform_ublas_transformer.html" title="strategy::transform::ublas_transformer">strategy::transform::ublas_transformer</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16853248"></a><a class="indexterm" name="idp16853584"></a><a class="indexterm" name="idp16853920"></a>
+Affine transformation strategy in Cartesian system.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_ublas_transformer.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_ublas_transformer.description"></a></span><a class="link" href="strategy_transform_ublas_transformer.html#geometry.reference.strategies.strategy_transform_ublas_transformer.description">Description</a>
+ </h6>
+<p>
+ The strategy serves as a generic definition of affine transformation matrix
+ and procedure of application it to given point.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_ublas_transformer.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_ublas_transformer.synopsis"></a></span><a class="link" href="strategy_transform_ublas_transformer.html#geometry.reference.strategies.strategy_transform_ublas_transformer.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">P2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension1</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Dimension2</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">transform</span><span class="special">::</span><span class="identifier">ublas_transformer</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_ublas_transformer.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_ublas_transformer.template_parameter_s_"></a></span><a class="link" href="strategy_transform_ublas_transformer.html#geometry.reference.strategies.strategy_transform_ublas_transformer.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename P1
+ </p>
+ </td>
+<td>
+ <p>
+ first point type (source)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename P2
+ </p>
+ </td>
+<td>
+ <p>
+ second point type (target)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::size_t Dimension1
+ </p>
+ </td>
+<td>
+ <p>
+ number of dimensions to transform to second point
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ std::size_t Dimension2
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_transform_ublas_transformer.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_transform_ublas_transformer.header"></a></span><a class="link" href="strategy_transform_ublas_transformer.html#geometry.reference.strategies.strategy_transform_ublas_transformer.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">transform</span><span class="special">/</span><span class="identifier">matrix_transformers</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_translate_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_within_winding.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_within_crossings_multiply.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_within_crossings_multiply.html
new file mode 100644
index 000000000..62bc8371a
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_within_crossings_multiply.html
@@ -0,0 +1,228 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::within::crossings_multiply</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_within_franklin.html" title="strategy::within::franklin">
+<link rel="next" href="../views.html" title="Views">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_within_franklin.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="../views.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_within_crossings_multiply"></a><a class="link" href="strategy_within_crossings_multiply.html" title="strategy::within::crossings_multiply">strategy::within::crossings_multiply</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16978096"></a><a class="indexterm" name="idp16978432"></a><a class="indexterm" name="idp16978768"></a>
+Within detection using cross counting,.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_crossings_multiply.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_crossings_multiply.synopsis"></a></span><a class="link" href="strategy_within_crossings_multiply.html#geometry.reference.strategies.strategy_within_crossings_multiply.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointOfSegment</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">within</span><span class="special">::</span><span class="identifier">crossings_multiply</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_crossings_multiply.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_crossings_multiply.template_parameter_s_"></a></span><a class="link" href="strategy_within_crossings_multiply.html#geometry.reference.strategies.strategy_within_crossings_multiply.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename PointOfSegment
+ </p>
+ </td>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ segment point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_crossings_multiply.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_crossings_multiply.member_function_s_"></a></span><a class="link" href="strategy_within_crossings_multiply.html#geometry.reference.strategies.strategy_within_crossings_multiply.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">point</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">seg1</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">seg2</span><span class="special">,</span> <span class="identifier">flags</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>point</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>seg1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>seg2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>flags &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">int</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">flags</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>flags const &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_crossings_multiply.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_crossings_multiply.header"></a></span><a class="link" href="strategy_within_crossings_multiply.html#geometry.reference.strategies.strategy_within_crossings_multiply.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">cartesian</span><span class="special">/</span><span class="identifier">point_in_poly_crossings_multiply</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_within_franklin.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="../views.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_within_franklin.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_within_franklin.html
new file mode 100644
index 000000000..24b1a1156
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_within_franklin.html
@@ -0,0 +1,237 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::within::franklin</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_within_winding.html" title="strategy::within::winding">
+<link rel="next" href="strategy_within_crossings_multiply.html" title="strategy::within::crossings_multiply">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_within_winding.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_within_crossings_multiply.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_within_franklin"></a><a class="link" href="strategy_within_franklin.html" title="strategy::within::franklin">strategy::within::franklin</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16929824"></a><a class="indexterm" name="idp16930160"></a><a class="indexterm" name="idp16930496"></a>
+Within detection using cross counting.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_franklin.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_franklin.synopsis"></a></span><a class="link" href="strategy_within_franklin.html#geometry.reference.strategies.strategy_within_franklin.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointOfSegment</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">within</span><span class="special">::</span><span class="identifier">franklin</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_franklin.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_franklin.template_parameter_s_"></a></span><a class="link" href="strategy_within_franklin.html#geometry.reference.strategies.strategy_within_franklin.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename PointOfSegment
+ </p>
+ </td>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ segment point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_franklin.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_franklin.member_function_s_"></a></span><a class="link" href="strategy_within_franklin.html#geometry.reference.strategies.strategy_within_franklin.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">point</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">seg1</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">seg2</span><span class="special">,</span> <span class="identifier">crossings</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>point</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>seg1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>seg2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>crossings &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">int</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">crossings</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>crossings const &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_franklin.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_franklin.header"></a></span><a class="link" href="strategy_within_franklin.html#geometry.reference.strategies.strategy_within_franklin.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">cartesian</span><span class="special">/</span><span class="identifier">point_in_poly_franklin</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_franklin.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_franklin.see_also"></a></span><a class="link" href="strategy_within_franklin.html#geometry.reference.strategies.strategy_within_franklin.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../algorithms/within/within_3_with_strategy.html" title="within (with strategy)">within
+ (with strategy)</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_within_winding.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_within_crossings_multiply.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/strategies/strategy_within_winding.html b/libs/geometry/doc/html/geometry/reference/strategies/strategy_within_winding.html
new file mode 100644
index 000000000..1ac6f7ad9
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/strategies/strategy_within_winding.html
@@ -0,0 +1,237 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>strategy::within::winding</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../strategies.html" title="Strategies">
+<link rel="prev" href="strategy_transform_ublas_transformer.html" title="strategy::transform::ublas_transformer">
+<link rel="next" href="strategy_within_franklin.html" title="strategy::within::franklin">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_ublas_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_within_franklin.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.strategies.strategy_within_winding"></a><a class="link" href="strategy_within_winding.html" title="strategy::within::winding">strategy::within::winding</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp16881776"></a><a class="indexterm" name="idp16882112"></a><a class="indexterm" name="idp16882448"></a>
+Within detection using winding rule.
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_winding.h0"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_winding.synopsis"></a></span><a class="link" href="strategy_within_winding.html#geometry.reference.strategies.strategy_within_winding.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Point</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">PointOfSegment</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CalculationType</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">strategy</span><span class="special">::</span><span class="identifier">within</span><span class="special">::</span><span class="identifier">winding</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_winding.h1"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_winding.template_parameter_s_"></a></span><a class="link" href="strategy_within_winding.html#geometry.reference.strategies.strategy_within_winding.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Point
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Any type fulfilling a Point Concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename PointOfSegment
+ </p>
+ </td>
+<td>
+ <p>
+ Point
+ </p>
+ </td>
+<td>
+ <p>
+ segment point type
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ typename CalculationType
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ numeric type for calculation (e.g. high precision); if <span class="bold"><strong>void</strong></span> then it is extracted automatically
+ from the coordinate type and (if necessary) promoted to floating
+ point
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_winding.h2"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_winding.member_function_s_"></a></span><a class="link" href="strategy_within_winding.html#geometry.reference.strategies.strategy_within_winding.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">Point</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">point</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">s1</span><span class="special">,</span> <span class="identifier">PointOfSegment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">s2</span><span class="special">,</span> <span class="identifier">counter</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Point const &amp;</strong></span>: <span class="emphasis"><em>point</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>s1</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>PointOfSegment const &amp;</strong></span>:
+ <span class="emphasis"><em>s2</em></span>:
+ </p>
+ <p>
+ <span class="bold"><strong>counter &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">int</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">counter</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">state</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>counter const &amp;</strong></span>: <span class="emphasis"><em>state</em></span>:
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_winding.h3"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_winding.header"></a></span><a class="link" href="strategy_within_winding.html#geometry.reference.strategies.strategy_within_winding.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">strategies</span><span class="special">/</span><span class="identifier">agnostic</span><span class="special">/</span><span class="identifier">point_in_poly_winding</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.strategies.strategy_within_winding.h4"></a>
+ <span class="phrase"><a name="geometry.reference.strategies.strategy_within_winding.see_also"></a></span><a class="link" href="strategy_within_winding.html#geometry.reference.strategies.strategy_within_winding.see_also">See
+ also</a>
+ </h6>
+<p>
+ <a class="link" href="../algorithms/within/within_3_with_strategy.html" title="within (with strategy)">within
+ (with strategy)</a>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategy_transform_ublas_transformer.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../strategies.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="strategy_within_franklin.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/views.html b/libs/geometry/doc/html/geometry/reference/views.html
new file mode 100644
index 000000000..58dd75e76
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/views.html
@@ -0,0 +1,50 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Views</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="strategies/strategy_within_crossings_multiply.html" title="strategy::within::crossings_multiply">
+<link rel="next" href="views/box_view.html" title="box_view">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategies/strategy_within_crossings_multiply.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="views/box_view.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.reference.views"></a><a class="link" href="views.html" title="Views">Views</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="views/box_view.html">box_view</a></span></dt>
+<dt><span class="section"><a href="views/segment_view.html">segment_view</a></span></dt>
+<dt><span class="section"><a href="views/closeable_view.html">closeable_view</a></span></dt>
+<dt><span class="section"><a href="views/reversible_view.html">reversible_view</a></span></dt>
+<dt><span class="section"><a href="views/identity_view.html">identity_view</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="strategies/strategy_within_crossings_multiply.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="views/box_view.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/views/box_view.html b/libs/geometry/doc/html/geometry/reference/views/box_view.html
new file mode 100644
index 000000000..dfd7306cb
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/views/box_view.html
@@ -0,0 +1,262 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>box_view</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../views.html" title="Views">
+<link rel="prev" href="../views.html" title="Views">
+<link rel="next" href="segment_view.html" title="segment_view">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../views.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="segment_view.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.views.box_view"></a><a class="link" href="box_view.html" title="box_view">box_view</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp17025296"></a>
+Makes a box behave like a ring or a range.
+ </p>
+<h6>
+<a name="geometry.reference.views.box_view.h0"></a>
+ <span class="phrase"><a name="geometry.reference.views.box_view.description"></a></span><a class="link" href="box_view.html#geometry.reference.views.box_view.description">Description</a>
+ </h6>
+<p>
+ Adapts a box to the Boost.Range concept, enabling the user to iterating
+ box corners. The box_view is registered as a Ring Concept
+ </p>
+<h6>
+<a name="geometry.reference.views.box_view.h1"></a>
+ <span class="phrase"><a name="geometry.reference.views.box_view.model_of"></a></span><a class="link" href="box_view.html#geometry.reference.views.box_view.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_ring.html" title="Ring Concept">Ring Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.views.box_view.h2"></a>
+ <span class="phrase"><a name="geometry.reference.views.box_view.synopsis"></a></span><a class="link" href="box_view.html#geometry.reference.views.box_view.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Box</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">Clockwise</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">box_view</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">points_view</span><span class="special">&lt;</span> <span class="identifier">geometry</span><span class="special">::</span><span class="identifier">point_type</span><span class="special">&lt;</span> <span class="identifier">Box</span> <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="number">5</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.views.box_view.h3"></a>
+ <span class="phrase"><a name="geometry.reference.views.box_view.template_parameter_s_"></a></span><a class="link" href="box_view.html#geometry.reference.views.box_view.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Default
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Box
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ A type fulfilling the Box Concept
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ bool Clockwise
+ </p>
+ </td>
+<td>
+ <p>
+ true
+ </p>
+ </td>
+<td>
+ <p>
+ If true, walks in clockwise direction, otherwise it walks in
+ counterclockwise direction
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.views.box_view.h4"></a>
+ <span class="phrase"><a name="geometry.reference.views.box_view.constructor_s_"></a></span><a class="link" href="box_view.html#geometry.reference.views.box_view.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">box_view</span><span class="special">(</span><span class="identifier">Box</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">box</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor accepting the box to adapt.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Box const &amp;</strong></span>: <span class="emphasis"><em>box</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.views.box_view.h5"></a>
+ <span class="phrase"><a name="geometry.reference.views.box_view.header"></a></span><a class="link" href="box_view.html#geometry.reference.views.box_view.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">views</span><span class="special">/</span><span class="identifier">box_view</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.views.box_view.h6"></a>
+ <span class="phrase"><a name="geometry.reference.views.box_view.complexity"></a></span><a class="link" href="box_view.html#geometry.reference.views.box_view.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.views.box_view.h7"></a>
+ <span class="phrase"><a name="geometry.reference.views.box_view.example"></a></span><a class="link" href="box_view.html#geometry.reference.views.box_view.example">Example</a>
+ </h6>
+<p>
+ Shows usage of the Boost.Range compatible view on a box
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</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">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">box_type</span><span class="special">;</span>
+
+ <span class="comment">// Define the Boost.Range compatible type:</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">box_view</span><span class="special">&lt;</span><span class="identifier">box_type</span><span class="special">&gt;</span> <span class="identifier">box_view</span><span class="special">;</span>
+
+ <span class="identifier">box_type</span> <span class="identifier">box</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">assign_values</span><span class="special">(</span><span class="identifier">box</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">4</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span>
+
+ <span class="identifier">box_view</span> <span class="identifier">view</span><span class="special">(</span><span class="identifier">box</span><span class="special">);</span>
+
+ <span class="comment">// Iterating in clockwise direction over the points of this box</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">box_view</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">view</span><span class="special">);</span>
+ <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">end</span><span class="special">(</span><span class="identifier">view</span><span class="special">);</span> <span class="special">++</span><span class="identifier">it</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(*</span><span class="identifier">it</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="comment">// Note that a box_view is tagged as a ring, so supports area etc.</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">view</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">(0, 0) (0, 4) (4, 4) (4, 0) (0, 0)
+Area: 16
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../views.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="segment_view.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/views/closeable_view.html b/libs/geometry/doc/html/geometry/reference/views/closeable_view.html
new file mode 100644
index 000000000..426292e49
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/views/closeable_view.html
@@ -0,0 +1,130 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>closeable_view</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../views.html" title="Views">
+<link rel="prev" href="segment_view.html" title="segment_view">
+<link rel="next" href="reversible_view.html" title="reversible_view">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="segment_view.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="reversible_view.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.views.closeable_view"></a><a class="link" href="closeable_view.html" title="closeable_view">closeable_view</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp17222352"></a>
+View on a range, either closing it or leaving it as it is.
+ </p>
+<h6>
+<a name="geometry.reference.views.closeable_view.h0"></a>
+ <span class="phrase"><a name="geometry.reference.views.closeable_view.description"></a></span><a class="link" href="closeable_view.html#geometry.reference.views.closeable_view.description">Description</a>
+ </h6>
+<p>
+ The closeable_view is used internally by the library to handle all rings,
+ either closed or open, the same way. The default method is closed, all
+ algorithms process rings as if they are closed. Therefore, if they are
+ opened, a view is created which closes them. The closeable_view might be
+ used by library users, but its main purpose is internally.
+ </p>
+<h6>
+<a name="geometry.reference.views.closeable_view.h1"></a>
+ <span class="phrase"><a name="geometry.reference.views.closeable_view.synopsis"></a></span><a class="link" href="closeable_view.html#geometry.reference.views.closeable_view.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="identifier">closure_selector</span> <span class="identifier">Close</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">closeable_view</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.views.closeable_view.h2"></a>
+ <span class="phrase"><a name="geometry.reference.views.closeable_view.template_parameter_s_"></a></span><a class="link" href="closeable_view.html#geometry.reference.views.closeable_view.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Range
+ </p>
+ </td>
+<td>
+ <p>
+ Original range
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ closure_selector Close
+ </p>
+ </td>
+<td>
+ <p>
+ Specifies if it the range is closed, if so, nothing will happen.
+ If it is open, it will iterate the first point after the last
+ point.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.views.closeable_view.h3"></a>
+ <span class="phrase"><a name="geometry.reference.views.closeable_view.header"></a></span><a class="link" href="closeable_view.html#geometry.reference.views.closeable_view.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">views</span><span class="special">/</span><span class="identifier">closeable_view</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="segment_view.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="reversible_view.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/views/identity_view.html b/libs/geometry/doc/html/geometry/reference/views/identity_view.html
new file mode 100644
index 000000000..6c80dd0d0
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/views/identity_view.html
@@ -0,0 +1,235 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>identity_view</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../views.html" title="Views">
+<link rel="prev" href="reversible_view.html" title="reversible_view">
+<link rel="next" href="../../indexes.html" title="Indexes">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reversible_view.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="../../indexes.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.views.identity_view"></a><a class="link" href="identity_view.html" title="identity_view">identity_view</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp17262400"></a>
+View on a range, not modifying anything.
+ </p>
+<h6>
+<a name="geometry.reference.views.identity_view.h0"></a>
+ <span class="phrase"><a name="geometry.reference.views.identity_view.synopsis"></a></span><a class="link" href="identity_view.html#geometry.reference.views.identity_view.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">identity_view</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.views.identity_view.h1"></a>
+ <span class="phrase"><a name="geometry.reference.views.identity_view.template_parameter_s_"></a></span><a class="link" href="identity_view.html#geometry.reference.views.identity_view.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Range
+ </p>
+ </td>
+<td>
+ <p>
+ original range
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.views.identity_view.h2"></a>
+ <span class="phrase"><a name="geometry.reference.views.identity_view.constructor_s_"></a></span><a class="link" href="identity_view.html#geometry.reference.views.identity_view.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">identity_view</span><span class="special">(</span><span class="identifier">Range</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Range &amp;</strong></span>: <span class="emphasis"><em>r</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.views.identity_view.h3"></a>
+ <span class="phrase"><a name="geometry.reference.views.identity_view.member_function_s_"></a></span><a class="link" href="identity_view.html#geometry.reference.views.identity_view.member_function_s_">Member
+ Function(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">begin</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">const_iterator</span> <span class="identifier">end</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">begin</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">iterator</span> <span class="identifier">end</span><span class="special">()</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.views.identity_view.h4"></a>
+ <span class="phrase"><a name="geometry.reference.views.identity_view.header"></a></span><a class="link" href="identity_view.html#geometry.reference.views.identity_view.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">views</span><span class="special">/</span><span class="identifier">identity_view</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reversible_view.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="../../indexes.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/views/reversible_view.html b/libs/geometry/doc/html/geometry/reference/views/reversible_view.html
new file mode 100644
index 000000000..4841ee1af
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/views/reversible_view.html
@@ -0,0 +1,117 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>reversible_view</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../views.html" title="Views">
+<link rel="prev" href="closeable_view.html" title="closeable_view">
+<link rel="next" href="identity_view.html" title="identity_view">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="closeable_view.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="identity_view.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.views.reversible_view"></a><a class="link" href="reversible_view.html" title="reversible_view">reversible_view</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp17243488"></a>
+View on a range, reversing direction if necessary.
+ </p>
+<h6>
+<a name="geometry.reference.views.reversible_view.h0"></a>
+ <span class="phrase"><a name="geometry.reference.views.reversible_view.synopsis"></a></span><a class="link" href="reversible_view.html#geometry.reference.views.reversible_view.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">,</span> <span class="identifier">iterate_direction</span> <span class="identifier">Direction</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">reversible_view</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.views.reversible_view.h1"></a>
+ <span class="phrase"><a name="geometry.reference.views.reversible_view.template_parameter_s_"></a></span><a class="link" href="reversible_view.html#geometry.reference.views.reversible_view.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ typename Range
+ </p>
+ </td>
+<td>
+ <p>
+ original range
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ iterate_direction Direction
+ </p>
+ </td>
+<td>
+ <p>
+ direction of iteration
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.views.reversible_view.h2"></a>
+ <span class="phrase"><a name="geometry.reference.views.reversible_view.header"></a></span><a class="link" href="reversible_view.html#geometry.reference.views.reversible_view.header">Header</a>
+ </h6>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">views</span><span class="special">/</span><span class="identifier">reversible_view</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="closeable_view.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="identity_view.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/reference/views/segment_view.html b/libs/geometry/doc/html/geometry/reference/views/segment_view.html
new file mode 100644
index 000000000..4c7a9ef53
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/reference/views/segment_view.html
@@ -0,0 +1,235 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>segment_view</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../views.html" title="Views">
+<link rel="prev" href="box_view.html" title="box_view">
+<link rel="next" href="closeable_view.html" title="closeable_view">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="box_view.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="closeable_view.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.reference.views.segment_view"></a><a class="link" href="segment_view.html" title="segment_view">segment_view</a>
+</h4></div></div></div>
+<p>
+ <a class="indexterm" name="idp17117200"></a>
+Makes a segment behave like a linestring or a range.
+ </p>
+<h6>
+<a name="geometry.reference.views.segment_view.h0"></a>
+ <span class="phrase"><a name="geometry.reference.views.segment_view.description"></a></span><a class="link" href="segment_view.html#geometry.reference.views.segment_view.description">Description</a>
+ </h6>
+<p>
+ Adapts a segment to the Boost.Range concept, enabling the user to iterate
+ the two segment points. The segment_view is registered as a LineString
+ Concept
+ </p>
+<h6>
+<a name="geometry.reference.views.segment_view.h1"></a>
+ <span class="phrase"><a name="geometry.reference.views.segment_view.model_of"></a></span><a class="link" href="segment_view.html#geometry.reference.views.segment_view.model_of">Model
+ of</a>
+ </h6>
+<p>
+ <a class="link" href="../concepts/concept_linestring.html" title="Linestring Concept">LineString
+ Concept</a>
+ </p>
+<h6>
+<a name="geometry.reference.views.segment_view.h2"></a>
+ <span class="phrase"><a name="geometry.reference.views.segment_view.synopsis"></a></span><a class="link" href="segment_view.html#geometry.reference.views.segment_view.synopsis">Synopsis</a>
+ </h6>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Segment</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">segment_view</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">points_view</span><span class="special">&lt;</span> <span class="identifier">geometry</span><span class="special">::</span><span class="identifier">point_type</span><span class="special">&lt;</span> <span class="identifier">Segment</span> <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="number">2</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">// ...</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<h6>
+<a name="geometry.reference.views.segment_view.h3"></a>
+ <span class="phrase"><a name="geometry.reference.views.segment_view.template_parameter_s_"></a></span><a class="link" href="segment_view.html#geometry.reference.views.segment_view.template_parameter_s_">Template
+ parameter(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ typename Segment
+ </p>
+ </td>
+<td>
+ <p>
+ A type fulfilling the Segment Concept
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.views.segment_view.h4"></a>
+ <span class="phrase"><a name="geometry.reference.views.segment_view.constructor_s_"></a></span><a class="link" href="segment_view.html#geometry.reference.views.segment_view.constructor_s_">Constructor(s)</a>
+ </h6>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Parameters
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">segment_view</span><span class="special">(</span><span class="identifier">Segment</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">segment</span><span class="special">)</span></pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ Constructor accepting the segment to adapt.
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>Segment const &amp;</strong></span>: <span class="emphasis"><em>segment</em></span>:
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<h6>
+<a name="geometry.reference.views.segment_view.h5"></a>
+ <span class="phrase"><a name="geometry.reference.views.segment_view.header"></a></span><a class="link" href="segment_view.html#geometry.reference.views.segment_view.header">Header</a>
+ </h6>
+<p>
+ Either
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<p>
+ Or
+ </p>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">views</span><span class="special">/</span><span class="identifier">segment_view</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<h6>
+<a name="geometry.reference.views.segment_view.h6"></a>
+ <span class="phrase"><a name="geometry.reference.views.segment_view.complexity"></a></span><a class="link" href="segment_view.html#geometry.reference.views.segment_view.complexity">Complexity</a>
+ </h6>
+<p>
+ Compile time
+ </p>
+<h6>
+<a name="geometry.reference.views.segment_view.h7"></a>
+ <span class="phrase"><a name="geometry.reference.views.segment_view.example"></a></span><a class="link" href="segment_view.html#geometry.reference.views.segment_view.example">Example</a>
+ </h6>
+<p>
+ Shows usage of the Boost.Range compatible view on a box
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</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">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">segment</span>
+ <span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</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">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">segment_type</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">segment_view</span><span class="special">&lt;</span><span class="identifier">segment_type</span><span class="special">&gt;</span> <span class="identifier">segment_view</span><span class="special">;</span>
+
+ <span class="identifier">segment_type</span> <span class="identifier">segment</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">assign_values</span><span class="special">(</span><span class="identifier">segment</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">1</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span>
+
+ <span class="identifier">segment_view</span> <span class="identifier">view</span><span class="special">(</span><span class="identifier">segment</span><span class="special">);</span>
+
+ <span class="comment">// Iterating over the points of this segment</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">segment_view</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">view</span><span class="special">);</span>
+ <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">end</span><span class="special">(</span><span class="identifier">view</span><span class="special">);</span> <span class="special">++</span><span class="identifier">it</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">" "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(*</span><span class="identifier">it</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="comment">// Note that a segment_view is tagged as a linestring, so supports length etc.</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Length: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">length</span><span class="special">(</span><span class="identifier">view</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<p>
+ Output:
+ </p>
+<pre class="programlisting">(0, 0) (0, 4) (4, 4) (4, 0) (0, 0)
+Area: 16
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="box_view.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../views.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="closeable_view.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/release_notes.html b/libs/geometry/doc/html/geometry/release_notes.html
new file mode 100644
index 000000000..b70af6ef0
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/release_notes.html
@@ -0,0 +1,491 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Release Notes</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="examples/example_source_code__adapting_a_legacy_geometry_object_model.html" title="Example source code: Adapting a legacy geometry object model">
+<link rel="next" href="aboutdoc.html" title="About this Documentation">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="examples/example_source_code__adapting_a_legacy_geometry_object_model.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="aboutdoc.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.release_notes"></a><a class="link" href="release_notes.html" title="Release Notes">Release Notes</a>
+</h2></div></div></div>
+<h4>
+<a name="geometry.release_notes.h0"></a>
+ <span class="phrase"><a name="geometry.release_notes.boost_1_54"></a></span><a class="link" href="release_notes.html#geometry.release_notes.boost_1_54">Boost
+ 1.54</a>
+ </h4>
+<p>
+ <span class="bold"><strong>Additional functionality</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ added Spatial Index, developed for Boost.Geometry by Adam Wulkiewicz. The
+ spatial index was originally started by Federico J. Fernandez during the
+ Google Summer of Code 2008 program, mentored by Hartmut Kaiser.
+ </li>
+<li class="listitem">
+ added SVG-output, this was already in extensions for several years
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Documentation</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ small fixes of missing words
+ </li>
+<li class="listitem">
+ fixes in doc of template parameters (convex_hull, exterior_ring, return_buffer)
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Bugfixes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ collinear opposite segments did sometimes (in circles) have a robustness
+ issue, fixed
+ </li>
+<li class="listitem">
+ fixed insertion of false intersection point (found by buffer)
+ </li>
+<li class="listitem">
+ applied patch of Vladimir Petrovic for debugging traversals
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Solved tickets</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/7462" target="_top">7462</a>
+ degenerate union result for float, fixed
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/7465" target="_top">7465</a>
+ wrong construtors access type in scale_transformer class, fixed
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/7802" target="_top">7802</a>
+ cart_intersect.hpp unused parameter warnings, fixed
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/8254" target="_top">8254</a>
+ faulty intersection, fixed
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/8393" target="_top">8393</a>
+ polygon model doesn't adhere to stated Polygon concept rules, doc updated.
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/8403" target="_top">8403</a>
+ silenced compiler warning C4127: conditional expression is constant
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/8405" target="_top">8405</a>
+ silenced compiler warning C4189: '...' : local variable is initialized
+ but not referenced
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Internal changes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ Made several algorithms variant-aware (append, area, clear, convert, equals,
+ length, num_points)
+ </li></ul></div>
+<h4>
+<a name="geometry.release_notes.h1"></a>
+ <span class="phrase"><a name="geometry.release_notes.boost_1_53"></a></span><a class="link" href="release_notes.html#geometry.release_notes.boost_1_53">Boost
+ 1.53</a>
+ </h4>
+<p>
+ <span class="bold"><strong>Bugfixes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ avoid generating output polygons with interior rings below minimum size
+ (e.g. one or two points)
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">disjoint</span></code> for degenerate segments (patched
+ by Karsten Ahnert)
+ </li>
+<li class="listitem">
+ problem in <code class="computeroutput"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">difference</span></code> for missing handling tangency,
+ reported by H2
+ </li>
+<li class="listitem">
+ fixed <code class="computeroutput"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">for_each</span></code> for use with Lambda's
+ </li>
+<li class="listitem">
+ fixed <code class="computeroutput"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">comparable_distance</span></code> point-linestring
+ (and -range, -polygon)
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Additional functionality</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ combinations for <code class="computeroutput"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">disjoint</span></code>:
+ point/ring, point/polygon, point/multi_polygon
+ </li>
+<li class="listitem">
+ combinations for <code class="computeroutput"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">intersects</span></code>:
+ point/ring, point/polygon, point/multi_polygon
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Internal changes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ updates in specializations/not_implemented for various algorithms (as in
+ an earlier version, these changes are still going on; they take care for
+ simplified structs, better error reporting, and automatized documentation)
+ </li>
+<li class="listitem">
+ fixes in unit tests
+ </li>
+</ul></div>
+<h4>
+<a name="geometry.release_notes.h2"></a>
+ <span class="phrase"><a name="geometry.release_notes.boost_1_51"></a></span><a class="link" href="release_notes.html#geometry.release_notes.boost_1_51">Boost
+ 1.51</a>
+ </h4>
+<p>
+ <span class="bold"><strong>Breaking changes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ points accessed through a pointer (e.g. in a linestring) should now be
+ specialized without the pointer. In previous versions a type <code class="computeroutput"><span class="identifier">my_point</span></code> used like <code class="computeroutput"><span class="identifier">linestring</span><span class="special">&lt;</span><span class="identifier">my_point</span><span class="special">*&gt;</span></code> had to be specalized like: <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">my_point</span><span class="special">*&gt;</span></code>. Now the library itself removes the
+ pointer before calling the traits class, so now it should be like: <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">my_point</span><span class="special">&gt;</span></code>
+ </li></ul></div>
+<p>
+ <span class="bold"><strong>Bugfixes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ intersection was sometimes wrong for integer points, fixed
+ </li>
+<li class="listitem">
+ documentation, order of parameters in simplify was wrong, fixed
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Solved tickets</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/7030" target="_top">7030</a>
+ spherical distance, fixed (by patch of Karsten Ahnert)
+ </li></ul></div>
+<h4>
+<a name="geometry.release_notes.h3"></a>
+ <span class="phrase"><a name="geometry.release_notes.boost_1_50"></a></span><a class="link" href="release_notes.html#geometry.release_notes.boost_1_50">Boost
+ 1.50</a>
+ </h4>
+<p>
+ <span class="bold"><strong>Bugfixes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ the return type of comparable projected point strategy for integer points
+ was wrong (integer), fixed
+ </li>
+<li class="listitem">
+ several robustness issues in intersection of segments and polygons, fixed
+ </li>
+<li class="listitem">
+ invalid intersection output is filtered out
+ </li>
+<li class="listitem">
+ disjoint for multi_polygon's might incorrectly return true, fixed
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Solved tickets</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/6585" target="_top">6585</a>
+ patch for alternative syntax multipoint, applied
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/6584" target="_top">6584</a>
+ patch for bug in distance, applied
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/5730" target="_top">5730</a>
+ same issue as 6584, fixed
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/6166" target="_top">6166</a>
+ patch for missing transformation, applied
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/6696" target="_top">6696</a>
+ invalid intersection output, was (by chance) already fixed in Trunk before
+ reported
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Additional functionality</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ added algorithm "touches" (OGC SF compliant) for *polygon/*polygon
+ </li></ul></div>
+<h4>
+<a name="geometry.release_notes.h4"></a>
+ <span class="phrase"><a name="geometry.release_notes.boost_1_49"></a></span><a class="link" href="release_notes.html#geometry.release_notes.boost_1_49">Boost
+ 1.49</a>
+ </h4>
+<p>
+ <span class="bold"><strong>Breaking changes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ point_xy was accidentally included in one of the headerfiles. If the point_xy
+ class is used, it should be included explicitly now.
+ </li></ul></div>
+<p>
+ <span class="bold"><strong>Bugfixes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ bugfix: distance for multi-geometries ignored specified distance strategy.
+ Fixed
+ </li>
+<li class="listitem">
+ bugfix: difference for polygon/multi_polygon (reported 2011/10/24 on GGL-list)
+ </li>
+<li class="listitem">
+ bugfix: raise exception for calculation of distances of multi-geometrie(s)
+ where one of them is empty
+ </li>
+<li class="listitem">
+ bugfix: multi DSV did not correctly use settings, fixed
+ </li>
+<li class="listitem">
+ bugfix: self-intersections could sometimes be missed (introduced in 1.48),
+ fixed
+ </li>
+<li class="listitem">
+ bugfix: convex hull crashed on empty range (e.g. empty multi point), fixed
+ </li>
+<li class="listitem">
+ bugfix: area/centroid/side/intersection/distance did not work for "int"
+ type filled with large (but not overflowing) integers. Fixed.
+ </li>
+<li class="listitem">
+ bugfix: disjoint/intersect did not work for degenerate linestrings. Fixed.
+ </li>
+<li class="listitem">
+ bugfix: covered_by did not compile for a ring. Fixed.
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Solved tickets</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/6019" target="_top">6019</a>
+ convex_hull / area, fixed.
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/6021" target="_top">6021</a>
+ convex_hull / append (multipoint), fixed.
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/6028" target="_top">6028</a>
+ Documentation: closure, fixed.
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/6178" target="_top">6178</a>
+ Missing headerfile, fixed.
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Additional functionality</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ support for line/polygon intersections and differences
+ </li>
+<li class="listitem">
+ support for convert of segment/box of different point types
+ </li>
+<li class="listitem">
+ support for append for multi point
+ </li>
+<li class="listitem">
+ the scalar function distance now throws an empty_input_exception on empty
+ input
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Documentation</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ updated support status in several algorithms
+ </li>
+<li class="listitem">
+ updated conformance to OGC or std
+ </li>
+<li class="listitem">
+ other updates and fixes
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Internal changes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ updates in specializations/not_implemented for distance/convert/assign/area/with/covered_by
+ </li>
+<li class="listitem">
+ move of wkt/dsv to io folder, making domains redundant
+ </li>
+<li class="listitem">
+ warnings: strategy concepts assigned to zero to avoid clang warnings (patched
+ by Vishnu)
+ </li>
+<li class="listitem">
+ warnings: there were several unused parameters, for which gcc/clang warned
+ (patched by Christophe)
+ </li>
+</ul></div>
+<h4>
+<a name="geometry.release_notes.h5"></a>
+ <span class="phrase"><a name="geometry.release_notes.boost_1_48"></a></span><a class="link" href="release_notes.html#geometry.release_notes.boost_1_48">Boost
+ 1.48</a>
+ </h4>
+<p>
+ <span class="bold"><strong>Bugfixes</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Robustness issue, in some circumstances the union failed to output. Fixed.
+ </li>
+<li class="listitem">
+ Robustness issue, in some circumstances the calculated intersection point
+ was outside the segment. Fixed.
+ </li>
+<li class="listitem">
+ Concept issue, cartesian intersect didn't understand segments other than
+ the provided one. Fixed.
+ </li>
+<li class="listitem">
+ Sometimes self-intersections in linestrings were missed. Fixed.
+ </li>
+<li class="listitem">
+ The fusion coordinate system was not registered correctly. Fixed.
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Solved tickets</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/5726" target="_top">5726</a>
+ Segment intersection algorithm still assumes 'first', 'second' members
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/5744" target="_top">5744</a>
+ Mistake in fusion adapt example
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/5748" target="_top">5748</a>
+ Needed to include &lt;boost/foreach.hpp&gt;
+ </li>
+<li class="listitem">
+ <a href="https://svn.boost.org/trac/boost/ticket/5954" target="_top">5954</a>
+ distance_pythagoras skips sqrt() step
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Improvements on algorithms</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Checking self-intersections is now not done automatically, this can blast
+ performance.
+ </li>
+<li class="listitem">
+ Besides that, checking self-intersections is made faster.
+ </li>
+<li class="listitem">
+ Intersections now avoid outputting duplicate points. So they output the
+ minimal set.
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Additional algorithms</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ covered_by: within is defined as "within, not on boundary". covered_by
+ is "within or on boundary"
+ </li></ul></div>
+<p>
+ <span class="bold"><strong>Additional functionality</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ within: strategies can now be specified for within&lt;point, box&gt; and
+ within&lt;box, box&gt;
+ </li>
+<li class="listitem">
+ convert: a much broader range of conversions is supported
+ </li>
+<li class="listitem">
+ assign: idem, (currently partly) synonym for convert (but reversed arguments)
+ </li>
+</ul></div>
+<p>
+ <span class="bold"><strong>Additional coordinate types</strong></span>
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ Basic (limited) support for Boost.Rational
+ </li></ul></div>
+<h4>
+<a name="geometry.release_notes.h6"></a>
+ <span class="phrase"><a name="geometry.release_notes.boost_1_47"></a></span><a class="link" href="release_notes.html#geometry.release_notes.boost_1_47">Boost
+ 1.47</a>
+ </h4>
+<p>
+ Original release
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="examples/example_source_code__adapting_a_legacy_geometry_object_model.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="aboutdoc.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes.html b/libs/geometry/doc/html/geometry/spatial_indexes.html
new file mode 100644
index 000000000..7b1bb9c90
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes.html
@@ -0,0 +1,68 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Spatial Indexes</title>
+<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="prev" href="quickstart.html" title="Quick Start">
+<link rel="next" href="spatial_indexes/introduction.html" title="Introduction">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="quickstart.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="spatial_indexes/introduction.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="geometry.spatial_indexes"></a><a class="link" href="spatial_indexes.html" title="Spatial Indexes">Spatial Indexes</a>
+</h2></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="spatial_indexes/introduction.html">Introduction</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/rtree_quickstart.html">Quick Start</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/creation_and_modification.html">Creation
+ and Modification</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/queries.html">Queries</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/rtree_examples.html">Examples</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="spatial_indexes/rtree_examples/quick_start.html">Quick
+ start</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/rtree_examples/index_of_polygons_stored_in_vector.html">Index
+ of polygons stored in vector</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/rtree_examples/index_of_shared_pointers_to_polygons.html">Index
+ of shared pointers to polygons</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/rtree_examples/index_of_iterators_of_a_map_storing_variant_geometries.html">Index
+ of iterators of a map storing variant geometries</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/rtree_examples/specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html">Specializing
+ index::indexable function object - storing shared pointers in the rtree</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/rtree_examples/using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html">Using
+ IndexableGetter function object - storing indexes of external container's
+ elements</a></span></dt>
+<dt><span class="section"><a href="spatial_indexes/rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html">Index
+ stored in shared memory using Boost.Interprocess</a></span></dt>
+</dl></dd>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="quickstart.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="spatial_indexes/introduction.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/creation_and_modification.html b/libs/geometry/doc/html/geometry/spatial_indexes/creation_and_modification.html
new file mode 100644
index 000000000..84c8270ae
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/creation_and_modification.html
@@ -0,0 +1,353 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Creation and Modification</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../spatial_indexes.html" title="Spatial Indexes">
+<link rel="prev" href="rtree_quickstart.html" title="Quick Start">
+<link rel="next" href="queries.html" title="Queries">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rtree_quickstart.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="queries.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.spatial_indexes.creation_and_modification"></a><a class="link" href="creation_and_modification.html" title="Creation and Modification">Creation
+ and Modification</a>
+</h3></div></div></div>
+<h5>
+<a name="geometry.spatial_indexes.creation_and_modification.h0"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.creation_and_modification.template_parameters"></a></span><a class="link" href="creation_and_modification.html#geometry.spatial_indexes.creation_and_modification.template_parameters">Template
+ parameters</a>
+ </h5>
+<p>
+ R-tree has 5 parameters but only 2 are required:
+ </p>
+<pre class="programlisting"><span class="identifier">rtree</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">,</span>
+ <span class="identifier">Parameters</span><span class="special">,</span>
+ <span class="identifier">IndexableGetter</span> <span class="special">=</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">indexable</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">&gt;,</span>
+ <span class="identifier">EqualTo</span> <span class="special">=</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">&gt;,</span>
+ <span class="identifier">Allocator</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+</pre>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <code class="computeroutput">Value</code> - type of object which will be stored in the container,
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">Parameters</span></code> - parameters
+ type, inserting/splitting algorithm,
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">IndexableGetter</span></code> - function
+ object translating <code class="computeroutput">Value</code> to <code class="computeroutput">Indexable</code> (<code class="computeroutput">Point</code>
+ or <code class="computeroutput">Box</code>) which R-tree can handle,
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">EqualTo</span></code> - function object
+ comparing <code class="computeroutput">Value</code>s,
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">Allocator</span></code> - <code class="computeroutput"><span class="identifier">Value</span></code>s allocator, all allocators needed
+ by the container are created from it.
+ </li>
+</ul></div>
+<h5>
+<a name="geometry.spatial_indexes.creation_and_modification.h1"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.creation_and_modification.values_and_indexables"></a></span><a class="link" href="creation_and_modification.html#geometry.spatial_indexes.creation_and_modification.values_and_indexables">Values
+ and Indexables</a>
+ </h5>
+<p>
+ R-tree may store <code class="computeroutput">Value</code>s of any type as long as passed function
+ objects know how to interpret those <code class="computeroutput">Value</code>s, that is extract
+ an <code class="computeroutput">Indexable</code> that the R-tree can handle and compare <code class="computeroutput">Value</code>s.
+ </p>
+<p>
+ By default function objects <code class="computeroutput"><span class="identifier">index</span><span class="special">::</span><span class="identifier">indexable</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">&gt;</span></code> and <code class="computeroutput"><span class="identifier">index</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">&gt;</span></code> are defined for some typically used
+ <code class="computeroutput">Value</code> types which may be stored without defining any additional
+ classes. By default the rtree may store pure <code class="computeroutput">Indexable</code>s, pairs
+ and tuples. In the case of those two collection types, the <code class="computeroutput">Indexable</code>
+ must be the first stored type.
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <code class="computeroutput">Indexable <span class="special">=</span> Point <span class="special">|</span>
+ Box</code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput">Value <span class="special">=</span> <span class="identifier">Indexable</span>
+ <span class="special">|</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span>Indexable<span class="special">,</span>
+ <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="special">|</span> <span class="identifier">tuple</span><span class="special">&lt;</span>Indexable<span class="special">,</span>
+ <span class="special">...&gt;</span></code>
+ </li>
+</ul></div>
+<p>
+ By default <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;...&gt;</span></code>
+ is supported on all compilers. If the compiler supports C++11 tuples and
+ variadic templates then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;...&gt;</span></code> may be used "out of the box"
+ as well.
+ </p>
+<p>
+ Examples of default <code class="computeroutput">Value</code> types:
+ </p>
+<pre class="programlisting"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;...&gt;</span>
+<span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;...&gt;</span>
+<span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;...&gt;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;...&gt;,</span> <span class="keyword">unsigned</span><span class="special">&gt;</span>
+<span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;...&gt;,</span> <span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;</span>
+</pre>
+<p>
+ The predefined <code class="computeroutput"><span class="identifier">index</span><span class="special">::</span><span class="identifier">indexable</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">&gt;</span></code>
+ returns const reference to the <code class="computeroutput">Indexable</code> stored in the <code class="computeroutput">Value</code>.
+ </p>
+<div class="important"><table border="0" summary="Important">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../../doc/src/images/important.png"></td>
+<th align="left">Important</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ The translation is done quite frequently inside the container - each time
+ the rtree needs it.
+ </p></td></tr>
+</table></div>
+<p>
+ The predefined <code class="computeroutput"><span class="identifier">index</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">&gt;</span></code>:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ for <code class="computeroutput">Point</code> and <code class="computeroutput">Box</code> - compares <code class="computeroutput">Value</code>s
+ with geometry::equals().
+ </li>
+<li class="listitem">
+ for <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;...&gt;</span></code>
+ - compares both components of the <code class="computeroutput">Value</code>. The first value
+ stored in the pair is compared before the second one. If the value stored
+ in the pair is a Geometry, <code class="computeroutput"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">equals</span><span class="special">()</span></code> is used. For other types it uses <code class="computeroutput"><span class="keyword">operator</span><span class="special">==()</span></code>.
+ </li>
+<li class="listitem">
+ for <code class="computeroutput"><span class="identifier">tuple</span><span class="special">&lt;...&gt;</span></code>
+ - compares all components of the <code class="computeroutput">Value</code>. If the component
+ is a <code class="computeroutput"><span class="identifier">Geometry</span></code>, <code class="computeroutput"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">equals</span><span class="special">()</span></code>
+ function is used. For other types it uses <code class="computeroutput"><span class="keyword">operator</span><span class="special">==()</span></code>.
+ </li>
+</ul></div>
+<h5>
+<a name="geometry.spatial_indexes.creation_and_modification.h2"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.creation_and_modification.balancing_algorithms_compile_time_parameters"></a></span><a class="link" href="creation_and_modification.html#geometry.spatial_indexes.creation_and_modification.balancing_algorithms_compile_time_parameters">Balancing
+ algorithms compile-time parameters</a>
+ </h5>
+<p>
+ <code class="computeroutput">Value</code>s may be inserted to the R-tree in many various ways. Final
+ internal structure of the R-tree depends on algorithms used in the insertion
+ process and parameters. The most important is nodes' balancing algorithm.
+ Currently, three well-known types of R-trees may be created.
+ </p>
+<p>
+ Linear - classic R-tree using balancing algorithm of linear complexity
+ </p>
+<pre class="programlisting"><span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">linear</span><span class="special">&lt;</span><span class="number">16</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rt</span><span class="special">;</span>
+</pre>
+<p>
+ Quadratic - classic R-tree using balancing algorithm of quadratic complexity
+ </p>
+<pre class="programlisting"><span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">quadratic</span><span class="special">&lt;</span><span class="number">16</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rt</span><span class="special">;</span>
+</pre>
+<p>
+ R*-tree - balancing algorithm minimizing nodes' overlap with forced reinsertions
+ </p>
+<pre class="programlisting"><span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">rstar</span><span class="special">&lt;</span><span class="number">16</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rt</span><span class="special">;</span>
+</pre>
+<h5>
+<a name="geometry.spatial_indexes.creation_and_modification.h3"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.creation_and_modification.balancing_algorithms_run_time_parameters"></a></span><a class="link" href="creation_and_modification.html#geometry.spatial_indexes.creation_and_modification.balancing_algorithms_run_time_parameters">Balancing
+ algorithms run-time parameters</a>
+ </h5>
+<p>
+ Balancing algorithm parameters may be passed to the R-tree in run-time. To
+ use run-time versions of the R-tree one may pass parameters which names start
+ with <code class="computeroutput"><span class="identifier">dynamic_</span></code>.
+ </p>
+<pre class="programlisting"><span class="comment">// linear</span>
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span>Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">dynamic_linear</span><span class="special">&gt;</span> <span class="identifier">rt</span><span class="special">(</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">dynamic_linear</span><span class="special">(</span><span class="number">16</span><span class="special">));</span>
+
+<span class="comment">// quadratic</span>
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span>Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">dynamic_quadratic</span><span class="special">&gt;</span> <span class="identifier">rt</span><span class="special">(</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">dynamic_quadratic</span><span class="special">(</span><span class="number">16</span><span class="special">));</span>
+
+<span class="comment">// rstar</span>
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span>Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">dynamic_rstar</span><span class="special">&gt;</span> <span class="identifier">rt</span><span class="special">(</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">dynamic_rstar</span><span class="special">(</span><span class="number">16</span><span class="special">));</span>
+</pre>
+<p>
+ The obvious drawback is a slightly slower R-tree.
+ </p>
+<h5>
+<a name="geometry.spatial_indexes.creation_and_modification.h4"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.creation_and_modification.non_default_parameters"></a></span><a class="link" href="creation_and_modification.html#geometry.spatial_indexes.creation_and_modification.non_default_parameters">Non-default
+ parameters</a>
+ </h5>
+<p>
+ Non-default R-tree parameters are described in the reference.
+ </p>
+<h5>
+<a name="geometry.spatial_indexes.creation_and_modification.h5"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.creation_and_modification.copying__moving_and_swapping"></a></span><a class="link" href="creation_and_modification.html#geometry.spatial_indexes.creation_and_modification.copying__moving_and_swapping">Copying,
+ moving and swapping</a>
+ </h5>
+<p>
+ The R-tree is copyable and movable container. Move semantics is implemented
+ using Boost.Move library so it's possible to move the container on a compilers
+ without rvalue references support.
+ </p>
+<pre class="programlisting"><span class="comment">// default constructor</span>
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">rstar</span><span class="special">&lt;</span><span class="number">8</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rt1</span><span class="special">;</span>
+
+<span class="comment">// copy constructor</span>
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">rstar</span><span class="special">&lt;</span><span class="number">8</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rt2</span><span class="special">(</span><span class="identifier">r1</span><span class="special">);</span>
+
+<span class="comment">// copy assignment</span>
+<span class="identifier">rt2</span> <span class="special">=</span> <span class="identifier">r1</span><span class="special">;</span>
+
+<span class="comment">// move constructor</span>
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">rstar</span><span class="special">&lt;</span><span class="number">8</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rt3</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">rt1</span><span class="special">));</span>
+
+<span class="comment">// move assignment</span>
+<span class="identifier">rt3</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">rt2</span><span class="special">);</span>
+
+<span class="comment">// swap</span>
+<span class="identifier">rt3</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">rt2</span><span class="special">);</span>
+</pre>
+<h5>
+<a name="geometry.spatial_indexes.creation_and_modification.h6"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.creation_and_modification.inserting_and_removing_values"></a></span><a class="link" href="creation_and_modification.html#geometry.spatial_indexes.creation_and_modification.inserting_and_removing_values">Inserting
+ and removing Values</a>
+ </h5>
+<p>
+ The following code creates an R-tree using quadratic balancing algorithm.
+ </p>
+<pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">Box</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> Value<span class="special">;</span>
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">quadratic</span><span class="special">&lt;</span><span class="number">16</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rt</span><span class="special">;</span>
+</pre>
+<p>
+ To insert or remove a `Value' by method call one may use the following code.
+ </p>
+<pre class="programlisting">Value <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span>Box<span class="special">(...),</span> <span class="number">0</span><span class="special">);</span>
+
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span>
+
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">remove</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span>
+</pre>
+<p>
+ To insert or remove a `Value' by function call one may use the following
+ code.
+ </p>
+<pre class="programlisting">Value <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span>Box<span class="special">(...),</span> <span class="number">0</span><span class="special">);</span>
+
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">rt</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span>
+
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">remove</span><span class="special">(</span><span class="identifier">rt</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span>
+</pre>
+<p>
+ Typically you will perform those operations in a loop in order to e.g. insert
+ some number of <code class="computeroutput">Value</code>s corresponding to geometrical objects (e.g.
+ <code class="computeroutput"><span class="identifier">Polygons</span></code>) stored in another
+ container.
+ </p>
+<h5>
+<a name="geometry.spatial_indexes.creation_and_modification.h7"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.creation_and_modification.additional_interface"></a></span><a class="link" href="creation_and_modification.html#geometry.spatial_indexes.creation_and_modification.additional_interface">Additional
+ interface</a>
+ </h5>
+<p>
+ The R-tree allows creation, inserting and removing of Values from a range.
+ The range may be passed as [first, last) Iterators pair or as a Range.
+ </p>
+<pre class="programlisting"><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">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">Box</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> Value<span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">linear</span><span class="special">&lt;</span><span class="number">32</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">RTree</span><span class="special">;</span>
+
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>Value<span class="special">&gt;</span> <span class="identifier">values</span><span class="special">;</span>
+<span class="comment">/* vector filling code, here */</span>
+
+<span class="comment">// create R-tree with default constructor and insert values with insert(Value const&amp;)</span>
+<span class="identifier">RTree</span> <span class="identifier">rt1</span><span class="special">;</span>
+<span class="identifier">BOOST_FOREACH</span><span class="special">(</span>Value <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">values</span><span class="special">)</span>
+ <span class="identifier">rt1</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span>
+
+<span class="comment">// create R-tree with default constructor and insert values with insert(Iter, Iter)</span>
+<span class="identifier">RTree</span> <span class="identifier">rt2</span><span class="special">;</span>
+<span class="identifier">rt2</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">values</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">values</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span>
+
+<span class="comment">// create R-tree with default constructor and insert values with insert(Range)</span>
+<span class="identifier">RTree</span> <span class="identifier">rt3</span><span class="special">;</span>
+<span class="identifier">rt3</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">values</span><span class="special">);</span>
+
+<span class="comment">// create R-tree with constructor taking Iterators</span>
+<span class="identifier">RTree</span> <span class="identifier">rt4</span><span class="special">(</span><span class="identifier">values</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">values</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span>
+
+<span class="comment">// create R-tree with constructor taking Range</span>
+<span class="identifier">RTree</span> <span class="identifier">rt5</span><span class="special">(</span><span class="identifier">values</span><span class="special">);</span>
+
+<span class="comment">// remove values with remove(Value const&amp;)</span>
+<span class="identifier">BOOST_FOREACH</span><span class="special">(</span>Value <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">values</span><span class="special">)</span>
+ <span class="identifier">rt1</span><span class="special">.</span><span class="identifier">remove</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span>
+
+<span class="comment">// remove values with remove(Iter, Iter)</span>
+<span class="identifier">rt2</span><span class="special">.</span><span class="identifier">remove</span><span class="special">(</span><span class="identifier">values</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">values</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span>
+
+<span class="comment">// remove values with remove(Range)</span>
+<span class="identifier">rt3</span><span class="special">.</span><span class="identifier">remove</span><span class="special">(</span><span class="identifier">values</span><span class="special">);</span>
+</pre>
+<h5>
+<a name="geometry.spatial_indexes.creation_and_modification.h8"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.creation_and_modification.insert_iterator"></a></span><a class="link" href="creation_and_modification.html#geometry.spatial_indexes.creation_and_modification.insert_iterator">Insert
+ iterator</a>
+ </h5>
+<p>
+ There are functions like <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">()</span></code>, or R-tree's queries that copy values to
+ an output iterator. In order to insert values to a container in this kind
+ of function insert iterators may be used. Geometry.Index provide its own
+ <code class="computeroutput"><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">insert_iterator</span><span class="special">&lt;</span><span class="identifier">Container</span><span class="special">&gt;</span></code>
+ which is generated by <code class="computeroutput"><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">inserter</span><span class="special">()</span></code> function.
+ </p>
+<pre class="programlisting"><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">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">Box</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> Value<span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">linear</span><span class="special">&lt;</span><span class="number">32</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">RTree</span><span class="special">;</span>
+
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>Value<span class="special">&gt;</span> <span class="identifier">values</span><span class="special">;</span>
+<span class="comment">/* vector filling code, here */</span>
+
+<span class="comment">// create R-tree and insert values from the vector</span>
+<span class="identifier">RTree</span> <span class="identifier">rt1</span><span class="special">;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">values</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">values</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">inserter</span><span class="special">(</span><span class="identifier">rt1</span><span class="special">));</span>
+
+<span class="comment">// create R-tree and insert values returned by a query</span>
+<span class="identifier">RTree</span> <span class="identifier">rt2</span><span class="special">;</span>
+<span class="identifier">rt1</span><span class="special">.</span><span class="identifier">spatial_query</span><span class="special">(</span><span class="identifier">Box</span><span class="special">(/*...*/),</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">inserter</span><span class="special">(</span><span class="identifier">rt2</span><span class="special">));</span>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rtree_quickstart.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="queries.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/introduction.html b/libs/geometry/doc/html/geometry/spatial_indexes/introduction.html
new file mode 100644
index 000000000..e16d77e3d
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/introduction.html
@@ -0,0 +1,416 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Introduction</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../spatial_indexes.html" title="Spatial Indexes">
+<link rel="prev" href="../spatial_indexes.html" title="Spatial Indexes">
+<link rel="next" href="rtree_quickstart.html" title="Quick Start">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../spatial_indexes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="rtree_quickstart.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.spatial_indexes.introduction"></a><a class="link" href="introduction.html" title="Introduction">Introduction</a>
+</h3></div></div></div>
+<p>
+ The Boost.Geometry.Index is intended to gather data structures called spatial
+ indexes which may be used to accelerate searching for objects in space. In
+ general, spatial indexes stores geometric objects' representations and allows
+ searching for objects occupying some space or close to some point in space.
+ </p>
+<p>
+ Currently, only one spatial index is implemented - R-tree.
+ </p>
+<h5>
+<a name="geometry.spatial_indexes.introduction.h0"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.introduction.r_tree"></a></span><a class="link" href="introduction.html#geometry.spatial_indexes.introduction.r_tree">R-tree</a>
+ </h5>
+<p>
+ R-tree is a tree data structure used for spatial searching. It was proposed
+ by Antonin Guttman in 1984 <a href="#ftn.geometry.spatial_indexes.introduction.f0" class="footnote" name="geometry.spatial_indexes.introduction.f0"><sup class="footnote">[1]</sup></a> as an expansion of B-tree for multi-dimensional data. It may
+ be used to store points or volumetric data in order to perform a spatial
+ query. This query may for example return objects that are inside some area
+ or are close to some point in space <a href="#ftn.geometry.spatial_indexes.introduction.f1" class="footnote" name="geometry.spatial_indexes.introduction.f1"><sup class="footnote">[2]</sup></a>. It's possible to insert new objects or to remove the ones already
+ stored.
+ </p>
+<p>
+ The R-tree structure is presented on the image below. Each R-tree's node
+ store a box describing the space occupied by its children nodes. At the bottom
+ of the structure, there are leaf-nodes which contains values (geometric objects
+ representations).
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/rstar.png" alt="rstar"></span>
+ </p>
+<p>
+ The R-tree is a self-balanced data structure. The key part of balancing algorithm
+ is node splitting algorithm <a href="#ftn.geometry.spatial_indexes.introduction.f2" class="footnote" name="geometry.spatial_indexes.introduction.f2"><sup class="footnote">[3]</sup></a> <a href="#ftn.geometry.spatial_indexes.introduction.f3" class="footnote" name="geometry.spatial_indexes.introduction.f3"><sup class="footnote">[4]</sup></a>. Each algorithm produces different splits so the internal structure
+ of a tree may be different for each one of them. In general, more complex
+ algorithms analyses elements better and produces less overlapping nodes.
+ In the searching process less nodes must be traversed in order to find desired
+ objects. On the other hand more complex analysis takes more time. In general
+ faster inserting will result in slower searching and vice versa. The performance
+ of the R-tree depends on balancing algorithm, parameters and data inserted
+ into the container.
+ </p>
+<p>
+ Additionally there are also algorithms creating R-tree containing some, number
+ of objects. This technique is called bulk loading and is done by use of packing
+ algorithm <a href="#ftn.geometry.spatial_indexes.introduction.f4" class="footnote" name="geometry.spatial_indexes.introduction.f4"><sup class="footnote">[5]</sup></a> <a href="#ftn.geometry.spatial_indexes.introduction.f5" class="footnote" name="geometry.spatial_indexes.introduction.f5"><sup class="footnote">[6]</sup></a>. This method is faster and results in R-trees with better internal
+ structure. This means that the query performance is increased.
+ </p>
+<p>
+ The examples of structures of trees created by use of different algorithms
+ and exemplary operations times are presented below.
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ Linear algorithm
+ </p>
+ </th>
+<th>
+ <p>
+ Quadratic algorithm
+ </p>
+ </th>
+<th>
+ <p>
+ R*-tree
+ </p>
+ </th>
+<th>
+ <p>
+ Packing algorithm (trunk)
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>Example structure</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/linear.png" alt="linear"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/quadratic.png" alt="quadratic"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/rstar.png" alt="rstar"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/bulk.png" alt="bulk"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>1M Values inserts</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.76s
+ </p>
+ </td>
+<td>
+ <p>
+ 2.47s
+ </p>
+ </td>
+<td>
+ <p>
+ 6.19s
+ </p>
+ </td>
+<td>
+ <p>
+ 1.67s
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>100k spatial queries</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ 2.21s
+ </p>
+ </td>
+<td>
+ <p>
+ 0.51s
+ </p>
+ </td>
+<td>
+ <p>
+ 0.12s
+ </p>
+ </td>
+<td>
+ <p>
+ 0.07s
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>100k knn queries</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ 6.37s
+ </p>
+ </td>
+<td>
+ <p>
+ 2.09s
+ </p>
+ </td>
+<td>
+ <p>
+ 0.64s
+ </p>
+ </td>
+<td>
+ <p>
+ 0.52
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ The performance of the R-tree for different values of Max parameter and Min=0.5*Max
+ is presented in the table below. The configuration of the machine used for
+ testing is: <span class="emphasis"><em>Intel(R) Core(TM) i7 870 @ 2.93GHz, 8GB RAM, MS Windows
+ 7 x64</em></span>. In the two upper figures you can see the performance of
+ the R-tree storing random, relatively small, non-overlapping, 2d boxes. In
+ the lower ones, the performance of the R-tree also storing random, 2d boxes,
+ but this time quite big and possibly overlapping. As you can see, the R-tree
+ performance is different in both cases.
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ </th>
+<th>
+ <p>
+ building
+ </p>
+ </th>
+<th>
+ <p>
+ querying
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>non overlapping</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/build_non_ovl.png" alt="build_non_ovl"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/query_non_ovl.png" alt="query_non_ovl"></span>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="bold"><strong>overlapping</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/build_ovl.png" alt="build_ovl"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/query_ovl.png" alt="query_ovl"></span>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<h5>
+<a name="geometry.spatial_indexes.introduction.h1"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.introduction.implementation_details"></a></span><a class="link" href="introduction.html#geometry.spatial_indexes.introduction.implementation_details">Implementation
+ details</a>
+ </h5>
+<p>
+ Key features of this implementation of the R-tree are:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ capable to store arbitrary Value type,
+ </li>
+<li class="listitem">
+ three different balancing algorithms - linear, quadratic or rstar,
+ </li>
+<li class="listitem">
+ parameters (including maximal and minimal number of elements) may be
+ passed as compile- or run-time parameters, in compile-time version nodes
+ elements are stored in static-size containers,
+ </li>
+<li class="listitem">
+ advanced queries - e.g. search for 5 nearest Values to some point and
+ intersecting some Geometry but not within the other one,
+ </li>
+<li class="listitem">
+ C++11 conformant: move semantics, stateful allocators,
+ </li>
+<li class="listitem">
+ capable to store Value type with no default constructor,
+ </li>
+<li class="listitem">
+ in-memory storage (shared memory by use of Boost.Interprocess allocator).
+ </li>
+</ul></div>
+<h5>
+<a name="geometry.spatial_indexes.introduction.h2"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.introduction.planned_and_experimental_features"></a></span><a class="link" href="introduction.html#geometry.spatial_indexes.introduction.planned_and_experimental_features">Planned
+ and experimental features</a>
+ </h5>
+<p>
+ Below you can find features that will (or probably will) be added in the
+ future releases:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ rstar optimization (planned for release in Boost 1.55),
+ </li>
+<li class="listitem">
+ bulk loading (planned for release in Boost 1.55),
+ </li>
+<li class="listitem">
+ iterative queries - query iterators / type-erased query iterators (experimental),
+ </li>
+<li class="listitem">
+ path/ray query predicate - search for Values along Segment or LineString,
+ closest to the starting point (experimental),
+ </li>
+<li class="listitem">
+ persistent storage.
+ </li>
+</ul></div>
+<h5>
+<a name="geometry.spatial_indexes.introduction.h3"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.introduction.dependencies"></a></span><a class="link" href="introduction.html#geometry.spatial_indexes.introduction.dependencies">Dependencies</a>
+ </h5>
+<p>
+ R-tree depends on <span class="bold"><strong>Boost.Move</strong></span>, <span class="bold"><strong>Boost.Container</strong></span>, <span class="bold"><strong>Boost.Tuple</strong></span>,
+ <span class="bold"><strong>Boost.Utility</strong></span>, <span class="bold"><strong>Boost.MPL</strong></span>.
+ </p>
+<h5>
+<a name="geometry.spatial_indexes.introduction.h4"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.introduction.contributors"></a></span><a class="link" href="introduction.html#geometry.spatial_indexes.introduction.contributors">Contributors</a>
+ </h5>
+<p>
+ The spatial index was originally started by Federico J. Fernandez during
+ the Google Summer of Code 2008 program, mentored by Hartmut Kaiser.
+ </p>
+<h5>
+<a name="geometry.spatial_indexes.introduction.h5"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.introduction.spatial_thanks"></a></span><a class="link" href="introduction.html#geometry.spatial_indexes.introduction.spatial_thanks">Spatial thanks</a>
+ </h5>
+<p>
+ I'd like to thank Barend Gehrels, Bruno Lalande, Mateusz &#321;oskot, Lucanus
+ J. Simonson for their support and ideas.
+ </p>
+<div class="footnotes">
+<br><hr style="width:100; text-align:left;margin-left: 0">
+<div id="ftn.geometry.spatial_indexes.introduction.f0" class="footnote"><p><a href="#geometry.spatial_indexes.introduction.f0" class="para"><sup class="para">[1] </sup></a>
+ Guttman, A. (1984). <span class="emphasis"><em>R-Trees: A Dynamic Index Structure for Spatial
+ Searching</em></span>
+ </p></div>
+<div id="ftn.geometry.spatial_indexes.introduction.f1" class="footnote"><p><a href="#geometry.spatial_indexes.introduction.f1" class="para"><sup class="para">[2] </sup></a>
+ Cheung, K.; Fu, A. (1998). <span class="emphasis"><em>Enhanced Nearest Neighbour Search
+ on the R-tree</em></span>
+ </p></div>
+<div id="ftn.geometry.spatial_indexes.introduction.f2" class="footnote"><p><a href="#geometry.spatial_indexes.introduction.f2" class="para"><sup class="para">[3] </sup></a>
+ Greene, D. (1989). <span class="emphasis"><em>An implementation and performance analysis
+ of spatial data access methods</em></span>
+ </p></div>
+<div id="ftn.geometry.spatial_indexes.introduction.f3" class="footnote"><p><a href="#geometry.spatial_indexes.introduction.f3" class="para"><sup class="para">[4] </sup></a>
+ Beckmann, N.; Kriegel, H. P.; Schneider, R.; Seeger, B. (1990). <span class="emphasis"><em>The
+ R*-tree: an efficient and robust access method for points and rectangles</em></span>
+ </p></div>
+<div id="ftn.geometry.spatial_indexes.introduction.f4" class="footnote"><p><a href="#geometry.spatial_indexes.introduction.f4" class="para"><sup class="para">[5] </sup></a>
+ Leutenegger, Scott T.; Edgington, Jeffrey M.; Lopez, Mario A. (1997).
+ <span class="emphasis"><em>STR: A Simple and Efficient Algorithm for R-Tree Packing</em></span>
+ </p></div>
+<div id="ftn.geometry.spatial_indexes.introduction.f5" class="footnote"><p><a href="#geometry.spatial_indexes.introduction.f5" class="para"><sup class="para">[6] </sup></a>
+ Garcia, Yvan J.; Lopez, Mario A.; Leutenegger, Scott T. (1997). <span class="emphasis"><em>A
+ Greedy Algorithm for Bulk Loading R-trees</em></span>
+ </p></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../spatial_indexes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="rtree_quickstart.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/queries.html b/libs/geometry/doc/html/geometry/spatial_indexes/queries.html
new file mode 100644
index 000000000..677afcbb8
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/queries.html
@@ -0,0 +1,412 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Queries</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../spatial_indexes.html" title="Spatial Indexes">
+<link rel="prev" href="creation_and_modification.html" title="Creation and Modification">
+<link rel="next" href="rtree_examples.html" title="Examples">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="creation_and_modification.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="rtree_examples.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.spatial_indexes.queries"></a><a class="link" href="queries.html" title="Queries">Queries</a>
+</h3></div></div></div>
+<p>
+ Queries returns <code class="computeroutput">Value</code>s which meets some predicates. Currently
+ supported are three types of predicates:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ spatial predicates - spatial conditions that must be met by stored Value
+ and some Geometry,
+ </li>
+<li class="listitem">
+ distance predicates - distance conditions that must be met by stored
+ Value and some Geometry,
+ </li>
+<li class="listitem">
+ user-defined unary predicate - function, function object or lambda expression
+ checking user-defined condition.
+ </li>
+</ul></div>
+<p>
+ For example queries may be used to retrieve Values:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ intersecting some area but not within other area,
+ </li>
+<li class="listitem">
+ are nearest to some point,
+ </li>
+<li class="listitem">
+ overlapping a box and has user-defined property.
+ </li>
+</ul></div>
+<h5>
+<a name="geometry.spatial_indexes.queries.h0"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.queries.performing_a_query"></a></span><a class="link" href="queries.html#geometry.spatial_indexes.queries.performing_a_query">Performing
+ a query</a>
+ </h5>
+<p>
+ There are three ways to perform a query presented below. All of them returns
+ <code class="computeroutput">Value</code>s intersecting some region defined as a <code class="computeroutput">Box</code>.
+ </p>
+<p>
+ Method call
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>Value<span class="special">&gt;</span> <span class="identifier">returned_values</span><span class="special">;</span>
+Box <span class="identifier">box_region</span><span class="special">(...);</span>
+<span class="identifier">rt</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_region</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">returned_values</span><span class="special">));</span>
+</pre>
+<p>
+ Function call
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>Value<span class="special">&gt;</span> <span class="identifier">returned_values</span><span class="special">;</span>
+Box <span class="identifier">box_region</span><span class="special">(...);</span>
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">rt</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_region</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">returned_values</span><span class="special">));</span>
+</pre>
+<p>
+ Use of pipe operator generating a range
+ </p>
+<pre class="programlisting">Box <span class="identifier">box_region</span><span class="special">(...);</span>
+<span class="identifier">BOOST_FOREACH</span><span class="special">(</span>Value <span class="special">&amp;</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">rt</span> <span class="special">|</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">queried</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_region</span><span class="special">)))</span>
+ <span class="special">;</span> <span class="comment">// do something with v</span>
+</pre>
+<h5>
+<a name="geometry.spatial_indexes.queries.h1"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.queries.spatial_predicates"></a></span><a class="link" href="queries.html#geometry.spatial_indexes.queries.spatial_predicates">Spatial
+ predicates</a>
+ </h5>
+<p>
+ Queries using spatial predicates returns <code class="computeroutput">Value</code>s which are related
+ somehow to some Geometry - box, polygon, etc. Names of spatial predicates
+ correspond to names of Boost.Geometry algorithms. Examples of some basic
+ queries may be found in tables below. The query region and result <code class="computeroutput"><span class="identifier">Value</span></code>s are orange.
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ intersects(Box)
+ </p>
+ </th>
+<th>
+ <p>
+ covered_by(Box)
+ </p>
+ </th>
+<th>
+ <p>
+ disjoint(Box)
+ </p>
+ </th>
+<th>
+ <p>
+ overlaps(Box)
+ </p>
+ </th>
+<th>
+ <p>
+ within(Box)
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/intersects.png" alt="intersects"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/within.png" alt="within"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/disjoint.png" alt="disjoint"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/overlaps.png" alt="overlaps"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/within.png" alt="within"></span>
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ intersects(Ring)
+ </p>
+ </th>
+<th>
+ <p>
+ intersects(Polygon)
+ </p>
+ </th>
+<th>
+ <p>
+ intersects(MultiPolygon)
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/intersects_ring.png" alt="intersects_ring"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/intersects_poly.png" alt="intersects_poly"></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/intersects_mpoly.png" alt="intersects_mpoly"></span>
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+<p>
+ To use a spatial predicate one may use one of the functions defined in <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">index</span></code> namespace.
+ </p>
+<pre class="programlisting"><span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</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>
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">covered_by</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>
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">disjont</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>
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</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="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>
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</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>
+</pre>
+<p>
+ All spatial predicates may be negated, e.g.:
+ </p>
+<pre class="programlisting"><span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(!</span><span class="identifier">index</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>
+<span class="comment">// the same as</span>
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">disjoint</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>
+</pre>
+<h5>
+<a name="geometry.spatial_indexes.queries.h2"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.queries.distance_predicates"></a></span><a class="link" href="queries.html#geometry.spatial_indexes.queries.distance_predicates">Distance predicates</a>
+ </h5>
+<h6>
+<a name="geometry.spatial_indexes.queries.h3"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.queries.nearest_neighbours_queries"></a></span><a class="link" href="queries.html#geometry.spatial_indexes.queries.nearest_neighbours_queries">Nearest
+ neighbours queries</a>
+ </h6>
+<p>
+ Nearest neighbours queries returns <code class="computeroutput">Value</code>s which are closest
+ to some point in space. Additionally it is possible to define how the distance
+ to the <code class="computeroutput"><span class="identifier">Value</span></code> should be calculated.
+ The example of knn query is presented below. 5 <code class="computeroutput">Value</code>s nearest
+ to some point are orange.
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../img/index/rtree/knn.png" alt="knn"></span>
+ </p>
+<h6>
+<a name="geometry.spatial_indexes.queries.h4"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.queries.k_nearest_neighbours"></a></span><a class="link" href="queries.html#geometry.spatial_indexes.queries.k_nearest_neighbours">k nearest
+ neighbours</a>
+ </h6>
+<p>
+ There are three ways of performing knn queries. Following queries returns
+ <code class="computeroutput"><span class="identifier">k</span></code> <code class="computeroutput">Value</code>s closest
+ to some point in space. For <code class="computeroutput">Box</code>es <code class="computeroutput">Indexable</code>s the
+ distance to the nearest point is calculated by default.
+ </p>
+<p>
+ Method call
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>Value<span class="special">&gt;</span> <span class="identifier">returned_values</span><span class="special">;</span>
+Point <span class="identifier">pt</span><span class="special">(...);</span>
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</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="identifier">k</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">returned_values</span><span class="special">));</span>
+</pre>
+<p>
+ Function call
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>Value<span class="special">&gt;</span> <span class="identifier">returned_values</span><span class="special">;</span>
+Point <span class="identifier">pt</span><span class="special">(...);</span>
+<span class="identifier">index</span><span class="special">::</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">rt</span><span class="special">,</span> <span class="identifier">index</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="identifier">k</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">returned_values</span><span class="special">));</span>
+</pre>
+<p>
+ Use of <code class="computeroutput"><span class="keyword">operator</span> <span class="special">|</span></code>
+ </p>
+<pre class="programlisting">Point <span class="identifier">pt</span><span class="special">(...);</span>
+<span class="identifier">BOOST_FOREACH</span><span class="special">(</span>Value <span class="special">&amp;</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">rt</span> <span class="special">|</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">queried</span><span class="special">(</span><span class="identifier">index</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="identifier">k</span><span class="special">)))</span>
+ <span class="special">;</span> <span class="comment">// do something with v</span>
+</pre>
+<h5>
+<a name="geometry.spatial_indexes.queries.h5"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.queries.user_defined_unary_predicate"></a></span><a class="link" href="queries.html#geometry.spatial_indexes.queries.user_defined_unary_predicate">User-defined
+ unary predicate</a>
+ </h5>
+<p>
+ The user may pass a <code class="computeroutput"><span class="identifier">UnaryPredicate</span></code>
+ - function, function object or lambda expression taking const reference to
+ Value and returning bool. This object may be passed to the query in order
+ to check if <code class="computeroutput">Value</code> should be returned by the query. To do it
+ one may use <code class="computeroutput"><span class="identifier">index</span><span class="special">::</span><span class="identifier">satisfies</span><span class="special">()</span></code>
+ function like on the example below:
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">is_red</span><span class="special">(</span>Value <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">is_red</span><span class="special">();</span>
+<span class="special">}</span>
+
+<span class="keyword">struct</span> <span class="identifier">is_red_o</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Value</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span>Value <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">is_red</span><span class="special">();</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+
+<span class="comment">// ...</span>
+
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</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="special">&amp;&amp;</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">satisfies</span><span class="special">(</span><span class="identifier">is_red</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>
+
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</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="special">&amp;&amp;</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">satisfies</span><span class="special">(</span><span class="identifier">is_red_o</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>
+
+<span class="preprocessor">#ifndef</span> <span class="identifier">BOOST_NO_CXX11_LAMBDAS</span>
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</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="special">&amp;&amp;</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">satisfies</span><span class="special">([](</span>Value <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">is_red</span><span class="special">();</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>
+<span class="preprocessor">#endif</span>
+</pre>
+<p>
+ <code class="computeroutput"><span class="identifier">satisfies</span><span class="special">()</span></code>
+ may be negated, e.g.:
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">is_red</span><span class="special">(</span>Value <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">is_red</span><span class="special">();</span> <span class="special">}</span>
+<span class="keyword">bool</span> <span class="identifier">is_not_red</span><span class="special">(</span>Value <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">)</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="identifier">is_red</span><span class="special">();</span> <span class="special">}</span>
+
+<span class="comment">// ...</span>
+
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</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="special">&amp;&amp;</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">satisfies</span><span class="special">(</span><span class="identifier">is_red</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>
+<span class="comment">// the same as</span>
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</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="special">&amp;&amp;</span> <span class="special">!</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">satisfies</span><span class="special">(</span><span class="identifier">is_not_red</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>
+</pre>
+<h5>
+<a name="geometry.spatial_indexes.queries.h6"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.queries.passing_a_set_of_predicates"></a></span><a class="link" href="queries.html#geometry.spatial_indexes.queries.passing_a_set_of_predicates">Passing
+ a set of predicates</a>
+ </h5>
+<p>
+ It's possible to use some number of predicates in one query by connecting
+ them with <code class="computeroutput"><span class="keyword">operator</span><span class="special">&amp;&amp;</span></code>
+ e.g. <code class="computeroutput"><span class="identifier">Pred1</span> <span class="special">&amp;&amp;</span>
+ <span class="identifier">Pred2</span> <span class="special">&amp;&amp;</span>
+ <span class="identifier">Pred3</span> <span class="special">&amp;&amp;</span>
+ <span class="special">...</span></code>.
+ </p>
+<p>
+ These predicates are connected by logical AND. Passing all predicates together
+ not only makes possible to construct advanced queries but is also faster
+ than separate calls because the tree is traversed only once. Traversing is
+ continued and <code class="computeroutput"><span class="identifier">Value</span></code>s are
+ returned only if all predicates are met. Predicates are checked left-to-right
+ so placing most restrictive predicates first should accelerate the search.
+ </p>
+<pre class="programlisting"><span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">intersects</span><span class="special">(</span><span class="identifier">box1</span><span class="special">)</span> <span class="special">&amp;&amp;</span> <span class="special">!</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">within</span><span class="special">(</span><span class="identifier">box2</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>
+
+<span class="identifier">rt</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">intersects</span><span class="special">(</span><span class="identifier">box1</span><span class="special">)</span> <span class="special">&amp;&amp;</span> <span class="special">!</span><span class="identifier">index</span><span class="special">::</span><span class="identifier">within</span><span class="special">(</span><span class="identifier">box2</span><span class="special">)</span> <span class="special">&amp;&amp;</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">overlaps</span><span class="special">(</span><span class="identifier">box3</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>
+</pre>
+<p>
+ Of course it's possible to connect different types of predicates together.
+ </p>
+<pre class="programlisting"><span class="identifier">index</span><span class="special">::</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">rt</span><span class="special">,</span> <span class="identifier">index</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="identifier">k</span><span class="special">)</span> <span class="special">&amp;&amp;</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">within</span><span class="special">(</span><span class="identifier">b</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">returned_values</span><span class="special">));</span>
+
+<span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="identifier">Value</span> <span class="special">&amp;</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">rt</span> <span class="special">|</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">queried</span><span class="special">(</span><span class="identifier">index</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="identifier">k</span><span class="special">)</span> <span class="special">&amp;&amp;</span> <span class="identifier">index</span><span class="special">::</span><span class="identifier">covered_by</span><span class="special">(</span><span class="identifier">b</span><span class="special">)))</span>
+ <span class="special">;</span> <span class="comment">// do something with v</span>
+</pre>
+<h5>
+<a name="geometry.spatial_indexes.queries.h7"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.queries.inserting_query_results_into_the_other_r_tree"></a></span><a class="link" href="queries.html#geometry.spatial_indexes.queries.inserting_query_results_into_the_other_r_tree">Inserting
+ query results into the other R-tree</a>
+ </h5>
+<p>
+ There are several ways of inserting Values returned by a query to the other
+ R-tree container. The most basic way is creating a temporary container for
+ Values and insert them later.
+ </p>
+<pre class="programlisting"><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">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">Box</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> Value<span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> Value<span class="special">,</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">linear</span><span class="special">&lt;</span><span class="number">32</span><span class="special">,</span> <span class="number">8</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">RTree</span><span class="special">;</span>
+
+<span class="identifier">RTree</span> <span class="identifier">rt1</span><span class="special">;</span>
+<span class="comment">/* some inserting into the tree */</span>
+
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">Value</span><span class="special">&gt;</span> <span class="identifier">result</span><span class="special">;</span>
+<span class="identifier">rt1</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>
+<span class="identifier">RTree</span> <span class="identifier">rt2</span><span class="special">(</span><span class="identifier">result</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">result</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span>
+</pre>
+<p>
+ However there are better ways. One of these methods is mentioned in the "Creation
+ and modification" section. The insert iterator may be passed directly
+ into the query.
+ </p>
+<pre class="programlisting"><span class="identifier">RTree</span> <span class="identifier">rt3</span><span class="special">;</span>
+<span class="identifier">rt1</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">bgi</span><span class="special">::</span><span class="identifier">inserter</span><span class="special">(</span><span class="identifier">rt3</span><span class="special">));</span>
+</pre>
+<p>
+ If you like Boost.Range you'll appreciate the third option. You may pass
+ the result Range directly into the constructor.
+ </p>
+<pre class="programlisting"><span class="identifier">RTree</span> <span class="identifier">rt4</span><span class="special">(</span><span class="identifier">rt1</span> <span class="special">|</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">queried</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>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="creation_and_modification.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="rtree_examples.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples.html b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples.html
new file mode 100644
index 000000000..b6f507406
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples.html
@@ -0,0 +1,60 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Examples</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../spatial_indexes.html" title="Spatial Indexes">
+<link rel="prev" href="queries.html" title="Queries">
+<link rel="next" href="rtree_examples/quick_start.html" title="Quick start">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="queries.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="rtree_examples/quick_start.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.spatial_indexes.rtree_examples"></a><a class="link" href="rtree_examples.html" title="Examples">Examples</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="rtree_examples/quick_start.html">Quick
+ start</a></span></dt>
+<dt><span class="section"><a href="rtree_examples/index_of_polygons_stored_in_vector.html">Index
+ of polygons stored in vector</a></span></dt>
+<dt><span class="section"><a href="rtree_examples/index_of_shared_pointers_to_polygons.html">Index
+ of shared pointers to polygons</a></span></dt>
+<dt><span class="section"><a href="rtree_examples/index_of_iterators_of_a_map_storing_variant_geometries.html">Index
+ of iterators of a map storing variant geometries</a></span></dt>
+<dt><span class="section"><a href="rtree_examples/specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html">Specializing
+ index::indexable function object - storing shared pointers in the rtree</a></span></dt>
+<dt><span class="section"><a href="rtree_examples/using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html">Using
+ IndexableGetter function object - storing indexes of external container's
+ elements</a></span></dt>
+<dt><span class="section"><a href="rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html">Index
+ stored in shared memory using Boost.Interprocess</a></span></dt>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="queries.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="rtree_examples/quick_start.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_iterators_of_a_map_storing_variant_geometries.html b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_iterators_of_a_map_storing_variant_geometries.html
new file mode 100644
index 000000000..1066161bc
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_iterators_of_a_map_storing_variant_geometries.html
@@ -0,0 +1,178 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Index of iterators of a map storing variant geometries</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../rtree_examples.html" title="Examples">
+<link rel="prev" href="index_of_shared_pointers_to_polygons.html" title="Index of shared pointers to polygons">
+<link rel="next" href="specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html" title="Specializing index::indexable function object - storing shared pointers in the rtree">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="index_of_shared_pointers_to_polygons.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.spatial_indexes.rtree_examples.index_of_iterators_of_a_map_storing_variant_geometries"></a><a class="link" href="index_of_iterators_of_a_map_storing_variant_geometries.html" title="Index of iterators of a map storing variant geometries">Index
+ of iterators of a map storing variant geometries</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">ring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">linestring</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">cmath</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">map</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">variant</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</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">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">&lt;</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">&gt;</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">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">box</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">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">,</span> <span class="keyword">false</span><span class="special">,</span> <span class="keyword">false</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span> <span class="comment">// ccw, open polygon</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">ring</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">,</span> <span class="keyword">false</span><span class="special">,</span> <span class="keyword">false</span><span class="special">&gt;</span> <span class="identifier">ring</span><span class="special">;</span> <span class="comment">// ccw, open ring</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">linestring</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">linestring</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">,</span> <span class="identifier">ring</span><span class="special">,</span> <span class="identifier">linestring</span><span class="special">&gt;</span> <span class="identifier">geometry</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special">&lt;</span><span class="keyword">unsigned</span><span class="special">,</span> <span class="identifier">geometry</span><span class="special">&gt;</span> <span class="identifier">map</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">,</span> <span class="identifier">map</span><span class="special">::</span><span class="identifier">iterator</span><span class="special">&gt;</span> <span class="identifier">value</span><span class="special">;</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Container</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">fill</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">Container</span> <span class="special">&amp;</span> <span class="identifier">container</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">for</span> <span class="special">(</span> <span class="keyword">float</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">0</span> <span class="special">;</span> <span class="identifier">a</span> <span class="special">&lt;</span> <span class="number">6.28316f</span> <span class="special">;</span> <span class="identifier">a</span> <span class="special">+=</span> <span class="number">1.04720f</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">float</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">i</span> <span class="special">+</span> <span class="keyword">int</span><span class="special">(</span><span class="number">10</span><span class="special">*::</span><span class="identifier">cos</span><span class="special">(</span><span class="identifier">a</span><span class="special">))*</span><span class="number">0.1f</span><span class="special">;</span>
+ <span class="keyword">float</span> <span class="identifier">y</span> <span class="special">=</span> <span class="identifier">i</span> <span class="special">+</span> <span class="keyword">int</span><span class="special">(</span><span class="number">10</span><span class="special">*::</span><span class="identifier">sin</span><span class="special">(</span><span class="identifier">a</span><span class="special">))*</span><span class="number">0.1f</span><span class="special">;</span>
+ <span class="identifier">container</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">));</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+
+<span class="keyword">struct</span> <span class="identifier">print_visitor</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">static_visitor</span><span class="special">&lt;&gt;</span>
+<span class="special">{</span>
+ <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">polygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;(</span><span class="identifier">g</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="special">}</span>
+ <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ring</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">ring</span><span class="special">&gt;(</span><span class="identifier">g</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="special">}</span>
+ <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">linestring</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">linestring</span><span class="special">&gt;(</span><span class="identifier">g</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="keyword">struct</span> <span class="identifier">envelope_visitor</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">static_visitor</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="identifier">box</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">polygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">return_envelope</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">g</span><span class="special">);</span> <span class="special">}</span>
+ <span class="identifier">box</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ring</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">return_envelope</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">g</span><span class="special">);</span> <span class="special">}</span>
+ <span class="identifier">box</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">linestring</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">g</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">return_envelope</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">g</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="comment">// geometries container</span>
+ <span class="identifier">map</span> <span class="identifier">geometries</span><span class="special">;</span>
+
+ <span class="comment">// create some geometries</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">&lt;</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="keyword">unsigned</span> <span class="identifier">c</span> <span class="special">=</span> <span class="identifier">rand</span><span class="special">()</span> <span class="special">%</span> <span class="number">3</span><span class="special">;</span>
+
+ <span class="keyword">if</span> <span class="special">(</span> <span class="number">0</span> <span class="special">==</span> <span class="identifier">c</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="comment">// create polygon</span>
+ <span class="identifier">polygon</span> <span class="identifier">p</span><span class="special">;</span>
+ <span class="identifier">fill</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">outer</span><span class="special">());</span>
+ <span class="identifier">geometries</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">geometry</span><span class="special">(</span><span class="identifier">p</span><span class="special">)));</span>
+ <span class="special">}</span>
+ <span class="keyword">else</span> <span class="keyword">if</span> <span class="special">(</span> <span class="number">1</span> <span class="special">==</span> <span class="identifier">c</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="comment">// create ring</span>
+ <span class="identifier">ring</span> <span class="identifier">r</span><span class="special">;</span>
+ <span class="identifier">fill</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">r</span><span class="special">);</span>
+ <span class="identifier">geometries</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">geometry</span><span class="special">(</span><span class="identifier">r</span><span class="special">)));</span>
+ <span class="special">}</span>
+ <span class="keyword">else</span> <span class="keyword">if</span> <span class="special">(</span> <span class="number">2</span> <span class="special">==</span> <span class="identifier">c</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="comment">// create linestring</span>
+ <span class="identifier">linestring</span> <span class="identifier">l</span><span class="special">;</span>
+ <span class="identifier">fill</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">l</span><span class="special">);</span>
+ <span class="identifier">geometries</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">geometry</span><span class="special">(</span><span class="identifier">l</span><span class="special">)));</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+
+ <span class="comment">// display geometries</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"generated geometries:"</span> <span class="special">&lt;&lt;</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">map</span><span class="special">::</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">geometries</span><span class="special">)</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">apply_visitor</span><span class="special">(</span><span class="identifier">print_visitor</span><span class="special">(),</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">second</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">&lt;</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">quadratic</span><span class="special">&lt;</span><span class="number">16</span><span class="special">,</span> <span class="number">4</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rtree</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">map</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">geometries</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">;</span> <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">geometries</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">it</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="comment">// calculate polygon bounding box</span>
+ <span class="identifier">box</span> <span class="identifier">b</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">apply_visitor</span><span class="special">(</span><span class="identifier">envelope_visitor</span><span class="special">(),</span> <span class="identifier">it</span><span class="special">-&gt;</span><span class="identifier">second</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">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">it</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">bgi</span><span class="special">::</span><span class="identifier">intersects</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">&lt;&lt;</span> <span class="string">"spatial query box:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">query_box</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"spatial query result:"</span> <span class="special">&lt;&lt;</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">&amp;</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">result_s</span><span class="special">)</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">apply_visitor</span><span class="special">(</span><span class="identifier">print_visitor</span><span class="special">(),</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span><span class="special">-&gt;</span><span class="identifier">second</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"knn query point:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query result:"</span> <span class="special">&lt;&lt;</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">&amp;</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">result_n</span><span class="special">)</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">apply_visitor</span><span class="special">(</span><span class="identifier">print_visitor</span><span class="special">(),</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span><span class="special">-&gt;</span><span class="identifier">second</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>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="index_of_shared_pointers_to_polygons.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_polygons_stored_in_vector.html b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_polygons_stored_in_vector.html
new file mode 100644
index 000000000..0e30535a1
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_polygons_stored_in_vector.html
@@ -0,0 +1,131 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Index of polygons stored in vector</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../rtree_examples.html" title="Examples">
+<link rel="prev" href="quick_start.html" title="Quick start">
+<link rel="next" href="index_of_shared_pointers_to_polygons.html" title="Index of shared pointers to polygons">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="quick_start.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="index_of_shared_pointers_to_polygons.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.spatial_indexes.rtree_examples.index_of_polygons_stored_in_vector"></a><a class="link" href="index_of_polygons_stored_in_vector.html" title="Index of polygons stored in vector">Index
+ of polygons stored in vector</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">cmath</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</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">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">&lt;</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">&gt;</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">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">box</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">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">,</span> <span class="keyword">false</span><span class="special">,</span> <span class="keyword">false</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span> <span class="comment">// ccw, open polygon</span>
+ <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">,</span> <span class="keyword">unsigned</span><span class="special">&gt;</span> <span class="identifier">value</span><span class="special">;</span>
+
+ <span class="comment">// polygons</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;</span> <span class="identifier">polygons</span><span class="special">;</span>
+
+ <span class="comment">// create some polygons</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">&lt;</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 polygon</span>
+ <span class="identifier">polygon</span> <span class="identifier">p</span><span class="special">;</span>
+ <span class="keyword">for</span> <span class="special">(</span> <span class="keyword">float</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">0</span> <span class="special">;</span> <span class="identifier">a</span> <span class="special">&lt;</span> <span class="number">6.28316f</span> <span class="special">;</span> <span class="identifier">a</span> <span class="special">+=</span> <span class="number">1.04720f</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">float</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">i</span> <span class="special">+</span> <span class="keyword">int</span><span class="special">(</span><span class="number">10</span><span class="special">*::</span><span class="identifier">cos</span><span class="special">(</span><span class="identifier">a</span><span class="special">))*</span><span class="number">0.1f</span><span class="special">;</span>
+ <span class="keyword">float</span> <span class="identifier">y</span> <span class="special">=</span> <span class="identifier">i</span> <span class="special">+</span> <span class="keyword">int</span><span class="special">(</span><span class="number">10</span><span class="special">*::</span><span class="identifier">sin</span><span class="special">(</span><span class="identifier">a</span><span class="special">))*</span><span class="number">0.1f</span><span class="special">;</span>
+ <span class="identifier">p</span><span class="special">.</span><span class="identifier">outer</span><span class="special">().</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">));</span>
+ <span class="special">}</span>
+
+ <span class="comment">// add polygon</span>
+ <span class="identifier">polygons</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">p</span><span class="special">);</span>
+ <span class="special">}</span>
+
+ <span class="comment">// display polygons</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"generated polygons:"</span> <span class="special">&lt;&lt;</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">polygon</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">polygons</span><span class="special">)</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</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 using default constructor</span>
+ <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">rstar</span><span class="special">&lt;</span><span class="number">16</span><span class="special">,</span> <span class="number">4</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rtree</span><span class="special">;</span>
+
+ <span class="comment">// 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">&lt;</span> <span class="identifier">polygons</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="special">{</span>
+ <span class="comment">// calculate polygon bounding box</span>
+ <span class="identifier">box</span> <span class="identifier">b</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">return_envelope</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">polygons</span><span class="special">[</span><span class="identifier">i</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">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">i</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">bgi</span><span class="special">::</span><span class="identifier">intersects</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">&lt;&lt;</span> <span class="string">"spatial query box:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">query_box</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"spatial query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;(</span><span class="identifier">polygons</span><span class="special">[</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span><span class="special">])</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query point:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;(</span><span class="identifier">polygons</span><span class="special">[</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span><span class="special">])</span> <span class="special">&lt;&lt;</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>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="quick_start.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="index_of_shared_pointers_to_polygons.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_shared_pointers_to_polygons.html b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_shared_pointers_to_polygons.html
new file mode 100644
index 000000000..e0f1509fe
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_shared_pointers_to_polygons.html
@@ -0,0 +1,123 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Index of shared pointers to polygons</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../rtree_examples.html" title="Examples">
+<link rel="prev" href="index_of_polygons_stored_in_vector.html" title="Index of polygons stored in vector">
+<link rel="next" href="index_of_iterators_of_a_map_storing_variant_geometries.html" title="Index of iterators of a map storing variant geometries">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="index_of_polygons_stored_in_vector.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="index_of_iterators_of_a_map_storing_variant_geometries.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.spatial_indexes.rtree_examples.index_of_shared_pointers_to_polygons"></a><a class="link" href="index_of_shared_pointers_to_polygons.html" title="Index of shared pointers to polygons">Index
+ of shared pointers to polygons</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">cmath</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</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">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">&lt;</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">&gt;</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">&lt;</span><span class="identifier">point</span><span class="special">&gt;</span> <span class="identifier">box</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">polygon</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">,</span> <span class="keyword">false</span><span class="special">,</span> <span class="keyword">false</span><span class="special">&gt;</span> <span class="identifier">polygon</span><span class="special">;</span> <span class="comment">// ccw, open polygon</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;</span> <span class="identifier">shp</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">,</span> <span class="identifier">shp</span><span class="special">&gt;</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">&lt;</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">&lt;</span><span class="number">16</span><span class="special">,</span> <span class="number">4</span><span class="special">&gt;</span> <span class="special">&gt;</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">&lt;&lt;</span> <span class="string">"filling index with polygons shared pointers:"</span> <span class="special">&lt;&lt;</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">&lt;</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 polygon</span>
+ <span class="identifier">shp</span> <span class="identifier">p</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">polygon</span><span class="special">());</span>
+ <span class="keyword">for</span> <span class="special">(</span> <span class="keyword">float</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">0</span> <span class="special">;</span> <span class="identifier">a</span> <span class="special">&lt;</span> <span class="number">6.28316f</span> <span class="special">;</span> <span class="identifier">a</span> <span class="special">+=</span> <span class="number">1.04720f</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">float</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">i</span> <span class="special">+</span> <span class="keyword">int</span><span class="special">(</span><span class="number">10</span><span class="special">*::</span><span class="identifier">cos</span><span class="special">(</span><span class="identifier">a</span><span class="special">))*</span><span class="number">0.1f</span><span class="special">;</span>
+ <span class="keyword">float</span> <span class="identifier">y</span> <span class="special">=</span> <span class="identifier">i</span> <span class="special">+</span> <span class="keyword">int</span><span class="special">(</span><span class="number">10</span><span class="special">*::</span><span class="identifier">sin</span><span class="special">(</span><span class="identifier">a</span><span class="special">))*</span><span class="number">0.1f</span><span class="special">;</span>
+ <span class="identifier">p</span><span class="special">-&gt;</span><span class="identifier">outer</span><span class="special">().</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">point</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">));</span>
+ <span class="special">}</span>
+
+ <span class="comment">// display new polygon</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;(*</span><span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="comment">// calculate polygon bounding box</span>
+ <span class="identifier">box</span> <span class="identifier">b</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">return_envelope</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(*</span><span class="identifier">p</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">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">p</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">bgi</span><span class="special">::</span><span class="identifier">intersects</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">&lt;&lt;</span> <span class="string">"spatial query box:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">query_box</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"spatial query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;(*</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query point:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">polygon</span><span class="special">&gt;(*</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="index_of_polygons_stored_in_vector.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="index_of_iterators_of_a_map_storing_variant_geometries.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html
new file mode 100644
index 000000000..0e107a201
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html
@@ -0,0 +1,147 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Index stored in shared memory using Boost.Interprocess</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../rtree_examples.html" title="Examples">
+<link rel="prev" href="using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html" title="Using IndexableGetter function object - storing indexes of external container's elements">
+<link rel="next" href="../../reference.html" title="Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="../../reference.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.spatial_indexes.rtree_examples.index_stored_in_shared_memory_using_boost_interprocess"></a><a class="link" href="index_stored_in_shared_memory_using_boost_interprocess.html" title="Index stored in shared memory using Boost.Interprocess">Index
+ stored in shared memory using Boost.Interprocess</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interprocess</span><span class="special">/</span><span class="identifier">managed_shared_memory</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">interprocess</span><span class="special">/</span><span class="identifier">allocators</span><span class="special">/</span><span class="identifier">allocator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">cstdlib</span><span class="special">&gt;</span> <span class="comment">//std::system</span>
+
+<span class="comment">//For parent process argc == 1, for child process argc &gt; 1</span>
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">char</span> <span class="special">*</span><span class="identifier">argv</span><span class="special">[])</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">interprocess</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">bgm</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">;</span>
+ <span class="keyword">namespace</span> <span class="identifier">bgi</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">index</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">bgm</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</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">&gt;</span> <span class="identifier">P</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">bgm</span><span class="special">::</span><span class="identifier">box</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;</span> <span class="identifier">B</span><span class="special">;</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">linear</span><span class="special">&lt;</span><span class="number">32</span><span class="special">,</span> <span class="number">8</span><span class="special">&gt;</span> <span class="identifier">Par</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">indexable</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span> <span class="identifier">I</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span> <span class="identifier">E</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">managed_shared_memory</span><span class="special">::</span><span class="identifier">segment_manager</span><span class="special">&gt;</span> <span class="identifier">Alloc</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">rtree</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">Par</span><span class="special">,</span> <span class="identifier">I</span><span class="special">,</span> <span class="identifier">E</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">&gt;</span> <span class="identifier">Rtree</span><span class="special">;</span>
+
+ <span class="comment">//Parent process</span>
+ <span class="keyword">if</span> <span class="special">(</span> <span class="identifier">argc</span> <span class="special">==</span> <span class="number">1</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">shm_remove</span>
+ <span class="special">{</span>
+ <span class="identifier">shm_remove</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">shared_memory_object</span><span class="special">::</span><span class="identifier">remove</span><span class="special">(</span><span class="string">"MySharedMemory"</span><span class="special">);</span> <span class="special">}</span>
+ <span class="special">~</span><span class="identifier">shm_remove</span><span class="special">(){</span> <span class="identifier">shared_memory_object</span><span class="special">::</span><span class="identifier">remove</span><span class="special">(</span><span class="string">"MySharedMemory"</span><span class="special">);</span> <span class="special">}</span>
+ <span class="special">}</span> <span class="identifier">remover</span><span class="special">;</span>
+
+ <span class="identifier">managed_shared_memory</span> <span class="identifier">segment</span><span class="special">(</span><span class="identifier">create_only</span><span class="special">,</span> <span class="string">"MySharedMemory"</span><span class="special">,</span> <span class="number">65536</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Parent: Constructing container\n"</span><span class="special">;</span>
+
+ <span class="identifier">Rtree</span> <span class="special">*</span> <span class="identifier">tree</span> <span class="special">=</span> <span class="identifier">segment</span><span class="special">.</span><span class="identifier">construct</span><span class="special">&lt;</span><span class="identifier">Rtree</span><span class="special">&gt;(</span><span class="string">"Rtree"</span><span class="special">)(</span><span class="identifier">Par</span><span class="special">(),</span> <span class="identifier">I</span><span class="special">(),</span> <span class="identifier">E</span><span class="special">(),</span> <span class="identifier">Alloc</span><span class="special">(</span><span class="identifier">segment</span><span class="special">.</span><span class="identifier">get_segment_manager</span><span class="special">()));</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Parent: Filling container with 100 boxes\n"</span><span class="special">;</span>
+
+ <span class="keyword">for</span> <span class="special">(</span> <span class="keyword">float</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">&lt;</span> <span class="number">100</span> <span class="special">;</span> <span class="identifier">i</span> <span class="special">+=</span> <span class="number">1</span> <span class="special">)</span>
+ <span class="identifier">tree</span><span class="special">-&gt;</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">B</span><span class="special">(</span><span class="identifier">P</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">P</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="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Parent: Tree content\n"</span><span class="special">;</span>
+ <span class="identifier">Rtree</span><span class="special">::</span><span class="identifier">bounds_type</span> <span class="identifier">bb</span> <span class="special">=</span> <span class="identifier">tree</span><span class="special">-&gt;</span><span class="identifier">bounds</span><span class="special">();</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"[("</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">bb</span><span class="special">.</span><span class="identifier">min_corner</span><span class="special">())</span> <span class="special">&lt;&lt;</span> <span class="string">", "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">bb</span><span class="special">.</span><span class="identifier">min_corner</span><span class="special">())</span>
+ <span class="special">&lt;&lt;</span> <span class="string">")("</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">bb</span><span class="special">.</span><span class="identifier">max_corner</span><span class="special">())</span> <span class="special">&lt;&lt;</span> <span class="string">", "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">bb</span><span class="special">.</span><span class="identifier">max_corner</span><span class="special">())</span> <span class="special">&lt;&lt;</span> <span class="string">")]\n"</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Parent: Running child process\n"</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">(</span><span class="identifier">argv</span><span class="special">[</span><span class="number">0</span><span class="special">]);</span> <span class="identifier">s</span> <span class="special">+=</span> <span class="string">" child "</span><span class="special">;</span>
+ <span class="keyword">if</span> <span class="special">(</span> <span class="number">0</span> <span class="special">!=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">system</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">c_str</span><span class="special">())</span> <span class="special">)</span>
+ <span class="keyword">return</span> <span class="number">1</span><span class="special">;</span>
+
+ <span class="keyword">if</span> <span class="special">(</span> <span class="identifier">segment</span><span class="special">.</span><span class="identifier">find</span><span class="special">&lt;</span><span class="identifier">Rtree</span><span class="special">&gt;(</span><span class="string">"Rtree"</span><span class="special">).</span><span class="identifier">first</span> <span class="special">)</span>
+ <span class="keyword">return</span> <span class="number">1</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Parent: Container was properly destroyed by the child process\n"</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="comment">//Child process</span>
+ <span class="keyword">else</span>
+ <span class="special">{</span>
+ <span class="identifier">managed_shared_memory</span> <span class="identifier">segment</span><span class="special">(</span><span class="identifier">open_only</span><span class="special">,</span> <span class="string">"MySharedMemory"</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Child: Searching of the container in shared memory\n"</span><span class="special">;</span>
+
+ <span class="identifier">Rtree</span> <span class="special">*</span> <span class="identifier">tree</span> <span class="special">=</span> <span class="identifier">segment</span><span class="special">.</span><span class="identifier">find</span><span class="special">&lt;</span><span class="identifier">Rtree</span><span class="special">&gt;(</span><span class="string">"Rtree"</span><span class="special">).</span><span class="identifier">first</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Child: Querying for objects intersecting box = [(45, 45)(55, 55)]\n"</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span> <span class="identifier">result</span><span class="special">;</span>
+ <span class="keyword">unsigned</span> <span class="identifier">k</span> <span class="special">=</span> <span class="identifier">tree</span><span class="special">-&gt;</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">B</span><span class="special">(</span><span class="identifier">P</span><span class="special">(</span><span class="number">45</span><span class="special">,</span> <span class="number">45</span><span class="special">),</span> <span class="identifier">P</span><span class="special">(</span><span class="number">55</span><span class="special">,</span> <span class="number">55</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>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Child: Found objects:\n"</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">k</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span><span class="special">;</span>
+ <span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="identifier">B</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">result</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"[("</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">.</span><span class="identifier">min_corner</span><span class="special">())</span> <span class="special">&lt;&lt;</span> <span class="string">", "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">.</span><span class="identifier">min_corner</span><span class="special">())</span>
+ <span class="special">&lt;&lt;</span> <span class="string">")("</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">.</span><span class="identifier">max_corner</span><span class="special">())</span> <span class="special">&lt;&lt;</span> <span class="string">", "</span> <span class="special">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">.</span><span class="identifier">max_corner</span><span class="special">())</span> <span class="special">&lt;&lt;</span> <span class="string">")]\n"</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span><span class="special">;</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Child: Destroying container\n"</span><span class="special">;</span>
+
+ <span class="identifier">segment</span><span class="special">.</span><span class="identifier">destroy</span><span class="special">&lt;</span><span class="identifier">Rtree</span><span class="special">&gt;(</span><span class="string">"Rtree"</span><span class="special">);</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>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="../../reference.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/quick_start.html b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/quick_start.html
new file mode 100644
index 000000000..ecc96f784
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/quick_start.html
@@ -0,0 +1,107 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Quick start</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../rtree_examples.html" title="Examples">
+<link rel="prev" href="../rtree_examples.html" title="Examples">
+<link rel="next" href="index_of_polygons_stored_in_vector.html" title="Index of polygons stored in vector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../rtree_examples.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="index_of_polygons_stored_in_vector.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.spatial_indexes.rtree_examples.quick_start"></a><a class="link" href="quick_start.html" title="Quick start">Quick
+ start</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="comment">// to store queries results</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+
+<span class="comment">// just for output</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</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">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">&lt;</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">&gt;</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">&lt;</span><span class="identifier">point</span><span class="special">&gt;</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">pair</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">,</span> <span class="keyword">unsigned</span><span class="special">&gt;</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">&lt;</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">quadratic</span><span class="special">&lt;</span><span class="number">16</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rtree</span><span class="special">;</span>
+
+ <span class="comment">// create some values</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">&lt;</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">box</span> <span class="identifier">b</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">// 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">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">i</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">bgi</span><span class="special">::</span><span class="identifier">intersects</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">&lt;&lt;</span> <span class="string">"spatial query box:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">query_box</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"spatial query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">first</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="string">" - "</span> <span class="special">&lt;&lt;</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query point:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">first</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="string">" - "</span> <span class="special">&lt;&lt;</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span> <span class="special">&lt;&lt;</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>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../rtree_examples.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="index_of_polygons_stored_in_vector.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html
new file mode 100644
index 000000000..832710e1f
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html
@@ -0,0 +1,126 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Specializing index::indexable function object - storing shared pointers in the rtree</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../rtree_examples.html" title="Examples">
+<link rel="prev" href="index_of_iterators_of_a_map_storing_variant_geometries.html" title="Index of iterators of a map storing variant geometries">
+<link rel="next" href="using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html" title="Using IndexableGetter function object - storing indexes of external container's elements">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="index_of_iterators_of_a_map_storing_variant_geometries.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.spatial_indexes.rtree_examples.specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree"></a><a class="link" href="specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html" title="Specializing index::indexable function object - storing shared pointers in the rtree">Specializing
+ index::indexable function object - storing shared pointers in the rtree</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">cmath</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</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">&lt;</span><span class="keyword">typename</span> <span class="identifier">Box</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">indexable</span><span class="special">&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">Box</span><span class="special">&gt;</span> <span class="special">&gt;</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">&lt;</span><span class="identifier">Box</span><span class="special">&gt;</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">&amp;</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">&amp;</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="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">&lt;</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">&gt;</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">&lt;</span><span class="identifier">point</span><span class="special">&gt;</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">&lt;</span><span class="identifier">box</span><span class="special">&gt;</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">&lt;</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">&lt;</span><span class="number">16</span><span class="special">,</span> <span class="number">4</span><span class="special">&gt;</span> <span class="special">&gt;</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">&lt;&lt;</span> <span class="string">"filling index with boxes shared pointers:"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="comment">// 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">&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(*</span><span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">bgi</span><span class="special">::</span><span class="identifier">intersects</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">&lt;&lt;</span> <span class="string">"spatial query box:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">query_box</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"spatial query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(*</span><span class="identifier">v</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query point:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(*</span><span class="identifier">v</span><span class="special">)</span> <span class="special">&lt;&lt;</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>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="index_of_iterators_of_a_map_storing_variant_geometries.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html
new file mode 100644
index 000000000..cfec282ff
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html
@@ -0,0 +1,133 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Using IndexableGetter function object - storing indexes of external container's elements</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../rtree_examples.html" title="Examples">
+<link rel="prev" href="specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html" title="Specializing index::indexable function object - storing shared pointers in the rtree">
+<link rel="next" href="index_stored_in_shared_memory_using_boost_interprocess.html" title="Index stored in shared memory using Boost.Interprocess">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="index_stored_in_shared_memory_using_boost_interprocess.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="geometry.spatial_indexes.rtree_examples.using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements"></a><a class="link" href="using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html" title="Using IndexableGetter function object - storing indexes of external container's elements">Using
+ IndexableGetter function 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">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">cmath</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</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">&lt;</span><span class="keyword">typename</span> <span class="identifier">Container</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">my_indexable</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">&amp;</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">my_indexable</span><span class="special">(</span><span class="identifier">Container</span> <span class="keyword">const</span><span class="special">&amp;</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="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">&lt;</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">&gt;</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">&lt;</span><span class="identifier">point</span><span class="special">&gt;</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">&lt;</span><span class="identifier">box</span><span class="special">&gt;::</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">&lt;</span><span class="number">16</span><span class="special">,</span> <span class="number">4</span><span class="special">&gt;</span> <span class="identifier">parameters</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">my_indexable</span><span class="special">&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">indexable_getter</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">&lt;</span><span class="identifier">box</span><span class="special">&gt;</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">&lt;</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">&lt;&lt;</span> <span class="string">"generated boxes:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">b</span><span class="special">)</span> <span class="special">&lt;&lt;</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">indexable_getter</span> <span class="identifier">ind</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">&lt;</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">parameters</span><span class="special">,</span> <span class="identifier">indexable_getter</span><span class="special">&gt;</span> <span class="identifier">rtree</span><span class="special">(</span><span class="identifier">params</span><span class="special">,</span> <span class="identifier">ind</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">&lt;</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">bgi</span><span class="special">::</span><span class="identifier">intersects</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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">&lt;&lt;</span> <span class="string">"spatial query box:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">query_box</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"spatial query result:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">boxes</span><span class="special">[</span><span class="identifier">i</span><span class="special">])</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query point:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query result:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">boxes</span><span class="special">[</span><span class="identifier">i</span><span class="special">])</span> <span class="special">&lt;&lt;</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>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rtree_examples.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="index_stored_in_shared_memory_using_boost_interprocess.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry/spatial_indexes/rtree_quickstart.html b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_quickstart.html
new file mode 100644
index 000000000..3f182c4c5
--- /dev/null
+++ b/libs/geometry/doc/html/geometry/spatial_indexes/rtree_quickstart.html
@@ -0,0 +1,178 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Quick Start</title>
+<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="up" href="../spatial_indexes.html" title="Spatial Indexes">
+<link rel="prev" href="introduction.html" title="Introduction">
+<link rel="next" href="creation_and_modification.html" title="Creation and Modification">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="introduction.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="creation_and_modification.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="geometry.spatial_indexes.rtree_quickstart"></a><a class="link" href="rtree_quickstart.html" title="Quick Start">Quick Start</a>
+</h3></div></div></div>
+<p>
+ This Quick Start section shows simple way to creating a typical R-tree and
+ perform spatial query.
+ </p>
+<p>
+ The code below assumes that following files are included and namespaces used.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
+
+<span class="comment">// to store queries results</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+
+<span class="comment">// just for output</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</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>
+</pre>
+<p>
+ </p>
+<p>
+ Typically you'll store e.g. <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">Box</span><span class="special">,</span> <span class="identifier">MyGeometryId</span><span class="special">&gt;</span></code> in the R-tree. <code class="computeroutput"><span class="identifier">MyGeometryId</span></code>
+ will be some identifier of a complex <code class="computeroutput"><span class="identifier">Geometry</span></code>
+ stored in other container, e.g. index type of a <code class="computeroutput"><span class="identifier">Polygon</span></code>
+ stored in the vector or an iterator of list of <code class="computeroutput"><span class="identifier">Ring</span></code>s.
+ To keep it simple to define <code class="computeroutput"><span class="identifier">Value</span></code>
+ we will use predefined Box and unsigned int.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><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">&lt;</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">&gt;</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">&lt;</span><span class="identifier">point</span><span class="special">&gt;</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">pair</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">,</span> <span class="keyword">unsigned</span><span class="special">&gt;</span> <span class="identifier">value</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ R-tree may be created using various algorithm and parameters. You should
+ choose the algorithm you'll find the best for your purpose. In this example
+ we will use quadratic algorithm. Parameters are passed as template parameters.
+ Maximum number of elements in nodes is set to 16.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><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">&lt;</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">quadratic</span><span class="special">&lt;</span><span class="number">16</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">rtree</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ Typically <code class="computeroutput"><span class="identifier">Value</span></code>s will be
+ generated in a loop from e.g. <code class="computeroutput"><span class="identifier">Polygon</span></code>s
+ stored in some other container. In this case <code class="computeroutput"><span class="identifier">Box</span></code>
+ objects will probably be created with <code class="computeroutput"><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">envelope</span><span class="special">()</span></code> function. But to keep it simple lets just
+ generate some boxes manually and insert them into the R-tree by using <code class="computeroutput"><span class="identifier">insert</span><span class="special">()</span></code>
+ method.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="comment">// create some values</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">&lt;</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">box</span> <span class="identifier">b</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">// 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">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">i</span><span class="special">));</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ There are various types of spatial queries that may be performed, they can
+ be even combined together in one call. For simplicity, we use the default
+ one. The following query return values intersecting a box. The sequence of
+ <code class="computeroutput"><span class="identifier">Values</span></code> in the result is not
+ specified.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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">bgi</span><span class="special">::</span><span class="identifier">intersects</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>
+</pre>
+<p>
+ </p>
+<p>
+ Other type of query is k-nearest neighbor search. It returns some number
+ of values nearest to some point in space. The default knn query may be performed
+ as follows. The sequence of <code class="computeroutput"><span class="identifier">Values</span></code>
+ in the result is not specified.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><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">&lt;</span><span class="identifier">value</span><span class="special">&gt;</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>
+</pre>
+<p>
+ </p>
+<p>
+ At the end we'll print results.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="comment">// display results</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"spatial query box:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">query_box</span><span class="special">)</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"spatial query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">first</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="string">" - "</span> <span class="special">&lt;&lt;</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query point:"</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"knn query result:"</span> <span class="special">&lt;&lt;</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">&amp;</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">&lt;&lt;</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special">&lt;</span><span class="identifier">box</span><span class="special">&gt;(</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">first</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="string">" - "</span> <span class="special">&lt;&lt;</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">second</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<h4>
+<a name="geometry.spatial_indexes.rtree_quickstart.h0"></a>
+ <span class="phrase"><a name="geometry.spatial_indexes.rtree_quickstart.more"></a></span><a class="link" href="rtree_quickstart.html#geometry.spatial_indexes.rtree_quickstart.more">More</a>
+ </h4>
+<p>
+ More information about the R-tree implementation, other algorithms and queries
+ may be found in other parts of this documentation.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="introduction.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../spatial_indexes.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="creation_and_modification.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/geometry_HTML.manifest b/libs/geometry/doc/html/geometry_HTML.manifest
new file mode 100644
index 000000000..0a298fa35
--- /dev/null
+++ b/libs/geometry/doc/html/geometry_HTML.manifest
@@ -0,0 +1,258 @@
+index.html
+geometry/introduction.html
+geometry/compilation.html
+geometry/design.html
+geometry/quickstart.html
+geometry/spatial_indexes.html
+geometry/spatial_indexes/introduction.html
+geometry/spatial_indexes/rtree_quickstart.html
+geometry/spatial_indexes/creation_and_modification.html
+geometry/spatial_indexes/queries.html
+geometry/spatial_indexes/rtree_examples.html
+geometry/spatial_indexes/rtree_examples/quick_start.html
+geometry/spatial_indexes/rtree_examples/index_of_polygons_stored_in_vector.html
+geometry/spatial_indexes/rtree_examples/index_of_shared_pointers_to_polygons.html
+geometry/spatial_indexes/rtree_examples/index_of_iterators_of_a_map_storing_variant_geometries.html
+geometry/spatial_indexes/rtree_examples/specializing_index__indexable_function_object___storing_shared_pointers_in_the_rtree.html
+geometry/spatial_indexes/rtree_examples/using_indexablegetter_function_object___storing_indexes_of_external_container_s_elements.html
+geometry/spatial_indexes/rtree_examples/index_stored_in_shared_memory_using_boost_interprocess.html
+geometry/reference.html
+geometry/reference/access.html
+geometry/reference/access/get.html
+geometry/reference/access/get/get_1.html
+geometry/reference/access/get/get_1_with_index.html
+geometry/reference/access/get/get_as_radian.html
+geometry/reference/access/set.html
+geometry/reference/access/set/set_2.html
+geometry/reference/access/set/set_2_with_index.html
+geometry/reference/access/set/set_from_radian.html
+geometry/reference/access/exterior_ring.html
+geometry/reference/access/exterior_ring/exterior_ring_1.html
+geometry/reference/access/exterior_ring/exterior_ring_1_const_version.html
+geometry/reference/access/interior_rings.html
+geometry/reference/access/interior_rings/interior_rings_1.html
+geometry/reference/access/interior_rings/interior_rings_1_const_version.html
+geometry/reference/adapted.html
+geometry/reference/adapted/c_array.html
+geometry/reference/adapted/boost_array.html
+geometry/reference/adapted/boost_fusion.html
+geometry/reference/adapted/boost_tuple.html
+geometry/reference/adapted/boost_polygon.html
+geometry/reference/adapted/boost_polygon/point_data.html
+geometry/reference/adapted/boost_polygon/rectangle_data.html
+geometry/reference/adapted/boost_polygon/polygon_data.html
+geometry/reference/adapted/boost_polygon/polygon_with_holes_data.html
+geometry/reference/adapted/boost_range.html
+geometry/reference/adapted/boost_range/filtered.html
+geometry/reference/adapted/boost_range/reversed.html
+geometry/reference/adapted/boost_range/sliced.html
+geometry/reference/adapted/boost_range/strided.html
+geometry/reference/adapted/register.html
+geometry/reference/adapted/register/boost_geometry_register_box.html
+geometry/reference/adapted/register/boost_geometry_register_box_2d_4values.html
+geometry/reference/adapted/register/boost_geometry_register_box_templated.html
+geometry/reference/adapted/register/boost_geometry_register_linestring.html
+geometry/reference/adapted/register/boost_geometry_register_linestring_templated.html
+geometry/reference/adapted/register/boost_geometry_register_multi_linestring.html
+geometry/reference/adapted/register/boost_geometry_register_multi_linestring_templated.html
+geometry/reference/adapted/register/boost_geometry_register_multi_point.html
+geometry/reference/adapted/register/boost_geometry_register_multi_point_templated.html
+geometry/reference/adapted/register/boost_geometry_register_multi_polygon.html
+geometry/reference/adapted/register/boost_geometry_register_multi_polygon_templated.html
+geometry/reference/adapted/register/boost_geometry_register_point_2d.html
+geometry/reference/adapted/register/boost_geometry_register_point_2d_const.html
+geometry/reference/adapted/register/boost_geometry_register_point_2d_get_set.html
+geometry/reference/adapted/register/boost_geometry_register_point_3d.html
+geometry/reference/adapted/register/boost_geometry_register_point_3d_const.html
+geometry/reference/adapted/register/boost_geometry_register_point_3d_get_set.html
+geometry/reference/adapted/register/boost_geometry_register_ring.html
+geometry/reference/adapted/register/boost_geometry_register_ring_templated.html
+geometry/reference/algorithms.html
+geometry/reference/algorithms/area.html
+geometry/reference/algorithms/area/area_1.html
+geometry/reference/algorithms/area/area_2_with_strategy.html
+geometry/reference/algorithms/assign.html
+geometry/reference/algorithms/assign/assign.html
+geometry/reference/algorithms/assign/assign_inverse.html
+geometry/reference/algorithms/assign/assign_points.html
+geometry/reference/algorithms/assign/assign_values_3_2_coordinate_values.html
+geometry/reference/algorithms/assign/assign_values_4_3_coordinate_values.html
+geometry/reference/algorithms/assign/assign_values_5_4_coordinate_values.html
+geometry/reference/algorithms/assign/assign_zero.html
+geometry/reference/algorithms/append.html
+geometry/reference/algorithms/buffer.html
+geometry/reference/algorithms/buffer/buffer.html
+geometry/reference/algorithms/buffer/return_buffer.html
+geometry/reference/algorithms/centroid.html
+geometry/reference/algorithms/centroid/centroid_3_with_strategy.html
+geometry/reference/algorithms/centroid/centroid_2.html
+geometry/reference/algorithms/centroid/return_centroid_1.html
+geometry/reference/algorithms/centroid/return_centroid_2_with_strategy.html
+geometry/reference/algorithms/clear.html
+geometry/reference/algorithms/convert.html
+geometry/reference/algorithms/convex_hull.html
+geometry/reference/algorithms/correct.html
+geometry/reference/algorithms/covered_by.html
+geometry/reference/algorithms/covered_by/covered_by_2.html
+geometry/reference/algorithms/covered_by/covered_by_3_with_strategy.html
+geometry/reference/algorithms/difference.html
+geometry/reference/algorithms/disjoint.html
+geometry/reference/algorithms/distance.html
+geometry/reference/algorithms/distance/comparable_distance.html
+geometry/reference/algorithms/distance/distance_3_with_strategy.html
+geometry/reference/algorithms/distance/distance_2.html
+geometry/reference/algorithms/envelope.html
+geometry/reference/algorithms/envelope/envelope.html
+geometry/reference/algorithms/envelope/return_envelope.html
+geometry/reference/algorithms/equals.html
+geometry/reference/algorithms/expand.html
+geometry/reference/algorithms/for_each.html
+geometry/reference/algorithms/for_each/for_each_point.html
+geometry/reference/algorithms/for_each/for_each_segment.html
+geometry/reference/algorithms/intersection.html
+geometry/reference/algorithms/intersects.html
+geometry/reference/algorithms/intersects/intersects_1_one_geometry.html
+geometry/reference/algorithms/intersects/intersects_2_two_geometries.html
+geometry/reference/algorithms/length.html
+geometry/reference/algorithms/length/length_1.html
+geometry/reference/algorithms/length/length_2_with_strategy.html
+geometry/reference/algorithms/make.html
+geometry/reference/algorithms/make/make_2_2_coordinate_values.html
+geometry/reference/algorithms/make/make_3_3_coordinate_values.html
+geometry/reference/algorithms/make/make_inverse.html
+geometry/reference/algorithms/make/make_zero.html
+geometry/reference/algorithms/num_geometries.html
+geometry/reference/algorithms/num_interior_rings.html
+geometry/reference/algorithms/num_points.html
+geometry/reference/algorithms/overlaps.html
+geometry/reference/algorithms/perimeter.html
+geometry/reference/algorithms/perimeter/perimeter_1.html
+geometry/reference/algorithms/perimeter/perimeter_2_with_strategy.html
+geometry/reference/algorithms/reverse.html
+geometry/reference/algorithms/simplify.html
+geometry/reference/algorithms/simplify/simplify_4_with_strategy.html
+geometry/reference/algorithms/simplify/simplify_3.html
+geometry/reference/algorithms/sym_difference.html
+geometry/reference/algorithms/touches.html
+geometry/reference/algorithms/touches/touches_1_one_geometry.html
+geometry/reference/algorithms/touches/touches_2_two_geometries.html
+geometry/reference/algorithms/transform.html
+geometry/reference/algorithms/transform/transform_3_with_strategy.html
+geometry/reference/algorithms/transform/transform_2.html
+geometry/reference/algorithms/union_.html
+geometry/reference/algorithms/unique.html
+geometry/reference/algorithms/within.html
+geometry/reference/algorithms/within/within_2.html
+geometry/reference/algorithms/within/within_3_with_strategy.html
+geometry/reference/arithmetic.html
+geometry/reference/arithmetic/add_point.html
+geometry/reference/arithmetic/add_value.html
+geometry/reference/arithmetic/assign_point.html
+geometry/reference/arithmetic/assign_value.html
+geometry/reference/arithmetic/divide_point.html
+geometry/reference/arithmetic/divide_value.html
+geometry/reference/arithmetic/dot_product.html
+geometry/reference/arithmetic/multiply_point.html
+geometry/reference/arithmetic/multiply_value.html
+geometry/reference/arithmetic/subtract_point.html
+geometry/reference/arithmetic/subtract_value.html
+geometry/reference/concepts.html
+geometry/reference/concepts/concept_point.html
+geometry/reference/concepts/concept_linestring.html
+geometry/reference/concepts/concept_polygon.html
+geometry/reference/concepts/concept_multi_point.html
+geometry/reference/concepts/concept_multi_linestring.html
+geometry/reference/concepts/concept_multi_polygon.html
+geometry/reference/concepts/concept_box.html
+geometry/reference/concepts/concept_ring.html
+geometry/reference/concepts/concept_segment.html
+geometry/reference/constants.html
+geometry/reference/constants/min_corner.html
+geometry/reference/constants/max_corner.html
+geometry/reference/cs.html
+geometry/reference/cs/cs_cartesian.html
+geometry/reference/cs/cs_spherical.html
+geometry/reference/cs/cs_spherical_equatorial.html
+geometry/reference/cs/cs_geographic.html
+geometry/reference/core.html
+geometry/reference/core/closure.html
+geometry/reference/core/coordinate_system.html
+geometry/reference/core/coordinate_type.html
+geometry/reference/core/cs_tag.html
+geometry/reference/core/degree.html
+geometry/reference/core/dimension.html
+geometry/reference/core/interior_type.html
+geometry/reference/core/is_radian.html
+geometry/reference/core/point_order.html
+geometry/reference/core/point_type.html
+geometry/reference/core/radian.html
+geometry/reference/core/ring_type.html
+geometry/reference/core/tag.html
+geometry/reference/core/tag_cast.html
+geometry/reference/enumerations.html
+geometry/reference/enumerations/closure_selector.html
+geometry/reference/enumerations/order_selector.html
+geometry/reference/exceptions.html
+geometry/reference/exceptions/exception.html
+geometry/reference/exceptions/centroid_exception.html
+geometry/reference/io.html
+geometry/reference/io/wkt.html
+geometry/reference/io/svg.html
+geometry/reference/io/svg/svg.html
+geometry/reference/io/svg/svg_mapper.html
+geometry/reference/iterators.html
+geometry/reference/iterators/closing_iterator.html
+geometry/reference/iterators/ever_circling_iterator.html
+geometry/reference/models.html
+geometry/reference/models/model_point.html
+geometry/reference/models/model_d2_point_xy.html
+geometry/reference/models/model_linestring.html
+geometry/reference/models/model_polygon.html
+geometry/reference/models/model_multi_point.html
+geometry/reference/models/model_multi_linestring.html
+geometry/reference/models/model_multi_polygon.html
+geometry/reference/models/model_box.html
+geometry/reference/models/model_ring.html
+geometry/reference/models/model_segment.html
+geometry/reference/models/model_referring_segment.html
+geometry/reference/spatial_indexes.html
+geometry/reference/spatial_indexes/parameters.html
+geometry/reference/spatial_indexes/observers.html
+geometry/reference/strategies.html
+geometry/reference/strategies/strategy_distance_pythagoras.html
+geometry/reference/strategies/strategy_distance_haversine.html
+geometry/reference/strategies/strategy_distance_projected_point.html
+geometry/reference/strategies/strategy_distance_cross_track.html
+geometry/reference/strategies/strategy_area_surveyor.html
+geometry/reference/strategies/strategy_area_huiller.html
+geometry/reference/strategies/strategy_centroid_average.html
+geometry/reference/strategies/strategy_centroid_bashein_detmer.html
+geometry/reference/strategies/strategy_convex_hull_graham_andrew.html
+geometry/reference/strategies/strategy_side_side_by_triangle.html
+geometry/reference/strategies/strategy_side_side_by_cross_track.html
+geometry/reference/strategies/strategy_side_spherical_side_formula.html
+geometry/reference/strategies/strategy_simplify_douglas_peucker.html
+geometry/reference/strategies/strategy_transform_inverse_transformer.html
+geometry/reference/strategies/strategy_transform_map_transformer.html
+geometry/reference/strategies/strategy_transform_rotate_transformer.html
+geometry/reference/strategies/strategy_transform_scale_transformer.html
+geometry/reference/strategies/strategy_transform_translate_transformer.html
+geometry/reference/strategies/strategy_transform_ublas_transformer.html
+geometry/reference/strategies/strategy_within_winding.html
+geometry/reference/strategies/strategy_within_franklin.html
+geometry/reference/strategies/strategy_within_crossings_multiply.html
+geometry/reference/views.html
+geometry/reference/views/box_view.html
+geometry/reference/views/segment_view.html
+geometry/reference/views/closeable_view.html
+geometry/reference/views/reversible_view.html
+geometry/reference/views/identity_view.html
+geometry/indexes.html
+geometry/indexes/matrix.html
+geometry/indexes/alphabetical_index.html
+geometry/examples.html
+geometry/examples/example__adapting_a_legacy_geometry_object_model.html
+geometry/examples/example_source_code__adapting_a_legacy_geometry_object_model.html
+geometry/release_notes.html
+geometry/aboutdoc.html
+geometry/acknowledgments.html
diff --git a/libs/geometry/doc/html/img/algorithms/centroid.png b/libs/geometry/doc/html/img/algorithms/centroid.png
new file mode 100644
index 000000000..fca663855
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/centroid.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/algorithms/convex_hull.png b/libs/geometry/doc/html/img/algorithms/convex_hull.png
new file mode 100644
index 000000000..77f3213aa
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/convex_hull.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/algorithms/difference_a.png b/libs/geometry/doc/html/img/algorithms/difference_a.png
new file mode 100644
index 000000000..ce019857e
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/difference_a.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/algorithms/difference_b.png b/libs/geometry/doc/html/img/algorithms/difference_b.png
new file mode 100644
index 000000000..ae3e61795
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/difference_b.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/algorithms/envelope.png b/libs/geometry/doc/html/img/algorithms/envelope.png
new file mode 100644
index 000000000..8e36a0fc7
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/envelope.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/algorithms/intersection.png b/libs/geometry/doc/html/img/algorithms/intersection.png
new file mode 100644
index 000000000..51e91eabf
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/intersection.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/algorithms/return_envelope.png b/libs/geometry/doc/html/img/algorithms/return_envelope.png
new file mode 100644
index 000000000..86bf394fe
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/return_envelope.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/algorithms/sym_difference.png b/libs/geometry/doc/html/img/algorithms/sym_difference.png
new file mode 100644
index 000000000..50963b5c4
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/sym_difference.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/algorithms/union.png b/libs/geometry/doc/html/img/algorithms/union.png
new file mode 100644
index 000000000..ff841f8f0
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/union.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/algorithms/within.png b/libs/geometry/doc/html/img/algorithms/within.png
new file mode 100644
index 000000000..1d0987793
--- /dev/null
+++ b/libs/geometry/doc/html/img/algorithms/within.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/build_non_ovl.png b/libs/geometry/doc/html/img/index/rtree/build_non_ovl.png
new file mode 100644
index 000000000..8bcb0d675
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/build_non_ovl.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/build_ovl.png b/libs/geometry/doc/html/img/index/rtree/build_ovl.png
new file mode 100644
index 000000000..338766666
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/build_ovl.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/bulk.png b/libs/geometry/doc/html/img/index/rtree/bulk.png
new file mode 100644
index 000000000..7c15e3d4a
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/bulk.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/disjoint.png b/libs/geometry/doc/html/img/index/rtree/disjoint.png
new file mode 100644
index 000000000..131a91586
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/disjoint.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/intersects.png b/libs/geometry/doc/html/img/index/rtree/intersects.png
new file mode 100644
index 000000000..066a1dd80
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/intersects.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/intersects_mpoly.png b/libs/geometry/doc/html/img/index/rtree/intersects_mpoly.png
new file mode 100644
index 000000000..f6172d210
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/intersects_mpoly.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/intersects_poly.png b/libs/geometry/doc/html/img/index/rtree/intersects_poly.png
new file mode 100644
index 000000000..d87607857
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/intersects_poly.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/intersects_ring.png b/libs/geometry/doc/html/img/index/rtree/intersects_ring.png
new file mode 100644
index 000000000..6af2c96a3
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/intersects_ring.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/knn.png b/libs/geometry/doc/html/img/index/rtree/knn.png
new file mode 100644
index 000000000..f142919d8
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/knn.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/linear.png b/libs/geometry/doc/html/img/index/rtree/linear.png
new file mode 100644
index 000000000..15cbd4c3e
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/linear.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/overlaps.png b/libs/geometry/doc/html/img/index/rtree/overlaps.png
new file mode 100644
index 000000000..70d77a120
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/overlaps.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/path.png b/libs/geometry/doc/html/img/index/rtree/path.png
new file mode 100644
index 000000000..fa393abff
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/path.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/quadratic.png b/libs/geometry/doc/html/img/index/rtree/quadratic.png
new file mode 100644
index 000000000..9fedf85a7
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/quadratic.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/query_non_ovl.png b/libs/geometry/doc/html/img/index/rtree/query_non_ovl.png
new file mode 100644
index 000000000..537265fab
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/query_non_ovl.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/query_ovl.png b/libs/geometry/doc/html/img/index/rtree/query_ovl.png
new file mode 100644
index 000000000..12a2eab6f
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/query_ovl.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/rstar.png b/libs/geometry/doc/html/img/index/rtree/rstar.png
new file mode 100644
index 000000000..45308b361
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/rstar.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/index/rtree/within.png b/libs/geometry/doc/html/img/index/rtree/within.png
new file mode 100644
index 000000000..44ab19e48
--- /dev/null
+++ b/libs/geometry/doc/html/img/index/rtree/within.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/io/svg_mapper.png b/libs/geometry/doc/html/img/io/svg_mapper.png
new file mode 100644
index 000000000..8330692aa
--- /dev/null
+++ b/libs/geometry/doc/html/img/io/svg_mapper.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/nyi.png b/libs/geometry/doc/html/img/nyi.png
new file mode 100644
index 000000000..94c9321db
--- /dev/null
+++ b/libs/geometry/doc/html/img/nyi.png
Binary files differ
diff --git a/libs/geometry/doc/html/img/ok.png b/libs/geometry/doc/html/img/ok.png
new file mode 100644
index 000000000..4a232df49
--- /dev/null
+++ b/libs/geometry/doc/html/img/ok.png
Binary files differ
diff --git a/libs/geometry/doc/html/index.html b/libs/geometry/doc/html/index.html
new file mode 100644
index 000000000..a18e9dc09
--- /dev/null
+++ b/libs/geometry/doc/html/index.html
@@ -0,0 +1,132 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Chapter&#160;1.&#160;Geometry</title>
+<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="Chapter&#160;1.&#160;Geometry">
+<link rel="next" href="geometry/introduction.html" title="Introduction">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
+<td align="center"><a href="../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="geometry/introduction.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
+<div class="chapter">
+<div class="titlepage"><div>
+<div><h2 class="title">
+<a name="geometry"></a>Chapter&#160;1.&#160;Geometry</h2></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Barend</span> <span class="surname">Gehrels</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Bruno</span> <span class="surname">Lalande</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Mateusz</span> <span class="surname">Loskot</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Adam</span> <span class="surname">Wulkiewicz</span>
+</h3></div></div>
+<div><p class="copyright">Copyright &#169; 2009-2013 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz</p></div>
+<div><div class="legalnotice">
+<a name="geometry.legal"></a><p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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>)
+ </p>
+</div></div>
+</div></div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl class="toc">
+<dt><span class="section"><a href="geometry/introduction.html">Introduction</a></span></dt>
+<dt><span class="section"><a href="geometry/compilation.html">Compilation</a></span></dt>
+<dt><span class="section"><a href="geometry/design.html">Design Rationale</a></span></dt>
+<dt><span class="section"><a href="geometry/quickstart.html">Quick Start</a></span></dt>
+<dt><span class="section"><a href="geometry/spatial_indexes.html">Spatial Indexes</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="geometry/spatial_indexes/introduction.html">Introduction</a></span></dt>
+<dt><span class="section"><a href="geometry/spatial_indexes/rtree_quickstart.html">Quick Start</a></span></dt>
+<dt><span class="section"><a href="geometry/spatial_indexes/creation_and_modification.html">Creation
+ and Modification</a></span></dt>
+<dt><span class="section"><a href="geometry/spatial_indexes/queries.html">Queries</a></span></dt>
+<dt><span class="section"><a href="geometry/spatial_indexes/rtree_examples.html">Examples</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="geometry/reference.html">Reference</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="geometry/reference/access.html">Access Functions</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/adapted.html">Adapted models</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/algorithms.html">Algorithms</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/arithmetic.html">Arithmetic</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/concepts.html">Concepts</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/constants.html">Constants</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/cs.html">Coordinate Systems</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/core.html">Core Metafunctions</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/enumerations.html">Enumerations</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/exceptions.html">Exceptions</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/io.html">IO (input/output)</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/iterators.html">Iterators</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/models.html">Models</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/spatial_indexes.html">Spatial Indexes</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/strategies.html">Strategies</a></span></dt>
+<dt><span class="section"><a href="geometry/reference/views.html">Views</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="geometry/indexes.html">Indexes</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="geometry/indexes/matrix.html">Reference Matrix</a></span></dt>
+<dt><span class="section"><a href="geometry/indexes/alphabetical_index.html">Alphabetical Index</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="geometry/examples.html">Examples</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="geometry/examples/example__adapting_a_legacy_geometry_object_model.html">Example:
+ Adapting a legacy geometry object model</a></span></dt>
+<dt><span class="section"><a href="geometry/examples/example_source_code__adapting_a_legacy_geometry_object_model.html">Example
+ source code: Adapting a legacy geometry object model</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="geometry/release_notes.html">Release Notes</a></span></dt>
+<dt><span class="section"><a href="geometry/aboutdoc.html">About this Documentation</a></span></dt>
+<dt><span class="section"><a href="geometry/acknowledgments.html">Acknowledgments</a></span></dt>
+</dl>
+</div>
+<h3>
+<a name="geometry.h0"></a>
+ <span class="phrase"><a name="geometry.contributions"></a></span><a class="link" href="index.html#geometry.contributions">Contributions</a>
+ </h3>
+<p>
+ Boost.Geometry contains contributions by:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Akira Takahashi (adaption of Boost.Fusion)
+ </li>
+<li class="listitem">
+ Alfredo Correa (adaption of Boost.Array)
+ </li>
+<li class="listitem">
+ Andrew Hundt (varray container, aka. static_vector)
+ </li>
+<li class="listitem">
+ Federico Fern&#225;ndez (preliminary version of R-tree spatial index)
+ </li>
+<li class="listitem">
+ Karsten Ahnert (patch for cross-track distance)
+ </li>
+<li class="listitem">
+ Mats Taraldsvik (documentation: adapting a legacy model)
+ </li>
+</ul></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"><p><small>Last revised: June 25, 2013 at 21:57:28 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="geometry/introduction.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
+</body>
+</html>
diff --git a/libs/geometry/doc/html/svg_simplify_country.png b/libs/geometry/doc/html/svg_simplify_country.png
new file mode 100644
index 000000000..e49b72cb4
--- /dev/null
+++ b/libs/geometry/doc/html/svg_simplify_country.png
Binary files differ
diff --git a/libs/geometry/doc/html/svg_simplify_road.png b/libs/geometry/doc/html/svg_simplify_road.png
new file mode 100644
index 000000000..71f326fcd
--- /dev/null
+++ b/libs/geometry/doc/html/svg_simplify_road.png
Binary files differ
diff --git a/libs/geometry/doc/imports.qbk b/libs/geometry/doc/imports.qbk
new file mode 100644
index 000000000..8ef073ab1
--- /dev/null
+++ b/libs/geometry/doc/imports.qbk
@@ -0,0 +1,110 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[import src/examples/quick_start.cpp]
+
+[import src/examples/algorithms/area.cpp]
+[import src/examples/algorithms/area_with_strategy.cpp]
+[import src/examples/algorithms/append.cpp]
+[import src/examples/algorithms/assign.cpp]
+[import src/examples/algorithms/assign_2d_point.cpp]
+[import src/examples/algorithms/assign_3d_point.cpp]
+[import src/examples/algorithms/assign_inverse.cpp]
+[import src/examples/algorithms/assign_points.cpp]
+[import src/examples/algorithms/clear.cpp]
+[import src/examples/algorithms/centroid.cpp]
+[import src/examples/algorithms/comparable_distance.cpp]
+[import src/examples/algorithms/convert.cpp]
+[import src/examples/algorithms/convex_hull.cpp]
+[import src/examples/algorithms/correct.cpp]
+[import src/examples/algorithms/distance.cpp]
+[import src/examples/algorithms/difference.cpp]
+[import src/examples/algorithms/envelope.cpp]
+[import src/examples/algorithms/equals.cpp]
+[import src/examples/algorithms/expand.cpp]
+[import src/examples/algorithms/for_each_point.cpp]
+[import src/examples/algorithms/for_each_point_const.cpp]
+[import src/examples/algorithms/for_each_segment_const.cpp]
+[import src/examples/algorithms/length.cpp]
+[import src/examples/algorithms/length_with_strategy.cpp]
+[import src/examples/algorithms/make_2d_point.cpp]
+[import src/examples/algorithms/make_3d_point.cpp]
+[import src/examples/algorithms/make_inverse.cpp]
+[import src/examples/algorithms/make_with_range.cpp]
+[import src/examples/algorithms/intersection_ls_ls_point.cpp]
+[import src/examples/algorithms/intersection_segment.cpp]
+[import src/examples/algorithms/intersection_poly_poly.cpp]
+[import src/examples/algorithms/intersects_linestring.cpp]
+[import src/examples/algorithms/num_geometries.cpp]
+[import src/examples/algorithms/num_interior_rings.cpp]
+[import src/examples/algorithms/num_points.cpp]
+[import src/examples/algorithms/reverse.cpp]
+[import src/examples/algorithms/return_envelope.cpp]
+[import src/examples/algorithms/simplify.cpp]
+[import src/examples/algorithms/sym_difference.cpp]
+[import src/examples/algorithms/transform.cpp]
+[import src/examples/algorithms/transform_with_strategy.cpp]
+[import src/examples/algorithms/union.cpp]
+[import src/examples/algorithms/unique.cpp]
+[import src/examples/algorithms/within.cpp]
+
+[import src/examples/core/coordinate_type.cpp]
+[import src/examples/core/coordinate_system.cpp]
+[import src/examples/core/coordinate_dimension.cpp]
+[import src/examples/core/point_order.cpp]
+[import src/examples/core/closure.cpp]
+
+[import src/examples/core/get_point.cpp]
+[import src/examples/core/get_box.cpp]
+[import src/examples/core/set_point.cpp]
+[import src/examples/core/set_box.cpp]
+[import src/examples/core/degree_radian.cpp]
+
+[import src/examples/core/interior_type.cpp]
+[import src/examples/core/point_type.cpp]
+[import src/examples/core/ring_type.cpp]
+[import src/examples/core/rings.cpp]
+[import src/examples/core/tag.cpp]
+[import src/examples/core/tag_cast.cpp]
+
+[import src/examples/geometries/point.cpp]
+[import src/examples/geometries/adapted/c_array.cpp]
+[import src/examples/geometries/adapted/boost_array.cpp]
+[import src/examples/geometries/adapted/boost_fusion.cpp]
+[import src/examples/geometries/adapted/boost_polygon.cpp]
+[import src/examples/geometries/adapted/boost_tuple.cpp]
+
+[import src/examples/geometries/adapted/boost_range/filtered.cpp]
+[import src/examples/geometries/adapted/boost_range/reversed.cpp]
+[import src/examples/geometries/adapted/boost_range/sliced.cpp]
+[import src/examples/geometries/adapted/boost_range/strided.cpp]
+[import src/examples/geometries/adapted/boost_range/uniqued.cpp]
+
+[import src/examples/geometries/register/box.cpp]
+[import src/examples/geometries/register/box_templated.cpp]
+[import src/examples/geometries/register/box_2d_4values.cpp]
+[import src/examples/geometries/register/point.cpp]
+[import src/examples/geometries/register/linestring.cpp]
+[import src/examples/geometries/register/linestring_templated.cpp]
+[import src/examples/geometries/register/ring.cpp]
+[import src/examples/geometries/register/ring_templated.cpp]
+
+[import src/examples/geometries/register/multi_point.cpp]
+[import src/examples/geometries/register/multi_point_templated.cpp]
+
+[import src/examples/geometries/register/multi_linestring.cpp]
+[import src/examples/geometries/register/multi_polygon.cpp]
+
+[import src/examples/io/svg.cpp]
+
+[import src/examples/views/box_view.cpp]
+[import src/examples/views/segment_view.cpp]
diff --git a/libs/geometry/doc/index/Doxyfile b/libs/geometry/doc/index/Doxyfile
new file mode 100644
index 000000000..597de34d0
--- /dev/null
+++ b/libs/geometry/doc/index/Doxyfile
@@ -0,0 +1,332 @@
+# Doxyfile 1.8.1.2
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
+PROJECT_NAME = "Boost.Geometry.Index"
+PROJECT_NUMBER =
+PROJECT_BRIEF =
+PROJECT_LOGO =
+OUTPUT_DIRECTORY =
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = YES
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+QT_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 8
+ALIASES =
+TCL_SUBST =
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+EXTENSION_MAPPING =
+MARKDOWN_SUPPORT = YES
+BUILTIN_STL_SUPPORT = YES
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
+DISTRIBUTE_GROUP_DOC = NO
+SUBGROUPING = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS = NO
+TYPEDEF_HIDES_STRUCT = NO
+SYMBOL_CACHE_SIZE = 0
+LOOKUP_CACHE_SIZE = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = NO
+EXTRACT_PRIVATE = NO
+EXTRACT_PACKAGE = NO
+EXTRACT_STATIC = NO
+EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = NO
+EXTRACT_ANON_NSPACES = NO
+HIDE_UNDOC_MEMBERS = YES
+HIDE_UNDOC_CLASSES = YES
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = NO
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = YES
+FORCE_LOCAL_INCLUDES = NO
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+SORT_BRIEF_DOCS = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES = NO
+SORT_BY_SCOPE_NAME = NO
+STRICT_PROTO_MATCHING = NO
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+SHOW_FILES = YES
+SHOW_NAMESPACES = YES
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
+CITE_BIB_FILES =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = YES
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = ../../../../boost/geometry/index/ \
+ ../../../../boost/geometry/index/adaptors
+INPUT_ENCODING = UTF-8
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cxx \
+ *.cpp \
+ *.c++ \
+ *.d \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.idl \
+ *.odl \
+ *.cs \
+ *.php \
+ *.php3 \
+ *.inc \
+ *.m \
+ *.markdown \
+ *.md \
+ *.mm \
+ *.dox \
+ *.py \
+ *.f90 \
+ *.f \
+ *.for \
+ *.vhd \
+ *.vhdl
+RECURSIVE = NO
+EXCLUDE =
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS = *
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+FILTER_SOURCE_PATTERNS =
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = NO
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION = NO
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS = NO
+VERBATIM_HEADERS = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = YES
+COLS_IN_ALPHA_INDEX = 5
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html_by_doxygen
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_EXTRA_FILES =
+HTML_COLORSTYLE_HUE = 220
+HTML_COLORSTYLE_SAT = 100
+HTML_COLORSTYLE_GAMMA = 80
+HTML_TIMESTAMP = YES
+HTML_DYNAMIC_SECTIONS = NO
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME = Publisher
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
+BINARY_TOC = NO
+TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
+QHG_LOCATION =
+GENERATE_ECLIPSEHELP = NO
+ECLIPSE_DOC_ID = org.doxygen.Project
+DISABLE_INDEX = NO
+GENERATE_TREEVIEW = NO
+ENUM_VALUES_PER_LINE = 4
+TREEVIEW_WIDTH = 250
+EXT_LINKS_IN_WINDOW = NO
+FORMULA_FONTSIZE = 10
+FORMULA_TRANSPARENT = YES
+USE_MATHJAX = NO
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+MATHJAX_EXTENSIONS =
+SEARCHENGINE = YES
+SERVER_BASED_SEARCH = NO
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4
+EXTRA_PACKAGES =
+LATEX_HEADER =
+LATEX_FOOTER =
+PDF_HYPERLINKS = YES
+USE_PDFLATEX = YES
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+LATEX_SOURCE_CODE = NO
+LATEX_BIB_STYLE = plain
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = YES
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = NO
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = YES
+EXPAND_ONLY_PREDEF = YES
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED = "BOOST_RV_REF(T)=T &&" \
+ "BOOST_COPY_ASSIGN_REF(T)=T const &"
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE =
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+PERL_PATH = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+MSCGEN_PATH =
+HIDE_UNDOC_RELATIONS = YES
+HAVE_DOT = NO
+DOT_NUM_THREADS = 0
+DOT_FONTNAME = Helvetica
+DOT_FONTSIZE = 10
+DOT_FONTPATH =
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+UML_LIMIT_NUM_FIELDS = 10
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+INTERACTIVE_SVG = NO
+DOT_PATH =
+DOTFILE_DIRS =
+MSCFILE_DIRS =
+DOT_GRAPH_MAX_NODES = 50
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
diff --git a/libs/geometry/doc/index/Jamfile.v2 b/libs/geometry/doc/index/Jamfile.v2
new file mode 100644
index 000000000..e6f507006
--- /dev/null
+++ b/libs/geometry/doc/index/Jamfile.v2
@@ -0,0 +1,32 @@
+# Boost.Geometry Index
+#
+# Copyright (c) 2011-2012 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)
+
+project geometry_index/doc ;
+
+import boostbook ;
+import quickbook ;
+
+boostbook geometry_index-doc
+ :
+ index.qbk
+ :
+ <dependency>Jamfile.v2
+ <dependency>generated/rtree.qbk
+
+ <format>html
+ <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/doc/html
+ <xsl:param>chunk.section.depth=2
+ <xsl:param>chunk.first.sections=1
+ <xsl:param>toc.section.depth=3
+ <xsl:param>toc.max.depth=2
+ <xsl:param>generate.section.toc.level=2
+ <xsl:param>boost.root=http://www.boost.org/doc/libs/release
+
+ <quickbook-define>enable_index
+ <include>$(here)
+ ;
diff --git a/libs/geometry/doc/index/imports.qbk b/libs/geometry/doc/index/imports.qbk
new file mode 100644
index 000000000..5d81a7639
--- /dev/null
+++ b/libs/geometry/doc/index/imports.qbk
@@ -0,0 +1,17 @@
+[/============================================================================
+ Boost.Geometry Index
+
+ Copyright (c) 2011-2012 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)
+=============================================================================/]
+
+[import src/examples/rtree/quick_start.cpp]
+[import src/examples/rtree/polygons_vector.cpp]
+[import src/examples/rtree/polygons_shared_ptr.cpp]
+[import src/examples/rtree/variants_map.cpp]
+[import src/examples/rtree/value_shared_ptr.cpp]
+[import src/examples/rtree/value_index.cpp]
+[import src/examples/rtree/interprocess.cpp]
diff --git a/libs/geometry/doc/index/index.qbk b/libs/geometry/doc/index/index.qbk
new file mode 100644
index 000000000..e8021c3e7
--- /dev/null
+++ b/libs/geometry/doc/index/index.qbk
@@ -0,0 +1,43 @@
+[/============================================================================
+ Boost.Geometry Index
+
+ Copyright (c) 2011-2012 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)
+=============================================================================/]
+
+[/library Geometry Index
+ [quickbook 1.5]
+ [authors [Wulkiewicz, Adam]]
+ [copyright 2011-2013 Adam Wulkiewicz]
+ [purpose Documentation of Boost.Geometry Index library]
+ [license
+ Distributed under 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])
+ ]
+ [id geometry]
+ [category geometry]
+/]
+
+[def __boost_geometry_index__ Boost.Geometry.Index]
+
+[def __rtree__ R-tree]
+
+[def __value__ Value]
+[def __parameters__ Parameters]
+[def __allocator__ Allocator]
+[def __indexable__ Indexable]
+
+[include imports.qbk]
+
+[include introduction.qbk]
+
+[/include rtree.qbk]
+[include rtree/quickstart.qbk]
+[include rtree/creation.qbk]
+[include rtree/query.qbk]
+[include rtree/examples.qbk]
+[/include rtree/experimental.qbk]
diff --git a/libs/geometry/doc/index/introduction.qbk b/libs/geometry/doc/index/introduction.qbk
new file mode 100644
index 000000000..9f1a61886
--- /dev/null
+++ b/libs/geometry/doc/index/introduction.qbk
@@ -0,0 +1,114 @@
+[/============================================================================
+ 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 Introduction]
+
+The __boost_geometry_index__ is intended to gather data structures called spatial
+indexes which may be used to accelerate searching for objects in space. In general,
+spatial indexes stores geometric objects' representations and allows searching for
+objects occupying some space or close to some point in space.
+
+Currently, only one spatial index is implemented - __rtree__.
+
+[heading __rtree__]
+
+__rtree__ is a tree data structure used for spatial searching. It was proposed by
+Antonin Guttman in 1984 [footnote Guttman, A. (1984). /R-Trees: A Dynamic Index Structure for Spatial Searching/]
+as an expansion of B-tree for multi-dimensional data. It may be used to store points or volumetric data in order to
+perform a spatial query. This query may for example return objects that are inside some area or are close to some point in space
+[footnote Cheung, K.; Fu, A. (1998). /Enhanced Nearest Neighbour Search on the R-tree/].
+It's possible to insert new objects or to remove the ones already stored.
+
+The __rtree__ structure is presented on the image below. Each __rtree__'s node store a box describing the space occupied by
+its children nodes. At the bottom of the structure, there are leaf-nodes which contains values
+(geometric objects representations).
+
+[$img/index/rtree/rstar.png]
+
+The __rtree__ is a self-balanced data structure. The key part of balancing algorithm is node splitting algorithm
+[footnote Greene, D. (1989). /An implementation and performance analysis of spatial data access methods/]
+[footnote Beckmann, N.; Kriegel, H. P.; Schneider, R.; Seeger, B. (1990). /The R*-tree: an efficient and robust access method for points and rectangles/].
+Each algorithm produces different splits so the internal structure of a tree may be different for each one of them.
+In general, more complex algorithms analyses elements better and produces less overlapping nodes. In the searching process less nodes must be traversed
+in order to find desired objects. On the other hand more complex analysis takes more time. In general faster inserting will result in slower searching
+and vice versa. The performance of the R-tree depends on balancing algorithm, parameters and data inserted into the container.
+
+Additionally there are also algorithms creating R-tree containing some, number of objects. This technique is called bulk loading and is
+done by use of packing algorithm
+[footnote Leutenegger, Scott T.; Edgington, Jeffrey M.; Lopez, Mario A. (1997). /STR: A Simple and Efficient Algorithm for R-Tree Packing/]
+[footnote Garcia, Yvan J.; Lopez, Mario A.; Leutenegger, Scott T. (1997). /A Greedy Algorithm for Bulk Loading R-trees/].
+This method is faster and results in R-trees with better internal structure. This means that the query performance is increased.
+
+The examples of structures of trees created by use of different algorithms and exemplary operations times are presented below.
+
+[table
+[[] [Linear algorithm] [Quadratic algorithm] [R*-tree] [Packing algorithm (trunk)]]
+[[*Example structure*] [[$img/index/rtree/linear.png]] [[$img/index/rtree/quadratic.png]] [[$img/index/rtree/rstar.png]] [[$img/index/rtree/bulk.png]]]
+[[*1M Values inserts*] [1.76s] [2.47s] [6.19s] [1.67s]]
+[[*100k spatial queries*] [2.21s] [0.51s] [0.12s] [0.07s]]
+[[*100k knn queries*] [6.37s] [2.09s] [0.64s] [0.52]]
+]
+
+The performance of the R-tree for different values of Max parameter and Min=0.5*Max is presented in the table below.
+The configuration of the machine used for testing is: /Intel(R) Core(TM) i7 870 @ 2.93GHz, 8GB RAM, MS Windows 7 x64/.
+In the two upper figures you can see the performance of the __rtree__ storing random, relatively small, non-overlapping, 2d boxes.
+In the lower ones, the performance of the __rtree__ also storing random, 2d boxes, but this time quite big and possibly overlapping.
+As you can see, the __rtree__ performance is different in both cases.
+
+[table
+[[] [building] [querying]]
+[[*non overlapping*] [[$img/index/rtree/build_non_ovl.png]] [[$img/index/rtree/query_non_ovl.png]]]
+[[*overlapping*] [[$img/index/rtree/build_ovl.png]] [[$img/index/rtree/query_ovl.png]]]
+]
+
+[heading Implementation details]
+
+Key features of this implementation of the __rtree__ are:
+
+* capable to store arbitrary __value__ type,
+* three different balancing algorithms - linear, quadratic or rstar,
+* parameters (including maximal and minimal number of elements) may be passed as compile- or run-time parameters, in compile-time
+ version nodes elements are stored in static-size containers,
+* advanced queries - e.g. search for 5 nearest Values to some point and intersecting some Geometry but not within the other one,
+* C++11 conformant: move semantics, stateful allocators,
+* capable to store __value__ type with no default constructor,
+* in-memory storage (shared memory by use of Boost.Interprocess allocator).
+
+[heading Planned and experimental features]
+
+Below you can find features that will (or probably will) be added in the future releases:
+
+* rstar optimization (planned for release in Boost 1.55),
+* bulk loading (planned for release in Boost 1.55),
+* iterative queries - query iterators / type-erased query iterators (experimental),
+* path/ray query predicate - search for Values along Segment or LineString, closest to the starting point (experimental),
+* persistent storage.
+[/
+* 'reversed' spatial predicates or additional spatial predicates like contains(),
+* other geometries as Values, e.g. NSpheres. Rings would probably require using move semantics instead of copying
+* bounding tree - rtree variation capable to use other Geometries as bounds, e.g. NSpheres, Rings/convex polygons/ (moving required), Capsules, Elipses, Variants etc.
+* moving instead of copying + optimizations for movable/nonthrowing/trivialy copied elements
+* passing more than one nearest/path predicate - "returned value is one of k1 nearest values to p1 and ... and one of kN nearest values to pN"
+/]
+
+[heading Dependencies]
+
+R-tree depends on *Boost.Move*, *Boost.Container*, *Boost.Tuple*, *Boost.Utility*, *Boost.MPL*.
+
+[heading Contributors]
+
+The spatial index was originally started by Federico J. Fernandez during the Google Summer of Code 2008 program, mentored by Hartmut Kaiser.
+
+[heading Spatial thanks]
+
+I'd like to thank Barend Gehrels, Bruno Lalande, Mateusz Łoskot, Lucanus J. Simonson for their support and ideas.
+
+[endsect]
+
diff --git a/libs/geometry/doc/index/make_qbk.py b/libs/geometry/doc/index/make_qbk.py
new file mode 100755
index 000000000..9185f3f10
--- /dev/null
+++ b/libs/geometry/doc/index/make_qbk.py
@@ -0,0 +1,39 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+# ===========================================================================
+# Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+#
+# 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)9
+# ============================================================================
+
+import os, sys
+
+cmd = "doxygen_xml2qbk"
+cmd = cmd + " --xml xml/%s.xml"
+cmd = cmd + " --start_include boost/"
+cmd = cmd + " --output_style alt"
+cmd = cmd + " > generated/%s.qbk"
+
+os.system("doxygen Doxyfile")
+os.system(cmd % ("classboost_1_1geometry_1_1index_1_1rtree", "rtree"))
+os.system(cmd % ("group__rtree__functions", "rtree_functions"))
+
+os.system(cmd % ("structboost_1_1geometry_1_1index_1_1linear", "rtree_linear"))
+os.system(cmd % ("structboost_1_1geometry_1_1index_1_1quadratic", "rtree_quadratic"))
+os.system(cmd % ("structboost_1_1geometry_1_1index_1_1rstar", "rtree_rstar"))
+os.system(cmd % ("classboost_1_1geometry_1_1index_1_1dynamic__linear", "rtree_dynamic_linear"))
+os.system(cmd % ("classboost_1_1geometry_1_1index_1_1dynamic__quadratic", "rtree_dynamic_quadratic"))
+os.system(cmd % ("classboost_1_1geometry_1_1index_1_1dynamic__rstar", "rtree_dynamic_rstar"))
+
+os.system(cmd % ("structboost_1_1geometry_1_1index_1_1indexable", "indexable"))
+os.system(cmd % ("structboost_1_1geometry_1_1index_1_1equal__to", "equal_to"))
+
+os.system(cmd % ("group__predicates", "predicates"))
+#os.system(cmd % ("group__nearest__relations", "nearest_relations"))
+os.system(cmd % ("group__adaptors", "adaptors"))
+os.system(cmd % ("group__inserters", "inserters"))
+
+#os.system("b2")
diff --git a/libs/geometry/doc/index/rtree.qbk b/libs/geometry/doc/index/rtree.qbk
new file mode 100644
index 000000000..46063c8f5
--- /dev/null
+++ b/libs/geometry/doc/index/rtree.qbk
@@ -0,0 +1,21 @@
+[/============================================================================
+ Boost.Geometry Index
+
+ Copyright (c) 2011-2012 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 R-tree]
+
+[include rtree/introduction.qbk]
+[include rtree/quickstart.qbk]
+[include rtree/creation.qbk]
+[include rtree/query.qbk]
+[include rtree/examples.qbk]
+[include rtree/experimental.qbk]
+[/include rtree/reference.qbk]
+
+[endsect]
diff --git a/libs/geometry/doc/index/rtree/creation.qbk b/libs/geometry/doc/index/rtree/creation.qbk
new file mode 100644
index 000000000..0cb5d998b
--- /dev/null
+++ b/libs/geometry/doc/index/rtree/creation.qbk
@@ -0,0 +1,219 @@
+[/============================================================================
+ Boost.Geometry Index
+
+ Copyright (c) 2011-2012 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 Creation and Modification]
+
+[h4 Template parameters]
+
+__rtree__ has 5 parameters but only 2 are required:
+
+ rtree<Value,
+ Parameters,
+ IndexableGetter = index::indexable<Value>,
+ EqualTo = index::equal_to<Value>,
+ Allocator = std::allocator<Value> >
+
+* `__value__` - type of object which will be stored in the container,
+* `Parameters` - parameters type, inserting/splitting algorithm,
+* `IndexableGetter` - function object translating `__value__` to `__indexable__` (`__point__` or `__box__`) which __rtree__ can handle,
+* `EqualTo` - function object comparing `__value__`s,
+* `Allocator` - `Value`s allocator, all allocators needed by the container are created from it.
+
+[h4 Values and Indexables]
+
+__rtree__ may store `__value__`s of any type as long as passed function objects know how to interpret those `__value__`s, that is
+extract an `__indexable__` that the __rtree__ can handle and compare `__value__`s.
+
+By default function objects `index::indexable<Value>` and `index::equal_to<Value>` are defined for some typically used `__value__`
+types which may be stored without defining any additional classes. By default the rtree may store pure `__indexable__`s, pairs
+and tuples. In the case of those two collection types, the `__indexable__` must be the first stored type.
+
+* `__indexable__ = __point__ | __box__`
+* `__value__ = Indexable | std::pair<__indexable__, T> | tuple<__indexable__, ...>`
+
+By default `boost::tuple<...>` is supported on all compilers. If the compiler supports C++11 tuples and variadic templates
+then `std::tuple<...>` may be used "out of the box" as well.
+
+Examples of default `__value__` types:
+
+ geometry::model::point<...>
+ geometry::model::point_xy<...>
+ geometry::model::box<...>
+ std::pair<geometry::model::box<...>, unsigned>
+ boost::tuple<geometry::model::point<...>, int, float>
+
+The predefined `index::indexable<Value>` returns const reference to the `__indexable__` stored in the `__value__`.
+
+[important The translation is done quite frequently inside the container - each time the rtree needs it. ]
+
+The predefined `index::equal_to<Value>`:
+
+* for `__point__` and `__box__` - compares `__value__`s with geometry::equals().
+* for `std::pair<...>` - compares both components of the `__value__`. The first value stored in the pair is compared before the second one.
+ If the value stored in the pair is a Geometry, `geometry::equals()` is used. For other types it uses `operator==()`.
+* for `tuple<...>` - compares all components of the `__value__`. If the component is a `Geometry`, `geometry::equals()`
+ function is used. For other types it uses `operator==()`.
+
+[h4 Balancing algorithms compile-time parameters]
+
+`__value__`s may be inserted to the __rtree__ in many various ways. Final internal structure
+of the __rtree__ depends on algorithms used in the insertion process and parameters. The most important is
+nodes' balancing algorithm. Currently, three well-known types of R-trees may be created.
+
+Linear - classic __rtree__ using balancing algorithm of linear complexity
+
+ index::rtree< __value__, index::linear<16> > rt;
+
+Quadratic - classic __rtree__ using balancing algorithm of quadratic complexity
+
+ index::rtree< __value__, index::quadratic<16> > rt;
+
+R*-tree - balancing algorithm minimizing nodes' overlap with forced reinsertions
+
+ index::rtree< __value__, index::rstar<16> > rt;
+
+[h4 Balancing algorithms run-time parameters]
+
+Balancing algorithm parameters may be passed to the __rtree__ in run-time.
+To use run-time versions of the __rtree__ one may pass parameters which
+names start with `dynamic_`.
+
+ // linear
+ index::rtree<__value__, index::dynamic_linear> rt(index::dynamic_linear(16));
+
+ // quadratic
+ index::rtree<__value__, index::dynamic_quadratic> rt(index::dynamic_quadratic(16));
+
+ // rstar
+ index::rtree<__value__, index::dynamic_rstar> rt(index::dynamic_rstar(16));
+
+The obvious drawback is a slightly slower __rtree__.
+
+[h4 Non-default parameters]
+
+Non-default R-tree parameters are described in the reference.
+
+[h4 Copying, moving and swapping]
+
+The __rtree__ is copyable and movable container. Move semantics is implemented using Boost.Move library
+so it's possible to move the container on a compilers without rvalue references support.
+
+ // default constructor
+ index::rtree< __value__, index::rstar<8> > rt1;
+
+ // copy constructor
+ index::rtree< __value__, index::rstar<8> > rt2(r1);
+
+ // copy assignment
+ rt2 = r1;
+
+ // move constructor
+ index::rtree< __value__, index::rstar<8> > rt3(boost::move(rt1));
+
+ // move assignment
+ rt3 = boost::move(rt2);
+
+ // swap
+ rt3.swap(rt2);
+
+[h4 Inserting and removing Values]
+
+The following code creates an __rtree__ using quadratic balancing algorithm.
+
+ using namespace boost::geometry;
+ typedef std::pair<Box, int> __value__;
+ index::rtree< __value__, index::quadratic<16> > rt;
+
+To insert or remove a `__value__' by method call one may use the following
+code.
+
+ __value__ v = std::make_pair(__box__(...), 0);
+
+ rt.insert(v);
+
+ rt.remove(v);
+
+To insert or remove a `__value__' by function call one may use the following
+code.
+
+ __value__ v = std::make_pair(__box__(...), 0);
+
+ index::insert(rt, v);
+
+ index::remove(rt, v);
+
+Typically you will perform those operations in a loop in order to e.g. insert
+some number of `__value__`s corresponding to geometrical objects (e.g. `Polygons`)
+stored in another container.
+
+[h4 Additional interface]
+
+The __rtree__ allows creation, inserting and removing of Values from a range. The range may be passed as
+[first, last) Iterators pair or as a Range.
+
+ namespace bgi = boost::geometry::index;
+ typedef std::pair<Box, int> __value__;
+ typedef bgi::rtree< __value__, bgi::linear<32> > RTree;
+
+ std::vector<__value__> values;
+ /* vector filling code, here */
+
+ // create R-tree with default constructor and insert values with insert(Value const&)
+ RTree rt1;
+ BOOST_FOREACH(__value__ const& v, values)
+ rt1.insert(v);
+
+ // create R-tree with default constructor and insert values with insert(Iter, Iter)
+ RTree rt2;
+ rt2.insert(values.begin(), values.end());
+
+ // create R-tree with default constructor and insert values with insert(Range)
+ RTree rt3;
+ rt3.insert(values);
+
+ // create R-tree with constructor taking Iterators
+ RTree rt4(values.begin(), values.end());
+
+ // create R-tree with constructor taking Range
+ RTree rt5(values);
+
+ // remove values with remove(Value const&)
+ BOOST_FOREACH(__value__ const& v, values)
+ rt1.remove(v);
+
+ // remove values with remove(Iter, Iter)
+ rt2.remove(values.begin(), values.end());
+
+ // remove values with remove(Range)
+ rt3.remove(values);
+
+[h4 Insert iterator]
+
+There are functions like `std::copy()`, or __rtree__'s queries that copy values to an output iterator.
+In order to insert values to a container in this kind of function insert iterators may be used.
+Geometry.Index provide its own `bgi::insert_iterator<Container>` which is generated by
+`bgi::inserter()` function.
+
+ namespace bgi = boost::geometry::index;
+ typedef std::pair<Box, int> __value__;
+ typedef bgi::rtree< __value__, bgi::linear<32> > RTree;
+
+ std::vector<__value__> values;
+ /* vector filling code, here */
+
+ // create R-tree and insert values from the vector
+ RTree rt1;
+ std::copy(values.begin(), values.end(), bgi::inserter(rt1));
+
+ // create R-tree and insert values returned by a query
+ RTree rt2;
+ rt1.spatial_query(Box(/*...*/), bgi::inserter(rt2));
+
+[endsect] [/ Creation and Modification /]
diff --git a/libs/geometry/doc/index/rtree/examples.qbk b/libs/geometry/doc/index/rtree/examples.qbk
new file mode 100644
index 000000000..8b57bde7e
--- /dev/null
+++ b/libs/geometry/doc/index/rtree/examples.qbk
@@ -0,0 +1,41 @@
+[/============================================================================
+ 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 Index of polygons stored in vector]
+[rtree_polygons_vector]
+[endsect]
+
+[section Index of shared pointers to polygons]
+[rtree_polygons_shared_ptr]
+[endsect]
+
+[section Index of iterators of a map storing variant geometries]
+[rtree_variants_map]
+[endsect]
+
+[section Specializing index::indexable function object - storing shared pointers in the rtree]
+[rtree_value_shared_ptr]
+[endsect]
+
+[section Using IndexableGetter function object - storing indexes of external container's elements]
+[rtree_value_index]
+[endsect]
+
+[section Index stored in shared memory using Boost.Interprocess]
+[rtree_interprocess]
+[endsect]
+
+[endsect]
diff --git a/libs/geometry/doc/index/rtree/exception_safety.qbk b/libs/geometry/doc/index/rtree/exception_safety.qbk
new file mode 100644
index 000000000..8f1dbb6af
--- /dev/null
+++ b/libs/geometry/doc/index/rtree/exception_safety.qbk
@@ -0,0 +1,57 @@
+[/============================================================================
+ Boost.Geometry Index
+
+ Copyright (c) 2011-2012 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 Exception safety]
+
+In order to be exception-safe the __rtree__ requires:
+
+* exception-safe copy constructor and copy assignment of the `__value__`.
+* exception-safe copy constructor and copy assignment of the `CoordinateType` used in the `Indexable`.
+* nonthrowing copy constructor of the `Translator`.
+* nonthrowing destructors of above types.
+
+[table
+[[Operation] [exception-safety]]
+[[`rtree()`] [ /nothrow/ ]]
+[[`rtree(Iterator, Iterator)`] [ *strong* ]]
+[[`~rtree()`] [ /nothrow/ ]]
+[[][]]
+[[`rtree(rtree const&)`] [ *strong* ]]
+[[`operator=(rtree const&)`] [ *strong* ]]
+[[][]]
+[[`rtree(rtree &&)`] [ /nothrow/ ]]
+[[`operator=(rtree &&)`] [ /nothrow/ or *strong*
+[footnote /nothrow/ - if allocators are equal, *strong* - otherwise]]]
+[[`swap(rtree &)`] [ /nothrow/ ]]
+[[][]]
+[[`insert(__value__)`] [ not safe
+[footnote If this operation throws, the R-tree may be left in an inconsistent state, elements must not be inserted or removed, methods may return invalid data.]]]
+[[`insert(Iterator, Iterator)`][ not safe ]]
+[[`insert(Range)`] [ not safe ]]
+[[`remove(__value__)`] [ not safe ]]
+[[`remove(Iterator, Iterator)`][ not safe ]]
+[[`remove(Range)`] [ not safe ]]
+[[`clear()`] [ /nothrow/ ]]
+[[][]]
+[[`spatial_query(...)`] [ *strong* ]]
+[[`nearest_query(...)`] [ *strong* ]]
+[[`count(ValueOrIndexable)`] [ /nothrow/ ]]
+[[][]]
+[[`size()`] [ /nothrow/ ]]
+[[`empty()`] [ /nothrow/ ]]
+[[`box()`] [ /nothrow/ or *strong*
+[footnote /nothrow/ - if `CoordinateType` has nonthrowing copy constructor, *strong* - otherwise]]]
+[[][]]
+[[`get_allocator()`] [ /nothrow/ ]]
+[[`parameters()`] [ /nothrow/ ]]
+[[`translator()`] [ /nothrow/ ]]
+]
+
+[endsect] [/Exception safety/]
diff --git a/libs/geometry/doc/index/rtree/experimental.qbk b/libs/geometry/doc/index/rtree/experimental.qbk
new file mode 100644
index 000000000..21a7b8d1f
--- /dev/null
+++ b/libs/geometry/doc/index/rtree/experimental.qbk
@@ -0,0 +1,111 @@
+[/============================================================================
+ 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 Experimental Features]
+
+This section describes experimental features which are implemented but unavailable by default.
+Be aware that they may not be released in the future or functionalities may be released but
+behind different interface.
+
+To enable them one must define `BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL` in compiler's command line or before
+including spatial index.
+
+[heading Nearest query distance calculation]
+
+It is possible to define how distance to the non-point `__value__` should be calculated. To do this one may pass
+a relation object instead of a Point to the nearest predicate, as follows:
+
+ /* calculate distance to the Indexables' nearest points */
+ rtree.query(index::nearest(index::to_nearest(pt), k), std::back_inserter(returned_values)); // same as default
+
+ /* calculate distance to the Indexables' centroid */
+ rtree.query(index::nearest(index::to_centroid(pt), k), std::back_inserter(returned_values));
+
+ /* calculate distance to the Indexables' furthest points */
+ rtree.query(index::nearest(index::to_furthest(pt), k), std::back_inserter(returned_values));
+
+[heading Path query]
+
+Path query returns `k` first `__value__`s intersecting a path defined by a `Segment` or a`Linestring`. The result of a query returning first 5
+values intersecting a path is presented below. Path's flow is denoted by blue arrows, returned values are orange.
+
+[$img/index/rtree/path.png]
+
+To perform this query one may pass a `path()` predicate taking a `Segment` or a `Linestring` and maximum number of `__value__`s which
+should be returned:
+
+ rtree.query(index::path(segment, k), std::back_inserter(returned_values));
+ rtree.query(index::path(linestring, k), std::back_inserter(returned_values));
+
+[warning Only one distance predicate may be used in a query. This means that there can be only one `nearest()` or `path()` predicate passed. Passing more of them will result in compile-time error.]
+
+[heading Incremental queries]
+
+Sometimes there is a need to stop querying at some desired moment because for example the decision that query should find another value
+is made after analysis of previously returned values. There can also be desirable to pause querying and resume it later.
+
+Currently, those kind of incremental queries are implemented as input (single pass) const iterators, relatively
+big fat-iterators storing stack used in the tree-traversing process. Because the type of predicates passed
+to the query varies, the type of the iterator varies as well.
+
+Therefore to use query iterators one must pass them to some function template, then types will be deduced
+automatically. If iterators objects must be stored one may use Boost.Typeof library to retrieve a type from
+an expression or use C++11 `auto` or `decltype`.
+
+ /* function call */
+ std::copy(rtree.qbegin(index::intersects(box)), rtree.qend(index::intersects(box)), std::back_inserter(returned_values));
+
+ /* Boost.Typeof */
+ typedef BOOST_TYPEOF(rtree.qbegin(index::nearest(pt, 5))) const_query_iterator;
+ const_query_iterator first = rtree.qbegin(index::nearest(pt, 5));
+ const_query_iterator last = rtree.qend(index::nearest(pt, 5));
+ // ...
+ for ( ; first != last ; ++first )
+ *first; // do something with Value
+
+ /* C++11 */
+ auto first = rtree.qbegin(index::nearest(pt, 5));
+ auto last = rtree.qend(index::nearest(pt, 5));
+ // ...
+ for ( ; first != last ; ++first )
+ *first; // do something with Value
+
+`qend()` method is overloaded to return a different, lighter type of iterator which may be compared
+with query iterator to check if the querying was finished. But since it has different type than the one returned by
+`qbegin(Pred)` it can't be used with STL-like functions like `std::copy()` which expect that `first` and `last`
+iterators have the same type.
+
+ /* function call */
+ template <typename First, typename Last, typename Out>
+ void my_copy(First first, Last last, Out out)
+ {
+ for ( ; first != last ; ++out, ++first )
+ *out = *first;
+ }
+ // ...
+ my_copy(rtree.qbegin(index::intersects(box)), rtree.qend(), std::back_inserter(returned_values));
+
+ /* Boost.Typeof */
+ typedef BOOST_TYPEOF(rtree.qbegin(index::nearest(pt, 5))) const_query_iterator;
+ typedef BOOST_TYPEOF(rtree.qend()) end_iterator;
+ const_query_iterator first = rtree.qbegin(index::nearest(pt, 5));
+ end_iterator last = rtree.qend();
+ // ...
+ for ( ; first != last ; ++first )
+ *first; // do something with Value
+
+ /* C++11 */
+ auto first = rtree.qbegin(index::nearest(pt, 5));
+ auto last = rtree.qend();
+ // ...
+ for ( ; first != last ; ++first )
+ *first; // do something with Value
+
+[endsect] [/ Experimental features /]
diff --git a/libs/geometry/doc/index/rtree/introduction.qbk b/libs/geometry/doc/index/rtree/introduction.qbk
new file mode 100644
index 000000000..43477cc58
--- /dev/null
+++ b/libs/geometry/doc/index/rtree/introduction.qbk
@@ -0,0 +1,68 @@
+[/============================================================================
+ Boost.Geometry Index
+
+ Copyright (c) 2011-2012 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 Introduction]
+
+__rtree__ is a tree data structure used for spatial searching. It was proposed by
+Antonin Guttman in 1984 [footnote Guttman, A. (1984). /R-Trees: A Dynamic Index Structure for Spatial Searching/]
+as an expansion of B-tree for multi-dimensional data. It may be used to store points or volumetric data in order to
+perform a spatial query later. This query may return objects that are inside some area or are close to some point in space
+[footnote Cheung, K.; Fu, A. (1998). /Enhanced Nearest Neighbour Search on the R-tree/].
+
+The __rtree__ structure is presented on the image below. Each __rtree__'s node store a box describing the space occupied by
+its children nodes. At the bottom of the structure, there are leaf-nodes which contains values
+(geometric objects representations).
+
+[$img/index/rtree/rstar.png]
+
+The __rtree__ is a self-balanced data structure. The key part of balancing algorithm is node splitting algorithm
+[footnote Greene, D. (1989). /An implementation and performance analysis of spatial data access methods/]
+[footnote Beckmann, N.; Kriegel, H. P.; Schneider, R.; Seeger, B. (1990). /The R*-tree: an efficient and robust access method for points and rectangles/].
+Each algorithm produces different splits so the internal structure of a tree may be different for each one of them.
+In general more complex algorithms analyses elements better and produces less overlapping nodes. In the searching process less nodes must be traversed
+in order to find desired objects. On the other hand more complex analysis takes more time. In general faster inserting will result in slower searching
+and vice versa. The performance of the R-tree depends on balancing algorithm, parameters and data inserted into the container.
+Example structures of trees created by use of three different algorithms and operations time are presented below. Data used in benchmark was random,
+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*] [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]
+
+Key features of this implementation of the __rtree__ are:
+
+* capable to store arbitrary __value__ type,
+* three different creation algorithms - linear, quadratic or rstar,
+* parameters (including maximal and minimal number of elements) may be passed as compile- or run-time parameters,
+* advanced queries - e.g. search for 5 nearest values to some point and intersecting some region but not within the other one,
+* C++11 conformant: move semantics, stateful allocators,
+* capable to store __value__ type with no default constructor.
+
+[heading Dependencies]
+
+R-tree depends on *Boost.Move*, *Boost.Container*, *Boost.Tuple*, *Boost.Utility*, *Boost.MPL*.
+
+[heading Contributors]
+
+The spatial index was originally started by Federico J. Fernandez during the Google Summer of Code 2008 program, mentored by Hartmut Kaiser.
+
+[heading Spatial thanks]
+
+I'd like to thank Barend Gehrels, Bruno Lalande, Mateusz Łoskot, Lucanus J. Simonson for their support and ideas.
+
+[endsect]
+
+
diff --git a/libs/geometry/doc/index/rtree/query.qbk b/libs/geometry/doc/index/rtree/query.qbk
new file mode 100644
index 000000000..493654602
--- /dev/null
+++ b/libs/geometry/doc/index/rtree/query.qbk
@@ -0,0 +1,207 @@
+[/============================================================================
+ 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 Queries]
+
+Queries returns `__value__`s which meets some predicates. Currently supported are three types of predicates:
+
+* spatial predicates - spatial conditions that must be met by stored Value and some Geometry,
+* distance predicates - distance conditions that must be met by stored Value and some Geometry,
+* user-defined unary predicate - function, function object or lambda expression checking user-defined condition.
+
+For example queries may be used to retrieve Values:
+
+* intersecting some area but not within other area,
+* are nearest to some point,
+* overlapping a box and has user-defined property.
+
+[h4 Performing a query]
+
+There are three ways to perform a query presented below. All of them returns `__value__`s intersecting some
+region defined as a `__box__`.
+
+Method call
+
+ std::vector<__value__> returned_values;
+ __box__ box_region(...);
+ rt.query(bgi::intersects(box_region), std::back_inserter(returned_values));
+
+Function call
+
+ std::vector<__value__> returned_values;
+ __box__ box_region(...);
+ index::query(rt, bgi::intersects(box_region), std::back_inserter(returned_values));
+
+Use of pipe operator generating a range
+
+ __box__ box_region(...);
+ BOOST_FOREACH(__value__ & v, rt | index::adaptors::queried(bgi::intersects(box_region)))
+ ; // do something with v
+
+[h4 Spatial predicates]
+
+Queries using spatial predicates returns `__value__`s which are related somehow to some Geometry - box, polygon, etc.
+Names of spatial predicates correspond to names of __boost_geometry__ algorithms. Examples of some
+basic queries may be found in tables below. The query region and result `Value`s are orange.
+
+[table
+[[intersects(Box)] [covered_by(Box)] [disjoint(Box)] [overlaps(Box)] [within(Box)]]
+[[[$img/index/rtree/intersects.png]] [[$img/index/rtree/within.png]] [[$img/index/rtree/disjoint.png]] [[$img/index/rtree/overlaps.png]] [[$img/index/rtree/within.png]]]
+]
+
+[table
+[[intersects(Ring)] [intersects(Polygon)] [intersects(MultiPolygon)]]
+[[[$img/index/rtree/intersects_ring.png]] [[$img/index/rtree/intersects_poly.png]] [[$img/index/rtree/intersects_mpoly.png]]]
+]
+
+To use a spatial predicate one may use one of the functions defined in `boost::geometry::index` namespace.
+
+ rt.query(index::intersects(box), std::back_inserter(result));
+ rt.query(index::covered_by(box), std::back_inserter(result));
+ rt.query(index::disjont(box), std::back_inserter(result));
+ rt.query(index::overlaps(box), std::back_inserter(result));
+ rt.query(index::within(box), std::back_inserter(result));
+
+All spatial predicates may be negated, e.g.:
+
+ rt.query(!index::intersects(box), std::back_inserter(result));
+ // the same as
+ rt.query(index::disjoint(box), std::back_inserter(result));
+
+[h4 Distance predicates]
+
+[h5 Nearest neighbours queries]
+
+Nearest neighbours queries returns `__value__`s which are closest to some point in space.
+Additionally it is possible to define how the distance to the `Value` should be calculated.
+The example of knn query is presented below. 5 `__value__`s nearest to some point are orange.
+
+[$img/index/rtree/knn.png]
+
+[h5 k nearest neighbours]
+
+There are three ways of performing knn queries. Following queries returns
+`k` `__value__`s closest to some point in space. For `__box__`es
+`__indexable__`s the distance to the nearest point is calculated by default.
+
+Method call
+
+ std::vector<__value__> returned_values;
+ __point__ pt(...);
+ rt.query(index::nearest(pt, k), std::back_inserter(returned_values));
+
+Function call
+
+ std::vector<__value__> returned_values;
+ __point__ pt(...);
+ index::query(rt, index::nearest(pt, k), std::back_inserter(returned_values));
+
+Use of `operator |`
+
+ __point__ pt(...);
+ BOOST_FOREACH(__value__ & v, rt | index::adaptors::queried(index::nearest(pt, k)))
+ ; // do something with v
+
+[h4 User-defined unary predicate]
+
+The user may pass a `UnaryPredicate` - function, function object or lambda expression taking const reference to Value and returning bool.
+This object may be passed to the query in order to check if `__value__` should be returned by the query. To do it one
+may use `index::satisfies()` function like on the example below:
+
+ bool is_red(__value__ const& v)
+ {
+ return v.is_red();
+ }
+
+ struct is_red_o
+ {
+ template <typename Value>
+ bool operator()(__value__ const& v)
+ {
+ return v.is_red();
+ }
+ }
+
+ // ...
+
+ rt.query(index::intersects(box) && index::satisfies(is_red),
+ std::back_inserter(result));
+
+ rt.query(index::intersects(box) && index::satisfies(is_red_o()),
+ std::back_inserter(result));
+
+ #ifndef BOOST_NO_CXX11_LAMBDAS
+ rt.query(index::intersects(box) && index::satisfies([](__value__ const& v) { return v.is_red(); }),
+ std::back_inserter(result));
+ #endif
+
+`satisfies()` may be negated, e.g.:
+
+ bool is_red(__value__ const& v) { return v.is_red(); }
+ bool is_not_red(__value__ const& v) { return !v.is_red(); }
+
+ // ...
+
+ rt.query(index::intersects(box) && index::satisfies(is_red),
+ std::back_inserter(result));
+ // the same as
+ rt.query(index::intersects(box) && !index::satisfies(is_not_red),
+ std::back_inserter(result));
+
+[h4 Passing a set of predicates]
+
+It's possible to use some number of predicates in one query by connecting them with `operator&&` e.g. `Pred1 && Pred2 && Pred3 && ...`.
+
+These predicates are connected by logical AND. Passing all predicates together not only makes possible
+to construct advanced queries but is also faster than separate calls because the tree is traversed only once.
+Traversing is continued and `Value`s are returned only if all predicates are met. Predicates are checked
+left-to-right so placing most restrictive predicates first should accelerate the search.
+
+ rt.query(index::intersects(box1) && !index::within(box2),
+ std::back_inserter(result));
+
+ rt.query(index::intersects(box1) && !index::within(box2) && index::overlaps(box3),
+ std::back_inserter(result));
+
+Of course it's possible to connect different types of predicates together.
+
+ index::query(rt, index::nearest(pt, k) && index::within(b), std::back_inserter(returned_values));
+
+ BOOST_FOREACH(Value & v, rt | index::adaptors::queried(index::nearest(pt, k) && index::covered_by(b)))
+ ; // do something with v
+
+[h4 Inserting query results into the other R-tree]
+
+There are several ways of inserting Values returned by a query to the other R-tree container.
+The most basic way is creating a temporary container for Values and insert them later.
+
+ namespace bgi = boost::geometry::index;
+ typedef std::pair<Box, int> __value__;
+ typedef bgi::rtree< __value__, bgi::linear<32, 8> > RTree;
+
+ RTree rt1;
+ /* some inserting into the tree */
+
+ std::vector<Value> result;
+ rt1.query(bgi::intersects(Box(/*...*/)), std::back_inserter(result));
+ RTree rt2(result.begin(), result.end());
+
+However there are better ways. One of these methods is mentioned in the "Creation and modification" section.
+The insert iterator may be passed directly into the query.
+
+ RTree rt3;
+ rt1.query(bgi::intersects(Box(/*...*/))), bgi::inserter(rt3));
+
+If you like Boost.Range you'll appreciate the third option. You may pass the result Range directly into the
+constructor.
+
+ RTree rt4(rt1 | bgi::adaptors::queried(bgi::intersects(Box(/*...*/)))));
+
+[endsect] [/ Queries /]
diff --git a/libs/geometry/doc/index/rtree/quickstart.qbk b/libs/geometry/doc/index/rtree/quickstart.qbk
new file mode 100644
index 000000000..37826b6e2
--- /dev/null
+++ b/libs/geometry/doc/index/rtree/quickstart.qbk
@@ -0,0 +1,59 @@
+[/============================================================================
+ Boost.Geometry Index
+
+ Copyright (c) 2011-2012 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_quickstart Quick Start]
+
+This Quick Start section shows simple way to creating a typical R-tree and perform
+spatial query.
+
+The code below assumes that following files are included and namespaces used.
+
+[rtree_quickstart_include]
+
+Typically you'll store e.g. `std::pair<Box, MyGeometryId>` in the __rtree__. `MyGeometryId`
+will be some identifier of a complex `Geometry` stored in other container, e.g. index type
+of a `Polygon` stored in the vector or an iterator of list of `Ring`s. To keep it simple to
+define `Value` we will use predefined __box__ and unsigned int.
+
+[rtree_quickstart_valuetype]
+
+R-tree may be created using various algorithm and parameters. You should choose the algorithm you'll
+find the best for your purpose. In this example we will use quadratic algorithm. Parameters are
+passed as template parameters. Maximum number of elements in nodes is set to 16.
+
+[rtree_quickstart_create]
+
+Typically `Value`s will be generated in a loop from e.g. `Polygon`s stored in some other container.
+In this case `Box` objects will probably be created with `geometry::envelope()` function.
+But to keep it simple lets just generate some boxes manually and insert them into the R-tree by
+using `insert()` method.
+
+[rtree_quickstart_insert]
+
+There are various types of spatial queries that may be performed, they can be even combined together
+in one call. For simplicity, we use the default one. The following query return values intersecting
+a box. The sequence of `Values` in the result is not specified.
+
+[rtree_quickstart_spatial_query]
+
+Other type of query is k-nearest neighbor search. It returns some number of values nearest to some point
+in space. The default knn query may be performed as follows. The sequence of `Values` in the result is not specified.
+
+[rtree_quickstart_nearest_query]
+
+At the end we'll print results.
+
+[rtree_quickstart_output]
+
+[h3 More]
+More information about the R-tree implementation, other algorithms and queries may be found in
+other parts of this documentation.
+
+[endsect]
diff --git a/libs/geometry/doc/index/rtree/reference.qbk b/libs/geometry/doc/index/rtree/reference.qbk
new file mode 100644
index 000000000..c53b01fbd
--- /dev/null
+++ b/libs/geometry/doc/index/rtree/reference.qbk
@@ -0,0 +1,40 @@
+[/============================================================================
+ 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:reference Reference]
+
+[include ../generated/rtree.qbk]
+[include ../generated/rtree_functions.qbk]
+
+[section:parameters R-tree parameters (boost::geometry::index::)]
+
+[include ../generated/rtree_linear.qbk]
+[include ../generated/rtree_quadratic.qbk]
+[include ../generated/rtree_rstar.qbk]
+[include ../generated/rtree_dynamic_linear.qbk]
+[include ../generated/rtree_dynamic_quadratic.qbk]
+[include ../generated/rtree_dynamic_rstar.qbk]
+
+[endsect]
+
+[/section:function_objects Function objects (boost::geometry::index::)/]
+
+[include ../generated/indexable.qbk]
+[include ../generated/equal_to.qbk]
+
+[/endsect/]
+
+[include ../generated/predicates.qbk]
+[include ../generated/nearest_relations.qbk]
+[include ../generated/adaptors.qbk]
+
+[include ../generated/inserters.qbk]
+
+[endsect]
diff --git a/libs/geometry/doc/index/src/examples/Jamfile.v2 b/libs/geometry/doc/index/src/examples/Jamfile.v2
new file mode 100644
index 000000000..e221ca86b
--- /dev/null
+++ b/libs/geometry/doc/index/src/examples/Jamfile.v2
@@ -0,0 +1,19 @@
+# Boost.Geometry Index
+#
+# Copyright (c) 2011-2012 Adam Wulkiewicz, Lodz, Poland.
+#
+# 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)
+
+import testing ;
+
+project boost-geometry-index-doc-src-examples
+ :
+ requirements
+ <include>../../..
+ #<include>../../../boost/geometry/extensions/contrib/ttmath
+ <toolset>msvc:<asynch-exceptions>on
+ ;
+
+build-project rtree ;
diff --git a/libs/geometry/doc/index/src/examples/rtree/Jamfile.v2 b/libs/geometry/doc/index/src/examples/rtree/Jamfile.v2
new file mode 100644
index 000000000..79778b9ab
--- /dev/null
+++ b/libs/geometry/doc/index/src/examples/rtree/Jamfile.v2
@@ -0,0 +1,25 @@
+# Boost.Geometry Index
+#
+# Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+#
+# 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)
+
+exe quick_start : quick_start.cpp ;
+exe polygons_vector : polygons_vector.cpp ;
+exe polygons_shared_ptr : polygons_shared_ptr.cpp ;
+exe variants_map : variants_map.cpp ;
+exe value_shared_ptr : value_shared_ptr.cpp ;
+exe value_index : value_index.cpp ;
+
+exe interprocess : interprocess.cpp /boost/thread//boost_thread
+ :
+ <toolset>acc:<linkflags>-lrt
+ <toolset>acc-pa_risc:<linkflags>-lrt
+ <toolset>gcc-mingw:<linkflags>"-lole32 -loleaut32 -lpsapi -ladvapi32"
+ <host-os>hpux,<toolset>gcc:<linkflags>"-Wl,+as,mpas"
+ :
+ <threading>multi
+ : # requirements
+ ;
diff --git a/libs/geometry/doc/index/src/examples/rtree/interprocess.cpp b/libs/geometry/doc/index/src/examples/rtree/interprocess.cpp
new file mode 100644
index 000000000..61d3f0b50
--- /dev/null
+++ b/libs/geometry/doc/index/src/examples/rtree/interprocess.cpp
@@ -0,0 +1,112 @@
+// Boost.Geometry Index
+//
+// Quickbook Examples
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+//[rtree_interprocess
+
+#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::indexable<B> I;
+ typedef bgi::equal_to<B> E;
+ typedef allocator<B, managed_shared_memory::segment_manager> Alloc;
+ typedef bgi::rtree<B, Par, I, E, 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(), I(), E(), 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(bgi::intersects(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;
+};
+
+//]
diff --git a/libs/geometry/doc/index/src/examples/rtree/polygons_shared_ptr.cpp b/libs/geometry/doc/index/src/examples/rtree/polygons_shared_ptr.cpp
new file mode 100644
index 000000000..c65ba5376
--- /dev/null
+++ b/libs/geometry/doc/index/src/examples/rtree/polygons_shared_ptr.cpp
@@ -0,0 +1,88 @@
+// Boost.Geometry Index
+//
+// Quickbook Examples
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+//[rtree_polygons_shared_ptr
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <cmath>
+#include <vector>
+#include <iostream>
+#include <boost/foreach.hpp>
+#include <boost/shared_ptr.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 bg::model::polygon<point, false, false> polygon; // ccw, open polygon
+ typedef boost::shared_ptr<polygon> shp;
+ typedef std::pair<box, shp> value;
+
+ // create the rtree using default constructor
+ bgi::rtree< value, bgi::linear<16, 4> > rtree;
+
+ std::cout << "filling index with polygons shared pointers:" << std::endl;
+
+ // create some polygons and fill the spatial index
+ for ( unsigned i = 0 ; i < 10 ; ++i )
+ {
+ // create a polygon
+ shp p(new polygon());
+ for ( float a = 0 ; a < 6.28316f ; a += 1.04720f )
+ {
+ float x = i + int(10*::cos(a))*0.1f;
+ float y = i + int(10*::sin(a))*0.1f;
+ p->outer().push_back(point(x, y));
+ }
+
+ // display new polygon
+ std::cout << bg::wkt<polygon>(*p) << std::endl;
+
+ // calculate polygon bounding box
+ box b = bg::return_envelope<box>(*p);
+ // insert new value
+ rtree.insert(std::make_pair(b, p));
+ }
+
+ // 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(bgi::intersects(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));
+
+ // display results
+ std::cout << "spatial query box:" << std::endl;
+ std::cout << bg::wkt<box>(query_box) << std::endl;
+ std::cout << "spatial query result:" << std::endl;
+ BOOST_FOREACH(value const& v, result_s)
+ std::cout << bg::wkt<polygon>(*v.second) << std::endl;
+
+ std::cout << "knn query point:" << std::endl;
+ std::cout << bg::wkt<point>(point(0, 0)) << std::endl;
+ std::cout << "knn query result:" << std::endl;
+ BOOST_FOREACH(value const& v, result_n)
+ std::cout << bg::wkt<polygon>(*v.second) << std::endl;
+
+ return 0;
+}
+
+//]
diff --git a/libs/geometry/doc/index/src/examples/rtree/polygons_vector.cpp b/libs/geometry/doc/index/src/examples/rtree/polygons_vector.cpp
new file mode 100644
index 000000000..a8984a732
--- /dev/null
+++ b/libs/geometry/doc/index/src/examples/rtree/polygons_vector.cpp
@@ -0,0 +1,96 @@
+// Boost.Geometry Index
+//
+// Quickbook Examples
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+//[rtree_polygons_vector
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <cmath>
+#include <vector>
+#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 bg::model::polygon<point, false, false> polygon; // ccw, open polygon
+ typedef std::pair<box, unsigned> value;
+
+ // polygons
+ std::vector<polygon> polygons;
+
+ // create some polygons
+ for ( unsigned i = 0 ; i < 10 ; ++i )
+ {
+ // create a polygon
+ polygon p;
+ for ( float a = 0 ; a < 6.28316f ; a += 1.04720f )
+ {
+ float x = i + int(10*::cos(a))*0.1f;
+ float y = i + int(10*::sin(a))*0.1f;
+ p.outer().push_back(point(x, y));
+ }
+
+ // add polygon
+ polygons.push_back(p);
+ }
+
+ // display polygons
+ std::cout << "generated polygons:" << std::endl;
+ BOOST_FOREACH(polygon const& p, polygons)
+ std::cout << bg::wkt<polygon>(p) << std::endl;
+
+ // create the rtree using default constructor
+ bgi::rtree< value, bgi::rstar<16, 4> > rtree;
+
+ // fill the spatial index
+ for ( unsigned i = 0 ; i < polygons.size() ; ++i )
+ {
+ // calculate polygon bounding box
+ box b = bg::return_envelope<box>(polygons[i]);
+ // 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(bgi::intersects(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));
+
+ // display results
+ std::cout << "spatial query box:" << std::endl;
+ std::cout << bg::wkt<box>(query_box) << std::endl;
+ std::cout << "spatial query result:" << std::endl;
+ BOOST_FOREACH(value const& v, result_s)
+ std::cout << bg::wkt<polygon>(polygons[v.second]) << std::endl;
+
+ std::cout << "knn query point:" << std::endl;
+ std::cout << bg::wkt<point>(point(0, 0)) << std::endl;
+ std::cout << "knn query result:" << std::endl;
+ BOOST_FOREACH(value const& v, result_n)
+ std::cout << bg::wkt<polygon>(polygons[v.second]) << std::endl;
+
+ return 0;
+}
+
+//]
diff --git a/libs/geometry/doc/index/src/examples/rtree/quick_start.cpp b/libs/geometry/doc/index/src/examples/rtree/quick_start.cpp
new file mode 100644
index 000000000..80c883122
--- /dev/null
+++ b/libs/geometry/doc/index/src/examples/rtree/quick_start.cpp
@@ -0,0 +1,87 @@
+// Boost.Geometry Index
+//
+// Quickbook Examples
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+//[rtree_quickstart
+
+//[rtree_quickstart_include
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.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)
+{
+ //[rtree_quickstart_valuetype
+ typedef bg::model::point<float, 2, bg::cs::cartesian> point;
+ typedef bg::model::box<point> box;
+ typedef std::pair<box, unsigned> value;
+ //]
+
+ //[rtree_quickstart_create
+ // create the rtree using default constructor
+ bgi::rtree< value, bgi::quadratic<16> > rtree;
+ //]
+
+ //[rtree_quickstart_insert
+ // 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));
+ }
+ //]
+
+ //[rtree_quickstart_spatial_query
+ // 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(bgi::intersects(query_box), std::back_inserter(result_s));
+ //]
+
+ //[rtree_quickstart_nearest_query
+ // 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));
+ //]
+
+ //[rtree_quickstart_output
+ // display results
+ std::cout << "spatial query box:" << std::endl;
+ std::cout << bg::wkt<box>(query_box) << std::endl;
+ 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 point:" << std::endl;
+ std::cout << bg::wkt<point>(point(0, 0)) << 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;
+}
+
+//]
diff --git a/libs/geometry/doc/index/src/examples/rtree/value_index.cpp b/libs/geometry/doc/index/src/examples/rtree/value_index.cpp
new file mode 100644
index 000000000..32f306909
--- /dev/null
+++ b/libs/geometry/doc/index/src/examples/rtree/value_index.cpp
@@ -0,0 +1,97 @@
+// Boost.Geometry Index
+//
+// Quickbook Examples
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+//[rtree_value_index
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <cmath>
+#include <vector>
+#include <iostream>
+#include <boost/foreach.hpp>
+
+namespace bg = boost::geometry;
+namespace bgi = boost::geometry::index;
+
+template <typename Container>
+class my_indexable
+{
+ typedef typename Container::size_type size_t;
+ typedef typename Container::const_reference cref;
+ Container const& container;
+
+public:
+ typedef cref result_type;
+ explicit my_indexable(Container const& c) : container(c) {}
+ result_type operator()(size_t i) const { return container[i]; }
+};
+
+int main(void)
+{
+ typedef bg::model::point<float, 2, bg::cs::cartesian> point;
+ typedef bg::model::box<point> box;
+ typedef std::vector<box>::size_type value;
+ typedef bgi::rstar<16, 4> parameters;
+ typedef my_indexable< std::vector<box> > indexable_getter;
+
+ // boxes
+ std::vector<box> boxes;
+
+ // create some boxes
+ for ( unsigned i = 0 ; i < 10 ; ++i )
+ {
+ // add a box
+ boxes.push_back(box(point(i, i), point(i+0.5f, i+0.5f)));
+ }
+
+ // display boxes
+ std::cout << "generated boxes:" << std::endl;
+ BOOST_FOREACH(box const& b, boxes)
+ std::cout << bg::wkt<box>(b) << std::endl;
+
+ // create the rtree
+ parameters params;
+ indexable_getter ind(boxes);
+ bgi::rtree<value, parameters, indexable_getter> rtree(params, ind);
+
+ // fill the spatial index
+ for ( size_t i = 0 ; i < boxes.size() ; ++i )
+ rtree.insert(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(bgi::intersects(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));
+
+ // display results
+ std::cout << "spatial query box:" << std::endl;
+ std::cout << bg::wkt<box>(query_box) << std::endl;
+ std::cout << "spatial query result:" << std::endl;
+ BOOST_FOREACH(value i, result_s)
+ std::cout << bg::wkt<box>(boxes[i]) << std::endl;
+
+ std::cout << "knn query point:" << std::endl;
+ std::cout << bg::wkt<point>(point(0, 0)) << std::endl;
+ std::cout << "knn query result:" << std::endl;
+ BOOST_FOREACH(value i, result_n)
+ std::cout << bg::wkt<box>(boxes[i]) << std::endl;
+
+ return 0;
+}
+
+//]
diff --git a/libs/geometry/doc/index/src/examples/rtree/value_shared_ptr.cpp b/libs/geometry/doc/index/src/examples/rtree/value_shared_ptr.cpp
new file mode 100644
index 000000000..e2ff55737
--- /dev/null
+++ b/libs/geometry/doc/index/src/examples/rtree/value_shared_ptr.cpp
@@ -0,0 +1,91 @@
+// Boost.Geometry Index
+//
+// Quickbook Examples
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+//[rtree_value_shared_ptr
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <cmath>
+#include <vector>
+#include <iostream>
+#include <boost/foreach.hpp>
+#include <boost/shared_ptr.hpp>
+
+namespace bg = boost::geometry;
+namespace bgi = boost::geometry::index;
+
+namespace boost { namespace geometry { namespace index {
+
+template <typename Box>
+struct indexable< boost::shared_ptr<Box> >
+{
+ typedef boost::shared_ptr<Box> V;
+
+ typedef Box const& result_type;
+ result_type operator()(V const& v) const { return *v; }
+};
+
+}}} // namespace boost::geometry::index
+
+int main(void)
+{
+ typedef bg::model::point<float, 2, bg::cs::cartesian> point;
+ typedef bg::model::box<point> box;
+ typedef boost::shared_ptr<box> shp;
+ typedef shp value;
+
+ // create the rtree using default constructor
+ bgi::rtree< value, bgi::linear<16, 4> > rtree;
+
+ std::cout << "filling index with boxes shared pointers:" << std::endl;
+
+ // fill the spatial index
+ for ( unsigned i = 0 ; i < 10 ; ++i )
+ {
+ // create a box
+ shp b(new box(point(i, i), point(i+0.5f, i+0.5f)));
+
+ // display new box
+ std::cout << bg::wkt<box>(*b) << std::endl;
+
+ // insert new value
+ rtree.insert(b);
+ }
+
+ // 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(bgi::intersects(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));
+
+ // display results
+ std::cout << "spatial query box:" << std::endl;
+ std::cout << bg::wkt<box>(query_box) << std::endl;
+ std::cout << "spatial query result:" << std::endl;
+ BOOST_FOREACH(value const& v, result_s)
+ std::cout << bg::wkt<box>(*v) << std::endl;
+
+ std::cout << "knn query point:" << std::endl;
+ std::cout << bg::wkt<point>(point(0, 0)) << std::endl;
+ std::cout << "knn query result:" << std::endl;
+ BOOST_FOREACH(value const& v, result_n)
+ std::cout << bg::wkt<box>(*v) << std::endl;
+
+ return 0;
+}
+
+//]
diff --git a/libs/geometry/doc/index/src/examples/rtree/variants_map.cpp b/libs/geometry/doc/index/src/examples/rtree/variants_map.cpp
new file mode 100644
index 000000000..462795002
--- /dev/null
+++ b/libs/geometry/doc/index/src/examples/rtree/variants_map.cpp
@@ -0,0 +1,143 @@
+// Boost.Geometry Index
+//
+// Quickbook Examples
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+//[rtree_variants_map
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <cmath>
+#include <vector>
+#include <map>
+#include <iostream>
+#include <boost/foreach.hpp>
+#include <boost/variant.hpp>
+
+namespace bg = boost::geometry;
+namespace bgi = boost::geometry::index;
+
+typedef bg::model::point<float, 2, bg::cs::cartesian> point;
+typedef bg::model::box<point> box;
+typedef bg::model::polygon<point, false, false> polygon; // ccw, open polygon
+typedef bg::model::ring<point, false, false> ring; // ccw, open ring
+typedef bg::model::linestring<point> linestring;
+typedef boost::variant<polygon, ring, linestring> geometry;
+
+typedef std::map<unsigned, geometry> map;
+typedef std::pair<box, map::iterator> value;
+
+template <class Container>
+void fill(unsigned i, Container & container)
+{
+ for ( float a = 0 ; a < 6.28316f ; a += 1.04720f )
+ {
+ float x = i + int(10*::cos(a))*0.1f;
+ float y = i + int(10*::sin(a))*0.1f;
+ container.push_back(point(x, y));
+ }
+}
+
+struct print_visitor : public boost::static_visitor<>
+{
+ void operator()(polygon const& g) const { std::cout << bg::wkt<polygon>(g) << std::endl; }
+ void operator()(ring const& g) const { std::cout << bg::wkt<ring>(g) << std::endl; }
+ void operator()(linestring const& g) const { std::cout << bg::wkt<linestring>(g) << std::endl; }
+};
+
+struct envelope_visitor : public boost::static_visitor<box>
+{
+ box operator()(polygon const& g) const { return bg::return_envelope<box>(g); }
+ box operator()(ring const& g) const { return bg::return_envelope<box>(g); }
+ box operator()(linestring const& g) const { return bg::return_envelope<box>(g); }
+};
+
+
+int main(void)
+{
+ // geometries container
+ map geometries;
+
+ // create some geometries
+ for ( unsigned i = 0 ; i < 10 ; ++i )
+ {
+ unsigned c = rand() % 3;
+
+ if ( 0 == c )
+ {
+ // create polygon
+ polygon p;
+ fill(i, p.outer());
+ geometries.insert(std::make_pair(i, geometry(p)));
+ }
+ else if ( 1 == c )
+ {
+ // create ring
+ ring r;
+ fill(i, r);
+ geometries.insert(std::make_pair(i, geometry(r)));
+ }
+ else if ( 2 == c )
+ {
+ // create linestring
+ linestring l;
+ fill(i, l);
+ geometries.insert(std::make_pair(i, geometry(l)));
+ }
+ }
+
+ // display geometries
+ std::cout << "generated geometries:" << std::endl;
+ BOOST_FOREACH(map::value_type const& p, geometries)
+ boost::apply_visitor(print_visitor(), p.second);
+
+ // create the rtree using default constructor
+ bgi::rtree< value, bgi::quadratic<16, 4> > rtree;
+
+ // fill the spatial index
+ for ( map::iterator it = geometries.begin() ; it != geometries.end() ; ++it )
+ {
+ // calculate polygon bounding box
+ box b = boost::apply_visitor(envelope_visitor(), it->second);
+ // insert new value
+ rtree.insert(std::make_pair(b, it));
+ }
+
+ // 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(bgi::intersects(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));
+
+ // display results
+ std::cout << "spatial query box:" << std::endl;
+ std::cout << bg::wkt<box>(query_box) << std::endl;
+ std::cout << "spatial query result:" << std::endl;
+ BOOST_FOREACH(value const& v, result_s)
+ boost::apply_visitor(print_visitor(), v.second->second);
+
+ std::cout << "knn query point:" << std::endl;
+ std::cout << bg::wkt<point>(point(0, 0)) << std::endl;
+ std::cout << "knn query result:" << std::endl;
+ BOOST_FOREACH(value const& v, result_n)
+ boost::apply_visitor(print_visitor(), v.second->second);
+
+ return 0;
+}
+
+//]
diff --git a/libs/geometry/doc/introduction.qbk b/libs/geometry/doc/introduction.qbk
new file mode 100644
index 000000000..dfac965d5
--- /dev/null
+++ b/libs/geometry/doc/introduction.qbk
@@ -0,0 +1,70 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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 Introduction]
+
+__boost_geometry__ (aka Generic Geometry Library, GGL), part of collection of
+the Boost C++ Libraries, defines concepts, primitives and algorithms for solving
+geometry problems.
+
+__boost_geometry__ contains a dimension-agnostic, coordinate-system-agnostic
+and scalable kernel, based on concepts, meta-functions and tag dispatching.
+On top of that kernel, algorithms are built: area, length, perimeter, centroid,
+convex hull, intersection (clipping), within (point in polygon), distance,
+envelope (bounding box), simplify, transform, and much more.
+The library supports high precision arithmetic numbers, such as __ttmath__.
+
+__boost_geometry__ contains instantiable geometry classes, but library users can
+also use their own. Using registration macros or traits classes their geometries
+can be adapted to fulfil __boost_geometry__ concepts.
+
+__boost_geometry__ might be used in all domains where geometry plays a role:
+mapping and GIS, game development, computer graphics and widgets, robotics,
+astronomy and more. The core is designed to be as generic as possible and support
+those domains. For now, the development has been mostly GIS-oriented.
+
+The library follows existing conventions:
+
+* conventions from boost
+* conventions from the std library
+* conventions and names from one of the __ogc__ standards on geometry and, more
+ specificly, from the __ogc_sf__
+
+The library was first released with Boost 1.47.0 and from that point on it is
+officially part of the Boost C++ Libraries.
+
+Latest stable version of the source code is included in the
+[@http://www.boost.org/users/download/ Boost packaged releases].
+It can also be downloaded from the current
+[@http://svn.boost.org/svn/boost/branches/release Boost release branch]
+in the Boost Subversion repository.
+
+The library development upstream is available from the
+[@http://svn.boost.org/svn/boost/trunk Boost trunk] in the Boost Subversion
+repository.
+
+Note that the library [*extensions] are not distributed in the official Boost
+releases, but only available
+in the [@http://svn.boost.org/svn/boost/trunk/boost/geometry/extensions/ Boost
+trunk]
+and that they are subject to change.
+
+__boost_geometry__ was accepted by Boost at November 28, 2009
+([@http://permalink.gmane.org/gmane.comp.lib.boost.announce/246 review report]).
+
+There is a __boost_geometry__ [@http://lists.boost.org/mailman/listinfo.cgi/geometry
+mailing list]. The mailing list and its messages are also accessible from
+[@http://boost-geometry.203548.n3.nabble.com/ Nabble] as Boost Geometry. Also on
+the Boost Developers list and on the Boost Users list __boost_geometry__ is discussed.
+
+[endsect]
diff --git a/libs/geometry/doc/make_qbk.py b/libs/geometry/doc/make_qbk.py
new file mode 100755
index 000000000..c776ca5f7
--- /dev/null
+++ b/libs/geometry/doc/make_qbk.py
@@ -0,0 +1,159 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+# ===========================================================================
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot (mateusz@loskot.net), London, UK
+#
+# 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)
+# ============================================================================
+
+import os, sys
+
+os.chdir(os.path.dirname(sys.argv[0]))
+
+if 'DOXYGEN' in os.environ:
+ doxygen_cmd = os.environ['DOXYGEN']
+else:
+ doxygen_cmd = 'doxygen'
+
+if 'DOXYGEN_XML2QBK' in os.environ:
+ doxygen_xml2qbk_cmd = os.environ['DOXYGEN_XML2QBK']
+else:
+ doxygen_xml2qbk_cmd = 'doxygen_xml2qbk'
+
+cmd = doxygen_xml2qbk_cmd
+cmd = cmd + " --xml doxy/doxygen_output/xml/%s.xml"
+cmd = cmd + " --start_include boost/geometry/"
+cmd = cmd + " --convenience_header_path ../../../boost/geometry/"
+cmd = cmd + " --convenience_headers geometry.hpp,geometries/geometries.hpp,multi/multi.hpp"
+cmd = cmd + " --skip_namespace boost::geometry::"
+cmd = cmd + " --copyright src/copyright_block.qbk"
+cmd = cmd + " > generated/%s.qbk"
+
+def call_doxygen():
+ os.chdir("doxy");
+ os.system(doxygen_cmd)
+ os.chdir("..")
+
+def group_to_quickbook(section):
+ os.system(cmd % ("group__" + section.replace("_", "__"), section))
+
+def model_to_quickbook(section):
+ os.system(cmd % ("classboost_1_1geometry_1_1model_1_1" + section.replace("_", "__"), section))
+
+def model_to_quickbook2(classname, section):
+ os.system(cmd % ("classboost_1_1geometry_1_1model_1_1" + classname, section))
+
+def struct_to_quickbook(section):
+ os.system(cmd % ("structboost_1_1geometry_1_1" + section.replace("_", "__"), section))
+
+def class_to_quickbook(section):
+ os.system(cmd % ("classboost_1_1geometry_1_1" + section.replace("_", "__"), section))
+
+def strategy_to_quickbook(section):
+ p = section.find("::")
+ ns = section[:p]
+ strategy = section[p+2:]
+ os.system(cmd % ("classboost_1_1geometry_1_1strategy_1_1"
+ + ns.replace("_", "__") + "_1_1" + strategy.replace("_", "__"),
+ ns + "_" + strategy))
+
+def cs_to_quickbook(section):
+ os.system(cmd % ("structboost_1_1geometry_1_1cs_1_1" + section.replace("_", "__"), section))
+
+
+call_doxygen()
+
+algorithms = ["append", "assign", "make", "clear"
+ , "area", "buffer", "centroid", "convert", "correct", "covered_by"
+ , "convex_hull", "difference", "disjoint", "distance"
+ , "envelope", "equals", "expand", "for_each", "intersection", "intersects"
+ , "length", "num_geometries", "num_interior_rings", "num_points"
+ , "overlaps", "perimeter", "reverse", "simplify", "sym_difference"
+ , "touches", "transform", "union", "unique", "within"]
+
+access_functions = ["get", "set", "exterior_ring", "interior_rings"
+ , "num_points", "num_interior_rings", "num_geometries"]
+
+coordinate_systems = ["cartesian", "geographic", "polar", "spherical", "spherical_equatorial"]
+
+core = ["closure", "coordinate_system", "coordinate_type", "cs_tag"
+ , "dimension", "exception", "interior_type"
+ , "degree", "radian"
+ , "is_radian", "point_order"
+ , "point_type", "ring_type", "tag", "tag_cast" ]
+
+exceptions = ["exception", "centroid_exception"];
+
+iterators = ["circular_iterator", "closing_iterator"
+ , "ever_circling_iterator"]
+
+models = ["point", "linestring", "box"
+ , "polygon", "segment", "ring"
+ , "multi_linestring", "multi_point", "multi_polygon", "referring_segment"]
+
+
+strategies = ["distance::pythagoras", "distance::haversine"
+ , "distance::cross_track", "distance::projected_point"
+ , "within::winding", "within::franklin", "within::crossings_multiply"
+ , "area::surveyor", "area::huiller"
+ , "centroid::bashein_detmer", "centroid::average"
+ , "convex_hull::graham_andrew"
+ , "simplify::douglas_peucker"
+ , "side::side_by_triangle", "side::side_by_cross_track", "side::spherical_side_formula"
+ , "transform::inverse_transformer", "transform::map_transformer"
+ , "transform::rotate_transformer", "transform::scale_transformer"
+ , "transform::translate_transformer", "transform::ublas_transformer"
+ ]
+
+views = ["box_view", "segment_view"
+ , "closeable_view", "reversible_view", "identity_view"]
+
+
+
+for i in algorithms:
+ group_to_quickbook(i)
+
+for i in access_functions:
+ group_to_quickbook(i)
+
+for i in coordinate_systems:
+ cs_to_quickbook(i)
+
+for i in core:
+ struct_to_quickbook(i)
+
+for i in exceptions:
+ class_to_quickbook(i)
+
+for i in iterators:
+ struct_to_quickbook(i)
+
+for i in models:
+ model_to_quickbook(i)
+
+for i in strategies:
+ strategy_to_quickbook(i)
+
+for i in views:
+ struct_to_quickbook(i)
+
+
+model_to_quickbook2("d2_1_1point__xy", "point_xy")
+
+group_to_quickbook("arithmetic")
+group_to_quickbook("enum")
+group_to_quickbook("register")
+group_to_quickbook("svg")
+class_to_quickbook("svg_mapper")
+group_to_quickbook("wkt")
+
+os.chdir("index")
+execfile("make_qbk.py")
+os.chdir("..")
+
+# Use either bjam or b2 or ../../../b2 (the last should be done on Release branch)
+os.system("bjam")
diff --git a/libs/geometry/doc/matrix.qbk b/libs/geometry/doc/matrix.qbk
new file mode 100644
index 000000000..4e03a9b85
--- /dev/null
+++ b/libs/geometry/doc/matrix.qbk
@@ -0,0 +1,15 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:matrix Reference Matrix]
+[xinclude quickref.xml]
+[endsect]
diff --git a/libs/geometry/doc/quickref.xml b/libs/geometry/doc/quickref.xml
new file mode 100644
index 000000000..87952f4d7
--- /dev/null
+++ b/libs/geometry/doc/quickref.xml
@@ -0,0 +1,752 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+ "../../../tools/boostbook/dtd/boostbook.dtd">
+
+<!--
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2011 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2011 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2011 Bruno Lalande, Paris, France.
+ Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+ 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)
+-->
+
+<informaltable frame="all">
+
+<!-- ###### CONCEPTS ########################################################################### -->
+<tgroup cols="3">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <colspec colname="c"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="c">
+ <bridgehead renderas="sect2">Geometry Concepts</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">0-dimensional</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.concepts.concept_point">Point</link></member>
+ <member><link linkend="geometry.reference.concepts.concept_multi_point">MultiPoint</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">1-dimensional</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.concepts.concept_segment">Segment</link></member>
+ <member><link linkend="geometry.reference.concepts.concept_linestring">Linestring</link></member>
+ <member><link linkend="geometry.reference.concepts.concept_multi_linestring">MultiLinestring</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">2-dimensional</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.concepts.concept_box">Box</link></member>
+ <member><link linkend="geometry.reference.concepts.concept_ring">Ring</link></member>
+ <member><link linkend="geometry.reference.concepts.concept_polygon">Polygon</link></member>
+ <member><link linkend="geometry.reference.concepts.concept_multi_polygon">MultiPolygon</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+
+<!-- ###### MODELS ############################################################################# -->
+<tgroup cols="3">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <colspec colname="c"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="c">
+ <bridgehead renderas="sect2">Geometry Models</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">0-dimensional</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.models.model_point">point</link></member>
+ <member><link linkend="geometry.reference.models.model_d2_point_xy">point_xy</link></member>
+ <member><link linkend="geometry.reference.models.model_multi_point">multi_point</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">1-dimensional</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.models.model_linestring">linestring</link></member>
+ <member><link linkend="geometry.reference.models.model_multi_linestring">multi_linestring</link></member>
+ <member><link linkend="geometry.reference.models.model_segment">segment</link></member>
+ <member><link linkend="geometry.reference.models.model_referring_segment">referring_segment</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">2-dimensional</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.models.model_box">box</link></member>
+ <member><link linkend="geometry.reference.models.model_ring">ring</link></member>
+ <member><link linkend="geometry.reference.models.model_polygon">polygon</link></member>
+ <member><link linkend="geometry.reference.models.model_multi_polygon">multi_polygon</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">0-dimensional (adapted)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.adapted.boost_array">Boost.Array</link></member>
+ <member><link linkend="geometry.reference.adapted.boost_fusion">Boost.Fusion</link></member>
+ <member><link linkend="geometry.reference.adapted.boost_polygon.point_data">Boost.Polygon's point_data</link></member>
+ <member><link linkend="geometry.reference.adapted.boost_tuple">Boost.Tuple</link></member>
+ <member><link linkend="geometry.reference.adapted.c_array">C arrays</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">1-dimensional (adapted)</bridgehead>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">2-dimensional (adapted)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.adapted.boost_polygon.rectangle_data">Boost.Polygon's rectangle_data</link></member>
+ <member><link linkend="geometry.reference.adapted.boost_polygon.polygon_data">Boost.Polygon's polygon_data</link></member>
+ <member><link linkend="geometry.reference.adapted.boost_polygon.polygon_with_holes_data">Boost.Polygon's polygon_with_holes_data</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">0-dimensional (macro's for adaption)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_point_2d">BOOST_GEOMETRY_REGISTER_POINT_2D</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_point_2d_const">BOOST_GEOMETRY_REGISTER_POINT_2D_CONST</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_point_2d_get_set">BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_point_3d">BOOST_GEOMETRY_REGISTER_POINT_3D</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_point_3d_const">BOOST_GEOMETRY_REGISTER_POINT_3D_CONST</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_point_3d_get_set">BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET</link></member>
+
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_multi_point">BOOST_GEOMETRY_REGISTER_MULTI_POINT</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_multi_point_templated">BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED</link></member>
+
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">1-dimensionial (macro's for adaption)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_linestring">BOOST_GEOMETRY_REGISTER_LINESTRING</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_linestring_templated">BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_multi_linestring">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_multi_linestring_templated">BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">2-dimensional (macro's for adaption)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_box">BOOST_GEOMETRY_REGISTER_BOX</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_box_2d_4values">BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_box_templated">BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_ring">BOOST_GEOMETRY_REGISTER_RING</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_ring_templated">BOOST_GEOMETRY_REGISTER_RING_TEMPLATED</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_multi_polygon">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON</link></member>
+ <member><link linkend="geometry.reference.adapted.register.boost_geometry_register_multi_polygon_templated">BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+
+<!-- ###### CORE ############################################################################### -->
+<tgroup cols="2">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="b">
+ <bridgehead renderas="sect2">Core</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Metafunctions</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.core.cs_tag">cs_tag</link></member>
+ <member><link linkend="geometry.reference.core.closure">closure</link></member>
+ <member><link linkend="geometry.reference.core.coordinate_type">coordinate_type</link></member>
+ <member><link linkend="geometry.reference.core.coordinate_system">coordinate_system</link></member>
+ <member><link linkend="geometry.reference.core.dimension">dimension</link></member>
+ <member><link linkend="geometry.reference.core.interior_type">interior_type</link></member>
+ <member><link linkend="geometry.reference.core.is_radian">is_radian</link></member>
+ <member><link linkend="geometry.reference.core.point_order">point_order</link></member>
+ <member><link linkend="geometry.reference.core.point_type">point_type</link></member>
+ <member><link linkend="geometry.reference.core.ring_type">ring_type</link></member>
+ <member><link linkend="geometry.reference.core.tag">tag</link></member>
+ <member><link linkend="geometry.reference.core.tag_cast">tag_cast</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Access Functions</bridgehead>
+ <simplelist type="vert" columns="1">
+ <!-- This section is not ordered alfabetically
+ to have get/set first and then the rings -->
+ <member><link linkend="geometry.reference.access.get">get</link></member>
+ <member><link linkend="geometry.reference.access.set">set</link></member>
+ <member><link linkend="geometry.reference.access.exterior_ring">exterior_ring</link></member>
+ <member><link linkend="geometry.reference.access.interior_rings">interior_rings</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Classes</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.exceptions.exception">exception</link></member>
+ <member> <link linkend="geometry.reference.exceptions.centroid_exception">centroid_exception</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+
+<!-- ###### CONSTANTS / COORDINATE SYSTEMS ################################ -->
+<tgroup cols="2">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <colspec colname="c"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="b">
+ <bridgehead renderas="sect2">Constants</bridgehead>
+ </entry>
+ <entry valign="center" namest="b" nameend="c">
+ <bridgehead renderas="sect2">Coordinate Systems</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Numeric</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.constants.max_corner">max_corner</link></member>
+ <member><link linkend="geometry.reference.constants.min_corner">min_corner</link></member>
+ <member><link linkend="geometry.reference.enumerations.order_selector">order_selector</link></member>
+ <member><link linkend="geometry.reference.enumerations.closure_selector">closure_selector</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Types</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.core.degree">degree</link></member>
+ <member><link linkend="geometry.reference.core.radian">radian</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Classes</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.cs.cs_cartesian">cs::cartesian</link></member>
+ <member><link linkend="geometry.reference.cs.cs_spherical">cs::spherical</link></member>
+ <member><link linkend="geometry.reference.cs.cs_spherical_equatorial">cs::spherical_equatorial</link></member>
+ <member><link linkend="geometry.reference.cs.cs_geographic">cs::geographic</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+
+<!-- ###### ITERATORS / VIEWS ##################################################### -->
+<tgroup cols="2">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="a">
+ <bridgehead renderas="sect2">Iterators</bridgehead>
+ </entry>
+ <entry valign="center" namest="b" nameend="b">
+ <bridgehead renderas="sect2">Views</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.iterators.closing_iterator">closing_iterator</link></member>
+ <member><link linkend="geometry.reference.iterators.ever_circling_iterator">ever_circling_iterator</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.views.box_view">box_view</link></member>
+ <member><link linkend="geometry.reference.views.segment_view">segment_view</link></member>
+ <member><link linkend="geometry.reference.views.closeable_view">closeable_view</link></member>
+ <member><link linkend="geometry.reference.views.reversible_view">reversible_view</link></member>
+ <member><link linkend="geometry.reference.views.identity_view">identity_view</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+
+<!-- ###### ALGORITHMS ######################################################################### -->
+<tgroup cols="3">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <colspec colname="c"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="c">
+ <bridgehead renderas="sect2">Algorithms</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Geometry Constructors</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.make">make</link></member>
+ <member><link linkend="geometry.reference.algorithms.make.make_inverse">make_inverse</link></member>
+ <member><link linkend="geometry.reference.algorithms.make.make_zero">make_zero</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Predicates</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.covered_by">covered_by</link></member>
+ <member><link linkend="geometry.reference.algorithms.disjoint">disjoint</link></member>
+ <member><link linkend="geometry.reference.algorithms.equals">equals</link></member>
+ <member><link linkend="geometry.reference.algorithms.intersects">intersects</link></member>
+ <member><link linkend="geometry.reference.algorithms.overlaps">overlaps</link></member>
+ <member><link linkend="geometry.reference.algorithms.touches">touches</link></member>
+ <member><link linkend="geometry.reference.algorithms.within">within</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Append</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.append">append</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Area</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.area">area</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Assign</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.assign.assign">assign</link></member>
+ <member><link linkend="geometry.reference.algorithms.assign.assign_inverse">assign_inverse</link></member>
+ <member><link linkend="geometry.reference.algorithms.assign.assign_zero">assign_zero</link></member>
+ <member><link linkend="geometry.reference.algorithms.assign.assign_points">assign_points</link></member>
+ <member>assign_values (
+ <link linkend="geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values">2</link>
+ <link linkend="geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values">3</link>
+ <link linkend="geometry.reference.algorithms.assign.assign_values_5_4_coordinate_values">4</link>
+ coordinate values)
+ </member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Centroid</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.centroid">centroid</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Clear</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.clear">clear</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Convert</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.convert">convert</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Convex Hull</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.convex_hull">convex_hull</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Correct</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.correct">correct</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Distance</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.distance">distance</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Difference</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.difference">difference</link></member>
+ <member><link linkend="geometry.reference.algorithms.sym_difference">sym_difference</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Envelope</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.envelope">envelope</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Expand</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.expand">expand</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">For Each</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.for_each">for each (point, segment)</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Intersection</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.intersection">intersection</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Length</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.length">length</link></member>
+ </simplelist>
+
+ <bridgehead renderas="sect3">Num_ (counting)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.num_interior_rings">num_interior_rings</link></member>
+ <member><link linkend="geometry.reference.algorithms.num_geometries">num_geometries</link></member>
+ <member><link linkend="geometry.reference.algorithms.num_points">num_points</link></member>
+ </simplelist>
+
+
+ <bridgehead renderas="sect3">Perimeter</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.perimeter">perimeter</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Reverse</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.reverse">reverse</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Simplify</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.simplify">simplify</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Transform</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.transform">transform</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Union</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.union_">union</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Unique</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.algorithms.unique">unique</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+
+<!-- ###### POLICIES ########################################################################### -->
+<!-- to be documented (some of them)
+<tgroup cols="2">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="b">
+ <bridgehead renderas="sect2">Policies</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Compare</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.equal_to">equal_to</link></member>
+ <member><link linkend="geometry.reference.greater">greater</link></member>
+ <member><link linkend="geometry.reference.less">less</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Relate</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.policies__relate__direction_type">policies::relate::direction_type</link></member>
+ <member><link linkend="geometry.reference.policies__relate__segments_de9im">policies::relate::segments_de9im</link></member>
+ <member><link linkend="geometry.reference.policies__relate__segments_direction">policies::relate::segments_direction</link></member>
+ <member><link linkend="geometry.reference.policies__relate__segments_intersection_points">policies::relate::segments_intersection_points</link></member>
+ <member><link linkend="geometry.reference.policies__relate__segments_tupled">policies::relate::segments_tupled</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+-->
+
+<!-- ###### STRATEGIES ######################################################################### -->
+<tgroup cols="3">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <colspec colname="c"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="c">
+ <bridgehead renderas="sect2">Strategies</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Area</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.strategies.strategy_area_surveyor">strategy::area::surveyor</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_area_huiller">strategy::area::huiller</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Centroid</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.strategies.strategy_centroid_bashein_detmer">strategy::centroid::bashein_detmer</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_centroid_average">strategy::centroid::centroid_average</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Distance</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.strategies.strategy_distance_projected_point">strategy::distance::projected_point</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_distance_pythagoras">strategy::distance::pythagoras</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_distance_cross_track">strategy::distance::cross_track</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_distance_haversine">strategy::distance::haversine</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Convex Hull</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.strategies.strategy_convex_hull_graham_andrew">strategy::convex_hull::graham_andrew</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Side</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.strategies.strategy_side_side_by_triangle">strategy::side::side_by_triangle</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_side_side_by_cross_track">strategy::side::side_by_cross_track</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_side_spherical_side_formula">strategy::side::spherical_side_formula</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Simplify</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.strategies.strategy_simplify_douglas_peucker">strategy::simplify::douglas_peucker</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Transform</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.strategies.strategy_transform_inverse_transformer">strategy::transform::inverse_transformer</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_transform_map_transformer">strategy::transform::map_transformer</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_transform_ublas_transformer">strategy::transform::ublas_transformer</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_transform_translate_transformer">strategy::transform::translate_transformer</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_transform_scale_transformer">strategy::transform::scale_transformer</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_transform_rotate_transformer">strategy::transform::rotate_transformer</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Within</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.strategies.strategy_within_winding">strategy::winding</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_within_crossings_multiply">strategy::crossings_multiply</link></member>
+ <member><link linkend="geometry.reference.strategies.strategy_within_franklin">strategy::franklin</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+
+
+
+<!-- ###### ARITHMETIC ######################################################################### -->
+<tgroup cols="4">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <colspec colname="c"/>
+ <colspec colname="d"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="d">
+ <bridgehead renderas="sect2">Arithmetic</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Add</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.arithmetic.add_point">add_point</link></member>
+ <member><link linkend="geometry.reference.arithmetic.add_value">add_value</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Subtract</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.arithmetic.subtract_point">subtract_point</link></member>
+ <member><link linkend="geometry.reference.arithmetic.subtract_value">subtract_value</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Multiply</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.arithmetic.multiply_point">multiply_point</link></member>
+ <member><link linkend="geometry.reference.arithmetic.multiply_value">multiply_value</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Divide</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.arithmetic.divide_point">divide_point</link></member>
+ <member><link linkend="geometry.reference.arithmetic.divide_value">divide_value</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ <row>
+ <entry valign="center" namest="a" nameend="d">
+ <bridgehead renderas="sect3">Products</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.arithmetic.dot_product">dot_product</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+
+<!-- ###### SPATIAL INDEXES ######################################################################### -->
+<tgroup cols="3">
+ <colspec colname="a"/>
+ <colspec colname="b"/>
+ <colspec colname="c"/>
+ <thead>
+ <row>
+ <entry valign="center" namest="a" nameend="c">
+ <bridgehead renderas="sect2">Spatial indexes</bridgehead>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">R-tree</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree">boost::geometry::index::rtree</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">R-tree parameters</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.parameters.boost__geometry__index__linear">boost::geometry::index::linear</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.parameters.boost__geometry__index__quadratic">boost::geometry::index::quadratic</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.parameters.boost__geometry__index__rstar">boost::geometry::index::rstar</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.parameters.boost__geometry__index__dynamic_linear">boost::geometry::index::dynamic_linear</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.parameters.boost__geometry__index__dynamic_quadratic">boost::geometry::index::dynamic_quadratic</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.parameters.boost__geometry__index__dynamic_rstar">boost::geometry::index::dynamic_rstar</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">R-tree constructors and destructor</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.rtree__">rtree()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.rtree_parameters_type_const____indexable_getter_const____value_equal_const____allocator_type_const___">rtree(parameters_type const &amp;, indexable_getter const &amp;, value_equal const &amp;, allocator_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.rtree_iterator__iterator_">rtree(Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.rtree_range_const___">rtree(Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.rtree_rtree_const___">rtree(rtree const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.rtree_rtree_const____allocator_type_const___">rtree(rtree const &amp;, allocator_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.rtree_rtree____">rtree(rtree &amp;&amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.rtree_rtree_____allocator_type_const___">rtree(rtree &amp;&amp;, allocator_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree._rtree__">~rtree()</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">R-tree member functions</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.operator__rtree_const___">operator=(const rtree &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.operator__rtree____">operator=(rtree &amp;&amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.swap_rtree___">swap(rtree &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.insert_value_type_const___">insert(value_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.insert_iterator__iterator_">insert(Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.insert_range_const___">insert(Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.remove_value_type_const___">remove(value_type const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.remove_iterator__iterator_">remove(Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.remove_range_const___">remove(Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_">query(Predicates const &amp;, OutIter)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.size__">size()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.empty__">empty()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.clear__">clear()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.bounds__">bounds()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.count_valueorindexable_const___">count(ValueOrIndexable const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.parameters__">parameters()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.indexable_get__">indexable_get()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.value_eq__">value_eq()</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.boost__geometry__index__rtree.get_allocator__">get_allocator()</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">R-tree free functions (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.insert_rtree_________value_const___">insert(rtree&lt;...&gt; &amp;, Value const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.insert_rtree_________iterator__iterator_">insert(rtree&lt;...&gt; &amp;, Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.insert_rtree_________range_const___">insert(rtree&lt;...&gt; &amp;, Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.remove_rtree_________value_const___">remove(rtree&lt;...&gt; &amp;, Value const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.remove_rtree_________iterator__iterator_">remove(rtree&lt;...&gt; &amp;, Iterator, Iterator)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.remove_rtree_________range_const___">remove(rtree&lt;...&gt; &amp;, Range const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.query_rtree______const____predicates_const____outiter_">query(rtree&lt;...&gt; const &amp;, Predicates const &amp;, OutIter)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.clear_rtree________">clear(rtree&lt;...&gt; &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.size_rtree______const___">size(rtree&lt;...&gt; const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.empty_rtree______const___">empty(rtree&lt;...&gt; const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.bounds_rtree______const___">bounds(rtree&lt;...&gt; const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__rtree__functions.swap_rtree_________rtree________">swap(rtree&lt;...&gt; &amp;, rtree&lt;...&gt; &amp;)</link></member>
+ </simplelist>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Observers (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.observers.boost__geometry__index__indexable">boost::geometry::index::indexable</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.observers.boost__geometry__index__equal_to">boost::geometry::index::equal_to</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Inserters (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.group__inserters.inserter_container___">inserter(Container &amp;)</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Adaptors (boost::geometry::index::adaptors::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.group__adaptors.queried_predicates_const___">queried(Predicates const &amp;)</link></member>
+ </simplelist>
+ </entry>
+ <entry valign="top">
+ <bridgehead renderas="sect3">Predicates (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.covered_by_geometry_const___">covered_by(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.disjoint_geometry_const___">disjoint(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.intersects_geometry_const___">intersects(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.overlaps_geometry_const___">overlaps(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.within_geometry_const___">within(Geometry const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.satisfies_unarypredicate_const___">satisfies(UnaryPredicate const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__predicates.nearest_point_const____unsigned_">nearest(Point const &amp;, unsigned)</link></member>
+ </simplelist>
+ </entry>
+ <!--entry valign="top">
+ <bridgehead renderas="sect3">Nearest relations (boost::geometry::index::)</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="geometry.reference.spatial_indexes.group__nearest__relations.to_nearest_t_const___">to_nearest(T const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__nearest__relations.to_centroid_t_const___">to_centroid(T const &amp;)</link></member>
+ <member><link linkend="geometry.reference.spatial_indexes.group__nearest__relations.to_furthest_t_const___">to_furthest(T const &amp;) </link></member>
+ </simplelist>
+ </entry-->
+ </row>
+ </tbody>
+</tgroup>
+
+</informaltable>
diff --git a/libs/geometry/doc/quickstart.qbk b/libs/geometry/doc/quickstart.qbk
new file mode 100644
index 000000000..c794e4f9c
--- /dev/null
+++ b/libs/geometry/doc/quickstart.qbk
@@ -0,0 +1,95 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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:quickstart Quick Start]
+
+This Quick Start section shows some of the features of __boost_geometry__
+in the form of annotated, relatively simple, code snippets.
+
+The code below assumes that `boost/geometry.hpp` is included, and that `namespace
+boost::geometry` is used. __boost_geometry__ is header only, so including
+headerfiles is enough. There is no linking with any library necessary.
+
+[quickstart_include]
+
+[h3 Cartesian]
+
+It is possible to use only a small part of the library. For example: the
+distance between two points is a common use case. __boost_geometry__ can calculate
+it from various types. Using one of its own types:
+
+[quickstart_distance]
+
+If the right headers are included and the types are bound to a coordinate
+system, various other types can be used as points: plain C array's, __boost_array__'s,
+__boost_tuple__'s, __boost_fusion__ imported structs, your own classes...
+
+Registering and using a C array:
+[quickstart_register_c_array]
+[quickstart_distance_c_array]
+
+Another often used algorithm is point-in-polygon. It is implemented in __boost_geometry__
+under the name `within`. We show its usage here checking a __boost_tuple__ (as a point)
+located within a polygon, filled with C Array point pairs.
+
+But it is first necessary to register a __boost_tuple__, like the C array:
+[quickstart_register_boost_tuple]
+[quickstart_point_in_polygon]
+
+We can calculate the area of a polygon:
+[quickstart_area]
+
+By the nature of a template library, it is possible to mix point types.
+We calculate distance again, now using a C array point and a __boost_tuple__ point:
+[quickstart_distance_mixed]
+
+The snippets listed above generate the following output:
+
+[pre
+Distance p1-p2 is: 1.41421
+Distance a-b is: 2.23607
+Point p is in polygon? true
+Area: 3.015
+Distance a-p is: 2.87924
+]
+
+
+[h3 Non-Cartesian]
+
+It is also possible to use non-Cartesian points. For example: points on a sphere.
+When then an algorithm such as distance is used the library "inspects" that it
+is handling spherical points and calculates the distance over the sphere,
+instead of applying the Pythagorean theorem.
+
+[note __boost_geometry__ supports a geographical coordinate system, but that is
+in an extension and not released in the current Boost release.]
+
+We approximate the Earth as a sphere and calculate the distance between Amsterdam
+and Paris:
+[quick_start_spherical]
+
+It writes: [pre Distance in miles: 267.02]
+
+[h3 Adapted structs]
+
+Finally an example from a totally different domain: developing window-based
+applications, for example using QtWidgets. As soon as Qt classes are registered
+in __boost_geometry__ we can use them. We can, for example, check if two
+rectangles overlap and if so, move the second one to another place:
+
+[quickstart_qt]
+
+
+[h3 More]
+In the reference many more examples can be found.
+
+[endsect]
diff --git a/libs/geometry/doc/readme.txt b/libs/geometry/doc/readme.txt
new file mode 100644
index 000000000..3d04faf18
--- /dev/null
+++ b/libs/geometry/doc/readme.txt
@@ -0,0 +1,45 @@
+===========================================================================
+ Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2011 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2011 Mateusz Loskot, London, UK
+
+ 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)
+============================================================================
+
+Procedure to create documentation using Doxygen, QuickBook and doxygen_xml2qbk
+
+Note that doxygen_xml2qbk is a tool currently (slightly) specific to Boost.Geometry,
+and that it translates from Doxygen-XML output to Quickbook (without xslt)
+
+1) install Doxygen
+2) install QuickBook using http://www.boost.org/doc/libs/1_45_0/doc/html/quickbook/install.html#quickbook.install.linux
+3) unpack RapidXML, see src/docutils/tools/doxygen_xml2qbk/contrib/readme.txt
+4) compile doxygen_xml2qbk, in src/docutils/tools/doxygen_xml2qbk
+5) put binary somewhere, e.g. in /usr/local/bin/doxygen_xml2qbk
+6) execute python file "make_qbk.py" (calling doxygen, doxygen_xml2qbk, bjam)
+
+Folders in this folder:
+concept: manually written documentation QBK files, on concept
+doxy: folders and files needed for doxygen input and output
+html: contains generated HTML files
+other: older documentation (subject to update or deletion)
+ref: manually written documentation QBK files, included from .hpp files
+reference: generated documentation QBK files (by doxygen_xml2qbk)
+ [note: this book cannot be called "generated" or something like that,
+ because it is used in the final URL and we want to have "reference" in it]
+src: examples used in documentation and tools (doxygen_xml2qbk)
+
+Per new algorithm (e.g. foo), one should add:
+1) in file boost/geometry/algorithms/foo.hpp, include a "\ingroup foo" in the doxygen comments
+2) in file doc/doxy/doxygen_input/groups/groups.hpp, define the group "foo"
+3) in file doc/make_qbk.py, include the algorithm "foo"
+4) in file doc/reference.qbk, include the foo.qbk ([include generated/foo.qbk])
+5) in file doc/quickref.xml, include a section on foo conform other sections
+6) in file doc/src/docutils/tools/support_status/support_status.cpp include the algorithm (3 places) (optionally)
+7) in file doc/reference/foo.qbk (to be created), include the support status and write other text, and include examples (optionally)
+8) in file doc/imports.qbk, include the example foo.cpp (if any)
+9) create file doc/src/examples/algorithm/foo.cpp (optional)
+
+
diff --git a/libs/geometry/doc/reference.qbk b/libs/geometry/doc/reference.qbk
new file mode 100644
index 000000000..ce226af36
--- /dev/null
+++ b/libs/geometry/doc/reference.qbk
@@ -0,0 +1,319 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+ 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:reference Reference]
+
+
+[section:access Access Functions]
+
+[/ This section is not ordered alfabetically
+ to have get/set first and then the rings]
+
+[section:get get]
+[include generated/get.qbk]
+[endsect]
+
+[section:set set]
+[include generated/set.qbk]
+[endsect]
+
+[section:exterior_ring exterior_ring]
+[include generated/exterior_ring.qbk]
+[endsect]
+
+[section:interior_rings interior_rings]
+[include generated/interior_rings.qbk]
+[endsect]
+
+[endsect] [/access functions]
+
+[section:adapted Adapted models]
+[include reference/geometries/adapted/c_array.qbk]
+[include reference/geometries/adapted/boost_array.qbk]
+[include reference/geometries/adapted/boost_fusion.qbk]
+[include reference/geometries/adapted/boost_tuple.qbk]
+[section:boost_polygon Boost.Polygon]
+[include reference/geometries/adapted/boost_polygon/point_data.qbk]
+[include reference/geometries/adapted/boost_polygon/rectangle_data.qbk]
+[include reference/geometries/adapted/boost_polygon/polygon_data.qbk]
+[include reference/geometries/adapted/boost_polygon/polygon_with_holes_data.qbk]
+[endsect]
+[section:boost_range Boost.Range]
+[include reference/geometries/adapted/boost_range/filtered.qbk]
+[include reference/geometries/adapted/boost_range/reversed.qbk]
+[include reference/geometries/adapted/boost_range/sliced.qbk]
+[include reference/geometries/adapted/boost_range/strided.qbk]
+[/ include reference/geometries/adapted/boost_range/uniqued.qbk]
+[endsect]
+[section:register Macro's for adaption]
+[include generated/register.qbk]
+[endsect]
+[endsect]
+
+[section:algorithms Algorithms]
+
+[section:area area]
+[include generated/area.qbk]
+[endsect]
+
+[section:assign assign]
+[include generated/assign.qbk]
+[endsect]
+
+[include generated/append.qbk]
+
+[section:buffer buffer]
+[include generated/buffer.qbk]
+[endsect]
+
+[section:centroid centroid]
+[include generated/centroid.qbk]
+[endsect]
+
+[include generated/clear.qbk]
+[include generated/convert.qbk]
+[include generated/convex_hull.qbk]
+[include generated/correct.qbk]
+
+[section:covered_by covered_by]
+[include generated/covered_by.qbk]
+[endsect]
+
+[include generated/difference.qbk]
+[include generated/disjoint.qbk]
+
+[section:distance distance]
+[include generated/distance.qbk]
+[endsect]
+
+[section:envelope envelope]
+[include generated/envelope.qbk]
+[endsect]
+
+[include generated/equals.qbk]
+[include generated/expand.qbk]
+
+[section:for_each for_each]
+[include generated/for_each.qbk]
+[endsect]
+
+[/section:intersection intersection]
+[include generated/intersection.qbk]
+[/endsect]
+
+[section:intersects intersects]
+[include generated/intersects.qbk]
+[endsect]
+
+[section:length length]
+[include generated/length.qbk]
+[endsect]
+
+[section:make make]
+[include generated/make.qbk]
+[endsect]
+
+[include generated/num_geometries.qbk]
+[include generated/num_interior_rings.qbk]
+[include generated/num_points.qbk]
+
+
+[include generated/overlaps.qbk]
+
+[section:perimeter perimeter]
+[include generated/perimeter.qbk]
+[endsect]
+
+[include generated/reverse.qbk]
+
+[section:simplify simplify]
+[include generated/simplify.qbk]
+[endsect]
+
+[/section:sym_difference sym_difference]
+[include generated/sym_difference.qbk]
+[/endsect]
+
+[section:touches touches]
+[include generated/touches.qbk]
+[endsect]
+
+[section:transform transform]
+[include generated/transform.qbk]
+[endsect]
+
+[/section:union union]
+[include generated/union.qbk]
+[/endsect]
+
+[include generated/unique.qbk]
+
+[section:within within]
+[include generated/within.qbk]
+[endsect]
+
+[endsect] [/algorithms]
+
+[section:arithmetic Arithmetic]
+[include generated/arithmetic.qbk]
+[endsect]
+
+[section:concepts Concepts]
+[include concept/point.qbk]
+[include concept/linestring.qbk]
+[include concept/polygon.qbk]
+[include concept/multi_point.qbk]
+[include concept/multi_linestring.qbk]
+[include concept/multi_polygon.qbk]
+[include concept/box.qbk]
+[include concept/ring.qbk]
+[include concept/segment.qbk]
+[endsect] [/concepts]
+
+[section:constants Constants]
+[include reference/core/min_corner.qbk]
+[include reference/core/max_corner.qbk]
+[endsect]
+
+[section:cs Coordinate Systems]
+[include generated/cartesian.qbk]
+[include generated/spherical.qbk]
+[include generated/spherical_equatorial.qbk]
+[include generated/geographic.qbk]
+[endsect] [/coordinate systems]
+
+[section:core Core Metafunctions]
+[include generated/closure.qbk]
+[include generated/coordinate_system.qbk]
+[include generated/coordinate_type.qbk]
+[include generated/cs_tag.qbk]
+[include generated/degree.qbk]
+[include generated/dimension.qbk]
+[include generated/interior_type.qbk]
+[include generated/is_radian.qbk]
+[include generated/point_order.qbk]
+[include generated/point_type.qbk]
+[include generated/radian.qbk]
+[include generated/ring_type.qbk]
+[include generated/tag.qbk]
+[include generated/tag_cast.qbk]
+[endsect] [/core metafunctions]
+
+[section:enumerations Enumerations]
+[include generated/enum.qbk]
+[endsect]
+
+[section:exceptions Exceptions]
+[include generated/exception.qbk]
+[include generated/centroid_exception.qbk]
+[endsect]
+
+
+[section:io IO (input/output)]
+[section:wkt WKT (Well-Known Text)]
+[/include generated/wkt.qbk/]
+[endsect]
+[section:svg SVG (Scalable Vector Graphics)]
+[include generated/svg.qbk]
+[include generated/svg_mapper.qbk]
+[endsect]
+[endsect]
+
+
+[section:iterators Iterators]
+[include generated/closing_iterator.qbk]
+[include generated/circular_iterator.qbk]
+[include generated/ever_circling_iterator.qbk]
+[endsect]
+
+
+[section:models Models]
+
+[include generated/point.qbk]
+[include generated/point_xy.qbk]
+[include generated/linestring.qbk]
+[include generated/polygon.qbk]
+[include generated/multi_point.qbk]
+[include generated/multi_linestring.qbk]
+[include generated/multi_polygon.qbk]
+[include generated/box.qbk]
+[include generated/ring.qbk]
+[include generated/segment.qbk]
+[include generated/referring_segment.qbk]
+[endsect]
+
+
+[section:spatial_indexes Spatial Indexes]
+
+[/section:rtree R-tree]
+[include index/generated/rtree.qbk]
+[include index/generated/rtree_functions.qbk]
+[section:parameters R-tree parameters (boost::geometry::index::)]
+[include index/generated/rtree_linear.qbk]
+[include index/generated/rtree_quadratic.qbk]
+[include index/generated/rtree_rstar.qbk]
+[include index/generated/rtree_dynamic_linear.qbk]
+[include index/generated/rtree_dynamic_quadratic.qbk]
+[include index/generated/rtree_dynamic_rstar.qbk]
+[endsect]
+[/endsect]
+
+[section:observers Observers (boost::geometry::index::)]
+[include index/generated/indexable.qbk]
+[include index/generated/equal_to.qbk]
+[endsect]
+[include index/generated/inserters.qbk]
+[include index/generated/adaptors.qbk]
+
+[include index/generated/predicates.qbk]
+[/include index/generated/nearest_relations.qbk]
+
+[endsect]
+
+
+[section:strategies Strategies]
+[include generated/distance_pythagoras.qbk]
+[include generated/distance_haversine.qbk]
+[include generated/distance_projected_point.qbk]
+[include generated/distance_cross_track.qbk]
+[include generated/area_surveyor.qbk]
+[include generated/area_huiller.qbk]
+[include generated/centroid_average.qbk]
+[include generated/centroid_bashein_detmer.qbk]
+[include generated/convex_hull_graham_andrew.qbk]
+[include generated/side_side_by_triangle.qbk]
+[include generated/side_side_by_cross_track.qbk]
+[include generated/side_spherical_side_formula.qbk]
+[include generated/simplify_douglas_peucker.qbk]
+[include generated/transform_inverse_transformer.qbk]
+[include generated/transform_map_transformer.qbk]
+[include generated/transform_rotate_transformer.qbk]
+[include generated/transform_scale_transformer.qbk]
+[include generated/transform_translate_transformer.qbk]
+[include generated/transform_ublas_transformer.qbk]
+[include generated/within_winding.qbk]
+[include generated/within_franklin.qbk]
+[include generated/within_crossings_multiply.qbk]
+[endsect]
+
+
+[section:views Views]
+[include generated/box_view.qbk]
+[include generated/segment_view.qbk]
+[include generated/closeable_view.qbk]
+[include generated/reversible_view.qbk]
+[include generated/identity_view.qbk]
+[endsect]
+
+
+[endsect] [/reference]
diff --git a/libs/geometry/doc/reference/algorithms/append.qbk b/libs/geometry/doc/reference/algorithms/append.qbk
new file mode 100644
index 000000000..3582dfbf4
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/append.qbk
@@ -0,0 +1,39 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ append]
+
+[heading_conformance_no_ogc __this_function__]
+
+[include generated/append_status.qbk]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__point__, __box__, __segment__][Compiles, but no action]]
+[[__linestring__][Appends point or range to the end of the linestring]]
+[[__ring__][Appends point or range to the end of the ring (without explicitly closing it)]]
+[[__polygon__][Appends point or range to the end of the polygon (without explicitly closing it),
+ either the exterior ring (the default) or specify a zero-based index for one of the interior rings.
+ In the last case, the interior rings are not resized automatically,
+ so ensure that the zero-based index is smaller than the number of interior rings]]
+]
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[append]
+[append_output]
+
+[heading See also]
+* [link geometry.reference.algorithms.assign.assign_points assign]
diff --git a/libs/geometry/doc/reference/algorithms/area.qbk b/libs/geometry/doc/reference/algorithms/area.qbk
new file mode 100644
index 000000000..e459ee5da
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/area.qbk
@@ -0,0 +1,33 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ area]
+
+[heading_conformance_ogc __this_function__..Area]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__0dim__][[qbk_ret 0]]]
+[[__1dim__][[qbk_ret 0]]]
+[[__2dim__][[qbk_ret the area]]]
+[[__cart__][[qbk_ret the area] __cs_units__]]
+[[__sph__][[qbk_ret the area] __sph1__]]
+[[__rev__][[qbk_ret the negative area]]]
+]
+
+[include generated/area_status.qbk]
+
+[heading Complexity]
+Linear
+
+
diff --git a/libs/geometry/doc/reference/algorithms/buffer.qbk b/libs/geometry/doc/reference/algorithms/buffer.qbk
new file mode 100644
index 000000000..c798daaab
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/buffer.qbk
@@ -0,0 +1,26 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ buffer]
+
+[heading_conformance_ogc __this_function__..Buffer]
+[note The current implemetation only enlarges a box, which is not defined by OGC.
+ A next version of the library will contain a more complete implementation
+]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__box__/__box__][Returns a new rectangular box, enlarged with the specified distance. It is allowed that "geometry_out" the same object as "geometry_in"]]
+]
+
+
diff --git a/libs/geometry/doc/reference/algorithms/centroid.qbk b/libs/geometry/doc/reference/algorithms/centroid.qbk
new file mode 100644
index 000000000..12152cb46
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/centroid.qbk
@@ -0,0 +1,45 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ centroid]
+
+[heading_conformance_ogc __this_function__..Centroid]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__point__][Returns the point itself as the centroid]]
+[[__multi_point__][Calculates centroid (based on average)]]
+[[__1dim__][Calculates centroid (based on weighted length)]]
+[[__2dim__][Calculates centroid]]
+[[__empty__][Throws a [link geometry.reference.exceptions.centroid_exception centroid_exception] ]]
+[[__cart__][Implemented]]
+[[__sph__][Calculates the centroid as if based on Cartesian coordinates]]
+]
+
+[heading Supported geometries]
+[table
+[[ ][2D][3D]]
+[[Point][[$img/ok.png]][[$img/ok.png]]]
+[[Segment][[$img/ok.png]][[$img/ok.png]]]
+[[Box][[$img/ok.png]][[$img/ok.png]]]
+[[Linestring][[$img/ok.png]][[$img/nyi.png]]]
+[[Ring][[$img/ok.png]][[$img/nyi.png]]]
+[[Polygon][[$img/ok.png]][[$img/nyi.png]]]
+[[MultiPoint][[$img/ok.png]][[$img/ok.png]]]
+[[MultiLinestring][[$img/ok.png]][[$img/nyi.png]]]
+[[MultiPolygon][[$img/ok.png]][[$img/nyi.png]]]
+]
+
+[heading Complexity]
+Linear
+
diff --git a/libs/geometry/doc/reference/algorithms/centroid_strategies.qbk b/libs/geometry/doc/reference/algorithms/centroid_strategies.qbk
new file mode 100644
index 000000000..b794906c7
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/centroid_strategies.qbk
@@ -0,0 +1,14 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[heading Available Strategies]
+* [link geometry.reference.strategies.strategy_centroid_bashein_detmer Bashein Detmer (cartesian)]
diff --git a/libs/geometry/doc/reference/algorithms/clear.qbk b/libs/geometry/doc/reference/algorithms/clear.qbk
new file mode 100644
index 000000000..969d6df84
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/clear.qbk
@@ -0,0 +1,41 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __is_cleared__ is cleared]
+[def __this_function__ clear]
+
+[heading_conformance_no_ogc __this_function__]
+[conformance_std __this_function__..__this_function__() method]
+
+[include generated/clear_status.qbk]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__point__][__does_nothing__]]
+[[__segment__][__does_nothing__]]
+[[__box__][__does_nothing__]]
+[[__linestring__][__linestring__ __is_cleared__]]
+[[__ring__][__ring__ is cleared]]
+[[__polygon__][The exterior ring __is_cleared__ and all interior rings are removed]]
+[[__multi_point__][__multi_point__ __is_cleared__]]
+[[__multi_linestring__][__multi_linestring__ __is_cleared__]]
+[[__multi_polygon__][__multi_polygon__ __is_cleared__]]
+]
+
+[heading Complexity]
+Constant
+
+[heading Example]
+[clear]
+[clear_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/comparable_distance.qbk b/libs/geometry/doc/reference/algorithms/comparable_distance.qbk
new file mode 100644
index 000000000..99a6b372d
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/comparable_distance.qbk
@@ -0,0 +1,29 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ comparable_distance]
+
+[heading_conformance_no_ogc __this_function__]
+
+[heading Behaviour]
+There is no (not yet) version with a strategy.
+
+It depends on the coordinate system of the geometry's point type if there is
+a strategy available which can determine (more efficient than the standard
+strategy) a measure of comparable distance.
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[comparable_distance]
+[comparable_distance_output]
diff --git a/libs/geometry/doc/reference/algorithms/convert.qbk b/libs/geometry/doc/reference/algorithms/convert.qbk
new file mode 100644
index 000000000..f5704cc0f
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/convert.qbk
@@ -0,0 +1,33 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ convert]
+
+[heading_conformance_no_ogc __this_function__]
+
+[include generated/convert_status.qbk]
+[note In this status matrix above: columns are source types
+ and rows are target types. So a box can be converted to a ring, polygon
+ or multi-polygon, but not vice versa.]
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[convert]
+[convert_output]
+
+[heading See also]
+* [link geometry.reference.algorithms.assign.assign assign]
+
+[note convert is modelled as source -> target
+ (where assign is modelled as target := source)]
diff --git a/libs/geometry/doc/reference/algorithms/convex_hull.qbk b/libs/geometry/doc/reference/algorithms/convex_hull.qbk
new file mode 100644
index 000000000..492c99a5a
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/convex_hull.qbk
@@ -0,0 +1,24 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ convex_hull]
+
+[heading_conformance_ogc __this_function__..ConvexHull()]
+
+[include generated/convex_hull_status.qbk]
+
+[heading Complexity]
+Logarithmic
+
+[heading Example]
+[convex_hull]
+[convex_hull_output]
diff --git a/libs/geometry/doc/reference/algorithms/correct.qbk b/libs/geometry/doc/reference/algorithms/correct.qbk
new file mode 100644
index 000000000..cb3f6d902
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/correct.qbk
@@ -0,0 +1,36 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __corrected__ is corrected]
+[def __this_function__ correct]
+
+[heading_conformance_no_ogc __this_function__]
+
+[include generated/correct_status.qbk]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__ring__][__ring__ __corrected__]]
+[[__polygon__][__polygon__ __corrected__]]
+[[__multi_polygon__][__multi_polygon__ __corrected__]]
+[[__box__][__box__ __corrected__ with respect to minimal and maximal corners]]
+[[__other__][__does_nothing__]]
+]
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[correct]
+[correct_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/covered_by.qbk b/libs/geometry/doc/reference/algorithms/covered_by.qbk
new file mode 100644
index 000000000..0fb187f09
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/covered_by.qbk
@@ -0,0 +1,35 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ covered_by]
+
+[heading_conformance_no_ogc __this_function__]
+[note Both PostGIS and Oracle contain an algorithm with the same name and the
+ same functionality.
+ See the [@http://www.postgis.org/docs/ST_CoveredBy.html PostGIS documentation].
+]
+
+[include generated/covered_by_status.qbk]
+[note In this status matrix above: columns are types of first parameter
+ and rows are types of second parameter. So a point can be checked to be
+ covered by a polygon, but not vice versa.
+]
+
+[heading Complexity]
+Linear
+
+[heading See also]
+* [link geometry.reference.algorithms.within within]
+
+[note The difference with the `within` algorithm is that this algorithm checks the
+ border by default
+] \ No newline at end of file
diff --git a/libs/geometry/doc/reference/algorithms/difference.qbk b/libs/geometry/doc/reference/algorithms/difference.qbk
new file mode 100644
index 000000000..3aaf54efd
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/difference.qbk
@@ -0,0 +1,26 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ difference]
+
+[heading_conformance_ogc __this_function__..Difference]
+
+[include reference/algorithms/difference_behavior.qbk]
+
+[include reference/algorithms/geometry_rules.qbk]
+
+[heading Example]
+[difference] [difference_output]
+
+[heading See also]
+* [link geometry.reference.algorithms.sym_difference sym_difference (symmetric difference)]
+* [link geometry.reference.algorithms.intersection intersection]
+* [link geometry.reference.algorithms.union_ union]
+
diff --git a/libs/geometry/doc/reference/algorithms/difference_behavior.qbk b/libs/geometry/doc/reference/algorithms/difference_behavior.qbk
new file mode 100644
index 000000000..0044026c8
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/difference_behavior.qbk
@@ -0,0 +1,21 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__2dim__][All combinations of: box, ring, polygon, multi_polygon]]
+[[__1dim__ / __2dim__][A combinations of a (multi) linestring with a (multi) polygon
+ results in a collection of linestrings]]
+[[__other__][__nyiversion__]]
+[[__sph__][__nyiversion__]]
+[[Three dimensional][__nyiversion__]]
+]
+
diff --git a/libs/geometry/doc/reference/algorithms/difference_inserter.qbk b/libs/geometry/doc/reference/algorithms/difference_inserter.qbk
new file mode 100644
index 000000000..89e309488
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/difference_inserter.qbk
@@ -0,0 +1,22 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[include reference/algorithms/difference_behavior.qbk]
+
+[include reference/algorithms/geometry_rules.qbk]
+
+[heading Example]
+[difference_inserter] [difference_inserter_output]
+
+[heading See also]
+* [link geometry.reference.algorithms.sym_difference.sym_difference_inserter_3 sym_difference_inserter (symmetric difference)]
+* [link geometry.reference.algorithms.intersection.intersection_inserter_3 intersection_inserter]
+* [link geometry.reference.algorithms.union.union_inserter_3 union_inserter]
+
diff --git a/libs/geometry/doc/reference/algorithms/disjoint.qbk b/libs/geometry/doc/reference/algorithms/disjoint.qbk
new file mode 100644
index 000000000..6f5c8ef49
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/disjoint.qbk
@@ -0,0 +1,15 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ disjoint]
+
+[heading_conformance_ogc __this_function__..Disjoint]
diff --git a/libs/geometry/doc/reference/algorithms/distance.qbk b/libs/geometry/doc/reference/algorithms/distance.qbk
new file mode 100644
index 000000000..d9c448cfe
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/distance.qbk
@@ -0,0 +1,26 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ distance]
+
+[heading_conformance_ogc __this_function__..Distance]
+
+[include generated/distance_status.qbk]
+
+[heading Complexity]
+Linear
+
+For multi-geometry to multi-geometry: currently quadratic
+
+[heading Example]
+[distance]
+[distance_output]
diff --git a/libs/geometry/doc/reference/algorithms/envelope.qbk b/libs/geometry/doc/reference/algorithms/envelope.qbk
new file mode 100644
index 000000000..97209a394
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/envelope.qbk
@@ -0,0 +1,15 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ envelope]
+
+[heading_conformance_ogc __this_function__..Envelope]
diff --git a/libs/geometry/doc/reference/algorithms/equals.qbk b/libs/geometry/doc/reference/algorithms/equals.qbk
new file mode 100644
index 000000000..b0159a90a
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/equals.qbk
@@ -0,0 +1,25 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ equals]
+
+[heading_conformance_ogc __this_function__..Equals]
+
+[include generated/equals_status.qbk]
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[equals]
+[equals_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/expand.qbk b/libs/geometry/doc/reference/algorithms/expand.qbk
new file mode 100644
index 000000000..0b1c14bd7
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/expand.qbk
@@ -0,0 +1,35 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ expand]
+[def __apply_expand__ Box is expanded to include the specified]
+
+[heading_conformance_no_ogc __this_function__]
+
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__box__ / __point__][__apply_expand__ __point__]]
+[[__box__ / __box__][__apply_expand__ __box__]]
+[[__box__ / __other__][__nyiversion__]]
+]
+
+[note To use expand with another geometry type then specified, use expand(make_envelope<box_type>(geometry)]
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[expand]
+[expand_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/for_each_point.qbk b/libs/geometry/doc/reference/algorithms/for_each_point.qbk
new file mode 100644
index 000000000..a48becbda
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/for_each_point.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ for_each_point]
+
+[heading_conformance_no_ogc __this_function__]
+[conformance_std __this_function__..std::for_each function]
diff --git a/libs/geometry/doc/reference/algorithms/for_each_segment.qbk b/libs/geometry/doc/reference/algorithms/for_each_segment.qbk
new file mode 100644
index 000000000..fbb9fc621
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/for_each_segment.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ for_each_segment]
+
+[heading_conformance_no_ogc __this_function__]
+[conformance_std __this_function__..std::for_each function]
diff --git a/libs/geometry/doc/reference/algorithms/geometry_rules.qbk b/libs/geometry/doc/reference/algorithms/geometry_rules.qbk
new file mode 100644
index 000000000..15fe580b9
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/geometry_rules.qbk
@@ -0,0 +1,12 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[note Check the [link geometry.reference.concepts.concept_polygon Polygon Concept]
+ for the rules that polygon input for this algorithm should fulfill]
diff --git a/libs/geometry/doc/reference/algorithms/intersection.qbk b/libs/geometry/doc/reference/algorithms/intersection.qbk
new file mode 100644
index 000000000..a4d2c9fbf
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/intersection.qbk
@@ -0,0 +1,34 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ intersection]
+
+[heading_conformance_ogc __this_function__..Intersection]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[[qbk_out __point__]][Calculates intersection points of input geometries]]
+[[[qbk_out __linestring__]][Calculates intersection linestrings of input geometries (NYI)]]
+[[[qbk_out __polygon__]][Calculates intersection polygons of input (multi)polygons and/or boxes]]
+]
+
+[include reference/algorithms/geometry_rules.qbk]
+
+[heading Example]
+[intersection]
+[intersection_output]
+
+[heading See also]
+* [link geometry.reference.algorithms.union_ union]
+* [link geometry.reference.algorithms.difference difference]
+* [link geometry.reference.algorithms.sym_difference sym_difference (symmetric difference)]
diff --git a/libs/geometry/doc/reference/algorithms/intersects.qbk b/libs/geometry/doc/reference/algorithms/intersects.qbk
new file mode 100644
index 000000000..49aea2322
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/intersects.qbk
@@ -0,0 +1,21 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ intersects]
+
+[heading_conformance_ogc __this_function__..Intersects]
+[? __one_parameter__ The version with one parameter is additional and not described in the OGC standard]
+
+[heading Examples]
+[intersects_linestring]
+[intersects_linestring_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/length.qbk b/libs/geometry/doc/reference/algorithms/length.qbk
new file mode 100644
index 000000000..c349f56e4
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/length.qbk
@@ -0,0 +1,29 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ length]
+
+[heading_conformance_ogc __this_function__..Length]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__0dim__][[qbk_ret 0]]]
+[[__1dim__][[qbk_ret the length]]]
+[[__2dim__][[qbk_ret 0]]]
+]
+
+
+[heading Complexity]
+Linear
+
+[heading Examples] [/ filled by doxml2qbk]
diff --git a/libs/geometry/doc/reference/algorithms/num_geometries.qbk b/libs/geometry/doc/reference/algorithms/num_geometries.qbk
new file mode 100644
index 000000000..998d0b155
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/num_geometries.qbk
@@ -0,0 +1,31 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ num_geometries]
+
+[heading_conformance_ogc __this_function__..NumGeometries]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__single__][[qbk_ret 1]]]
+[[__multi__][Returns boost::size(geometry); the input is considered as a range]]
+]
+
+
+[heading Complexity]
+Constant
+
+[heading Examples]
+[num_geometries]
+[num_geometries_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/num_interior_rings.qbk b/libs/geometry/doc/reference/algorithms/num_interior_rings.qbk
new file mode 100644
index 000000000..abbe59e45
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/num_interior_rings.qbk
@@ -0,0 +1,33 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ num_interior_ring]
+
+[heading_conformance_ogc __this_function__..NumInteriorRing]
+[note __boost_geometry__ adds an "s"]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__polygon__][[qbk_ret the number of its interior rings]]]
+[[__multi_polygon__][[qbk_ret the number of the interior rings of all polygons]]]
+[[__other__][[qbk_ret 0]]]
+]
+
+
+[heading Complexity]
+Constant
+
+[heading Examples]
+[num_interior_rings]
+[num_interior_rings_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/num_points.qbk b/libs/geometry/doc/reference/algorithms/num_points.qbk
new file mode 100644
index 000000000..b59ea1b09
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/num_points.qbk
@@ -0,0 +1,38 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ num_points]
+
+[heading_conformance_ogc __this_function__..NumPoints]
+[note __this_function__ can be called for any geometry and not just linestrings
+(as the standard describes)]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__point__][[qbk_ret 1]]]
+[[__segment__][[qbk_ret 2]]]
+[[__box__][[qbk_ret 4]]]
+[[__range__][[qbk_ret boost::size(geometry)]]]
+[[__other__][[qbk_ret the sum of the number of points of its elements]]]
+[[Open geometries][[qbk_ret the sum of the number of points of its elements, it adds one for open (per ring) if specified]]]
+[[Closed geometries][[qbk_ret the sum of the number of points of its elements]]]
+]
+
+
+[heading Complexity]
+Constant or Linear
+
+[heading Examples]
+[num_points]
+[num_points_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/overlaps.qbk b/libs/geometry/doc/reference/algorithms/overlaps.qbk
new file mode 100644
index 000000000..9f1a75265
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/overlaps.qbk
@@ -0,0 +1,15 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ overlaps]
+
+[heading_conformance_ogc __this_function__..Overlaps]
diff --git a/libs/geometry/doc/reference/algorithms/perimeter.qbk b/libs/geometry/doc/reference/algorithms/perimeter.qbk
new file mode 100644
index 000000000..66d924542
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/perimeter.qbk
@@ -0,0 +1,31 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ perimeter]
+
+[heading_conformance_no_ogc __this_function__]
+[note PostGIS contains an algorithm with the same name and the
+ same functionality.
+ See the [@http://www.postgis.org/docs/ST_Perimeter.html PostGIS documentation].
+]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__0dim__][Returns zero]]
+[[__1dim__][Returns zero]]
+[[__2dim__][Returns the perimeter]]
+]
+
+
+[heading Complexity]
+Linear
diff --git a/libs/geometry/doc/reference/algorithms/reverse.qbk b/libs/geometry/doc/reference/algorithms/reverse.qbk
new file mode 100644
index 000000000..282964e29
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/reverse.qbk
@@ -0,0 +1,40 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ reverse]
+
+[heading_conformance_no_ogc __this_function__]
+[conformance_std __this_function__..std::__this_function__ function]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__point__][__does_nothing__]]
+[[__segment__][__nyiversion__]]
+[[__box__][__does_nothing__]]
+[[__linestring__][Reverses the __linestring__]]
+[[__ring__][Reverses the __ring__]]
+[[__polygon__][Reverses the exterior ring and all interior rings in the polygon]]
+[[__multi_point__][__does_nothing__]]
+[[__multi_linestring__][Reverses all contained linestrings individually]]
+[[__multi_polygon__][Reverses all contained polygons individually]]
+]
+
+[note The reverse of a (multi)polygon or ring might make a valid geometry invalid because the (counter)clockwise orientation reverses.]
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[reverse]
+[reverse_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/simplify.qbk b/libs/geometry/doc/reference/algorithms/simplify.qbk
new file mode 100644
index 000000000..9d0b718bd
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/simplify.qbk
@@ -0,0 +1,35 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ simplify]
+
+[heading_conformance_no_ogc __this_function__]
+[note PostGIS contains an algorithm with the same name and the
+ same functionality.
+ See the [@http://www.postgis.org/docs/ST_Simplify.html PostGIS documentation].
+]
+[note SQL Server contains an algorithm Reduce() with the same functionality.
+ See the [@http://msdn.microsoft.com/en-us/library/bb933814.aspx MSDN documentation].
+]
+
+[heading Behavior]
+Simplification is done using [@http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm Douglas-Peucker] (if the default strategy is used).
+[note Geometries might become invalid by using simplify. The simplification
+process might create self-intersections.
+]
+
+[heading Examples]
+[simplify]
+[simplify_output]
+
+[heading Image(s)]
+[$svg_simplify_country.png]
diff --git a/libs/geometry/doc/reference/algorithms/simplify_inserter.qbk b/libs/geometry/doc/reference/algorithms/simplify_inserter.qbk
new file mode 100644
index 000000000..ca29cabd8
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/simplify_inserter.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[heading Examples]
+[simplify_inserter]
+[simplify_inserter_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/sym_difference.qbk b/libs/geometry/doc/reference/algorithms/sym_difference.qbk
new file mode 100644
index 000000000..549f077ae
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/sym_difference.qbk
@@ -0,0 +1,29 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ sym_difference]
+
+[heading_conformance_ogc __this_function__..SymDifference]
+
+[include reference/algorithms/difference_behavior.qbk]
+
+[include reference/algorithms/geometry_rules.qbk]
+
+[heading Example]
+[sym_difference]
+[sym_difference_output]
+
+[heading See also]
+* [link geometry.reference.algorithms.difference difference]
+* [link geometry.reference.algorithms.intersection intersection]
+* [link geometry.reference.algorithms.union_ union]
+
diff --git a/libs/geometry/doc/reference/algorithms/touches.qbk b/libs/geometry/doc/reference/algorithms/touches.qbk
new file mode 100644
index 000000000..56e502c93
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/touches.qbk
@@ -0,0 +1,19 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ touches]
+
+[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]
+
diff --git a/libs/geometry/doc/reference/algorithms/transform.qbk b/libs/geometry/doc/reference/algorithms/transform.qbk
new file mode 100644
index 000000000..6b404b117
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/transform.qbk
@@ -0,0 +1,32 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ transform]
+
+[heading_conformance_no_ogc __this_function__]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__sph__ (degree) / __sph__ (radian)][Transforms coordinates from degree to radian, or vice versa]]
+[[__sph__ / __cart__ (3D)][Transforms coordinates from spherical coordinates to X,Y,Z, or vice versa, on a unit sphere]]
+[[__sph__ (degree, with radius) / __sph__ (radian, with radius)][Transforms coordinates from degree to radian, or vice versa. Third coordinate (radius) is untouched]]
+[[__sph__ (with radius) / __cart__ (3D)][Transforms coordinates from spherical coordinates to X,Y,Z, or vice versa, on a unit sphere. Third coordinate (radius) is taken into account]]
+]
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[transform]
+[transform_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/transform_with_strategy.qbk b/libs/geometry/doc/reference/algorithms/transform_with_strategy.qbk
new file mode 100644
index 000000000..a393e7894
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/transform_with_strategy.qbk
@@ -0,0 +1,19 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[transform_with_strategy]
+[transform_with_strategy_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/union.qbk b/libs/geometry/doc/reference/algorithms/union.qbk
new file mode 100644
index 000000000..0a7a1099a
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/union.qbk
@@ -0,0 +1,33 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ union]
+
+[heading_conformance_ogc __this_function__..Union]
+[note __boost_geometry__ adds an underscore to avoid using the `union` keyword]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[[qbk_out __polygon__]][Calculates union polygons of input (multi)polygons and/or boxes]]
+]
+
+[include reference/algorithms/geometry_rules.qbk]
+
+[heading Example]
+[union]
+[union_output]
+
+[heading See also]
+* [link geometry.reference.algorithms.intersection intersection]
+* [link geometry.reference.algorithms.difference difference]
+* [link geometry.reference.algorithms.sym_difference sym_difference (symmetric difference)]
diff --git a/libs/geometry/doc/reference/algorithms/unique.qbk b/libs/geometry/doc/reference/algorithms/unique.qbk
new file mode 100644
index 000000000..92144dbf1
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/unique.qbk
@@ -0,0 +1,39 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __applies_unique__ Removes all consecutive duplicate points]
+[def __this_function__ unique]
+
+[heading_conformance_no_ogc __this_function__]
+[conformance_std __this_function__..std::__this_function__ function]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__point__][__does_nothing__]]
+[[__segment__][__does_nothing__]]
+[[__box__][__does_nothing__]]
+[[__linestring__][__applies_unique__]]
+[[__ring__][__applies_unique__]]
+[[__polygon__][__applies_unique__ in all rings]]
+[[__multi_point__][__does_nothing__. Even if two equal points happen to be stored consecutively, they are kept]]
+[[__multi_linestring__][__applies_unique__ in all contained linestrings]]
+[[__multi_polygon__][__applies_unique__ in all contained polygons (all rings)]]
+]
+
+[heading Complexity]
+Linear
+
+[heading Example]
+[unique]
+[unique_output]
+
diff --git a/libs/geometry/doc/reference/algorithms/within.qbk b/libs/geometry/doc/reference/algorithms/within.qbk
new file mode 100644
index 000000000..db63e07e3
--- /dev/null
+++ b/libs/geometry/doc/reference/algorithms/within.qbk
@@ -0,0 +1,35 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[def __this_function__ within]
+
+[heading_conformance_ogc __this_function__..Within]
+[note OGC defines within as completely within and not on the border. See the notes for within / on the border]
+
+[include generated/within_status.qbk]
+[note In this status matrix above: columns are types of first parameter
+ and rows are types of second parameter. So a point can be checked to be
+ within a polygon, but not vice versa.]
+
+[heading Notes]
+If a point is located exactly on the border of a geometry, the result depends on the strategy.
+The default strategy ([link geometry.reference.strategies.strategy_within_winding Winding (coordinate system agnostic)])
+returns false in that case.
+
+If a polygon has a reverse oriented (e.g. counterclockwise for a clockwise typed polygon), the result also depends on the strategy.
+The default strategy returns still true if a point is completely within the reversed polygon. There is a specific strategy which returns false in this case.
+
+[heading Complexity]
+Linear
+
+[heading See also]
+* [link geometry.reference.algorithms.covered_by covered_by]
diff --git a/libs/geometry/doc/reference/core/closure.qbk b/libs/geometry/doc/reference/core/closure.qbk
new file mode 100644
index 000000000..759c413cf
--- /dev/null
+++ b/libs/geometry/doc/reference/core/closure.qbk
@@ -0,0 +1,23 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[note The closure is defined for any geometry type, but only has a real meaning
+ for areal geometry types (ring, polygon, multi_polygon)
+]
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[closure]
+[closure_output]
+
+[heading See also]
+* [link geometry.reference.enumerations.closure_selector The closure_selector enumeration]
diff --git a/libs/geometry/doc/reference/core/coordinate_dimension.qbk b/libs/geometry/doc/reference/core/coordinate_dimension.qbk
new file mode 100644
index 000000000..b7e8cfce8
--- /dev/null
+++ b/libs/geometry/doc/reference/core/coordinate_dimension.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[dimension]
+[dimension_output]
diff --git a/libs/geometry/doc/reference/core/coordinate_system.qbk b/libs/geometry/doc/reference/core/coordinate_system.qbk
new file mode 100644
index 000000000..b64af3afe
--- /dev/null
+++ b/libs/geometry/doc/reference/core/coordinate_system.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[coordinate_system]
+[coordinate_system_output]
diff --git a/libs/geometry/doc/reference/core/coordinate_type.qbk b/libs/geometry/doc/reference/core/coordinate_type.qbk
new file mode 100644
index 000000000..1e7512307
--- /dev/null
+++ b/libs/geometry/doc/reference/core/coordinate_type.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[coordinate_type]
+[coordinate_type_output]
diff --git a/libs/geometry/doc/reference/core/degree_radian.qbk b/libs/geometry/doc/reference/core/degree_radian.qbk
new file mode 100644
index 000000000..09e24078f
--- /dev/null
+++ b/libs/geometry/doc/reference/core/degree_radian.qbk
@@ -0,0 +1,14 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+
+[heading example]
+[degree_radian]
+[degree_radian_output] \ No newline at end of file
diff --git a/libs/geometry/doc/reference/core/get_box.qbk b/libs/geometry/doc/reference/core/get_box.qbk
new file mode 100644
index 000000000..e279b4024
--- /dev/null
+++ b/libs/geometry/doc/reference/core/get_box.qbk
@@ -0,0 +1,23 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__box__][Returns the coordinate of a box (use min_corner, max_corner to specify which of the points to get) ]]
+[[__segment__][Returns the coordinate of a segment (use 0, 1 to specify which of the two points to get) ]]
+]
+
+[heading Complexity]
+Constant
+
+[heading Example]
+[get_box]
+[get_box_output]
diff --git a/libs/geometry/doc/reference/core/get_point.qbk b/libs/geometry/doc/reference/core/get_point.qbk
new file mode 100644
index 000000000..a3eb0e3c7
--- /dev/null
+++ b/libs/geometry/doc/reference/core/get_point.qbk
@@ -0,0 +1,25 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__point__][Returns the coordinate of a point]]
+[[Circle or Sphere][Returns the coordinate of the center of a circle or sphere (currently in an extension)]]
+[[__sph__][Returns the coordinate of a point, in either Radian's or Degree's, depending on specified units]]
+]
+
+[heading Complexity]
+Constant
+
+[heading Example]
+[get_point]
+[get_point_output]
diff --git a/libs/geometry/doc/reference/core/interior_type.qbk b/libs/geometry/doc/reference/core/interior_type.qbk
new file mode 100644
index 000000000..c7549738b
--- /dev/null
+++ b/libs/geometry/doc/reference/core/interior_type.qbk
@@ -0,0 +1,17 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[interior_type]
+[interior_type_output]
diff --git a/libs/geometry/doc/reference/core/max_corner.qbk b/libs/geometry/doc/reference/core/max_corner.qbk
new file mode 100644
index 000000000..1d56590ec
--- /dev/null
+++ b/libs/geometry/doc/reference/core/max_corner.qbk
@@ -0,0 +1,26 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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:max_corner max_corner]
+
+Indicates the maximal corner (upper right) of a box to be get, set or processed
+
+[heading Synopsis]
+`` int const max_corner = 1; ``
+
+[include reference/core/min_max_corner.qbk]
+
+[heading See also]
+* [link geometry.reference.constants.min_corner min_corner]
+* [link geometry.reference.access.get.get_1_with_index get with index]
+* [link geometry.reference.access.set.set_2_with_index set with index]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/core/min_corner.qbk b/libs/geometry/doc/reference/core/min_corner.qbk
new file mode 100644
index 000000000..a169b0475
--- /dev/null
+++ b/libs/geometry/doc/reference/core/min_corner.qbk
@@ -0,0 +1,25 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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:min_corner min_corner]
+
+Indicates the minimal corner (lower left) of a box to be get, set or processed
+
+[heading Synopsis]
+`` int const min_corner = 0; ``
+
+[include reference/core/min_max_corner.qbk]
+
+[heading See also]
+* [link geometry.reference.constants.max_corner max_corner]
+* [link geometry.reference.access.get.get_1_with_index get with index]
+* [link geometry.reference.access.set.set_2_with_index set with index]
+
+[endsect]
diff --git a/libs/geometry/doc/reference/core/min_max_corner.qbk b/libs/geometry/doc/reference/core/min_max_corner.qbk
new file mode 100644
index 000000000..704197093
--- /dev/null
+++ b/libs/geometry/doc/reference/core/min_max_corner.qbk
@@ -0,0 +1,31 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[/File included by min_corner.qbk and max_corner.qbk]
+
+[heading Header]
+Either
+
+`#include <boost/geometry/geometry.hpp>`
+
+Or
+
+`#include <boost/geometry/core/access.hpp>`
+
+[note min_corner and max_corner are only applicable for boxes and not for,
+ e.g., a segment]
+[note min_corner should be the minimal corner of a box, but that is not
+ guaranteed. Use correct to make min_corner the minimal corner.
+ The same applies for max_corner.]
+
+[/Share sample with get_box]
+[heading Example]
+[get_box]
+[get_box_output]
diff --git a/libs/geometry/doc/reference/core/point_order.qbk b/libs/geometry/doc/reference/core/point_order.qbk
new file mode 100644
index 000000000..84d967ee1
--- /dev/null
+++ b/libs/geometry/doc/reference/core/point_order.qbk
@@ -0,0 +1,24 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[note The point order is defined for any geometry type, but only has a real meaning
+ for areal geometry types (ring, polygon, multi_polygon)
+]
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[point_order]
+[point_order_output]
+
+[heading See also]
+* [link geometry.reference.enumerations.order_selector The order_selector enumeration]
+
diff --git a/libs/geometry/doc/reference/core/point_type.qbk b/libs/geometry/doc/reference/core/point_type.qbk
new file mode 100644
index 000000000..d51d5e92c
--- /dev/null
+++ b/libs/geometry/doc/reference/core/point_type.qbk
@@ -0,0 +1,17 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[point_type]
+[point_type_output]
diff --git a/libs/geometry/doc/reference/core/ring_type.qbk b/libs/geometry/doc/reference/core/ring_type.qbk
new file mode 100644
index 000000000..f40a26cb6
--- /dev/null
+++ b/libs/geometry/doc/reference/core/ring_type.qbk
@@ -0,0 +1,17 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[ring_type]
+[ring_type_output]
diff --git a/libs/geometry/doc/reference/core/set_box.qbk b/libs/geometry/doc/reference/core/set_box.qbk
new file mode 100644
index 000000000..5e944b9b2
--- /dev/null
+++ b/libs/geometry/doc/reference/core/set_box.qbk
@@ -0,0 +1,23 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__box__][Sets the coordinate of a box (use min_corner, max_corner to specify which of the points to set) ]]
+[[__segment__][Sets the coordinate of a segment (use 0, 1 to specify which of the two points to set) ]]
+]
+
+[heading Complexity]
+Constant
+
+[heading Example]
+[set_box]
+[set_box_output]
diff --git a/libs/geometry/doc/reference/core/set_point.qbk b/libs/geometry/doc/reference/core/set_point.qbk
new file mode 100644
index 000000000..ceab83853
--- /dev/null
+++ b/libs/geometry/doc/reference/core/set_point.qbk
@@ -0,0 +1,26 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[note If you host both the std:: library namespace and boost::geometry:: namespace set might become ambiguous, std::set is a collection. So don't do that or refer to geometry::set then explicitly.]
+
+[heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__point__][Sets the coordinate of a point]]
+[[Circle or Sphere][Sets the coordinate of the center of a circle or sphere (currently in an extension)]]
+[[__sph__][Sets the coordinate of a point, in either Radian's or Degree's, depending on specified units]]
+]
+
+[heading Complexity]
+Constant
+
+[heading Example]
+[set_point]
+[set_point_output]
diff --git a/libs/geometry/doc/reference/core/tag.qbk b/libs/geometry/doc/reference/core/tag.qbk
new file mode 100644
index 000000000..fc3089d53
--- /dev/null
+++ b/libs/geometry/doc/reference/core/tag.qbk
@@ -0,0 +1,29 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Metafunction result type]
+The metafunction tag defines [*type] as one of the following tags:
+
+* point_tag
+* linestring_tag
+* polygon_tag
+* multi_point_tag
+* multi_linestring_tag
+* multi_polygon_tag
+* box_tag
+* segment_tag
+* ring_tag
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[tag]
+[tag_output]
diff --git a/libs/geometry/doc/reference/core/tag_cast.qbk b/libs/geometry/doc/reference/core/tag_cast.qbk
new file mode 100644
index 000000000..7ad1bf339
--- /dev/null
+++ b/libs/geometry/doc/reference/core/tag_cast.qbk
@@ -0,0 +1,26 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[note The specified tag list is handled in the specified order: as soon as a tag
+ inheriting the specified tag is found, it is defined as the metafunction
+ typedef [*type].
+]
+
+[note If none of the specified possible base tags is a base class of the
+ specified tag, the tag itself is defined as the [*type] result of the
+ metafunction.
+]
+[heading Complexity]
+Compile time
+
+[heading Example]
+[tag_cast]
+[tag_cast_output]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_array.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_array.qbk
new file mode 100644
index 000000000..c2a95998b
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_array.qbk
@@ -0,0 +1,38 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:boost_array Boost.Array]
+
+Boost.Array arrays are adapted to the Boost.Geometry point concept
+
+[heading Description]
+
+A boost::array is (optionally) adapted to the Boost.Geometry
+point concept. It can therefore be used in all Boost.Geometry algorithms.
+
+A boost::array can be the point type used by the models linestring, polygon, segment,
+box, and ring
+
+[heading Model of]
+[link geometry.reference.concepts.concept_point Point Concept]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_array.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_array]
+[boost_array_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_fusion.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_fusion.qbk
new file mode 100644
index 000000000..b54352dae
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_fusion.qbk
@@ -0,0 +1,35 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:boost_fusion Boost.Fusion]
+
+Boost.Fusion adapted structs or classes are adapted to the Boost.Geometry point concept
+
+[heading Description]
+
+Boost.Fusion adapted structs are (optionally) adapted to the Boost.Geometry
+point concept. They can therefore be used in many Boost.Geometry algorithms.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_point Point Concept]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_fusion.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_fusion]
+[boost_fusion_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_polygon/point_data.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_polygon/point_data.qbk
new file mode 100644
index 000000000..ff013ed17
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_polygon/point_data.qbk
@@ -0,0 +1,36 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:point_data Boost.Polygon's point_data]
+
+The Boost.Polygon point type (boost::polygon::point_data) is adapted to the Boost.Geometry Point Concept.
+
+[heading Description]
+
+Boost.Polygon's points (as well as polygons) can be used by Boost.Geometry. The
+two libraries can therefore be used together. Using a boost::polygon::point_data<...>,
+algorithms from both Boost.Polygon and Boost.Geometry can be called.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_point Point Concept]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_polygon.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_polygon]
+[boost_polygon_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_polygon/polygon_data.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_polygon/polygon_data.qbk
new file mode 100644
index 000000000..e37628cb2
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_polygon/polygon_data.qbk
@@ -0,0 +1,36 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:polygon_data Boost.Polygon's polygon_data]
+
+Boost.Polygon's polygon type (boost::polygon::polygon_data) is adapted to the Boost.Geometry Ring Concept.
+
+[heading Description]
+
+Boost.Polygon's points (as well as polygons) can be used by Boost.Geometry. The
+two libraries can therefore be used together. Using a boost::polygon::point_data<...>,
+algorithms from both Boost.Polygon and Boost.Geometry can be called.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_ring Ring Concept]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_polygon.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_polygon]
+[boost_polygon_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_polygon/polygon_with_holes_data.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_polygon/polygon_with_holes_data.qbk
new file mode 100644
index 000000000..52655a6f2
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_polygon/polygon_with_holes_data.qbk
@@ -0,0 +1,37 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:polygon_with_holes_data Boost.Polygon's polygon_with_holes_data]
+
+Boost.Polygon's polygon type supporting holes (boost::polygon::polygon_with_holes_data)
+is adapted to the Boost.Geometry Polygon Concept.
+
+[heading Description]
+
+Boost.Polygon's points (as well as polygons) can be used by Boost.Geometry. The
+two libraries can therefore be used together. Using a boost::polygon::point_data<...>,
+algorithms from both Boost.Polygon and Boost.Geometry can be called.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_polygon Polygon Concept]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_polygon.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_polygon]
+[boost_polygon_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_polygon/rectangle_data.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_polygon/rectangle_data.qbk
new file mode 100644
index 000000000..48b80416d
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_polygon/rectangle_data.qbk
@@ -0,0 +1,36 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:rectangle_data Boost.Polygon's rectangle_data]
+
+Boost.Polygon's rectangle type (boost::polygon::rectangle_data) is adapted to the Boost.Geometry Point Concept.
+
+[heading Description]
+
+Boost.Polygon's points (as well as polygons) can be used by Boost.Geometry. The
+two libraries can therefore be used together. Using a boost::polygon::point_data<...>,
+algorithms from both Boost.Polygon and Boost.Geometry can be called.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_box Box Concept]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_polygon.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_polygon]
+[boost_polygon_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_range/adapts_model.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_range/adapts_model.qbk
new file mode 100644
index 000000000..47e35e032
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_range/adapts_model.qbk
@@ -0,0 +1,19 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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)
+=============================================================================/]
+
+The __adaptor__ takes over the model of the original geometry, which might be:
+
+* a linestring
+* a ring
+* a multi_point
+* a multi_linestring
+* a multi_polygon
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_range/filtered.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_range/filtered.qbk
new file mode 100644
index 000000000..c101b1d27
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_range/filtered.qbk
@@ -0,0 +1,36 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:filtered Boost.Range filtered]
+
+[def __adaptor__ Boost.Range filtered range adaptor]
+
+__adaptor__ is adapted to Boost.Geometry
+
+[heading Description]
+
+__adaptor__ filters a range.
+
+[heading Model of]
+[include adapts_model.qbk]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_range/filtered.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_range_filtered]
+[boost_range_filtered_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_range/reversed.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_range/reversed.qbk
new file mode 100644
index 000000000..56121f31c
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_range/reversed.qbk
@@ -0,0 +1,36 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:reversed Boost.Range reversed]
+
+[def __adaptor__ Boost.Range reversed range adaptor]
+
+__adaptor__ is adapted to Boost.Geometry
+
+[heading Description]
+
+__adaptor__ reverses a range.
+
+[heading Model of]
+[include adapts_model.qbk]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_range/reversed.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_range_reversed]
+[boost_range_reversed_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_range/sliced.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_range/sliced.qbk
new file mode 100644
index 000000000..9acf41753
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_range/sliced.qbk
@@ -0,0 +1,36 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:sliced Boost.Range sliced]
+
+[def __adaptor__ Boost.Range sliced range adaptor]
+
+__adaptor__ is adapted to Boost.Geometry
+
+[heading Description]
+
+__adaptor__ creates a slice of a range (usually a linestring)
+
+[heading Model of]
+[include adapts_model.qbk]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_range/sliced.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_range_sliced]
+[boost_range_sliced_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_range/strided.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_range/strided.qbk
new file mode 100644
index 000000000..911941ebe
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_range/strided.qbk
@@ -0,0 +1,37 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:strided Boost.Range strided]
+
+[def __adaptor__ Boost.Range strided range adaptor]
+
+__adaptor__ is adapted to Boost.Geometry
+
+[heading Description]
+
+__adaptor__ makes a strided range (usually begin a linestring or ring) such that
+traversal is performed in steps of n.
+
+[heading Model of]
+[include adapts_model.qbk]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_range/strided.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_range_strided]
+[boost_range_strided_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_range/uniqued.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_range/uniqued.qbk
new file mode 100644
index 000000000..48621370c
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_range/uniqued.qbk
@@ -0,0 +1,36 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:uniqued Boost.Range uniqued]
+
+[def __adaptor__ Boost.Range uniqued range adaptor]
+
+__adaptor__ is adapted to Boost.Geometry
+
+[heading Description]
+
+__adaptor__ makes a range unique
+
+[heading Model of]
+[include adapts_model.qbk]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_range/uniqued.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_range_uniqued]
+[boost_range_uniqued_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/boost_tuple.qbk b/libs/geometry/doc/reference/geometries/adapted/boost_tuple.qbk
new file mode 100644
index 000000000..a49124382
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/boost_tuple.qbk
@@ -0,0 +1,47 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:boost_tuple Boost.Tuple]
+
+Boost.Tuple tuples with arithmetic elements can be used as
+points within Boost.Geometry
+
+[heading Description]
+
+Boost.Tuple fixed sized collections, such as boost::tuple<double, double>, are
+(optionally) adapted to the Boost.Geometry point concept.
+
+Boost.Tuple pairs or triples might have mutually different types, such as a
+boost::tuple<float, double>. Boost.Geometry reports the first type as its
+[link geometry.reference.core.coordinate_type coordinate_type].
+
+Boost.Geometry supports Boost.Tuple pairs, triples, quadruples, etc up to
+tuples with 10 elements (though most algorithms do not support so many
+dimensions).
+
+A tuple can be the point type used by the models linestring, polygon, segment,
+box, and ring
+
+[heading Model of]
+[link geometry.reference.concepts.concept_point Point Concept]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/boost_tuple.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[boost_tuple]
+[boost_tuple_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/adapted/c_array.qbk b/libs/geometry/doc/reference/geometries/adapted/c_array.qbk
new file mode 100644
index 000000000..221c55ff0
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/adapted/c_array.qbk
@@ -0,0 +1,40 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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:c_array C array]
+
+C arrays are adapted to the Boost.Geometry point concept
+
+[heading Description]
+
+C arrays, such as double[2] or int[3], are (optionally) adapted to the Boost.Geometry
+point concept. They can therefore be used in many Boost.Geometry algorithms.
+
+Note that a C array cannot be the point type of a linestring or a polygon. The reason
+for that is that a std::vector does not allow containing C arrays
+(this is not related to Boost.Geometry). The C array is therefore limited to
+the point type.
+
+[heading Model of]
+[link geometry.reference.concepts.concept_point Point Concept]
+
+[heading Header]
+`#include <boost/geometry/geometries/adapted/c_array.hpp>`
+
+__not_in_boost_geometry_hpp__
+
+[heading Example]
+[c_array]
+[c_array_output]
+
+[endsect]
+
diff --git a/libs/geometry/doc/reference/geometries/point.qbk b/libs/geometry/doc/reference/geometries/point.qbk
new file mode 100644
index 000000000..0d756a2b7
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/point.qbk
@@ -0,0 +1,18 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[heading Examples]
+[point]
+[point_output]
+
+[include reference/geometries/point_assign_warning.qbk]
+
diff --git a/libs/geometry/doc/reference/geometries/point_assign_warning.qbk b/libs/geometry/doc/reference/geometries/point_assign_warning.qbk
new file mode 100644
index 000000000..0ab0bc6c7
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/point_assign_warning.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[heading Notes]
+[note Coordinates are not initialized. If the constructor with parameters is not
+called and points are not assigned using `set` or `assign` then the coordinate
+values will contain garbage]
diff --git a/libs/geometry/doc/reference/geometries/register/point.qbk b/libs/geometry/doc/reference/geometries/register/point.qbk
new file mode 100644
index 000000000..9132d4996
--- /dev/null
+++ b/libs/geometry/doc/reference/geometries/register/point.qbk
@@ -0,0 +1,17 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Copyright (c) 2009-2012 Bruno Lalande, Paris, France.
+
+ 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)
+=============================================================================/]
+
+[caution Use the macro outside any namespace]
+[note A point can include a namespace]
+[heading Examples]
+[register_point_2d]
+[register_point_2d_output]
diff --git a/libs/geometry/doc/reference/io/svg.qbk b/libs/geometry/doc/reference/io/svg.qbk
new file mode 100644
index 000000000..be76303d3
--- /dev/null
+++ b/libs/geometry/doc/reference/io/svg.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Example]
+[svg_mapper]
+[svg_mapper_output]
+
+[heading See also]
+* [link geometry.reference.io.svg.svg The SVG manipulator]
diff --git a/libs/geometry/doc/reference/views/box_view.qbk b/libs/geometry/doc/reference/views/box_view.qbk
new file mode 100644
index 000000000..cd3949175
--- /dev/null
+++ b/libs/geometry/doc/reference/views/box_view.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[box_view]
+[box_view_output]
diff --git a/libs/geometry/doc/reference/views/segment_view.qbk b/libs/geometry/doc/reference/views/segment_view.qbk
new file mode 100644
index 000000000..2b1e6ca14
--- /dev/null
+++ b/libs/geometry/doc/reference/views/segment_view.qbk
@@ -0,0 +1,16 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+ 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)
+=============================================================================/]
+
+[heading Complexity]
+Compile time
+
+[heading Example]
+[segment_view]
+[segment_view_output]
diff --git a/libs/geometry/doc/release_notes.qbk b/libs/geometry/doc/release_notes.qbk
new file mode 100644
index 000000000..3f0779452
--- /dev/null
+++ b/libs/geometry/doc/release_notes.qbk
@@ -0,0 +1,205 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2009-2013 Barend Gehrels, Geodan, Amsterdam, the Netherlands.
+ Copyright (c) 2009-2013 Mateusz Loskot (mateusz@loskot.net)
+ Copyright (c) 2009-2013 Mateusz Lalande, Paris, France.
+ 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:release_notes Release Notes]
+
+[/=================]
+[heading Boost 1.54]
+[/=================]
+
+[*Additional functionality]
+
+* added Spatial Index, developed for Boost.Geometry by Adam Wulkiewicz. The spatial index was originally started by Federico J. Fernandez during the Google Summer of Code 2008 program, mentored by Hartmut Kaiser.
+* added SVG-output, this was already in extensions for several years
+
+[*Documentation]
+
+* small fixes of missing words
+* fixes in doc of template parameters (convex_hull, exterior_ring, return_buffer)
+
+[*Bugfixes]
+
+* collinear opposite segments did sometimes (in circles) have a robustness issue, fixed
+* fixed insertion of false intersection point (found by buffer)
+* applied patch of Vladimir Petrovic for debugging traversals
+
+
+[*Solved tickets]
+
+* [@https://svn.boost.org/trac/boost/ticket/7462 7462] degenerate union result for float, fixed
+* [@https://svn.boost.org/trac/boost/ticket/7465 7465] wrong construtors access type in scale_transformer class, fixed
+* [@https://svn.boost.org/trac/boost/ticket/7802 7802] cart_intersect.hpp unused parameter warnings, fixed
+* [@https://svn.boost.org/trac/boost/ticket/8254 8254] faulty intersection, fixed
+* [@https://svn.boost.org/trac/boost/ticket/8393 8393] polygon model doesn't adhere to stated Polygon concept rules, doc updated.
+* [@https://svn.boost.org/trac/boost/ticket/8403 8403] silenced compiler warning C4127: conditional expression is constant
+* [@https://svn.boost.org/trac/boost/ticket/8405 8405] silenced compiler warning C4189: '...' : local variable is initialized but not referenced
+
+[*Internal changes]
+
+* Made several algorithms variant-aware (append, area, clear, convert, equals, length, num_points)
+
+
+[/=================]
+[heading Boost 1.53]
+[/=================]
+
+[*Bugfixes]
+
+* avoid generating output polygons with interior rings below minimum size (e.g. one or two points)
+* `geometry::disjoint` for degenerate segments (patched by Karsten Ahnert)
+* problem in `geometry::difference` for missing handling tangency, reported by H2
+* fixed `geometry::for_each` for use with Lambda's
+* fixed `geometry::comparable_distance` point-linestring (and -range, -polygon)
+
+[*Additional functionality]
+
+* combinations for `geometry::disjoint`: point/ring, point/polygon, point/multi_polygon
+* combinations for `geometry::intersects`: point/ring, point/polygon, point/multi_polygon
+
+[*Internal changes]
+
+* updates in specializations/not_implemented for various algorithms (as in an earlier version, these changes are still going on; they take care for simplified structs, better error reporting, and automatized documentation)
+* fixes in unit tests
+
+[/=================]
+[heading Boost 1.51]
+[/=================]
+
+[*Breaking changes]
+
+* points accessed through a pointer (e.g. in a linestring) should now be specialized without the pointer. In previous versions a type `my_point` used like `linestring<my_point*>` had to be specalized like: `template<> struct tag<my_point*>`. Now the library itself removes the pointer before calling the traits class, so now it should be like: `template<> struct tag<my_point>`
+
+[*Bugfixes]
+
+* intersection was sometimes wrong for integer points, fixed
+* documentation, order of parameters in simplify was wrong, fixed
+
+[*Solved tickets]
+
+* [@https://svn.boost.org/trac/boost/ticket/7030 7030] spherical distance, fixed (by patch of Karsten Ahnert)
+
+
+[/=================]
+[heading Boost 1.50]
+[/=================]
+
+[*Bugfixes]
+
+* the return type of comparable projected point strategy for integer points was wrong (integer), fixed
+* several robustness issues in intersection of segments and polygons, fixed
+* invalid intersection output is filtered out
+* disjoint for multi_polygon's might incorrectly return true, fixed
+
+[*Solved tickets]
+
+* [@https://svn.boost.org/trac/boost/ticket/6585 6585] patch for alternative syntax multipoint, applied
+* [@https://svn.boost.org/trac/boost/ticket/6584 6584] patch for bug in distance, applied
+* [@https://svn.boost.org/trac/boost/ticket/5730 5730] same issue as 6584, fixed
+* [@https://svn.boost.org/trac/boost/ticket/6166 6166] patch for missing transformation, applied
+* [@https://svn.boost.org/trac/boost/ticket/6696 6696] invalid intersection output, was (by chance) already fixed in Trunk before reported
+
+[*Additional functionality]
+
+* added algorithm "touches" (OGC SF compliant) for *polygon/*polygon
+
+[/=================]
+[heading Boost 1.49]
+[/=================]
+
+[*Breaking changes]
+
+* point_xy was accidentally included in one of the headerfiles. If the point_xy class is used, it should be included explicitly now.
+
+[*Bugfixes]
+
+* bugfix: distance for multi-geometries ignored specified distance strategy. Fixed
+* bugfix: difference for polygon/multi_polygon (reported 2011/10/24 on GGL-list)
+* bugfix: raise exception for calculation of distances of multi-geometrie(s) where one of them is empty
+* bugfix: multi DSV did not correctly use settings, fixed
+* bugfix: self-intersections could sometimes be missed (introduced in 1.48), fixed
+* bugfix: convex hull crashed on empty range (e.g. empty multi point), fixed
+* bugfix: area/centroid/side/intersection/distance did not work for "int" type filled with large (but not overflowing) integers. Fixed.
+* bugfix: disjoint/intersect did not work for degenerate linestrings. Fixed.
+* bugfix: covered_by did not compile for a ring. Fixed.
+
+[*Solved tickets]
+
+* [@https://svn.boost.org/trac/boost/ticket/6019 6019] convex_hull / area, fixed.
+* [@https://svn.boost.org/trac/boost/ticket/6021 6021] convex_hull / append (multipoint), fixed.
+* [@https://svn.boost.org/trac/boost/ticket/6028 6028] Documentation: closure, fixed.
+* [@https://svn.boost.org/trac/boost/ticket/6178 6178] Missing headerfile, fixed.
+
+[*Additional functionality]
+
+* support for line/polygon intersections and differences
+* support for convert of segment/box of different point types
+* support for append for multi point
+* the scalar function distance now throws an empty_input_exception on empty input
+
+[*Documentation]
+
+* updated support status in several algorithms
+* updated conformance to OGC or std
+* other updates and fixes
+
+[*Internal changes]
+
+* updates in specializations/not_implemented for distance/convert/assign/area/with/covered_by
+* move of wkt/dsv to io folder, making domains redundant
+* warnings: strategy concepts assigned to zero to avoid clang warnings (patched by Vishnu)
+* warnings: there were several unused parameters, for which gcc/clang warned (patched by Christophe)
+
+[/=================]
+[heading Boost 1.48]
+[/=================]
+
+[*Bugfixes]
+
+* Robustness issue, in some circumstances the union failed to output. Fixed.
+* Robustness issue, in some circumstances the calculated intersection point was outside the segment. Fixed.
+* Concept issue, cartesian intersect didn't understand segments other than the provided one. Fixed.
+* Sometimes self-intersections in linestrings were missed. Fixed.
+* The fusion coordinate system was not registered correctly. Fixed.
+
+[*Solved tickets]
+
+* [@https://svn.boost.org/trac/boost/ticket/5726 5726] Segment intersection algorithm still assumes 'first', 'second' members
+* [@https://svn.boost.org/trac/boost/ticket/5744 5744] Mistake in fusion adapt example
+* [@https://svn.boost.org/trac/boost/ticket/5748 5748] Needed to include <boost/foreach.hpp>
+* [@https://svn.boost.org/trac/boost/ticket/5954 5954] distance_pythagoras skips sqrt() step
+
+[*Improvements on algorithms]
+
+* Checking self-intersections is now not done automatically, this can blast performance.
+* Besides that, checking self-intersections is made faster.
+* Intersections now avoid outputting duplicate points. So they output the minimal set.
+
+[*Additional algorithms]
+
+* covered_by: within is defined as "within, not on boundary". covered_by is "within or on boundary"
+
+[*Additional functionality]
+
+* within: strategies can now be specified for within<point, box> and within<box, box>
+* convert: a much broader range of conversions is supported
+* assign: idem, (currently partly) synonym for convert (but reversed arguments)
+
+[*Additional coordinate types]
+
+* Basic (limited) support for Boost.Rational
+
+[heading Boost 1.47]
+
+Original release
+
+[endsect]
diff --git a/libs/geometry/doc/src/copyright_block.qbk b/libs/geometry/doc/src/copyright_block.qbk
new file mode 100644
index 000000000..028c02c0a
--- /dev/null
+++ b/libs/geometry/doc/src/copyright_block.qbk
@@ -0,0 +1,11 @@
+[/============================================================================
+ Boost.Geometry (aka GGL, Generic Geometry Library)
+
+ Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+ 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)
+=============================================================================/]
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/Jamfile.v2 b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/Jamfile.v2
new file mode 100644
index 000000000..3e343f058
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/Jamfile.v2
@@ -0,0 +1,30 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+# Doxygen XML to QuickBook
+#
+# Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2010-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project doxygen_xml2qbk
+ : requirements
+ <include>.
+ <include>contrib/rapidxml-1.13
+ <library>../../../../../../program_options/build//boost_program_options
+ <link>static
+ ;
+
+exe doxygen_xml2qbk : doxygen_xml2qbk.cpp ;
+
+install dist-bin
+ :
+ doxygen_xml2qbk
+ :
+ <install-type>EXE
+ <location>../../../../../../../dist/bin
+ :
+ release
+ ;
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/boost.vsprops b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/boost.vsprops
new file mode 100644
index 000000000..6fcaf2c7a
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/boost.vsprops
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(BOOST_ROOT);..\..\.."
+ PreprocessorDefinitions="_SCL_SECURE_NO_WARNINGS"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(BOOST_ROOT)\lib"
+ />
+ <UserMacro
+ Name="BOOST_ROOT"
+ Value="../../../../../../.."
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/configuration.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/configuration.hpp
new file mode 100644
index 000000000..3cb8ddf83
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/configuration.hpp
@@ -0,0 +1,39 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// 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)
+//
+//
+#ifndef CONFIGURATION_HPP
+#define CONFIGURATION_HPP
+
+
+#include <string>
+#include <vector>
+
+
+
+struct configuration
+{
+ // To transfer e.g. c:/_svn/boost/trunk/boost/geometry/algorithms/area.hpp
+ // to #include <boost/geometry/...>
+ // We need to find the position where the include path should start,
+ // so fill out "boost" here, or "boost/geometry" (it uses rfind)
+ std::string start_include;
+
+ // Convenience headers (headefiles with solely purpose of including others
+ std::string convenience_header_path;
+ std::vector<std::string> convenience_headers;
+
+ std::string skip_namespace;
+
+ enum output_style_type {def, alt};
+ output_style_type output_style;
+ configuration() : output_style(def) {}
+};
+
+
+#endif // CONFIGURATION_HPP
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/license.txt b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/license.txt
new file mode 100644
index 000000000..140983180
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/license.txt
@@ -0,0 +1,52 @@
+Use of this software is granted under one of the following two licenses,
+to be chosen freely by the user.
+
+1. Boost Software License - Version 1.0 - August 17th, 2003
+===============================================================================
+
+Copyright (c) 2006, 2007 Marcin Kalicinski
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+2. The MIT License
+===============================================================================
+
+Copyright (c) 2006, 2007 Marcin Kalicinski
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html
new file mode 100644
index 000000000..2c422703f
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html
@@ -0,0 +1,406 @@
+<html><head><style type="text/css">
+
+ body
+ {
+ font-family: sans-serif;
+ font-size: 90%;
+ margin: 8pt 8pt 8pt 8pt;
+ text-align: justify;
+ background-color: White;
+ }
+
+ h1 { font-weight: bold; text-align: left; }
+ h2 { font: 140% sans-serif; font-weight: bold; text-align: left; }
+ h3 { font: 120% sans-serif; font-weight: bold; text-align: left; }
+ h4 { font: bold 100% sans-serif; font-weight: bold; text-align: left; }
+ h5 { font: italic 100% sans-serif; font-weight: bold; text-align: left; }
+ h6 { font: small-caps 100% sans-serif; font-weight: bold; text-align: left; }
+
+ code
+ {
+ font-family: &quot;Courier New&quot;, Courier, mono;
+ }
+
+ pre
+ {
+ border-top: gray 0.5pt solid;
+ border-right: gray 0.5pt solid;
+ border-left: gray 0.5pt solid;
+ border-bottom: gray 0.5pt solid;
+ padding-top: 2pt;
+ padding-right: 2pt;
+ padding-left: 2pt;
+ padding-bottom: 2pt;
+ display: block;
+ font-family: &quot;courier new&quot;, courier, mono;
+ background-color: #eeeeee;
+ }
+
+ a
+ {
+ color: #000080;
+ text-decoration: none;
+ }
+
+ a:hover
+ {
+ text-decoration: underline;
+ }
+
+ .reference-header
+ {
+ border-top: gray 0.5pt solid;
+ border-right: gray 0.5pt solid;
+ border-left: gray 0.5pt solid;
+ border-bottom: gray 0.5pt solid;
+ padding-top: 2pt;
+ padding-right: 2pt;
+ padding-left: 2pt;
+ padding-bottom: 2pt;
+ background-color: #dedede;
+ }
+
+ .parameter-name
+ {
+ font-style: italic;
+ }
+
+ .indented
+ {
+ margin-left: 0.5cm;
+ }
+
+ a.toc1
+ {
+ margin-left: 0.0cm;
+ }
+
+ a.toc2
+ {
+ margin-left: 0.75cm;
+ }
+
+ a.toc3
+ {
+ margin-left: 1.5cm;
+ }
+
+ </style></head><body><h1>RAPIDXML Manual</h1><h3>Version 1.13</h3><detaileddescription xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><para><i>Copyright (C) 2006, 2009 Marcin Kalicinski</i><br/><i>See accompanying file <a href="license.txt">license.txt</a> for license information.</i><hr/><h2 level="2">Table of Contents</h2></para><para><toc><toc-contents><a href="#namespacerapidxml_1what_is_rapidxml" class="toc1">1. What is RapidXml?</a><br/><a href="#namespacerapidxml_1dependencies_and_compatibility" class="toc2">1.1 Dependencies And Compatibility</a><br/><a href="#namespacerapidxml_1character_types_and_encodings" class="toc2">1.2 Character Types And Encodings</a><br/><a href="#namespacerapidxml_1error_handling" class="toc2">1.3 Error Handling</a><br/><a href="#namespacerapidxml_1memory_allocation" class="toc2">1.4 Memory Allocation</a><br/><a href="#namespacerapidxml_1w3c_compliance" class="toc2">1.5 W3C Compliance</a><br/><a href="#namespacerapidxml_1api_design" class="toc2">1.6 API Design</a><br/><a href="#namespacerapidxml_1reliability" class="toc2">1.7 Reliability</a><br/><a href="#namespacerapidxml_1acknowledgements" class="toc2">1.8 Acknowledgements</a><br/><a href="#namespacerapidxml_1two_minute_tutorial" class="toc1">2. Two Minute Tutorial</a><br/><a href="#namespacerapidxml_1parsing" class="toc2">2.1 Parsing</a><br/><a href="#namespacerapidxml_1accessing_dom_tree" class="toc2">2.2 Accessing The DOM Tree</a><br/><a href="#namespacerapidxml_1modifying_dom_tree" class="toc2">2.3 Modifying The DOM Tree</a><br/><a href="#namespacerapidxml_1printing" class="toc2">2.4 Printing XML</a><br/><a href="#namespacerapidxml_1differences" class="toc1">3. Differences From Regular XML Parsers</a><br/><a href="#namespacerapidxml_1lifetime_of_source_text" class="toc2">3.1 Lifetime Of Source Text</a><br/><a href="#namespacerapidxml_1ownership_of_strings" class="toc2">3.2 Ownership Of Strings</a><br/><a href="#namespacerapidxml_1destructive_non_destructive" class="toc2">3.3 Destructive Vs Non-Destructive Mode</a><br/><a href="#namespacerapidxml_1performance" class="toc1">4. Performance</a><br/><a href="#namespacerapidxml_1performance_charts" class="toc2">4.1 Comparison With Other Parsers</a><br/><a href="#namespacerapidxml_1reference" class="toc1">5. Reference</a><br/></toc-contents></toc><br/></para><sect1><h2 id="namespacerapidxml_1what_is_rapidxml">1. What is RapidXml?</h2><para><a href="http://rapidxml.sourceforge.net">RapidXml</a> is an attempt to create the fastest XML DOM parser possible, while retaining useability, portability and reasonable W3C compatibility. It is an in-situ parser written in C++, with parsing speed approaching that of <code>strlen()</code> function executed on the same data. <br/><br/>
+ Entire parser is contained in a single header file, so no building or linking is neccesary. To use it you just need to copy <code>rapidxml.hpp</code> file to a convenient place (such as your project directory), and include it where needed. You may also want to use printing functions contained in header <code>rapidxml_print.hpp</code>.</para><sect2><h3 id="namespacerapidxml_1dependencies_and_compatibility">1.1 Dependencies And Compatibility</h3><para>RapidXml has <i>no dependencies</i> other than a very small subset of standard C++ library (<code>&lt;cassert&gt;</code>, <code>&lt;cstdlib&gt;</code>, <code>&lt;new&gt;</code> and <code>&lt;exception&gt;</code>, unless exceptions are disabled). It should compile on any reasonably conformant compiler, and was tested on Visual C++ 2003, Visual C++ 2005, Visual C++ 2008, gcc 3, gcc 4, and Comeau 4.3.3. Care was taken that no warnings are produced on these compilers, even with highest warning levels enabled.</para></sect2><sect2><h3 id="namespacerapidxml_1character_types_and_encodings">1.2 Character Types And Encodings</h3><para>RapidXml is character type agnostic, and can work both with narrow and wide characters. Current version does not fully support UTF-16 or UTF-32, so use of wide characters is somewhat incapacitated. However, it should succesfully parse <code>wchar_t</code> strings containing UTF-16 or UTF-32 if endianness of the data matches that of the machine. UTF-8 is fully supported, including all numeric character references, which are expanded into appropriate UTF-8 byte sequences (unless you enable parse_no_utf8 flag). <br/><br/>
+ Note that RapidXml performs no decoding - strings returned by name() and value() functions will contain text encoded using the same encoding as source file. Rapidxml understands and expands the following character references: <code>&amp;apos; &amp;amp; &amp;quot; &amp;lt; &amp;gt; &amp;#...;</code> Other character references are not expanded.</para></sect2><sect2><h3 id="namespacerapidxml_1error_handling">1.3 Error Handling</h3><para>By default, RapidXml uses C++ exceptions to report errors. If this behaviour is undesirable, RAPIDXML_NO_EXCEPTIONS can be defined to suppress exception code. See <a href="#classrapidxml_1_1parse__error" kindref="compound">parse_error</a> class and <a href="#namespacerapidxml_ff5d67f74437199d316d2b2660653ae1_1ff5d67f74437199d316d2b2660653ae1" kindref="member">parse_error_handler()</a> function for more information.</para></sect2><sect2><h3 id="namespacerapidxml_1memory_allocation">1.4 Memory Allocation</h3><para>RapidXml uses a special memory pool object to allocate nodes and attributes, because direct allocation using <code>new</code> operator would be far too slow. Underlying memory allocations performed by the pool can be customized by use of <a href="#classrapidxml_1_1memory__pool_c0a55a6ef0837dca67572e357100d78a_1c0a55a6ef0837dca67572e357100d78a" kindref="member">memory_pool::set_allocator()</a> function. See class <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a> for more information.</para></sect2><sect2><h3 id="namespacerapidxml_1w3c_compliance">1.5 W3C Compliance</h3><para>RapidXml is not a W3C compliant parser, primarily because it ignores DOCTYPE declarations. There is a number of other, minor incompatibilities as well. Still, it can successfully parse and produce complete trees of all valid XML files in W3C conformance suite (over 1000 files specially designed to find flaws in XML processors). In destructive mode it performs whitespace normalization and character entity substitution for a small set of built-in entities.</para></sect2><sect2><h3 id="namespacerapidxml_1api_design">1.6 API Design</h3><para>RapidXml API is minimalistic, to reduce code size as much as possible, and facilitate use in embedded environments. Additional convenience functions are provided in separate headers: <code>rapidxml_utils.hpp</code> and <code><a href="#rapidxml__print_8hpp" kindref="compound">rapidxml_print.hpp</a></code>. Contents of these headers is not an essential part of the library, and is currently not documented (otherwise than with comments in code).</para></sect2><sect2><h3 id="namespacerapidxml_1reliability">1.7 Reliability</h3><para>RapidXml is very robust and comes with a large harness of unit tests. Special care has been taken to ensure stability of the parser no matter what source text is thrown at it. One of the unit tests produces 100,000 randomly corrupted variants of XML document, which (when uncorrupted) contains all constructs recognized by RapidXml. RapidXml passes this test when it correctly recognizes that errors have been introduced, and does not crash or loop indefinitely. <br/><br/>
+ Another unit test puts RapidXml head-to-head with another, well estabilished XML parser, and verifies that their outputs match across a wide variety of small and large documents. <br/><br/>
+ Yet another test feeds RapidXml with over 1000 test files from W3C compliance suite, and verifies that correct results are obtained. There are also additional tests that verify each API function separately, and test that various parsing modes work as expected.</para></sect2><sect2><h3 id="namespacerapidxml_1acknowledgements">1.8 Acknowledgements</h3><para>I would like to thank Arseny Kapoulkine for his work on <a href="http://code.google.com/p/pugixml">pugixml</a>, which was an inspiration for this project. Additional thanks go to Kristen Wegner for creating <a href="http://www.codeproject.com/soap/pugxml.asp">pugxml</a>, from which pugixml was derived. Janusz Wohlfeil kindly ran RapidXml speed tests on hardware that I did not have access to, allowing me to expand performance comparison table.</para></sect2></sect1><sect1><h2 id="namespacerapidxml_1two_minute_tutorial">2. Two Minute Tutorial</h2><sect2><h3 id="namespacerapidxml_1parsing">2.1 Parsing</h3><para>The following code causes RapidXml to parse a zero-terminated string named <code>text</code>: <pre>using namespace rapidxml;
+xml_document&lt;&gt; doc; // character type defaults to char
+doc.parse&lt;0&gt;(text); // 0 means default parse flags
+</pre><code>doc</code> object is now a root of DOM tree containing representation of the parsed XML. Because all RapidXml interface is contained inside namespace <code>rapidxml</code>, users must either bring contents of this namespace into scope, or fully qualify all the names. Class <a href="#classrapidxml_1_1xml__document" kindref="compound">xml_document</a> represents a root of the DOM hierarchy. By means of public inheritance, it is also an <a href="#classrapidxml_1_1xml__node" kindref="compound">xml_node</a> and a <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a>. Template parameter of <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function is used to specify parsing flags, with which you can fine-tune behaviour of the parser. Note that flags must be a compile-time constant.</para></sect2><sect2><h3 id="namespacerapidxml_1accessing_dom_tree">2.2 Accessing The DOM Tree</h3><para>To access the DOM tree, use methods of <a href="#classrapidxml_1_1xml__node" kindref="compound">xml_node</a> and <a href="#classrapidxml_1_1xml__attribute" kindref="compound">xml_attribute</a> classes: <pre>cout &lt;&lt; &quot;Name of my first node is: &quot; &lt;&lt; doc.first_node()-&gt;name() &lt;&lt; &quot;\n&quot;;
+xml_node&lt;&gt; *node = doc.first_node(&quot;foobar&quot;);
+cout &lt;&lt; &quot;Node foobar has value &quot; &lt;&lt; node-&gt;value() &lt;&lt; &quot;\n&quot;;
+for (xml_attribute&lt;&gt; *attr = node-&gt;first_attribute();
+ attr; attr = attr-&gt;next_attribute())
+{
+ cout &lt;&lt; &quot;Node foobar has attribute &quot; &lt;&lt; attr-&gt;name() &lt;&lt; &quot; &quot;;
+ cout &lt;&lt; &quot;with value &quot; &lt;&lt; attr-&gt;value() &lt;&lt; &quot;\n&quot;;
+}
+</pre></para></sect2><sect2><h3 id="namespacerapidxml_1modifying_dom_tree">2.3 Modifying The DOM Tree</h3><para>DOM tree produced by the parser is fully modifiable. Nodes and attributes can be added/removed, and their contents changed. The below example creates a HTML document, whose sole contents is a link to google.com website: <pre>xml_document&lt;&gt; doc;
+xml_node&lt;&gt; *node = doc.allocate_node(node_element, &quot;a&quot;, &quot;Google&quot;);
+doc.append_node(node);
+xml_attribute&lt;&gt; *attr = doc.allocate_attribute(&quot;href&quot;, &quot;google.com&quot;);
+node-&gt;append_attribute(attr);
+</pre> One quirk is that nodes and attributes <i>do not own</i> the text of their names and values. This is because normally they only store pointers to the source text. So, when assigning a new name or value to the node, care must be taken to ensure proper lifetime of the string. The easiest way to achieve it is to allocate the string from the <a href="#classrapidxml_1_1xml__document" kindref="compound">xml_document</a> memory pool. In the above example this is not necessary, because we are only assigning character constants. But the code below uses <a href="#classrapidxml_1_1memory__pool_69729185bc59b0875192d667c47b8859_169729185bc59b0875192d667c47b8859" kindref="member">memory_pool::allocate_string()</a> function to allocate node name (which will have the same lifetime as the document), and assigns it to a new node: <pre>xml_document&lt;&gt; doc;
+char *node_name = doc.allocate_string(name); // Allocate string and copy name into it
+xml_node&lt;&gt; *node = doc.allocate_node(node_element, node_name); // Set node name to node_name
+</pre> Check <a href="#namespacerapidxml_1reference" kindref="member">Reference</a> section for description of the entire interface.</para></sect2><sect2><h3 id="namespacerapidxml_1printing">2.4 Printing XML</h3><para>You can print <code><a href="#classrapidxml_1_1xml__document" kindref="compound">xml_document</a></code> and <code><a href="#classrapidxml_1_1xml__node" kindref="compound">xml_node</a></code> objects into an XML string. Use <a href="#namespacerapidxml_b94d570fc4c4ab2423813cd0243326b1_1b94d570fc4c4ab2423813cd0243326b1" kindref="member">print()</a> function or operator &lt;&lt;, which are defined in <code><a href="#rapidxml__print_8hpp" kindref="compound">rapidxml_print.hpp</a></code> header. <pre>using namespace rapidxml;
+xml_document&lt;&gt; doc; // character type defaults to char
+// ... some code to fill the document
+
+// Print to stream using operator &lt;&lt;
+std::cout &lt;&lt; doc;
+
+// Print to stream using print function, specifying printing flags
+print(std::cout, doc, 0); // 0 means default printing flags
+
+// Print to string using output iterator
+std::string s;
+print(std::back_inserter(s), doc, 0);
+
+// Print to memory buffer using output iterator
+char buffer[4096]; // You are responsible for making the buffer large enough!
+char *end = print(buffer, doc, 0); // end contains pointer to character after last printed character
+*end = 0; // Add string terminator after XML
+</pre></para></sect2></sect1><sect1><h2 id="namespacerapidxml_1differences">3. Differences From Regular XML Parsers</h2><para>RapidXml is an <i>in-situ parser</i>, which allows it to achieve very high parsing speed. In-situ means that parser does not make copies of strings. Instead, it places pointers to the <i>source text</i> in the DOM hierarchy.</para><sect2><h3 id="namespacerapidxml_1lifetime_of_source_text">3.1 Lifetime Of Source Text</h3><para>In-situ parsing requires that source text lives at least as long as the document object. If source text is destroyed, names and values of nodes in DOM tree will become destroyed as well. Additionally, whitespace processing, character entity translation, and zero-termination of strings require that source text be modified during parsing (but see non-destructive mode). This makes the text useless for further processing once it was parsed by RapidXml. <br/><br/>
+ In many cases however, these are not serious issues.</para></sect2><sect2><h3 id="namespacerapidxml_1ownership_of_strings">3.2 Ownership Of Strings</h3><para>Nodes and attributes produced by RapidXml do not own their name and value strings. They merely hold the pointers to them. This means you have to be careful when setting these values manually, by using <a href="#classrapidxml_1_1xml__base_e099c291e104a0d277307fe71f5e0f9e_1e099c291e104a0d277307fe71f5e0f9e" kindref="member">xml_base::name(const Ch *)</a> or <a href="#classrapidxml_1_1xml__base_18c7469acdca771de9b4f3054053029c_118c7469acdca771de9b4f3054053029c" kindref="member">xml_base::value(const Ch *)</a> functions. Care must be taken to ensure that lifetime of the string passed is at least as long as lifetime of the node/attribute. The easiest way to achieve it is to allocate the string from <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a> owned by the document. Use <a href="#classrapidxml_1_1memory__pool_69729185bc59b0875192d667c47b8859_169729185bc59b0875192d667c47b8859" kindref="member">memory_pool::allocate_string()</a> function for this purpose.</para></sect2><sect2><h3 id="namespacerapidxml_1destructive_non_destructive">3.3 Destructive Vs Non-Destructive Mode</h3><para>By default, the parser modifies source text during the parsing process. This is required to achieve character entity translation, whitespace normalization, and zero-termination of strings. <br/><br/>
+ In some cases this behaviour may be undesirable, for example if source text resides in read only memory, or is mapped to memory directly from file. By using appropriate parser flags (parse_non_destructive), source text modifications can be disabled. However, because RapidXml does in-situ parsing, it obviously has the following side-effects:<ul><li><para>no whitespace normalization is done</para></li><li><para>no entity reference translation is done</para></li><li><para>names and values are not zero-terminated, you must use <a href="#classrapidxml_1_1xml__base_0dae694c8f7e4d89f1003e2f3a15a43c_10dae694c8f7e4d89f1003e2f3a15a43c" kindref="member">xml_base::name_size()</a> and <a href="#classrapidxml_1_1xml__base_aed5ae791b7164c1ee5e649198cbb3db_1aed5ae791b7164c1ee5e649198cbb3db" kindref="member">xml_base::value_size()</a> functions to tell where they end</para></li></ul></para></sect2></sect1><sect1><h2 id="namespacerapidxml_1performance">4. Performance</h2><para>RapidXml achieves its speed through use of several techniques:<ul><li><para>In-situ parsing. When building DOM tree, RapidXml does not make copies of string data, such as node names and values. Instead, it stores pointers to interior of the source text.</para></li><li><para>Use of template metaprogramming techniques. This allows it to move much of the work to compile time. Through magic of the templates, C++ compiler generates a separate copy of parsing code for any combination of parser flags you use. In each copy, all possible decisions are made at compile time and all unused code is omitted.</para></li><li><para>Extensive use of lookup tables for parsing.</para></li><li><para>Hand-tuned C++ with profiling done on several most popular CPUs.</para></li></ul></para><para>This results in a very small and fast code: a parser which is custom tailored to exact needs with each invocation.</para><sect2><h3 id="namespacerapidxml_1performance_charts">4.1 Comparison With Other Parsers</h3><para>The table below compares speed of RapidXml to some other parsers, and to <code>strlen()</code> function executed on the same data. On a modern CPU (as of 2007), you can expect parsing throughput to be close to 1 GB/s. As a rule of thumb, parsing speed is about 50-100x faster than Xerces DOM, 30-60x faster than TinyXml, 3-12x faster than pugxml, and about 5% - 30% faster than pugixml, the fastest XML parser I know of.</para><para><ul><li><para>The test file is a real-world, 50kB large, moderately dense XML file. </para></li><li><para>All timing is done by using RDTSC instruction present in Pentium-compatible CPUs. </para></li><li><para>No profile-guided optimizations are used. </para></li><li><para>All parsers are running in their fastest modes. </para></li><li><para>The results are given in CPU cycles per character, so frequency of CPUs is irrelevant. </para></li><li><para>The results are minimum values from a large number of runs, to minimize effects of operating system activity, task switching, interrupt handling etc. </para></li><li><para>A single parse of the test file takes about 1/10th of a millisecond, so with large number of runs there is a good chance of hitting at least one no-interrupt streak, and obtaining undisturbed results. </para></li></ul><table rows="9" cols="7" border="1" cellpadding="3pt"><tr><th thead="yes"><para><center>Platform</center></para></th><th thead="yes"><para><center>Compiler</center></para></th><th thead="yes"><para>strlen() </para></th><th thead="yes"><para>RapidXml </para></th><th thead="yes"><para>pugixml 0.3 </para></th><th thead="yes"><para>pugxml </para></th><th thead="yes"><para>TinyXml </para></th></tr><tr><td thead="no"><para><center>Pentium 4</center></para></td><td thead="no"><para><center>MSVC 8.0</center></para></td><td thead="no"><para><center>2.5</center></para></td><td thead="no"><para><center>5.4</center></para></td><td thead="no"><para><center>7.0</center></para></td><td thead="no"><para><center>61.7</center></para></td><td thead="no"><para><center>298.8</center></para></td></tr><tr><td thead="no"><para><center>Pentium 4</center></para></td><td thead="no"><para><center>gcc 4.1.1</center></para></td><td thead="no"><para><center>0.8</center></para></td><td thead="no"><para><center>6.1</center></para></td><td thead="no"><para><center>9.5</center></para></td><td thead="no"><para><center>67.0</center></para></td><td thead="no"><para><center>413.2</center></para></td></tr><tr><td thead="no"><para><center>Core 2</center></para></td><td thead="no"><para><center>MSVC 8.0</center></para></td><td thead="no"><para><center>1.0</center></para></td><td thead="no"><para><center>4.5</center></para></td><td thead="no"><para><center>5.0</center></para></td><td thead="no"><para><center>24.6</center></para></td><td thead="no"><para><center>154.8</center></para></td></tr><tr><td thead="no"><para><center>Core 2</center></para></td><td thead="no"><para><center>gcc 4.1.1</center></para></td><td thead="no"><para><center>0.6</center></para></td><td thead="no"><para><center>4.6</center></para></td><td thead="no"><para><center>5.4</center></para></td><td thead="no"><para><center>28.3</center></para></td><td thead="no"><para><center>229.3</center></para></td></tr><tr><td thead="no"><para><center>Athlon XP</center></para></td><td thead="no"><para><center>MSVC 8.0</center></para></td><td thead="no"><para><center>3.1</center></para></td><td thead="no"><para><center>7.7</center></para></td><td thead="no"><para><center>8.0</center></para></td><td thead="no"><para><center>25.5</center></para></td><td thead="no"><para><center>182.6</center></para></td></tr><tr><td thead="no"><para><center>Athlon XP</center></para></td><td thead="no"><para><center>gcc 4.1.1</center></para></td><td thead="no"><para><center>0.9</center></para></td><td thead="no"><para><center>8.2</center></para></td><td thead="no"><para><center>9.2</center></para></td><td thead="no"><para><center>33.7</center></para></td><td thead="no"><para><center>265.2</center></para></td></tr><tr><td thead="no"><para><center>Pentium 3</center></para></td><td thead="no"><para><center>MSVC 8.0</center></para></td><td thead="no"><para><center>2.0</center></para></td><td thead="no"><para><center>6.3</center></para></td><td thead="no"><para><center>7.0</center></para></td><td thead="no"><para><center>30.9</center></para></td><td thead="no"><para><center>211.9</center></para></td></tr><tr><td thead="no"><para><center>Pentium 3</center></para></td><td thead="no"><para><center>gcc 4.1.1</center></para></td><td thead="no"><para><center>1.0</center></para></td><td thead="no"><para><center>6.7</center></para></td><td thead="no"><para><center>8.9</center></para></td><td thead="no"><para><center>35.3</center></para></td><td thead="no"><para><center>316.0</center></para></td></tr></table><i>(*) All results are in CPU cycles per character of source text</i></para></sect2></sect1><sect1><h2 id="namespacerapidxml_1reference">5. Reference</h2><para>This section lists all classes, functions, constants etc. and describes them in detail. </para></sect1></detaileddescription><dl><dt>class
+ template
+ <a href="#classrapidxml_1_1memory__pool">rapidxml::memory_pool</a></dt><dt class="indented">
+ constructor
+ <a href="#classrapidxml_1_1memory__pool_f8fb3c8f1a564f8045c40bcd07a89866_1f8fb3c8f1a564f8045c40bcd07a89866">memory_pool()</a></dt><dt class="indented">
+ destructor
+ <a href="#classrapidxml_1_1memory__pool_6f8c7990d9ec1ed2acf6558b238570eb_16f8c7990d9ec1ed2acf6558b238570eb">~memory_pool()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1memory__pool_750ba3c610b129ac057d817509d08f41_1750ba3c610b129ac057d817509d08f41">allocate_node(node_type type, const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1memory__pool_462de142669e0ff649e8e615b82bf457_1462de142669e0ff649e8e615b82bf457">allocate_attribute(const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1memory__pool_69729185bc59b0875192d667c47b8859_169729185bc59b0875192d667c47b8859">allocate_string(const Ch *source=0, std::size_t size=0)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1memory__pool_95c49fcb056e9103ec906a59e3e01d76_195c49fcb056e9103ec906a59e3e01d76">clone_node(const xml_node&lt; Ch &gt; *source, xml_node&lt; Ch &gt; *result=0)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1memory__pool_c8bb3912a3ce86b15842e79d0b421204_1c8bb3912a3ce86b15842e79d0b421204">clear()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1memory__pool_c0a55a6ef0837dca67572e357100d78a_1c0a55a6ef0837dca67572e357100d78a">set_allocator(alloc_func *af, free_func *ff)</a></dt><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><p/><p/><dt>class <a href="#classrapidxml_1_1parse__error">rapidxml::parse_error</a></dt><dt class="indented">
+ constructor
+ <a href="#classrapidxml_1_1parse__error_4dd8d1bdbd9221df4dcb90cafaee3332_14dd8d1bdbd9221df4dcb90cafaee3332">parse_error(const char *what, void *where)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1parse__error_ff06f49065b54a8a86e02e9a2441a8ba_1ff06f49065b54a8a86e02e9a2441a8ba">what() const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1parse__error_377be7d201d95221c318682c35377aca_1377be7d201d95221c318682c35377aca">where() const </a></dt><dt class="indented"/><dt class="indented"/><p/><dt>class
+ template
+ <a href="#classrapidxml_1_1xml__attribute">rapidxml::xml_attribute</a></dt><dt class="indented">
+ constructor
+ <a href="#classrapidxml_1_1xml__attribute_d5464aadf08269a886b730993525db34_1d5464aadf08269a886b730993525db34">xml_attribute()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__attribute_77aea7d8d996ba4f6bd61cc478a4e72d_177aea7d8d996ba4f6bd61cc478a4e72d">document() const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__attribute_5c4a98d2b75f9b41b12c110108fd55ab_15c4a98d2b75f9b41b12c110108fd55ab">previous_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__attribute_1b8a814d0d3a7165396b08433eee8a91_11b8a814d0d3a7165396b08433eee8a91">next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const </a></dt><dt class="indented"/><dt class="indented"/><dt class="indented"/><p/><dt>class
+ template
+ <a href="#classrapidxml_1_1xml__base">rapidxml::xml_base</a></dt><dt class="indented">
+ constructor
+ <a href="#classrapidxml_1_1xml__base_23630d2c130a9e0e3f3afa7584a9b218_123630d2c130a9e0e3f3afa7584a9b218">xml_base()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__base_622eade29fdf7806d3ef93ac4d90e707_1622eade29fdf7806d3ef93ac4d90e707">name() const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__base_0dae694c8f7e4d89f1003e2f3a15a43c_10dae694c8f7e4d89f1003e2f3a15a43c">name_size() const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__base_c54fa4987fb503916a7b541eb15c9c7f_1c54fa4987fb503916a7b541eb15c9c7f">value() const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__base_aed5ae791b7164c1ee5e649198cbb3db_1aed5ae791b7164c1ee5e649198cbb3db">value_size() const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__base_4e7e23d06d48126c65b1f6266acfba5c_14e7e23d06d48126c65b1f6266acfba5c">name(const Ch *name, std::size_t size)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__base_e099c291e104a0d277307fe71f5e0f9e_1e099c291e104a0d277307fe71f5e0f9e">name(const Ch *name)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__base_d9640aa3f5374673cb72a5289b6c91eb_1d9640aa3f5374673cb72a5289b6c91eb">value(const Ch *value, std::size_t size)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__base_18c7469acdca771de9b4f3054053029c_118c7469acdca771de9b4f3054053029c">value(const Ch *value)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__base_798e8df7ea53ade4d9f0701017dce80e_1798e8df7ea53ade4d9f0701017dce80e">parent() const </a></dt><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><p/><dt>class
+ template
+ <a href="#classrapidxml_1_1xml__document">rapidxml::xml_document</a></dt><dt class="indented">
+ constructor
+ <a href="#classrapidxml_1_1xml__document_6ce266cc52d549c42abe3a3d5e8af9ba_16ce266cc52d549c42abe3a3d5e8af9ba">xml_document()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c">parse(Ch *text)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__document_c8bb3912a3ce86b15842e79d0b421204_1c8bb3912a3ce86b15842e79d0b421204">clear()</a></dt><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><p/><p/><p/><p/><p/><p/><p/><p/><p/><dt>class
+ template
+ <a href="#classrapidxml_1_1xml__node">rapidxml::xml_node</a></dt><dt class="indented">
+ constructor
+ <a href="#classrapidxml_1_1xml__node_34c55af3504549a475e5b9dfcaa6adf5_134c55af3504549a475e5b9dfcaa6adf5">xml_node(node_type type)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_975e86937621ae4afe6a423219de30d0_1975e86937621ae4afe6a423219de30d0">type() const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_77aea7d8d996ba4f6bd61cc478a4e72d_177aea7d8d996ba4f6bd61cc478a4e72d">document() const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_7823e36687669e59c2afdf66334ef35a_17823e36687669e59c2afdf66334ef35a">first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_fcb6e2209b591a36d2dadba20d2bc7cc_1fcb6e2209b591a36d2dadba20d2bc7cc">last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_ac2f6886c0107e9d5f156e9542546df6_1ac2f6886c0107e9d5f156e9542546df6">previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_b3ead2cefecc03a813836203e3f6f38f_1b3ead2cefecc03a813836203e3f6f38f">next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_5810a09f82f8d53efbe9456286dcec83_15810a09f82f8d53efbe9456286dcec83">first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_16953d66751b5b949ee4ee2d9c0bc63a_116953d66751b5b949ee4ee2d9c0bc63a">last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const </a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_a78759bfa429fa2ab6bc5fe617cfa3cf_1a78759bfa429fa2ab6bc5fe617cfa3cf">type(node_type type)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_0c39df6617e709eb2fba11300dea63f2_10c39df6617e709eb2fba11300dea63f2">prepend_node(xml_node&lt; Ch &gt; *child)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_86de2e22276826089b7baed2599f8dee_186de2e22276826089b7baed2599f8dee">append_node(xml_node&lt; Ch &gt; *child)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_780972a57fc447250ab47cc8f421b65e_1780972a57fc447250ab47cc8f421b65e">insert_node(xml_node&lt; Ch &gt; *where, xml_node&lt; Ch &gt; *child)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_9a31d861e1bddc710839c551a5d2b3a4_19a31d861e1bddc710839c551a5d2b3a4">remove_first_node()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_87addf2bc127ee31aa4b5295d3c9b530_187addf2bc127ee31aa4b5295d3c9b530">remove_last_node()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_9316463a2201631e7e2062b17729f9cd_19316463a2201631e7e2062b17729f9cd">remove_node(xml_node&lt; Ch &gt; *where)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_0218147d13e41d5fa60ced4e7a7e9726_10218147d13e41d5fa60ced4e7a7e9726">remove_all_nodes()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_f6dffa513da74cc0be71a7ba84f8265e_1f6dffa513da74cc0be71a7ba84f8265e">prepend_attribute(xml_attribute&lt; Ch &gt; *attribute)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_8fbd4f5ef7169d493da9f8d87ac04b77_18fbd4f5ef7169d493da9f8d87ac04b77">append_attribute(xml_attribute&lt; Ch &gt; *attribute)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_070d5888b0557fe06a5b24961de1b988_1070d5888b0557fe06a5b24961de1b988">insert_attribute(xml_attribute&lt; Ch &gt; *where, xml_attribute&lt; Ch &gt; *attribute)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_4eea4a7f6cb484ca9944f7eafe6e1843_14eea4a7f6cb484ca9944f7eafe6e1843">remove_first_attribute()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_37d87c4d5d89fa0cf05b72ee8d4cba3b_137d87c4d5d89fa0cf05b72ee8d4cba3b">remove_last_attribute()</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_c75154db2e768c0e5b541fc8cd0775ab_1c75154db2e768c0e5b541fc8cd0775ab">remove_attribute(xml_attribute&lt; Ch &gt; *where)</a></dt><dt class="indented">function <a href="#classrapidxml_1_1xml__node_59e6ad4cfd5e8096c052e71d79561eda_159e6ad4cfd5e8096c052e71d79561eda">remove_all_attributes()</a></dt><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><p/><dt>namespace <a href="#namespacerapidxml">rapidxml</a></dt><dt class="indented">enum <a href="#namespacerapidxml_6a276b85e2da28c5f9c3dbce61c55682_16a276b85e2da28c5f9c3dbce61c55682">node_type</a></dt><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented"/><dt class="indented">function <a href="#namespacerapidxml_ff5d67f74437199d316d2b2660653ae1_1ff5d67f74437199d316d2b2660653ae1">parse_error_handler(const char *what, void *where)</a></dt><dt class="indented">function <a href="#namespacerapidxml_b94d570fc4c4ab2423813cd0243326b1_1b94d570fc4c4ab2423813cd0243326b1">print(OutIt out, const xml_node&lt; Ch &gt; &amp;node, int flags=0)</a></dt><dt class="indented">function <a href="#namespacerapidxml_13bc37d6d1047acb0efdbc1689221a5e_113bc37d6d1047acb0efdbc1689221a5e">print(std::basic_ostream&lt; Ch &gt; &amp;out, const xml_node&lt; Ch &gt; &amp;node, int flags=0)</a></dt><dt class="indented">function <a href="#namespacerapidxml_5619b38000d967fb223b2b0a8c17463a_15619b38000d967fb223b2b0a8c17463a">operator&lt;&lt;(std::basic_ostream&lt; Ch &gt; &amp;out, const xml_node&lt; Ch &gt; &amp;node)</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_87e8bbab53702cf3b438bd553c10b6b9_187e8bbab53702cf3b438bd553c10b6b9">parse_no_data_nodes</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_97e2c4fdc04fae17126f9971a4fc993e_197e2c4fdc04fae17126f9971a4fc993e">parse_no_element_values</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_9cae3801e70437cbc410c24bf6be691c_19cae3801e70437cbc410c24bf6be691c">parse_no_string_terminators</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_7223b7815c4fb8b42e6e4e77e1ea6b97_17223b7815c4fb8b42e6e4e77e1ea6b97">parse_no_entity_translation</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_ccde57f6054857ee4042a1b4d98c83b9_1ccde57f6054857ee4042a1b4d98c83b9">parse_no_utf8</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_52e2c934ad9c845a5f4cc49570470556_152e2c934ad9c845a5f4cc49570470556">parse_declaration_node</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_0f7479dacbc868456d07897a8c072784_10f7479dacbc868456d07897a8c072784">parse_comment_nodes</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_8e187746ba1ca04f107951ad32df962e_18e187746ba1ca04f107951ad32df962e">parse_doctype_node</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_1c20b2b2b75711cd76423e119c49f830_11c20b2b2b75711cd76423e119c49f830">parse_pi_nodes</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_a5daff9d61c7d4eaf98e4d42efe628ee_1a5daff9d61c7d4eaf98e4d42efe628ee">parse_validate_closing_tags</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_ac1f06b1afd47b812732fb521b146fd9_1ac1f06b1afd47b812732fb521b146fd9">parse_trim_whitespace</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_88f95d4e275ba01408fefde83078651b_188f95d4e275ba01408fefde83078651b">parse_normalize_whitespace</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_45751cf2f38fd6915f35b3122b46d5b6_145751cf2f38fd6915f35b3122b46d5b6">parse_default</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_a97ba1a0a79a6d66f4eef3612508d943_1a97ba1a0a79a6d66f4eef3612508d943">parse_non_destructive</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_398c5476e76102f8bd76c10bb0abbe10_1398c5476e76102f8bd76c10bb0abbe10">parse_fastest</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_b4f2515265facb42291570307924bd57_1b4f2515265facb42291570307924bd57">parse_full</a></dt><dt class="indented">
+ constant
+ <a href="#namespacerapidxml_b08b8d4293c203b69ed6c5ae77ac1907_1b08b8d4293c203b69ed6c5ae77ac1907">print_no_indenting</a></dt><p/><p/><p/><p/></dl><hr/><h3 class="reference-header" id="classrapidxml_1_1memory__pool">class
+ template
+ rapidxml::memory_pool</h3>
+
+ Defined in <a href="rapidxml.hpp">rapidxml.hpp</a><br/>
+ Base class for
+ <a href="#classrapidxml_1_1xml__document">xml_document</a> <h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">This class is used by the parser to create new nodes and attributes, without overheads of dynamic memory allocation. In most cases, you will not need to use this class directly. However, if you need to create nodes manually or modify names/values of nodes, you are encouraged to use <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a> of relevant <a href="#classrapidxml_1_1xml__document" kindref="compound">xml_document</a> to allocate the memory. Not only is this faster than allocating them by using <code>new</code> operator, but also their lifetime will be tied to the lifetime of document, possibly simplyfing memory management. <br/><br/>
+ Call <a href="#classrapidxml_1_1memory__pool_750ba3c610b129ac057d817509d08f41_1750ba3c610b129ac057d817509d08f41" kindref="member">allocate_node()</a> or <a href="#classrapidxml_1_1memory__pool_462de142669e0ff649e8e615b82bf457_1462de142669e0ff649e8e615b82bf457" kindref="member">allocate_attribute()</a> functions to obtain new nodes or attributes from the pool. You can also call <a href="#classrapidxml_1_1memory__pool_69729185bc59b0875192d667c47b8859_169729185bc59b0875192d667c47b8859" kindref="member">allocate_string()</a> function to allocate strings. Such strings can then be used as names or values of nodes without worrying about their lifetime. Note that there is no <code>free()</code> function -- all allocations are freed at once when <a href="#classrapidxml_1_1memory__pool_c8bb3912a3ce86b15842e79d0b421204_1c8bb3912a3ce86b15842e79d0b421204" kindref="member">clear()</a> function is called, or when the pool is destroyed. <br/><br/>
+ It is also possible to create a standalone <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a>, and use it to allocate nodes, whose lifetime will not be tied to any document. <br/><br/>
+ Pool maintains <code>RAPIDXML_STATIC_POOL_SIZE</code> bytes of statically allocated memory. Until static memory is exhausted, no dynamic memory allocations are done. When static memory is exhausted, pool allocates additional blocks of memory of size <code>RAPIDXML_DYNAMIC_POOL_SIZE</code> each, by using global <code>new[]</code> and <code>delete[]</code> operators. This behaviour can be changed by setting custom allocation routines. Use <a href="#classrapidxml_1_1memory__pool_c0a55a6ef0837dca67572e357100d78a_1c0a55a6ef0837dca67572e357100d78a" kindref="member">set_allocator()</a> function to set them. <br/><br/>
+ Allocations for nodes, attributes and strings are aligned at <code>RAPIDXML_ALIGNMENT</code> bytes. This value defaults to the size of pointer on target architecture. <br/><br/>
+ To obtain absolutely top performance from the parser, it is important that all nodes are allocated from a single, contiguous block of memory. Otherwise, cache misses when jumping between two (or more) disjoint blocks of memory can slow down parsing quite considerably. If required, you can tweak <code>RAPIDXML_STATIC_POOL_SIZE</code>, <code>RAPIDXML_DYNAMIC_POOL_SIZE</code> and <code>RAPIDXML_ALIGNMENT</code> to obtain best wasted memory to performance compromise. To do it, define their values before <a href="#rapidxml_8hpp" kindref="compound">rapidxml.hpp</a> file is included. </para><h4>Parameters</h4><dl><dt class="parameter-name">Ch</dt><dd>Character type of created nodes. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1memory__pool_f8fb3c8f1a564f8045c40bcd07a89866_1f8fb3c8f1a564f8045c40bcd07a89866">
+ constructor
+ memory_pool::memory_pool</h3><h4>Synopsis</h4><code class="synopsis">memory_pool();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Constructs empty pool with default allocator functions. </para><p/><h3 class="reference-header" id="classrapidxml_1_1memory__pool_6f8c7990d9ec1ed2acf6558b238570eb_16f8c7990d9ec1ed2acf6558b238570eb">
+ destructor
+ memory_pool::~memory_pool</h3><h4>Synopsis</h4><code class="synopsis">~memory_pool();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Destroys pool and frees all the memory. This causes memory occupied by nodes allocated by the pool to be freed. Nodes allocated from the pool are no longer valid. </para><p/><h3 class="reference-header" id="classrapidxml_1_1memory__pool_750ba3c610b129ac057d817509d08f41_1750ba3c610b129ac057d817509d08f41">function memory_pool::allocate_node</h3><h4>Synopsis</h4><code class="synopsis">xml_node&lt;Ch&gt;* allocate_node(node_type type, const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Allocates a new node from the pool, and optionally assigns name and value to it. If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call <a href="#namespacerapidxml_ff5d67f74437199d316d2b2660653ae1_1ff5d67f74437199d316d2b2660653ae1" kindref="member">rapidxml::parse_error_handler()</a> function. </para><h4>Parameters</h4><dl><dt class="parameter-name">type</dt><dd class="parameter-def">Type of node to create. </dd></dl><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name to assign to the node, or 0 to assign no name. </dd></dl><dl><dt class="parameter-name">value</dt><dd class="parameter-def">Value to assign to the node, or 0 to assign no value. </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name to assign, or 0 to automatically calculate size from name string. </dd></dl><dl><dt class="parameter-name">value_size</dt><dd class="parameter-def">Size of value to assign, or 0 to automatically calculate size from value string. </dd></dl><h4>Returns</h4>Pointer to allocated node. This pointer will never be NULL. <p/><h3 class="reference-header" id="classrapidxml_1_1memory__pool_462de142669e0ff649e8e615b82bf457_1462de142669e0ff649e8e615b82bf457">function memory_pool::allocate_attribute</h3><h4>Synopsis</h4><code class="synopsis">xml_attribute&lt;Ch&gt;* allocate_attribute(const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Allocates a new attribute from the pool, and optionally assigns name and value to it. If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call <a href="#namespacerapidxml_ff5d67f74437199d316d2b2660653ae1_1ff5d67f74437199d316d2b2660653ae1" kindref="member">rapidxml::parse_error_handler()</a> function. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name to assign to the attribute, or 0 to assign no name. </dd></dl><dl><dt class="parameter-name">value</dt><dd class="parameter-def">Value to assign to the attribute, or 0 to assign no value. </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name to assign, or 0 to automatically calculate size from name string. </dd></dl><dl><dt class="parameter-name">value_size</dt><dd class="parameter-def">Size of value to assign, or 0 to automatically calculate size from value string. </dd></dl><h4>Returns</h4>Pointer to allocated attribute. This pointer will never be NULL. <p/><h3 class="reference-header" id="classrapidxml_1_1memory__pool_69729185bc59b0875192d667c47b8859_169729185bc59b0875192d667c47b8859">function memory_pool::allocate_string</h3><h4>Synopsis</h4><code class="synopsis">Ch* allocate_string(const Ch *source=0, std::size_t size=0);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Allocates a char array of given size from the pool, and optionally copies a given string to it. If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call <a href="#namespacerapidxml_ff5d67f74437199d316d2b2660653ae1_1ff5d67f74437199d316d2b2660653ae1" kindref="member">rapidxml::parse_error_handler()</a> function. </para><h4>Parameters</h4><dl><dt class="parameter-name">source</dt><dd class="parameter-def">String to initialize the allocated memory with, or 0 to not initialize it. </dd></dl><dl><dt class="parameter-name">size</dt><dd class="parameter-def">Number of characters to allocate, or zero to calculate it automatically from source string length; if size is 0, source string must be specified and null terminated. </dd></dl><h4>Returns</h4>Pointer to allocated char array. This pointer will never be NULL. <p/><h3 class="reference-header" id="classrapidxml_1_1memory__pool_95c49fcb056e9103ec906a59e3e01d76_195c49fcb056e9103ec906a59e3e01d76">function memory_pool::clone_node</h3><h4>Synopsis</h4><code class="synopsis">xml_node&lt;Ch&gt;* clone_node(const xml_node&lt; Ch &gt; *source, xml_node&lt; Ch &gt; *result=0);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Clones an <a href="#classrapidxml_1_1xml__node" kindref="compound">xml_node</a> and its hierarchy of child nodes and attributes. Nodes and attributes are allocated from this memory pool. Names and values are not cloned, they are shared between the clone and the source. Result node can be optionally specified as a second parameter, in which case its contents will be replaced with cloned source node. This is useful when you want to clone entire document. </para><h4>Parameters</h4><dl><dt class="parameter-name">source</dt><dd class="parameter-def">Node to clone. </dd></dl><dl><dt class="parameter-name">result</dt><dd class="parameter-def">Node to put results in, or 0 to automatically allocate result node </dd></dl><h4>Returns</h4>Pointer to cloned node. This pointer will never be NULL. <p/><h3 class="reference-header" id="classrapidxml_1_1memory__pool_c8bb3912a3ce86b15842e79d0b421204_1c8bb3912a3ce86b15842e79d0b421204">function memory_pool::clear</h3><h4>Synopsis</h4><code class="synopsis">void clear();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Clears the pool. This causes memory occupied by nodes allocated by the pool to be freed. Any nodes or strings allocated from the pool will no longer be valid. </para><p/><h3 class="reference-header" id="classrapidxml_1_1memory__pool_c0a55a6ef0837dca67572e357100d78a_1c0a55a6ef0837dca67572e357100d78a">function memory_pool::set_allocator</h3><h4>Synopsis</h4><code class="synopsis">void set_allocator(alloc_func *af, free_func *ff);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Sets or resets the user-defined memory allocation functions for the pool. This can only be called when no memory is allocated from the pool yet, otherwise results are undefined. Allocation function must not return invalid pointer on failure. It should either throw, stop the program, or use <code>longjmp()</code> function to pass control to other place of program. If it returns invalid pointer, results are undefined. <br/><br/>
+ User defined allocation functions must have the following forms: <br/><code><br/>
+void *allocate(std::size_t size); <br/>
+void free(void *pointer); </code><br/></para><h4>Parameters</h4><dl><dt class="parameter-name">af</dt><dd class="parameter-def">Allocation function, or 0 to restore default function </dd></dl><dl><dt class="parameter-name">ff</dt><dd class="parameter-def">Free function, or 0 to restore default function </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1parse__error">class rapidxml::parse_error</h3>
+
+ Defined in <a href="rapidxml.hpp">rapidxml.hpp</a><br/><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse error exception. This exception is thrown by the parser when an error occurs. Use <a href="#classrapidxml_1_1parse__error_ff06f49065b54a8a86e02e9a2441a8ba_1ff06f49065b54a8a86e02e9a2441a8ba" kindref="member">what()</a> function to get human-readable error message. Use <a href="#classrapidxml_1_1parse__error_377be7d201d95221c318682c35377aca_1377be7d201d95221c318682c35377aca" kindref="member">where()</a> function to get a pointer to position within source text where error was detected. <br/><br/>
+ If throwing exceptions by the parser is undesirable, it can be disabled by defining RAPIDXML_NO_EXCEPTIONS macro before <a href="#rapidxml_8hpp" kindref="compound">rapidxml.hpp</a> is included. This will cause the parser to call <a href="#namespacerapidxml_ff5d67f74437199d316d2b2660653ae1_1ff5d67f74437199d316d2b2660653ae1" kindref="member">rapidxml::parse_error_handler()</a> function instead of throwing an exception. This function must be defined by the user. <br/><br/>
+ This class derives from <code>std::exception</code> class. </para><p/><h3 class="reference-header" id="classrapidxml_1_1parse__error_4dd8d1bdbd9221df4dcb90cafaee3332_14dd8d1bdbd9221df4dcb90cafaee3332">
+ constructor
+ parse_error::parse_error</h3><h4>Synopsis</h4><code class="synopsis">parse_error(const char *what, void *where);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Constructs parse error. </para><p/><h3 class="reference-header" id="classrapidxml_1_1parse__error_ff06f49065b54a8a86e02e9a2441a8ba_1ff06f49065b54a8a86e02e9a2441a8ba">function parse_error::what</h3><h4>Synopsis</h4><code class="synopsis">virtual const char* what() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets human readable description of error. </para><h4>Returns</h4>Pointer to null terminated description of the error. <p/><h3 class="reference-header" id="classrapidxml_1_1parse__error_377be7d201d95221c318682c35377aca_1377be7d201d95221c318682c35377aca">function parse_error::where</h3><h4>Synopsis</h4><code class="synopsis">Ch* where() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets pointer to character data where error happened. Ch should be the same as char type of <a href="#classrapidxml_1_1xml__document" kindref="compound">xml_document</a> that produced the error. </para><h4>Returns</h4>Pointer to location within the parsed string where error occured. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__attribute">class
+ template
+ rapidxml::xml_attribute</h3>
+
+ Defined in <a href="rapidxml.hpp">rapidxml.hpp</a><br/>
+ Inherits from
+ <a href="#classrapidxml_1_1xml__base">xml_base</a> <br/><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Class representing attribute node of XML document. Each attribute has name and value strings, which are available through <a href="#classrapidxml_1_1xml__base_622eade29fdf7806d3ef93ac4d90e707_1622eade29fdf7806d3ef93ac4d90e707" kindref="member">name()</a> and <a href="#classrapidxml_1_1xml__base_c54fa4987fb503916a7b541eb15c9c7f_1c54fa4987fb503916a7b541eb15c9c7f" kindref="member">value()</a> functions (inherited from <a href="#classrapidxml_1_1xml__base" kindref="compound">xml_base</a>). Note that after parse, both name and value of attribute will point to interior of source text used for parsing. Thus, this text must persist in memory for the lifetime of attribute. </para><h4>Parameters</h4><dl><dt class="parameter-name">Ch</dt><dd>Character type to use. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__attribute_d5464aadf08269a886b730993525db34_1d5464aadf08269a886b730993525db34">
+ constructor
+ xml_attribute::xml_attribute</h3><h4>Synopsis</h4><code class="synopsis">xml_attribute();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Constructs an empty attribute with the specified type. Consider using <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a> of appropriate <a href="#classrapidxml_1_1xml__document" kindref="compound">xml_document</a> if allocating attributes manually. </para><p/><h3 class="reference-header" id="classrapidxml_1_1xml__attribute_77aea7d8d996ba4f6bd61cc478a4e72d_177aea7d8d996ba4f6bd61cc478a4e72d">function xml_attribute::document</h3><h4>Synopsis</h4><code class="synopsis">xml_document&lt;Ch&gt;* document() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets document of which attribute is a child. </para><h4>Returns</h4>Pointer to document that contains this attribute, or 0 if there is no parent document. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__attribute_5c4a98d2b75f9b41b12c110108fd55ab_15c4a98d2b75f9b41b12c110108fd55ab">function xml_attribute::previous_attribute</h3><h4>Synopsis</h4><code class="synopsis">xml_attribute&lt;Ch&gt;* previous_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets previous attribute, optionally matching attribute name. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of attribute to find, or 0 to return previous attribute regardless of its name; this string doesn&apos;t have to be zero-terminated if name_size is non-zero </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name, in characters, or 0 to have size calculated automatically from string </dd></dl><dl><dt class="parameter-name">case_sensitive</dt><dd class="parameter-def">Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters </dd></dl><h4>Returns</h4>Pointer to found attribute, or 0 if not found. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__attribute_1b8a814d0d3a7165396b08433eee8a91_11b8a814d0d3a7165396b08433eee8a91">function xml_attribute::next_attribute</h3><h4>Synopsis</h4><code class="synopsis">xml_attribute&lt;Ch&gt;* next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets next attribute, optionally matching attribute name. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of attribute to find, or 0 to return next attribute regardless of its name; this string doesn&apos;t have to be zero-terminated if name_size is non-zero </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name, in characters, or 0 to have size calculated automatically from string </dd></dl><dl><dt class="parameter-name">case_sensitive</dt><dd class="parameter-def">Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters </dd></dl><h4>Returns</h4>Pointer to found attribute, or 0 if not found. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__base">class
+ template
+ rapidxml::xml_base</h3>
+
+ Defined in <a href="rapidxml.hpp">rapidxml.hpp</a><br/>
+ Base class for
+ <a href="#classrapidxml_1_1xml__attribute">xml_attribute</a> <a href="#classrapidxml_1_1xml__node">xml_node</a> <h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Base class for <a href="#classrapidxml_1_1xml__node" kindref="compound">xml_node</a> and <a href="#classrapidxml_1_1xml__attribute" kindref="compound">xml_attribute</a> implementing common functions: <a href="#classrapidxml_1_1xml__base_622eade29fdf7806d3ef93ac4d90e707_1622eade29fdf7806d3ef93ac4d90e707" kindref="member">name()</a>, <a href="#classrapidxml_1_1xml__base_0dae694c8f7e4d89f1003e2f3a15a43c_10dae694c8f7e4d89f1003e2f3a15a43c" kindref="member">name_size()</a>, <a href="#classrapidxml_1_1xml__base_c54fa4987fb503916a7b541eb15c9c7f_1c54fa4987fb503916a7b541eb15c9c7f" kindref="member">value()</a>, <a href="#classrapidxml_1_1xml__base_aed5ae791b7164c1ee5e649198cbb3db_1aed5ae791b7164c1ee5e649198cbb3db" kindref="member">value_size()</a> and <a href="#classrapidxml_1_1xml__base_798e8df7ea53ade4d9f0701017dce80e_1798e8df7ea53ade4d9f0701017dce80e" kindref="member">parent()</a>. </para><h4>Parameters</h4><dl><dt class="parameter-name">Ch</dt><dd>Character type to use </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_23630d2c130a9e0e3f3afa7584a9b218_123630d2c130a9e0e3f3afa7584a9b218">
+ constructor
+ xml_base::xml_base</h3><h4>Synopsis</h4><code class="synopsis">xml_base();
+ </code><p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_622eade29fdf7806d3ef93ac4d90e707_1622eade29fdf7806d3ef93ac4d90e707">function xml_base::name</h3><h4>Synopsis</h4><code class="synopsis">Ch* name() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets name of the node. Interpretation of name depends on type of node. Note that name will not be zero-terminated if <a href="#namespacerapidxml_9cae3801e70437cbc410c24bf6be691c_19cae3801e70437cbc410c24bf6be691c" kindref="member">rapidxml::parse_no_string_terminators</a> option was selected during parse. <br/><br/>
+ Use <a href="#classrapidxml_1_1xml__base_0dae694c8f7e4d89f1003e2f3a15a43c_10dae694c8f7e4d89f1003e2f3a15a43c" kindref="member">name_size()</a> function to determine length of the name. </para><h4>Returns</h4>Name of node, or empty string if node has no name. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_0dae694c8f7e4d89f1003e2f3a15a43c_10dae694c8f7e4d89f1003e2f3a15a43c">function xml_base::name_size</h3><h4>Synopsis</h4><code class="synopsis">std::size_t name_size() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets size of node name, not including terminator character. This function works correctly irrespective of whether name is or is not zero terminated. </para><h4>Returns</h4>Size of node name, in characters. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_c54fa4987fb503916a7b541eb15c9c7f_1c54fa4987fb503916a7b541eb15c9c7f">function xml_base::value</h3><h4>Synopsis</h4><code class="synopsis">Ch* value() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets value of node. Interpretation of value depends on type of node. Note that value will not be zero-terminated if <a href="#namespacerapidxml_9cae3801e70437cbc410c24bf6be691c_19cae3801e70437cbc410c24bf6be691c" kindref="member">rapidxml::parse_no_string_terminators</a> option was selected during parse. <br/><br/>
+ Use <a href="#classrapidxml_1_1xml__base_aed5ae791b7164c1ee5e649198cbb3db_1aed5ae791b7164c1ee5e649198cbb3db" kindref="member">value_size()</a> function to determine length of the value. </para><h4>Returns</h4>Value of node, or empty string if node has no value. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_aed5ae791b7164c1ee5e649198cbb3db_1aed5ae791b7164c1ee5e649198cbb3db">function xml_base::value_size</h3><h4>Synopsis</h4><code class="synopsis">std::size_t value_size() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets size of node value, not including terminator character. This function works correctly irrespective of whether value is or is not zero terminated. </para><h4>Returns</h4>Size of node value, in characters. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_4e7e23d06d48126c65b1f6266acfba5c_14e7e23d06d48126c65b1f6266acfba5c">function xml_base::name</h3><h4>Synopsis</h4><code class="synopsis">void name(const Ch *name, std::size_t size);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Sets name of node to a non zero-terminated string. See <a href="#namespacerapidxml_1ownership_of_strings" kindref="member">Ownership Of Strings</a> . <br/><br/>
+ Note that node does not own its name or value, it only stores a pointer to it. It will not delete or otherwise free the pointer on destruction. It is reponsibility of the user to properly manage lifetime of the string. The easiest way to achieve it is to use <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a> of the document to allocate the string - on destruction of the document the string will be automatically freed. <br/><br/>
+ Size of name must be specified separately, because name does not have to be zero terminated. Use <a href="#classrapidxml_1_1xml__base_e099c291e104a0d277307fe71f5e0f9e_1e099c291e104a0d277307fe71f5e0f9e" kindref="member">name(const Ch *)</a> function to have the length automatically calculated (string must be zero terminated). </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of node to set. Does not have to be zero terminated. </dd></dl><dl><dt class="parameter-name">size</dt><dd class="parameter-def">Size of name, in characters. This does not include zero terminator, if one is present. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_e099c291e104a0d277307fe71f5e0f9e_1e099c291e104a0d277307fe71f5e0f9e">function xml_base::name</h3><h4>Synopsis</h4><code class="synopsis">void name(const Ch *name);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Sets name of node to a zero-terminated string. See also <a href="#namespacerapidxml_1ownership_of_strings" kindref="member">Ownership Of Strings</a> and <a href="#classrapidxml_1_1xml__base_4e7e23d06d48126c65b1f6266acfba5c_14e7e23d06d48126c65b1f6266acfba5c" kindref="member">xml_node::name(const Ch *, std::size_t)</a>. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of node to set. Must be zero terminated. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_d9640aa3f5374673cb72a5289b6c91eb_1d9640aa3f5374673cb72a5289b6c91eb">function xml_base::value</h3><h4>Synopsis</h4><code class="synopsis">void value(const Ch *value, std::size_t size);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Sets value of node to a non zero-terminated string. See <a href="#namespacerapidxml_1ownership_of_strings" kindref="member">Ownership Of Strings</a> . <br/><br/>
+ Note that node does not own its name or value, it only stores a pointer to it. It will not delete or otherwise free the pointer on destruction. It is reponsibility of the user to properly manage lifetime of the string. The easiest way to achieve it is to use <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a> of the document to allocate the string - on destruction of the document the string will be automatically freed. <br/><br/>
+ Size of value must be specified separately, because it does not have to be zero terminated. Use <a href="#classrapidxml_1_1xml__base_18c7469acdca771de9b4f3054053029c_118c7469acdca771de9b4f3054053029c" kindref="member">value(const Ch *)</a> function to have the length automatically calculated (string must be zero terminated). <br/><br/>
+ If an element has a child node of type node_data, it will take precedence over element value when printing. If you want to manipulate data of elements using values, use parser flag <a href="#namespacerapidxml_87e8bbab53702cf3b438bd553c10b6b9_187e8bbab53702cf3b438bd553c10b6b9" kindref="member">rapidxml::parse_no_data_nodes</a> to prevent creation of data nodes by the parser. </para><h4>Parameters</h4><dl><dt class="parameter-name">value</dt><dd class="parameter-def">value of node to set. Does not have to be zero terminated. </dd></dl><dl><dt class="parameter-name">size</dt><dd class="parameter-def">Size of value, in characters. This does not include zero terminator, if one is present. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_18c7469acdca771de9b4f3054053029c_118c7469acdca771de9b4f3054053029c">function xml_base::value</h3><h4>Synopsis</h4><code class="synopsis">void value(const Ch *value);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Sets value of node to a zero-terminated string. See also <a href="#namespacerapidxml_1ownership_of_strings" kindref="member">Ownership Of Strings</a> and <a href="#classrapidxml_1_1xml__base_d9640aa3f5374673cb72a5289b6c91eb_1d9640aa3f5374673cb72a5289b6c91eb" kindref="member">xml_node::value(const Ch *, std::size_t)</a>. </para><h4>Parameters</h4><dl><dt class="parameter-name">value</dt><dd class="parameter-def">Vame of node to set. Must be zero terminated. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__base_798e8df7ea53ade4d9f0701017dce80e_1798e8df7ea53ade4d9f0701017dce80e">function xml_base::parent</h3><h4>Synopsis</h4><code class="synopsis">xml_node&lt;Ch&gt;* parent() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets node parent. </para><h4>Returns</h4>Pointer to parent node, or 0 if there is no parent. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__document">class
+ template
+ rapidxml::xml_document</h3>
+
+ Defined in <a href="rapidxml.hpp">rapidxml.hpp</a><br/>
+ Inherits from
+ <a href="#classrapidxml_1_1xml__node">xml_node</a> <a href="#classrapidxml_1_1memory__pool">memory_pool</a> <br/><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">This class represents root of the DOM hierarchy. It is also an <a href="#classrapidxml_1_1xml__node" kindref="compound">xml_node</a> and a <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a> through public inheritance. Use <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">parse()</a> function to build a DOM tree from a zero-terminated XML text string. <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">parse()</a> function allocates memory for nodes and attributes by using functions of <a href="#classrapidxml_1_1xml__document" kindref="compound">xml_document</a>, which are inherited from <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a>. To access root node of the document, use the document itself, as if it was an <a href="#classrapidxml_1_1xml__node" kindref="compound">xml_node</a>. </para><h4>Parameters</h4><dl><dt class="parameter-name">Ch</dt><dd>Character type to use. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__document_6ce266cc52d549c42abe3a3d5e8af9ba_16ce266cc52d549c42abe3a3d5e8af9ba">
+ constructor
+ xml_document::xml_document</h3><h4>Synopsis</h4><code class="synopsis">xml_document();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Constructs empty XML document. </para><p/><h3 class="reference-header" id="classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c">function xml_document::parse</h3><h4>Synopsis</h4><code class="synopsis">void parse(Ch *text);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parses zero-terminated XML string according to given flags. Passed string will be modified by the parser, unless <a href="#namespacerapidxml_a97ba1a0a79a6d66f4eef3612508d943_1a97ba1a0a79a6d66f4eef3612508d943" kindref="member">rapidxml::parse_non_destructive</a> flag is used. The string must persist for the lifetime of the document. In case of error, <a href="#classrapidxml_1_1parse__error" kindref="compound">rapidxml::parse_error</a> exception will be thrown. <br/><br/>
+ If you want to parse contents of a file, you must first load the file into the memory, and pass pointer to its beginning. Make sure that data is zero-terminated. <br/><br/>
+ Document can be parsed into multiple times. Each new call to parse removes previous nodes and attributes (if any), but does not clear memory pool. </para><h4>Parameters</h4><dl><dt class="parameter-name">text</dt><dd class="parameter-def">XML data to parse; pointer is non-const to denote fact that this data may be modified by the parser. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__document_c8bb3912a3ce86b15842e79d0b421204_1c8bb3912a3ce86b15842e79d0b421204">function xml_document::clear</h3><h4>Synopsis</h4><code class="synopsis">void clear();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Clears the document by deleting all nodes and clearing the memory pool. All nodes owned by document pool are destroyed. </para><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node">class
+ template
+ rapidxml::xml_node</h3>
+
+ Defined in <a href="rapidxml.hpp">rapidxml.hpp</a><br/>
+ Inherits from
+ <a href="#classrapidxml_1_1xml__base">xml_base</a> <br/>
+ Base class for
+ <a href="#classrapidxml_1_1xml__document">xml_document</a> <h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Class representing a node of XML document. Each node may have associated name and value strings, which are available through <a href="#classrapidxml_1_1xml__base_622eade29fdf7806d3ef93ac4d90e707_1622eade29fdf7806d3ef93ac4d90e707" kindref="member">name()</a> and <a href="#classrapidxml_1_1xml__base_c54fa4987fb503916a7b541eb15c9c7f_1c54fa4987fb503916a7b541eb15c9c7f" kindref="member">value()</a> functions. Interpretation of name and value depends on type of the node. Type of node can be determined by using <a href="#classrapidxml_1_1xml__node_975e86937621ae4afe6a423219de30d0_1975e86937621ae4afe6a423219de30d0" kindref="member">type()</a> function. <br/><br/>
+ Note that after parse, both name and value of node, if any, will point interior of source text used for parsing. Thus, this text must persist in the memory for the lifetime of node. </para><h4>Parameters</h4><dl><dt class="parameter-name">Ch</dt><dd>Character type to use. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_34c55af3504549a475e5b9dfcaa6adf5_134c55af3504549a475e5b9dfcaa6adf5">
+ constructor
+ xml_node::xml_node</h3><h4>Synopsis</h4><code class="synopsis">xml_node(node_type type);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Constructs an empty node with the specified type. Consider using <a href="#classrapidxml_1_1memory__pool" kindref="compound">memory_pool</a> of appropriate document to allocate nodes manually. </para><h4>Parameters</h4><dl><dt class="parameter-name">type</dt><dd class="parameter-def">Type of node to construct. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_975e86937621ae4afe6a423219de30d0_1975e86937621ae4afe6a423219de30d0">function xml_node::type</h3><h4>Synopsis</h4><code class="synopsis">node_type type() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets type of node. </para><h4>Returns</h4>Type of node. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_77aea7d8d996ba4f6bd61cc478a4e72d_177aea7d8d996ba4f6bd61cc478a4e72d">function xml_node::document</h3><h4>Synopsis</h4><code class="synopsis">xml_document&lt;Ch&gt;* document() const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets document of which node is a child. </para><h4>Returns</h4>Pointer to document that contains this node, or 0 if there is no parent document. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_7823e36687669e59c2afdf66334ef35a_17823e36687669e59c2afdf66334ef35a">function xml_node::first_node</h3><h4>Synopsis</h4><code class="synopsis">xml_node&lt;Ch&gt;* first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets first child node, optionally matching node name. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of child to find, or 0 to return first child regardless of its name; this string doesn&apos;t have to be zero-terminated if name_size is non-zero </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name, in characters, or 0 to have size calculated automatically from string </dd></dl><dl><dt class="parameter-name">case_sensitive</dt><dd class="parameter-def">Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters </dd></dl><h4>Returns</h4>Pointer to found child, or 0 if not found. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_fcb6e2209b591a36d2dadba20d2bc7cc_1fcb6e2209b591a36d2dadba20d2bc7cc">function xml_node::last_node</h3><h4>Synopsis</h4><code class="synopsis">xml_node&lt;Ch&gt;* last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets last child node, optionally matching node name. Behaviour is undefined if node has no children. Use <a href="#classrapidxml_1_1xml__node_7823e36687669e59c2afdf66334ef35a_17823e36687669e59c2afdf66334ef35a" kindref="member">first_node()</a> to test if node has children. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of child to find, or 0 to return last child regardless of its name; this string doesn&apos;t have to be zero-terminated if name_size is non-zero </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name, in characters, or 0 to have size calculated automatically from string </dd></dl><dl><dt class="parameter-name">case_sensitive</dt><dd class="parameter-def">Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters </dd></dl><h4>Returns</h4>Pointer to found child, or 0 if not found. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_ac2f6886c0107e9d5f156e9542546df6_1ac2f6886c0107e9d5f156e9542546df6">function xml_node::previous_sibling</h3><h4>Synopsis</h4><code class="synopsis">xml_node&lt;Ch&gt;* previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets previous sibling node, optionally matching node name. Behaviour is undefined if node has no parent. Use <a href="#classrapidxml_1_1xml__base_798e8df7ea53ade4d9f0701017dce80e_1798e8df7ea53ade4d9f0701017dce80e" kindref="member">parent()</a> to test if node has a parent. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of sibling to find, or 0 to return previous sibling regardless of its name; this string doesn&apos;t have to be zero-terminated if name_size is non-zero </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name, in characters, or 0 to have size calculated automatically from string </dd></dl><dl><dt class="parameter-name">case_sensitive</dt><dd class="parameter-def">Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters </dd></dl><h4>Returns</h4>Pointer to found sibling, or 0 if not found. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_b3ead2cefecc03a813836203e3f6f38f_1b3ead2cefecc03a813836203e3f6f38f">function xml_node::next_sibling</h3><h4>Synopsis</h4><code class="synopsis">xml_node&lt;Ch&gt;* next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets next sibling node, optionally matching node name. Behaviour is undefined if node has no parent. Use <a href="#classrapidxml_1_1xml__base_798e8df7ea53ade4d9f0701017dce80e_1798e8df7ea53ade4d9f0701017dce80e" kindref="member">parent()</a> to test if node has a parent. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of sibling to find, or 0 to return next sibling regardless of its name; this string doesn&apos;t have to be zero-terminated if name_size is non-zero </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name, in characters, or 0 to have size calculated automatically from string </dd></dl><dl><dt class="parameter-name">case_sensitive</dt><dd class="parameter-def">Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters </dd></dl><h4>Returns</h4>Pointer to found sibling, or 0 if not found. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_5810a09f82f8d53efbe9456286dcec83_15810a09f82f8d53efbe9456286dcec83">function xml_node::first_attribute</h3><h4>Synopsis</h4><code class="synopsis">xml_attribute&lt;Ch&gt;* first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets first attribute of node, optionally matching attribute name. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of attribute to find, or 0 to return first attribute regardless of its name; this string doesn&apos;t have to be zero-terminated if name_size is non-zero </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name, in characters, or 0 to have size calculated automatically from string </dd></dl><dl><dt class="parameter-name">case_sensitive</dt><dd class="parameter-def">Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters </dd></dl><h4>Returns</h4>Pointer to found attribute, or 0 if not found. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_16953d66751b5b949ee4ee2d9c0bc63a_116953d66751b5b949ee4ee2d9c0bc63a">function xml_node::last_attribute</h3><h4>Synopsis</h4><code class="synopsis">xml_attribute&lt;Ch&gt;* last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Gets last attribute of node, optionally matching attribute name. </para><h4>Parameters</h4><dl><dt class="parameter-name">name</dt><dd class="parameter-def">Name of attribute to find, or 0 to return last attribute regardless of its name; this string doesn&apos;t have to be zero-terminated if name_size is non-zero </dd></dl><dl><dt class="parameter-name">name_size</dt><dd class="parameter-def">Size of name, in characters, or 0 to have size calculated automatically from string </dd></dl><dl><dt class="parameter-name">case_sensitive</dt><dd class="parameter-def">Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters </dd></dl><h4>Returns</h4>Pointer to found attribute, or 0 if not found. <p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_a78759bfa429fa2ab6bc5fe617cfa3cf_1a78759bfa429fa2ab6bc5fe617cfa3cf">function xml_node::type</h3><h4>Synopsis</h4><code class="synopsis">void type(node_type type);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Sets type of node. </para><h4>Parameters</h4><dl><dt class="parameter-name">type</dt><dd class="parameter-def">Type of node to set. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_0c39df6617e709eb2fba11300dea63f2_10c39df6617e709eb2fba11300dea63f2">function xml_node::prepend_node</h3><h4>Synopsis</h4><code class="synopsis">void prepend_node(xml_node&lt; Ch &gt; *child);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Prepends a new child node. The prepended child becomes the first child, and all existing children are moved one position back. </para><h4>Parameters</h4><dl><dt class="parameter-name">child</dt><dd class="parameter-def">Node to prepend. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_86de2e22276826089b7baed2599f8dee_186de2e22276826089b7baed2599f8dee">function xml_node::append_node</h3><h4>Synopsis</h4><code class="synopsis">void append_node(xml_node&lt; Ch &gt; *child);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Appends a new child node. The appended child becomes the last child. </para><h4>Parameters</h4><dl><dt class="parameter-name">child</dt><dd class="parameter-def">Node to append. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_780972a57fc447250ab47cc8f421b65e_1780972a57fc447250ab47cc8f421b65e">function xml_node::insert_node</h3><h4>Synopsis</h4><code class="synopsis">void insert_node(xml_node&lt; Ch &gt; *where, xml_node&lt; Ch &gt; *child);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Inserts a new child node at specified place inside the node. All children after and including the specified node are moved one position back. </para><h4>Parameters</h4><dl><dt class="parameter-name">where</dt><dd class="parameter-def">Place where to insert the child, or 0 to insert at the back. </dd></dl><dl><dt class="parameter-name">child</dt><dd class="parameter-def">Node to insert. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_9a31d861e1bddc710839c551a5d2b3a4_19a31d861e1bddc710839c551a5d2b3a4">function xml_node::remove_first_node</h3><h4>Synopsis</h4><code class="synopsis">void remove_first_node();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Removes first child node. If node has no children, behaviour is undefined. Use <a href="#classrapidxml_1_1xml__node_7823e36687669e59c2afdf66334ef35a_17823e36687669e59c2afdf66334ef35a" kindref="member">first_node()</a> to test if node has children. </para><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_87addf2bc127ee31aa4b5295d3c9b530_187addf2bc127ee31aa4b5295d3c9b530">function xml_node::remove_last_node</h3><h4>Synopsis</h4><code class="synopsis">void remove_last_node();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Removes last child of the node. If node has no children, behaviour is undefined. Use <a href="#classrapidxml_1_1xml__node_7823e36687669e59c2afdf66334ef35a_17823e36687669e59c2afdf66334ef35a" kindref="member">first_node()</a> to test if node has children. </para><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_9316463a2201631e7e2062b17729f9cd_19316463a2201631e7e2062b17729f9cd">function xml_node::remove_node</h3><h4>Synopsis</h4><code class="synopsis">void remove_node(xml_node&lt; Ch &gt; *where);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Removes specified child from the node. </para><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_0218147d13e41d5fa60ced4e7a7e9726_10218147d13e41d5fa60ced4e7a7e9726">function xml_node::remove_all_nodes</h3><h4>Synopsis</h4><code class="synopsis">void remove_all_nodes();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Removes all child nodes (but not attributes). </para><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_f6dffa513da74cc0be71a7ba84f8265e_1f6dffa513da74cc0be71a7ba84f8265e">function xml_node::prepend_attribute</h3><h4>Synopsis</h4><code class="synopsis">void prepend_attribute(xml_attribute&lt; Ch &gt; *attribute);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Prepends a new attribute to the node. </para><h4>Parameters</h4><dl><dt class="parameter-name">attribute</dt><dd class="parameter-def">Attribute to prepend. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_8fbd4f5ef7169d493da9f8d87ac04b77_18fbd4f5ef7169d493da9f8d87ac04b77">function xml_node::append_attribute</h3><h4>Synopsis</h4><code class="synopsis">void append_attribute(xml_attribute&lt; Ch &gt; *attribute);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Appends a new attribute to the node. </para><h4>Parameters</h4><dl><dt class="parameter-name">attribute</dt><dd class="parameter-def">Attribute to append. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_070d5888b0557fe06a5b24961de1b988_1070d5888b0557fe06a5b24961de1b988">function xml_node::insert_attribute</h3><h4>Synopsis</h4><code class="synopsis">void insert_attribute(xml_attribute&lt; Ch &gt; *where, xml_attribute&lt; Ch &gt; *attribute);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Inserts a new attribute at specified place inside the node. All attributes after and including the specified attribute are moved one position back. </para><h4>Parameters</h4><dl><dt class="parameter-name">where</dt><dd class="parameter-def">Place where to insert the attribute, or 0 to insert at the back. </dd></dl><dl><dt class="parameter-name">attribute</dt><dd class="parameter-def">Attribute to insert. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_4eea4a7f6cb484ca9944f7eafe6e1843_14eea4a7f6cb484ca9944f7eafe6e1843">function xml_node::remove_first_attribute</h3><h4>Synopsis</h4><code class="synopsis">void remove_first_attribute();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Removes first attribute of the node. If node has no attributes, behaviour is undefined. Use <a href="#classrapidxml_1_1xml__node_5810a09f82f8d53efbe9456286dcec83_15810a09f82f8d53efbe9456286dcec83" kindref="member">first_attribute()</a> to test if node has attributes. </para><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_37d87c4d5d89fa0cf05b72ee8d4cba3b_137d87c4d5d89fa0cf05b72ee8d4cba3b">function xml_node::remove_last_attribute</h3><h4>Synopsis</h4><code class="synopsis">void remove_last_attribute();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Removes last attribute of the node. If node has no attributes, behaviour is undefined. Use <a href="#classrapidxml_1_1xml__node_5810a09f82f8d53efbe9456286dcec83_15810a09f82f8d53efbe9456286dcec83" kindref="member">first_attribute()</a> to test if node has attributes. </para><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_c75154db2e768c0e5b541fc8cd0775ab_1c75154db2e768c0e5b541fc8cd0775ab">function xml_node::remove_attribute</h3><h4>Synopsis</h4><code class="synopsis">void remove_attribute(xml_attribute&lt; Ch &gt; *where);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Removes specified attribute from node. </para><h4>Parameters</h4><dl><dt class="parameter-name">where</dt><dd class="parameter-def">Pointer to attribute to be removed. </dd></dl><p/><h3 class="reference-header" id="classrapidxml_1_1xml__node_59e6ad4cfd5e8096c052e71d79561eda_159e6ad4cfd5e8096c052e71d79561eda">function xml_node::remove_all_attributes</h3><h4>Synopsis</h4><code class="synopsis">void remove_all_attributes();
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Removes all attributes of node. </para><p/><h3 class="reference-header" id="namespacerapidxml_6a276b85e2da28c5f9c3dbce61c55682_16a276b85e2da28c5f9c3dbce61c55682">enum node_type</h3><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Enumeration listing all node types produced by the parser. Use <a href="#classrapidxml_1_1xml__node_975e86937621ae4afe6a423219de30d0_1975e86937621ae4afe6a423219de30d0" kindref="member">xml_node::type()</a> function to query node type. </para><h4>Values</h4><dl><dt class="parameter-name">node_document</dt><dd class="parameter-def">A document node. Name and value are empty. </dd></dl><dl><dt class="parameter-name">node_element</dt><dd class="parameter-def">An element node. Name contains element name. Value contains text of first data node. </dd></dl><dl><dt class="parameter-name">node_data</dt><dd class="parameter-def">A data node. Name is empty. Value contains data text. </dd></dl><dl><dt class="parameter-name">node_cdata</dt><dd class="parameter-def">A CDATA node. Name is empty. Value contains data text. </dd></dl><dl><dt class="parameter-name">node_comment</dt><dd class="parameter-def">A comment node. Name is empty. Value contains comment text. </dd></dl><dl><dt class="parameter-name">node_declaration</dt><dd class="parameter-def">A declaration node. Name and value are empty. Declaration parameters (version, encoding and standalone) are in node attributes. </dd></dl><dl><dt class="parameter-name">node_doctype</dt><dd class="parameter-def">A DOCTYPE node. Name is empty. Value contains DOCTYPE text. </dd></dl><dl><dt class="parameter-name">node_pi</dt><dd class="parameter-def">A PI node. Name contains target. Value contains instructions. </dd></dl><p/><h3 class="reference-header" id="namespacerapidxml_ff5d67f74437199d316d2b2660653ae1_1ff5d67f74437199d316d2b2660653ae1">function parse_error_handler</h3><h4>Synopsis</h4><code class="synopsis">void rapidxml::parse_error_handler(const char *what, void *where);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">When exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function is called to notify user about the error. It must be defined by the user. <br/><br/>
+ This function cannot return. If it does, the results are undefined. <br/><br/>
+ A very simple definition might look like that: <preformatted>
+ void rapidxml::parse_error_handler(const char *what, void *where)
+ {
+ std::cout &lt;&lt; &quot;Parse error: &quot; &lt;&lt; what &lt;&lt; &quot;\n&quot;;
+ std::abort();
+ }
+ </preformatted></para><h4>Parameters</h4><dl><dt class="parameter-name">what</dt><dd class="parameter-def">Human readable description of the error. </dd></dl><dl><dt class="parameter-name">where</dt><dd class="parameter-def">Pointer to character data where error was detected. </dd></dl><p/><h3 class="reference-header" id="namespacerapidxml_b94d570fc4c4ab2423813cd0243326b1_1b94d570fc4c4ab2423813cd0243326b1">function print</h3><h4>Synopsis</h4><code class="synopsis">OutIt rapidxml::print(OutIt out, const xml_node&lt; Ch &gt; &amp;node, int flags=0);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Prints XML to given output iterator. </para><h4>Parameters</h4><dl><dt class="parameter-name">out</dt><dd class="parameter-def">Output iterator to print to. </dd></dl><dl><dt class="parameter-name">node</dt><dd class="parameter-def">Node to be printed. Pass xml_document to print entire document. </dd></dl><dl><dt class="parameter-name">flags</dt><dd class="parameter-def">Flags controlling how XML is printed. </dd></dl><h4>Returns</h4>Output iterator pointing to position immediately after last character of printed text. <p/><h3 class="reference-header" id="namespacerapidxml_13bc37d6d1047acb0efdbc1689221a5e_113bc37d6d1047acb0efdbc1689221a5e">function print</h3><h4>Synopsis</h4><code class="synopsis">std::basic_ostream&lt;Ch&gt;&amp; rapidxml::print(std::basic_ostream&lt; Ch &gt; &amp;out, const xml_node&lt; Ch &gt; &amp;node, int flags=0);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Prints XML to given output stream. </para><h4>Parameters</h4><dl><dt class="parameter-name">out</dt><dd class="parameter-def">Output stream to print to. </dd></dl><dl><dt class="parameter-name">node</dt><dd class="parameter-def">Node to be printed. Pass xml_document to print entire document. </dd></dl><dl><dt class="parameter-name">flags</dt><dd class="parameter-def">Flags controlling how XML is printed. </dd></dl><h4>Returns</h4>Output stream. <p/><h3 class="reference-header" id="namespacerapidxml_5619b38000d967fb223b2b0a8c17463a_15619b38000d967fb223b2b0a8c17463a">function operator&lt;&lt;</h3><h4>Synopsis</h4><code class="synopsis">std::basic_ostream&lt;Ch&gt;&amp; rapidxml::operator&lt;&lt;(std::basic_ostream&lt; Ch &gt; &amp;out, const xml_node&lt; Ch &gt; &amp;node);
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Prints formatted XML to given output stream. Uses default printing flags. Use <a href="#namespacerapidxml_b94d570fc4c4ab2423813cd0243326b1_1b94d570fc4c4ab2423813cd0243326b1" kindref="member">print()</a> function to customize printing process. </para><h4>Parameters</h4><dl><dt class="parameter-name">out</dt><dd class="parameter-def">Output stream to print to. </dd></dl><dl><dt class="parameter-name">node</dt><dd class="parameter-def">Node to be printed. </dd></dl><h4>Returns</h4>Output stream. <p/><h3 class="reference-header" id="namespacerapidxml_87e8bbab53702cf3b438bd553c10b6b9_187e8bbab53702cf3b438bd553c10b6b9">
+ constant
+ parse_no_data_nodes</h3><h4>Synopsis</h4><code class="synopsis">const int parse_no_data_nodes
+ = 0x1;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to not create data nodes. Text of first data node will still be placed in value of parent element, unless <a href="#namespacerapidxml_97e2c4fdc04fae17126f9971a4fc993e_197e2c4fdc04fae17126f9971a4fc993e" kindref="member">rapidxml::parse_no_element_values</a> flag is also specified. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_97e2c4fdc04fae17126f9971a4fc993e_197e2c4fdc04fae17126f9971a4fc993e">
+ constant
+ parse_no_element_values</h3><h4>Synopsis</h4><code class="synopsis">const int parse_no_element_values
+ = 0x2;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to not use text of first data node as a value of parent element. Can be combined with other flags by use of | operator. Note that child data nodes of element node take precendence over its value when printing. That is, if element has one or more child data nodes <i>and</i> a value, the value will be ignored. Use <a href="#namespacerapidxml_87e8bbab53702cf3b438bd553c10b6b9_187e8bbab53702cf3b438bd553c10b6b9" kindref="member">rapidxml::parse_no_data_nodes</a> flag to prevent creation of data nodes if you want to manipulate data using values of elements. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_9cae3801e70437cbc410c24bf6be691c_19cae3801e70437cbc410c24bf6be691c">
+ constant
+ parse_no_string_terminators</h3><h4>Synopsis</h4><code class="synopsis">const int parse_no_string_terminators
+ = 0x4;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to not place zero terminators after strings in the source text. By default zero terminators are placed, modifying source text. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_7223b7815c4fb8b42e6e4e77e1ea6b97_17223b7815c4fb8b42e6e4e77e1ea6b97">
+ constant
+ parse_no_entity_translation</h3><h4>Synopsis</h4><code class="synopsis">const int parse_no_entity_translation
+ = 0x8;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to not translate entities in the source text. By default entities are translated, modifying source text. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_ccde57f6054857ee4042a1b4d98c83b9_1ccde57f6054857ee4042a1b4d98c83b9">
+ constant
+ parse_no_utf8</h3><h4>Synopsis</h4><code class="synopsis">const int parse_no_utf8
+ = 0x10;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to disable UTF-8 handling and assume plain 8 bit characters. By default, UTF-8 handling is enabled. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_52e2c934ad9c845a5f4cc49570470556_152e2c934ad9c845a5f4cc49570470556">
+ constant
+ parse_declaration_node</h3><h4>Synopsis</h4><code class="synopsis">const int parse_declaration_node
+ = 0x20;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to create XML declaration node. By default, declaration node is not created. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_0f7479dacbc868456d07897a8c072784_10f7479dacbc868456d07897a8c072784">
+ constant
+ parse_comment_nodes</h3><h4>Synopsis</h4><code class="synopsis">const int parse_comment_nodes
+ = 0x40;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to create comments nodes. By default, comment nodes are not created. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_8e187746ba1ca04f107951ad32df962e_18e187746ba1ca04f107951ad32df962e">
+ constant
+ parse_doctype_node</h3><h4>Synopsis</h4><code class="synopsis">const int parse_doctype_node
+ = 0x80;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to create DOCTYPE node. By default, doctype node is not created. Although W3C specification allows at most one DOCTYPE node, RapidXml will silently accept documents with more than one. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_1c20b2b2b75711cd76423e119c49f830_11c20b2b2b75711cd76423e119c49f830">
+ constant
+ parse_pi_nodes</h3><h4>Synopsis</h4><code class="synopsis">const int parse_pi_nodes
+ = 0x100;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to create PI nodes. By default, PI nodes are not created. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_a5daff9d61c7d4eaf98e4d42efe628ee_1a5daff9d61c7d4eaf98e4d42efe628ee">
+ constant
+ parse_validate_closing_tags</h3><h4>Synopsis</h4><code class="synopsis">const int parse_validate_closing_tags
+ = 0x200;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to validate closing tag names. If not set, name inside closing tag is irrelevant to the parser. By default, closing tags are not validated. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_ac1f06b1afd47b812732fb521b146fd9_1ac1f06b1afd47b812732fb521b146fd9">
+ constant
+ parse_trim_whitespace</h3><h4>Synopsis</h4><code class="synopsis">const int parse_trim_whitespace
+ = 0x400;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to trim all leading and trailing whitespace of data nodes. By default, whitespace is not trimmed. This flag does not cause the parser to modify source text. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_88f95d4e275ba01408fefde83078651b_188f95d4e275ba01408fefde83078651b">
+ constant
+ parse_normalize_whitespace</h3><h4>Synopsis</h4><code class="synopsis">const int parse_normalize_whitespace
+ = 0x800;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flag instructing the parser to condense all whitespace runs of data nodes to a single space character. Trimming of leading and trailing whitespace of data is controlled by <a href="#namespacerapidxml_ac1f06b1afd47b812732fb521b146fd9_1ac1f06b1afd47b812732fb521b146fd9" kindref="member">rapidxml::parse_trim_whitespace</a> flag. By default, whitespace is not normalized. If this flag is specified, source text will be modified. Can be combined with other flags by use of | operator. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_45751cf2f38fd6915f35b3122b46d5b6_145751cf2f38fd6915f35b3122b46d5b6">
+ constant
+ parse_default</h3><h4>Synopsis</h4><code class="synopsis">const int parse_default
+ = 0;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Parse flags which represent default behaviour of the parser. This is always equal to 0, so that all other flags can be simply ored together. Normally there is no need to inconveniently disable flags by anding with their negated (~) values. This also means that meaning of each flag is a <i>negation</i> of the default setting. For example, if flag name is <a href="#namespacerapidxml_ccde57f6054857ee4042a1b4d98c83b9_1ccde57f6054857ee4042a1b4d98c83b9" kindref="member">rapidxml::parse_no_utf8</a>, it means that utf-8 is <i>enabled</i> by default, and using the flag will disable it. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_a97ba1a0a79a6d66f4eef3612508d943_1a97ba1a0a79a6d66f4eef3612508d943">
+ constant
+ parse_non_destructive</h3><h4>Synopsis</h4><code class="synopsis">const int parse_non_destructive
+ = parse_no_string_terminators | parse_no_entity_translation;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">A combination of parse flags that forbids any modifications of the source text. This also results in faster parsing. However, note that the following will occur: <ul><li><para>names and values of nodes will not be zero terminated, you have to use <a href="#classrapidxml_1_1xml__base_0dae694c8f7e4d89f1003e2f3a15a43c_10dae694c8f7e4d89f1003e2f3a15a43c" kindref="member">xml_base::name_size()</a> and <a href="#classrapidxml_1_1xml__base_aed5ae791b7164c1ee5e649198cbb3db_1aed5ae791b7164c1ee5e649198cbb3db" kindref="member">xml_base::value_size()</a> functions to determine where name and value ends </para></li><li><para>entities will not be translated </para></li><li><para>whitespace will not be normalized </para></li></ul>
+See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_398c5476e76102f8bd76c10bb0abbe10_1398c5476e76102f8bd76c10bb0abbe10">
+ constant
+ parse_fastest</h3><h4>Synopsis</h4><code class="synopsis">const int parse_fastest
+ = parse_non_destructive | parse_no_data_nodes;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">A combination of parse flags resulting in fastest possible parsing, without sacrificing important data. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_b4f2515265facb42291570307924bd57_1b4f2515265facb42291570307924bd57">
+ constant
+ parse_full</h3><h4>Synopsis</h4><code class="synopsis">const int parse_full
+ = parse_declaration_node | parse_comment_nodes | parse_doctype_node | parse_pi_nodes | parse_validate_closing_tags;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">A combination of parse flags resulting in largest amount of data being extracted. This usually results in slowest parsing. <br/><br/>
+ See <a href="#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c" kindref="member">xml_document::parse()</a> function. </para><p/><h3 class="reference-header" id="namespacerapidxml_b08b8d4293c203b69ed6c5ae77ac1907_1b08b8d4293c203b69ed6c5ae77ac1907">
+ constant
+ print_no_indenting</h3><h4>Synopsis</h4><code class="synopsis">const int print_no_indenting
+ = 0x1;
+ </code><h4>Description</h4><para xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Printer flag instructing the printer to suppress indenting of XML. See <a href="#namespacerapidxml_b94d570fc4c4ab2423813cd0243326b1_1b94d570fc4c4ab2423813cd0243326b1" kindref="member">print()</a> function. </para><p/></body></html> \ No newline at end of file
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml.hpp
new file mode 100644
index 000000000..ae91e081d
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml.hpp
@@ -0,0 +1,2596 @@
+#ifndef RAPIDXML_HPP_INCLUDED
+#define RAPIDXML_HPP_INCLUDED
+
+// Copyright (C) 2006, 2009 Marcin Kalicinski
+// Version 1.13
+// Revision $DateTime: 2009/05/13 01:46:17 $
+//! \file rapidxml.hpp This file contains rapidxml parser and DOM implementation
+
+// If standard library is disabled, user must provide implementations of required functions and typedefs
+#if !defined(RAPIDXML_NO_STDLIB)
+ #include <cstdlib> // For std::size_t
+ #include <cassert> // For assert
+ #include <new> // For placement new
+#endif
+
+// On MSVC, disable "conditional expression is constant" warning (level 4).
+// This warning is almost impossible to avoid with certain types of templated code
+#ifdef _MSC_VER
+ #pragma warning(push)
+ #pragma warning(disable:4127) // Conditional expression is constant
+#endif
+
+///////////////////////////////////////////////////////////////////////////
+// RAPIDXML_PARSE_ERROR
+
+#if defined(RAPIDXML_NO_EXCEPTIONS)
+
+#define RAPIDXML_PARSE_ERROR(what, where) { parse_error_handler(what, where); assert(0); }
+
+namespace rapidxml
+{
+ //! When exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS,
+ //! this function is called to notify user about the error.
+ //! It must be defined by the user.
+ //! <br><br>
+ //! This function cannot return. If it does, the results are undefined.
+ //! <br><br>
+ //! A very simple definition might look like that:
+ //! <pre>
+ //! void %rapidxml::%parse_error_handler(const char *what, void *where)
+ //! {
+ //! std::cout << "Parse error: " << what << "\n";
+ //! std::abort();
+ //! }
+ //! </pre>
+ //! \param what Human readable description of the error.
+ //! \param where Pointer to character data where error was detected.
+ void parse_error_handler(const char *what, void *where);
+}
+
+#else
+
+#include <exception> // For std::exception
+
+#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
+
+namespace rapidxml
+{
+
+ //! Parse error exception.
+ //! This exception is thrown by the parser when an error occurs.
+ //! Use what() function to get human-readable error message.
+ //! Use where() function to get a pointer to position within source text where error was detected.
+ //! <br><br>
+ //! If throwing exceptions by the parser is undesirable,
+ //! it can be disabled by defining RAPIDXML_NO_EXCEPTIONS macro before rapidxml.hpp is included.
+ //! This will cause the parser to call rapidxml::parse_error_handler() function instead of throwing an exception.
+ //! This function must be defined by the user.
+ //! <br><br>
+ //! This class derives from <code>std::exception</code> class.
+ class parse_error: public std::exception
+ {
+
+ public:
+
+ //! Constructs parse error
+ parse_error(const char *what, void *where)
+ : m_what(what)
+ , m_where(where)
+ {
+ }
+
+ //! Gets human readable description of error.
+ //! \return Pointer to null terminated description of the error.
+ virtual const char *what() const throw()
+ {
+ return m_what;
+ }
+
+ //! Gets pointer to character data where error happened.
+ //! Ch should be the same as char type of xml_document that produced the error.
+ //! \return Pointer to location within the parsed string where error occured.
+ template<class Ch>
+ Ch *where() const
+ {
+ return reinterpret_cast<Ch *>(m_where);
+ }
+
+ private:
+
+ const char *m_what;
+ void *m_where;
+
+ };
+}
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////
+// Pool sizes
+
+#ifndef RAPIDXML_STATIC_POOL_SIZE
+ // Size of static memory block of memory_pool.
+ // Define RAPIDXML_STATIC_POOL_SIZE before including rapidxml.hpp if you want to override the default value.
+ // No dynamic memory allocations are performed by memory_pool until static memory is exhausted.
+ #define RAPIDXML_STATIC_POOL_SIZE (64 * 1024)
+#endif
+
+#ifndef RAPIDXML_DYNAMIC_POOL_SIZE
+ // Size of dynamic memory block of memory_pool.
+ // Define RAPIDXML_DYNAMIC_POOL_SIZE before including rapidxml.hpp if you want to override the default value.
+ // After the static block is exhausted, dynamic blocks with approximately this size are allocated by memory_pool.
+ #define RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024)
+#endif
+
+#ifndef RAPIDXML_ALIGNMENT
+ // Memory allocation alignment.
+ // Define RAPIDXML_ALIGNMENT before including rapidxml.hpp if you want to override the default value, which is the size of pointer.
+ // All memory allocations for nodes, attributes and strings will be aligned to this value.
+ // This must be a power of 2 and at least 1, otherwise memory_pool will not work.
+ #define RAPIDXML_ALIGNMENT sizeof(void *)
+#endif
+
+namespace rapidxml
+{
+ // Forward declarations
+ template<class Ch> class xml_node;
+ template<class Ch> class xml_attribute;
+ template<class Ch> class xml_document;
+
+ //! Enumeration listing all node types produced by the parser.
+ //! Use xml_node::type() function to query node type.
+ enum node_type
+ {
+ node_document, //!< A document node. Name and value are empty.
+ node_element, //!< An element node. Name contains element name. Value contains text of first data node.
+ node_data, //!< A data node. Name is empty. Value contains data text.
+ node_cdata, //!< A CDATA node. Name is empty. Value contains data text.
+ node_comment, //!< A comment node. Name is empty. Value contains comment text.
+ node_declaration, //!< A declaration node. Name and value are empty. Declaration parameters (version, encoding and standalone) are in node attributes.
+ node_doctype, //!< A DOCTYPE node. Name is empty. Value contains DOCTYPE text.
+ node_pi //!< A PI node. Name contains target. Value contains instructions.
+ };
+
+ ///////////////////////////////////////////////////////////////////////
+ // Parsing flags
+
+ //! Parse flag instructing the parser to not create data nodes.
+ //! Text of first data node will still be placed in value of parent element, unless rapidxml::parse_no_element_values flag is also specified.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_no_data_nodes = 0x1;
+
+ //! Parse flag instructing the parser to not use text of first data node as a value of parent element.
+ //! Can be combined with other flags by use of | operator.
+ //! Note that child data nodes of element node take precendence over its value when printing.
+ //! That is, if element has one or more child data nodes <em>and</em> a value, the value will be ignored.
+ //! Use rapidxml::parse_no_data_nodes flag to prevent creation of data nodes if you want to manipulate data using values of elements.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_no_element_values = 0x2;
+
+ //! Parse flag instructing the parser to not place zero terminators after strings in the source text.
+ //! By default zero terminators are placed, modifying source text.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_no_string_terminators = 0x4;
+
+ //! Parse flag instructing the parser to not translate entities in the source text.
+ //! By default entities are translated, modifying source text.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_no_entity_translation = 0x8;
+
+ //! Parse flag instructing the parser to disable UTF-8 handling and assume plain 8 bit characters.
+ //! By default, UTF-8 handling is enabled.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_no_utf8 = 0x10;
+
+ //! Parse flag instructing the parser to create XML declaration node.
+ //! By default, declaration node is not created.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_declaration_node = 0x20;
+
+ //! Parse flag instructing the parser to create comments nodes.
+ //! By default, comment nodes are not created.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_comment_nodes = 0x40;
+
+ //! Parse flag instructing the parser to create DOCTYPE node.
+ //! By default, doctype node is not created.
+ //! Although W3C specification allows at most one DOCTYPE node, RapidXml will silently accept documents with more than one.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_doctype_node = 0x80;
+
+ //! Parse flag instructing the parser to create PI nodes.
+ //! By default, PI nodes are not created.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_pi_nodes = 0x100;
+
+ //! Parse flag instructing the parser to validate closing tag names.
+ //! If not set, name inside closing tag is irrelevant to the parser.
+ //! By default, closing tags are not validated.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_validate_closing_tags = 0x200;
+
+ //! Parse flag instructing the parser to trim all leading and trailing whitespace of data nodes.
+ //! By default, whitespace is not trimmed.
+ //! This flag does not cause the parser to modify source text.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_trim_whitespace = 0x400;
+
+ //! Parse flag instructing the parser to condense all whitespace runs of data nodes to a single space character.
+ //! Trimming of leading and trailing whitespace of data is controlled by rapidxml::parse_trim_whitespace flag.
+ //! By default, whitespace is not normalized.
+ //! If this flag is specified, source text will be modified.
+ //! Can be combined with other flags by use of | operator.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_normalize_whitespace = 0x800;
+
+ // Compound flags
+
+ //! Parse flags which represent default behaviour of the parser.
+ //! This is always equal to 0, so that all other flags can be simply ored together.
+ //! Normally there is no need to inconveniently disable flags by anding with their negated (~) values.
+ //! This also means that meaning of each flag is a <i>negation</i> of the default setting.
+ //! For example, if flag name is rapidxml::parse_no_utf8, it means that utf-8 is <i>enabled</i> by default,
+ //! and using the flag will disable it.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_default = 0;
+
+ //! A combination of parse flags that forbids any modifications of the source text.
+ //! This also results in faster parsing. However, note that the following will occur:
+ //! <ul>
+ //! <li>names and values of nodes will not be zero terminated, you have to use xml_base::name_size() and xml_base::value_size() functions to determine where name and value ends</li>
+ //! <li>entities will not be translated</li>
+ //! <li>whitespace will not be normalized</li>
+ //! </ul>
+ //! See xml_document::parse() function.
+ const int parse_non_destructive = parse_no_string_terminators | parse_no_entity_translation;
+
+ //! A combination of parse flags resulting in fastest possible parsing, without sacrificing important data.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_fastest = parse_non_destructive | parse_no_data_nodes;
+
+ //! A combination of parse flags resulting in largest amount of data being extracted.
+ //! This usually results in slowest parsing.
+ //! <br><br>
+ //! See xml_document::parse() function.
+ const int parse_full = parse_declaration_node | parse_comment_nodes | parse_doctype_node | parse_pi_nodes | parse_validate_closing_tags;
+
+ ///////////////////////////////////////////////////////////////////////
+ // Internals
+
+ //! \cond internal
+ namespace internal
+ {
+
+ // Struct that contains lookup tables for the parser
+ // It must be a template to allow correct linking (because it has static data members, which are defined in a header file).
+ template<int Dummy>
+ struct lookup_tables
+ {
+ static const unsigned char lookup_whitespace[256]; // Whitespace table
+ static const unsigned char lookup_node_name[256]; // Node name table
+ static const unsigned char lookup_text[256]; // Text table
+ static const unsigned char lookup_text_pure_no_ws[256]; // Text table
+ static const unsigned char lookup_text_pure_with_ws[256]; // Text table
+ static const unsigned char lookup_attribute_name[256]; // Attribute name table
+ static const unsigned char lookup_attribute_data_1[256]; // Attribute data table with single quote
+ static const unsigned char lookup_attribute_data_1_pure[256]; // Attribute data table with single quote
+ static const unsigned char lookup_attribute_data_2[256]; // Attribute data table with double quotes
+ static const unsigned char lookup_attribute_data_2_pure[256]; // Attribute data table with double quotes
+ static const unsigned char lookup_digits[256]; // Digits
+ static const unsigned char lookup_upcase[256]; // To uppercase conversion table for ASCII characters
+ };
+
+ // Find length of the string
+ template<class Ch>
+ inline std::size_t measure(const Ch *p)
+ {
+ const Ch *tmp = p;
+ while (*tmp)
+ ++tmp;
+ return tmp - p;
+ }
+
+ // Compare strings for equality
+ template<class Ch>
+ inline bool compare(const Ch *p1, std::size_t size1, const Ch *p2, std::size_t size2, bool case_sensitive)
+ {
+ if (size1 != size2)
+ return false;
+ if (case_sensitive)
+ {
+ for (const Ch *end = p1 + size1; p1 < end; ++p1, ++p2)
+ if (*p1 != *p2)
+ return false;
+ }
+ else
+ {
+ for (const Ch *end = p1 + size1; p1 < end; ++p1, ++p2)
+ if (lookup_tables<0>::lookup_upcase[static_cast<unsigned char>(*p1)] != lookup_tables<0>::lookup_upcase[static_cast<unsigned char>(*p2)])
+ return false;
+ }
+ return true;
+ }
+ }
+ //! \endcond
+
+ ///////////////////////////////////////////////////////////////////////
+ // Memory pool
+
+ //! This class is used by the parser to create new nodes and attributes, without overheads of dynamic memory allocation.
+ //! In most cases, you will not need to use this class directly.
+ //! However, if you need to create nodes manually or modify names/values of nodes,
+ //! you are encouraged to use memory_pool of relevant xml_document to allocate the memory.
+ //! Not only is this faster than allocating them by using <code>new</code> operator,
+ //! but also their lifetime will be tied to the lifetime of document,
+ //! possibly simplyfing memory management.
+ //! <br><br>
+ //! Call allocate_node() or allocate_attribute() functions to obtain new nodes or attributes from the pool.
+ //! You can also call allocate_string() function to allocate strings.
+ //! Such strings can then be used as names or values of nodes without worrying about their lifetime.
+ //! Note that there is no <code>free()</code> function -- all allocations are freed at once when clear() function is called,
+ //! or when the pool is destroyed.
+ //! <br><br>
+ //! It is also possible to create a standalone memory_pool, and use it
+ //! to allocate nodes, whose lifetime will not be tied to any document.
+ //! <br><br>
+ //! Pool maintains <code>RAPIDXML_STATIC_POOL_SIZE</code> bytes of statically allocated memory.
+ //! Until static memory is exhausted, no dynamic memory allocations are done.
+ //! When static memory is exhausted, pool allocates additional blocks of memory of size <code>RAPIDXML_DYNAMIC_POOL_SIZE</code> each,
+ //! by using global <code>new[]</code> and <code>delete[]</code> operators.
+ //! This behaviour can be changed by setting custom allocation routines.
+ //! Use set_allocator() function to set them.
+ //! <br><br>
+ //! Allocations for nodes, attributes and strings are aligned at <code>RAPIDXML_ALIGNMENT</code> bytes.
+ //! This value defaults to the size of pointer on target architecture.
+ //! <br><br>
+ //! To obtain absolutely top performance from the parser,
+ //! it is important that all nodes are allocated from a single, contiguous block of memory.
+ //! Otherwise, cache misses when jumping between two (or more) disjoint blocks of memory can slow down parsing quite considerably.
+ //! If required, you can tweak <code>RAPIDXML_STATIC_POOL_SIZE</code>, <code>RAPIDXML_DYNAMIC_POOL_SIZE</code> and <code>RAPIDXML_ALIGNMENT</code>
+ //! to obtain best wasted memory to performance compromise.
+ //! To do it, define their values before rapidxml.hpp file is included.
+ //! \param Ch Character type of created nodes.
+ template<class Ch = char>
+ class memory_pool
+ {
+
+ public:
+
+ //! \cond internal
+ typedef void *(alloc_func)(std::size_t); // Type of user-defined function used to allocate memory
+ typedef void (free_func)(void *); // Type of user-defined function used to free memory
+ //! \endcond
+
+ //! Constructs empty pool with default allocator functions.
+ memory_pool()
+ : m_alloc_func(0)
+ , m_free_func(0)
+ {
+ init();
+ }
+
+ //! Destroys pool and frees all the memory.
+ //! This causes memory occupied by nodes allocated by the pool to be freed.
+ //! Nodes allocated from the pool are no longer valid.
+ ~memory_pool()
+ {
+ clear();
+ }
+
+ //! Allocates a new node from the pool, and optionally assigns name and value to it.
+ //! If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>.
+ //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function
+ //! will call rapidxml::parse_error_handler() function.
+ //! \param type Type of node to create.
+ //! \param name Name to assign to the node, or 0 to assign no name.
+ //! \param value Value to assign to the node, or 0 to assign no value.
+ //! \param name_size Size of name to assign, or 0 to automatically calculate size from name string.
+ //! \param value_size Size of value to assign, or 0 to automatically calculate size from value string.
+ //! \return Pointer to allocated node. This pointer will never be NULL.
+ xml_node<Ch> *allocate_node(node_type type,
+ const Ch *name = 0, const Ch *value = 0,
+ std::size_t name_size = 0, std::size_t value_size = 0)
+ {
+ void *memory = allocate_aligned(sizeof(xml_node<Ch>));
+ xml_node<Ch> *node = new(memory) xml_node<Ch>(type);
+ if (name)
+ {
+ if (name_size > 0)
+ node->name(name, name_size);
+ else
+ node->name(name);
+ }
+ if (value)
+ {
+ if (value_size > 0)
+ node->value(value, value_size);
+ else
+ node->value(value);
+ }
+ return node;
+ }
+
+ //! Allocates a new attribute from the pool, and optionally assigns name and value to it.
+ //! If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>.
+ //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function
+ //! will call rapidxml::parse_error_handler() function.
+ //! \param name Name to assign to the attribute, or 0 to assign no name.
+ //! \param value Value to assign to the attribute, or 0 to assign no value.
+ //! \param name_size Size of name to assign, or 0 to automatically calculate size from name string.
+ //! \param value_size Size of value to assign, or 0 to automatically calculate size from value string.
+ //! \return Pointer to allocated attribute. This pointer will never be NULL.
+ xml_attribute<Ch> *allocate_attribute(const Ch *name = 0, const Ch *value = 0,
+ std::size_t name_size = 0, std::size_t value_size = 0)
+ {
+ void *memory = allocate_aligned(sizeof(xml_attribute<Ch>));
+ xml_attribute<Ch> *attribute = new(memory) xml_attribute<Ch>;
+ if (name)
+ {
+ if (name_size > 0)
+ attribute->name(name, name_size);
+ else
+ attribute->name(name);
+ }
+ if (value)
+ {
+ if (value_size > 0)
+ attribute->value(value, value_size);
+ else
+ attribute->value(value);
+ }
+ return attribute;
+ }
+
+ //! Allocates a char array of given size from the pool, and optionally copies a given string to it.
+ //! If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>.
+ //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function
+ //! will call rapidxml::parse_error_handler() function.
+ //! \param source String to initialize the allocated memory with, or 0 to not initialize it.
+ //! \param size Number of characters to allocate, or zero to calculate it automatically from source string length; if size is 0, source string must be specified and null terminated.
+ //! \return Pointer to allocated char array. This pointer will never be NULL.
+ Ch *allocate_string(const Ch *source = 0, std::size_t size = 0)
+ {
+ assert(source || size); // Either source or size (or both) must be specified
+ if (size == 0)
+ size = internal::measure(source) + 1;
+ Ch *result = static_cast<Ch *>(allocate_aligned(size * sizeof(Ch)));
+ if (source)
+ for (std::size_t i = 0; i < size; ++i)
+ result[i] = source[i];
+ return result;
+ }
+
+ //! Clones an xml_node and its hierarchy of child nodes and attributes.
+ //! Nodes and attributes are allocated from this memory pool.
+ //! Names and values are not cloned, they are shared between the clone and the source.
+ //! Result node can be optionally specified as a second parameter,
+ //! in which case its contents will be replaced with cloned source node.
+ //! This is useful when you want to clone entire document.
+ //! \param source Node to clone.
+ //! \param result Node to put results in, or 0 to automatically allocate result node
+ //! \return Pointer to cloned node. This pointer will never be NULL.
+ xml_node<Ch> *clone_node(const xml_node<Ch> *source, xml_node<Ch> *result = 0)
+ {
+ // Prepare result node
+ if (result)
+ {
+ result->remove_all_attributes();
+ result->remove_all_nodes();
+ result->type(source->type());
+ }
+ else
+ result = allocate_node(source->type());
+
+ // Clone name and value
+ result->name(source->name(), source->name_size());
+ result->value(source->value(), source->value_size());
+
+ // Clone child nodes and attributes
+ for (xml_node<Ch> *child = source->first_node(); child; child = child->next_sibling())
+ result->append_node(clone_node(child));
+ for (xml_attribute<Ch> *attr = source->first_attribute(); attr; attr = attr->next_attribute())
+ result->append_attribute(allocate_attribute(attr->name(), attr->value(), attr->name_size(), attr->value_size()));
+
+ return result;
+ }
+
+ //! Clears the pool.
+ //! This causes memory occupied by nodes allocated by the pool to be freed.
+ //! Any nodes or strings allocated from the pool will no longer be valid.
+ void clear()
+ {
+ while (m_begin != m_static_memory)
+ {
+ char *previous_begin = reinterpret_cast<header *>(align(m_begin))->previous_begin;
+ if (m_free_func)
+ m_free_func(m_begin);
+ else
+ delete[] m_begin;
+ m_begin = previous_begin;
+ }
+ init();
+ }
+
+ //! Sets or resets the user-defined memory allocation functions for the pool.
+ //! This can only be called when no memory is allocated from the pool yet, otherwise results are undefined.
+ //! Allocation function must not return invalid pointer on failure. It should either throw,
+ //! stop the program, or use <code>longjmp()</code> function to pass control to other place of program.
+ //! If it returns invalid pointer, results are undefined.
+ //! <br><br>
+ //! User defined allocation functions must have the following forms:
+ //! <br><code>
+ //! <br>void *allocate(std::size_t size);
+ //! <br>void free(void *pointer);
+ //! </code><br>
+ //! \param af Allocation function, or 0 to restore default function
+ //! \param ff Free function, or 0 to restore default function
+ void set_allocator(alloc_func *af, free_func *ff)
+ {
+ assert(m_begin == m_static_memory && m_ptr == align(m_begin)); // Verify that no memory is allocated yet
+ m_alloc_func = af;
+ m_free_func = ff;
+ }
+
+ private:
+
+ struct header
+ {
+ char *previous_begin;
+ };
+
+ void init()
+ {
+ m_begin = m_static_memory;
+ m_ptr = align(m_begin);
+ m_end = m_static_memory + sizeof(m_static_memory);
+ }
+
+ char *align(char *ptr)
+ {
+ std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
+ return ptr + alignment;
+ }
+
+ char *allocate_raw(std::size_t size)
+ {
+ // Allocate
+ void *memory;
+ if (m_alloc_func) // Allocate memory using either user-specified allocation function or global operator new[]
+ {
+ memory = m_alloc_func(size);
+ assert(memory); // Allocator is not allowed to return 0, on failure it must either throw, stop the program or use longjmp
+ }
+ else
+ {
+ memory = new char[size];
+#ifdef RAPIDXML_NO_EXCEPTIONS
+ if (!memory) // If exceptions are disabled, verify memory allocation, because new will not be able to throw bad_alloc
+ RAPIDXML_PARSE_ERROR("out of memory", 0);
+#endif
+ }
+ return static_cast<char *>(memory);
+ }
+
+ void *allocate_aligned(std::size_t size)
+ {
+ // Calculate aligned pointer
+ char *result = align(m_ptr);
+
+ // If not enough memory left in current pool, allocate a new pool
+ if (result + size > m_end)
+ {
+ // Calculate required pool size (may be bigger than RAPIDXML_DYNAMIC_POOL_SIZE)
+ std::size_t pool_size = RAPIDXML_DYNAMIC_POOL_SIZE;
+ if (pool_size < size)
+ pool_size = size;
+
+ // Allocate
+ std::size_t alloc_size = sizeof(header) + (2 * RAPIDXML_ALIGNMENT - 2) + pool_size; // 2 alignments required in worst case: one for header, one for actual allocation
+ char *raw_memory = allocate_raw(alloc_size);
+
+ // Setup new pool in allocated memory
+ char *pool = align(raw_memory);
+ header *new_header = reinterpret_cast<header *>(pool);
+ new_header->previous_begin = m_begin;
+ m_begin = raw_memory;
+ m_ptr = pool + sizeof(header);
+ m_end = raw_memory + alloc_size;
+
+ // Calculate aligned pointer again using new pool
+ result = align(m_ptr);
+ }
+
+ // Update pool and return aligned pointer
+ m_ptr = result + size;
+ return result;
+ }
+
+ char *m_begin; // Start of raw memory making up current pool
+ char *m_ptr; // First free byte in current pool
+ char *m_end; // One past last available byte in current pool
+ char m_static_memory[RAPIDXML_STATIC_POOL_SIZE]; // Static raw memory
+ alloc_func *m_alloc_func; // Allocator function, or 0 if default is to be used
+ free_func *m_free_func; // Free function, or 0 if default is to be used
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // XML base
+
+ //! Base class for xml_node and xml_attribute implementing common functions:
+ //! name(), name_size(), value(), value_size() and parent().
+ //! \param Ch Character type to use
+ template<class Ch = char>
+ class xml_base
+ {
+
+ public:
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Construction & destruction
+
+ // Construct a base with empty name, value and parent
+ xml_base()
+ : m_name(0)
+ , m_value(0)
+ , m_parent(0)
+ {
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Node data access
+
+ //! Gets name of the node.
+ //! Interpretation of name depends on type of node.
+ //! Note that name will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse.
+ //! <br><br>
+ //! Use name_size() function to determine length of the name.
+ //! \return Name of node, or empty string if node has no name.
+ Ch *name() const
+ {
+ return m_name ? m_name : nullstr();
+ }
+
+ //! Gets size of node name, not including terminator character.
+ //! This function works correctly irrespective of whether name is or is not zero terminated.
+ //! \return Size of node name, in characters.
+ std::size_t name_size() const
+ {
+ return m_name ? m_name_size : 0;
+ }
+
+ //! Gets value of node.
+ //! Interpretation of value depends on type of node.
+ //! Note that value will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse.
+ //! <br><br>
+ //! Use value_size() function to determine length of the value.
+ //! \return Value of node, or empty string if node has no value.
+ Ch *value() const
+ {
+ return m_value ? m_value : nullstr();
+ }
+
+ //! Gets size of node value, not including terminator character.
+ //! This function works correctly irrespective of whether value is or is not zero terminated.
+ //! \return Size of node value, in characters.
+ std::size_t value_size() const
+ {
+ return m_value ? m_value_size : 0;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Node modification
+
+ //! Sets name of node to a non zero-terminated string.
+ //! See \ref ownership_of_strings.
+ //! <br><br>
+ //! Note that node does not own its name or value, it only stores a pointer to it.
+ //! It will not delete or otherwise free the pointer on destruction.
+ //! It is reponsibility of the user to properly manage lifetime of the string.
+ //! The easiest way to achieve it is to use memory_pool of the document to allocate the string -
+ //! on destruction of the document the string will be automatically freed.
+ //! <br><br>
+ //! Size of name must be specified separately, because name does not have to be zero terminated.
+ //! Use name(const Ch *) function to have the length automatically calculated (string must be zero terminated).
+ //! \param name Name of node to set. Does not have to be zero terminated.
+ //! \param size Size of name, in characters. This does not include zero terminator, if one is present.
+ void name(const Ch *name, std::size_t size)
+ {
+ m_name = const_cast<Ch *>(name);
+ m_name_size = size;
+ }
+
+ //! Sets name of node to a zero-terminated string.
+ //! See also \ref ownership_of_strings and xml_node::name(const Ch *, std::size_t).
+ //! \param name Name of node to set. Must be zero terminated.
+ void name(const Ch *name)
+ {
+ this->name(name, internal::measure(name));
+ }
+
+ //! Sets value of node to a non zero-terminated string.
+ //! See \ref ownership_of_strings.
+ //! <br><br>
+ //! Note that node does not own its name or value, it only stores a pointer to it.
+ //! It will not delete or otherwise free the pointer on destruction.
+ //! It is reponsibility of the user to properly manage lifetime of the string.
+ //! The easiest way to achieve it is to use memory_pool of the document to allocate the string -
+ //! on destruction of the document the string will be automatically freed.
+ //! <br><br>
+ //! Size of value must be specified separately, because it does not have to be zero terminated.
+ //! Use value(const Ch *) function to have the length automatically calculated (string must be zero terminated).
+ //! <br><br>
+ //! If an element has a child node of type node_data, it will take precedence over element value when printing.
+ //! If you want to manipulate data of elements using values, use parser flag rapidxml::parse_no_data_nodes to prevent creation of data nodes by the parser.
+ //! \param value value of node to set. Does not have to be zero terminated.
+ //! \param size Size of value, in characters. This does not include zero terminator, if one is present.
+ void value(const Ch *value, std::size_t size)
+ {
+ m_value = const_cast<Ch *>(value);
+ m_value_size = size;
+ }
+
+ //! Sets value of node to a zero-terminated string.
+ //! See also \ref ownership_of_strings and xml_node::value(const Ch *, std::size_t).
+ //! \param value Vame of node to set. Must be zero terminated.
+ void value(const Ch *value)
+ {
+ this->value(value, internal::measure(value));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Related nodes access
+
+ //! Gets node parent.
+ //! \return Pointer to parent node, or 0 if there is no parent.
+ xml_node<Ch> *parent() const
+ {
+ return m_parent;
+ }
+
+ protected:
+
+ // Return empty string
+ static Ch *nullstr()
+ {
+ static Ch zero = Ch('\0');
+ return &zero;
+ }
+
+ Ch *m_name; // Name of node, or 0 if no name
+ Ch *m_value; // Value of node, or 0 if no value
+ std::size_t m_name_size; // Length of node name, or undefined of no name
+ std::size_t m_value_size; // Length of node value, or undefined if no value
+ xml_node<Ch> *m_parent; // Pointer to parent node, or 0 if none
+
+ };
+
+ //! Class representing attribute node of XML document.
+ //! Each attribute has name and value strings, which are available through name() and value() functions (inherited from xml_base).
+ //! Note that after parse, both name and value of attribute will point to interior of source text used for parsing.
+ //! Thus, this text must persist in memory for the lifetime of attribute.
+ //! \param Ch Character type to use.
+ template<class Ch = char>
+ class xml_attribute: public xml_base<Ch>
+ {
+
+ friend class xml_node<Ch>;
+
+ public:
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Construction & destruction
+
+ //! Constructs an empty attribute with the specified type.
+ //! Consider using memory_pool of appropriate xml_document if allocating attributes manually.
+ xml_attribute()
+ {
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Related nodes access
+
+ //! Gets document of which attribute is a child.
+ //! \return Pointer to document that contains this attribute, or 0 if there is no parent document.
+ xml_document<Ch> *document() const
+ {
+ if (xml_node<Ch> *node = this->parent())
+ {
+ while (node->parent())
+ node = node->parent();
+ return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0;
+ }
+ else
+ return 0;
+ }
+
+ //! Gets previous attribute, optionally matching attribute name.
+ //! \param name Name of attribute to find, or 0 to return previous attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
+ //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string
+ //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+ //! \return Pointer to found attribute, or 0 if not found.
+ xml_attribute<Ch> *previous_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
+ {
+ if (name)
+ {
+ if (name_size == 0)
+ name_size = internal::measure(name);
+ for (xml_attribute<Ch> *attribute = m_prev_attribute; attribute; attribute = attribute->m_prev_attribute)
+ if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive))
+ return attribute;
+ return 0;
+ }
+ else
+ return this->m_parent ? m_prev_attribute : 0;
+ }
+
+ //! Gets next attribute, optionally matching attribute name.
+ //! \param name Name of attribute to find, or 0 to return next attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
+ //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string
+ //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+ //! \return Pointer to found attribute, or 0 if not found.
+ xml_attribute<Ch> *next_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
+ {
+ if (name)
+ {
+ if (name_size == 0)
+ name_size = internal::measure(name);
+ for (xml_attribute<Ch> *attribute = m_next_attribute; attribute; attribute = attribute->m_next_attribute)
+ if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive))
+ return attribute;
+ return 0;
+ }
+ else
+ return this->m_parent ? m_next_attribute : 0;
+ }
+
+ private:
+
+ xml_attribute<Ch> *m_prev_attribute; // Pointer to previous sibling of attribute, or 0 if none; only valid if parent is non-zero
+ xml_attribute<Ch> *m_next_attribute; // Pointer to next sibling of attribute, or 0 if none; only valid if parent is non-zero
+
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // XML node
+
+ //! Class representing a node of XML document.
+ //! Each node may have associated name and value strings, which are available through name() and value() functions.
+ //! Interpretation of name and value depends on type of the node.
+ //! Type of node can be determined by using type() function.
+ //! <br><br>
+ //! Note that after parse, both name and value of node, if any, will point interior of source text used for parsing.
+ //! Thus, this text must persist in the memory for the lifetime of node.
+ //! \param Ch Character type to use.
+ template<class Ch = char>
+ class xml_node: public xml_base<Ch>
+ {
+
+ public:
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Construction & destruction
+
+ //! Constructs an empty node with the specified type.
+ //! Consider using memory_pool of appropriate document to allocate nodes manually.
+ //! \param type Type of node to construct.
+ xml_node(node_type type)
+ : m_type(type)
+ , m_first_node(0)
+ , m_first_attribute(0)
+ {
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Node data access
+
+ //! Gets type of node.
+ //! \return Type of node.
+ node_type type() const
+ {
+ return m_type;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Related nodes access
+
+ //! Gets document of which node is a child.
+ //! \return Pointer to document that contains this node, or 0 if there is no parent document.
+ xml_document<Ch> *document() const
+ {
+ xml_node<Ch> *node = const_cast<xml_node<Ch> *>(this);
+ while (node->parent())
+ node = node->parent();
+ return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0;
+ }
+
+ //! Gets first child node, optionally matching node name.
+ //! \param name Name of child to find, or 0 to return first child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
+ //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string
+ //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+ //! \return Pointer to found child, or 0 if not found.
+ xml_node<Ch> *first_node(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
+ {
+ if (name)
+ {
+ if (name_size == 0)
+ name_size = internal::measure(name);
+ for (xml_node<Ch> *child = m_first_node; child; child = child->next_sibling())
+ if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive))
+ return child;
+ return 0;
+ }
+ else
+ return m_first_node;
+ }
+
+ //! Gets last child node, optionally matching node name.
+ //! Behaviour is undefined if node has no children.
+ //! Use first_node() to test if node has children.
+ //! \param name Name of child to find, or 0 to return last child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
+ //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string
+ //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+ //! \return Pointer to found child, or 0 if not found.
+ xml_node<Ch> *last_node(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
+ {
+ assert(m_first_node); // Cannot query for last child if node has no children
+ if (name)
+ {
+ if (name_size == 0)
+ name_size = internal::measure(name);
+ for (xml_node<Ch> *child = m_last_node; child; child = child->previous_sibling())
+ if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive))
+ return child;
+ return 0;
+ }
+ else
+ return m_last_node;
+ }
+
+ //! Gets previous sibling node, optionally matching node name.
+ //! Behaviour is undefined if node has no parent.
+ //! Use parent() to test if node has a parent.
+ //! \param name Name of sibling to find, or 0 to return previous sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
+ //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string
+ //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+ //! \return Pointer to found sibling, or 0 if not found.
+ xml_node<Ch> *previous_sibling(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
+ {
+ assert(this->m_parent); // Cannot query for siblings if node has no parent
+ if (name)
+ {
+ if (name_size == 0)
+ name_size = internal::measure(name);
+ for (xml_node<Ch> *sibling = m_prev_sibling; sibling; sibling = sibling->m_prev_sibling)
+ if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive))
+ return sibling;
+ return 0;
+ }
+ else
+ return m_prev_sibling;
+ }
+
+ //! Gets next sibling node, optionally matching node name.
+ //! Behaviour is undefined if node has no parent.
+ //! Use parent() to test if node has a parent.
+ //! \param name Name of sibling to find, or 0 to return next sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
+ //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string
+ //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+ //! \return Pointer to found sibling, or 0 if not found.
+ xml_node<Ch> *next_sibling(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
+ {
+ assert(this->m_parent); // Cannot query for siblings if node has no parent
+ if (name)
+ {
+ if (name_size == 0)
+ name_size = internal::measure(name);
+ for (xml_node<Ch> *sibling = m_next_sibling; sibling; sibling = sibling->m_next_sibling)
+ if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive))
+ return sibling;
+ return 0;
+ }
+ else
+ return m_next_sibling;
+ }
+
+ //! Gets first attribute of node, optionally matching attribute name.
+ //! \param name Name of attribute to find, or 0 to return first attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
+ //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string
+ //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+ //! \return Pointer to found attribute, or 0 if not found.
+ xml_attribute<Ch> *first_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
+ {
+ if (name)
+ {
+ if (name_size == 0)
+ name_size = internal::measure(name);
+ for (xml_attribute<Ch> *attribute = m_first_attribute; attribute; attribute = attribute->m_next_attribute)
+ if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive))
+ return attribute;
+ return 0;
+ }
+ else
+ return m_first_attribute;
+ }
+
+ //! Gets last attribute of node, optionally matching attribute name.
+ //! \param name Name of attribute to find, or 0 to return last attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
+ //! \param name_size Size of name, in characters, or 0 to have size calculated automatically from string
+ //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+ //! \return Pointer to found attribute, or 0 if not found.
+ xml_attribute<Ch> *last_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const
+ {
+ if (name)
+ {
+ if (name_size == 0)
+ name_size = internal::measure(name);
+ for (xml_attribute<Ch> *attribute = m_last_attribute; attribute; attribute = attribute->m_prev_attribute)
+ if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive))
+ return attribute;
+ return 0;
+ }
+ else
+ return m_first_attribute ? m_last_attribute : 0;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Node modification
+
+ //! Sets type of node.
+ //! \param type Type of node to set.
+ void type(node_type type)
+ {
+ m_type = type;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Node manipulation
+
+ //! Prepends a new child node.
+ //! The prepended child becomes the first child, and all existing children are moved one position back.
+ //! \param child Node to prepend.
+ void prepend_node(xml_node<Ch> *child)
+ {
+ assert(child && !child->parent() && child->type() != node_document);
+ if (first_node())
+ {
+ child->m_next_sibling = m_first_node;
+ m_first_node->m_prev_sibling = child;
+ }
+ else
+ {
+ child->m_next_sibling = 0;
+ m_last_node = child;
+ }
+ m_first_node = child;
+ child->m_parent = this;
+ child->m_prev_sibling = 0;
+ }
+
+ //! Appends a new child node.
+ //! The appended child becomes the last child.
+ //! \param child Node to append.
+ void append_node(xml_node<Ch> *child)
+ {
+ assert(child && !child->parent() && child->type() != node_document);
+ if (first_node())
+ {
+ child->m_prev_sibling = m_last_node;
+ m_last_node->m_next_sibling = child;
+ }
+ else
+ {
+ child->m_prev_sibling = 0;
+ m_first_node = child;
+ }
+ m_last_node = child;
+ child->m_parent = this;
+ child->m_next_sibling = 0;
+ }
+
+ //! Inserts a new child node at specified place inside the node.
+ //! All children after and including the specified node are moved one position back.
+ //! \param where Place where to insert the child, or 0 to insert at the back.
+ //! \param child Node to insert.
+ void insert_node(xml_node<Ch> *where, xml_node<Ch> *child)
+ {
+ assert(!where || where->parent() == this);
+ assert(child && !child->parent() && child->type() != node_document);
+ if (where == m_first_node)
+ prepend_node(child);
+ else if (where == 0)
+ append_node(child);
+ else
+ {
+ child->m_prev_sibling = where->m_prev_sibling;
+ child->m_next_sibling = where;
+ where->m_prev_sibling->m_next_sibling = child;
+ where->m_prev_sibling = child;
+ child->m_parent = this;
+ }
+ }
+
+ //! Removes first child node.
+ //! If node has no children, behaviour is undefined.
+ //! Use first_node() to test if node has children.
+ void remove_first_node()
+ {
+ assert(first_node());
+ xml_node<Ch> *child = m_first_node;
+ m_first_node = child->m_next_sibling;
+ if (child->m_next_sibling)
+ child->m_next_sibling->m_prev_sibling = 0;
+ else
+ m_last_node = 0;
+ child->m_parent = 0;
+ }
+
+ //! Removes last child of the node.
+ //! If node has no children, behaviour is undefined.
+ //! Use first_node() to test if node has children.
+ void remove_last_node()
+ {
+ assert(first_node());
+ xml_node<Ch> *child = m_last_node;
+ if (child->m_prev_sibling)
+ {
+ m_last_node = child->m_prev_sibling;
+ child->m_prev_sibling->m_next_sibling = 0;
+ }
+ else
+ m_first_node = 0;
+ child->m_parent = 0;
+ }
+
+ //! Removes specified child from the node
+ // \param where Pointer to child to be removed.
+ void remove_node(xml_node<Ch> *where)
+ {
+ assert(where && where->parent() == this);
+ assert(first_node());
+ if (where == m_first_node)
+ remove_first_node();
+ else if (where == m_last_node)
+ remove_last_node();
+ else
+ {
+ where->m_prev_sibling->m_next_sibling = where->m_next_sibling;
+ where->m_next_sibling->m_prev_sibling = where->m_prev_sibling;
+ where->m_parent = 0;
+ }
+ }
+
+ //! Removes all child nodes (but not attributes).
+ void remove_all_nodes()
+ {
+ for (xml_node<Ch> *node = first_node(); node; node = node->m_next_sibling)
+ node->m_parent = 0;
+ m_first_node = 0;
+ }
+
+ //! Prepends a new attribute to the node.
+ //! \param attribute Attribute to prepend.
+ void prepend_attribute(xml_attribute<Ch> *attribute)
+ {
+ assert(attribute && !attribute->parent());
+ if (first_attribute())
+ {
+ attribute->m_next_attribute = m_first_attribute;
+ m_first_attribute->m_prev_attribute = attribute;
+ }
+ else
+ {
+ attribute->m_next_attribute = 0;
+ m_last_attribute = attribute;
+ }
+ m_first_attribute = attribute;
+ attribute->m_parent = this;
+ attribute->m_prev_attribute = 0;
+ }
+
+ //! Appends a new attribute to the node.
+ //! \param attribute Attribute to append.
+ void append_attribute(xml_attribute<Ch> *attribute)
+ {
+ assert(attribute && !attribute->parent());
+ if (first_attribute())
+ {
+ attribute->m_prev_attribute = m_last_attribute;
+ m_last_attribute->m_next_attribute = attribute;
+ }
+ else
+ {
+ attribute->m_prev_attribute = 0;
+ m_first_attribute = attribute;
+ }
+ m_last_attribute = attribute;
+ attribute->m_parent = this;
+ attribute->m_next_attribute = 0;
+ }
+
+ //! Inserts a new attribute at specified place inside the node.
+ //! All attributes after and including the specified attribute are moved one position back.
+ //! \param where Place where to insert the attribute, or 0 to insert at the back.
+ //! \param attribute Attribute to insert.
+ void insert_attribute(xml_attribute<Ch> *where, xml_attribute<Ch> *attribute)
+ {
+ assert(!where || where->parent() == this);
+ assert(attribute && !attribute->parent());
+ if (where == m_first_attribute)
+ prepend_attribute(attribute);
+ else if (where == 0)
+ append_attribute(attribute);
+ else
+ {
+ attribute->m_prev_attribute = where->m_prev_attribute;
+ attribute->m_next_attribute = where;
+ where->m_prev_attribute->m_next_attribute = attribute;
+ where->m_prev_attribute = attribute;
+ attribute->m_parent = this;
+ }
+ }
+
+ //! Removes first attribute of the node.
+ //! If node has no attributes, behaviour is undefined.
+ //! Use first_attribute() to test if node has attributes.
+ void remove_first_attribute()
+ {
+ assert(first_attribute());
+ xml_attribute<Ch> *attribute = m_first_attribute;
+ if (attribute->m_next_attribute)
+ {
+ attribute->m_next_attribute->m_prev_attribute = 0;
+ }
+ else
+ m_last_attribute = 0;
+ attribute->m_parent = 0;
+ m_first_attribute = attribute->m_next_attribute;
+ }
+
+ //! Removes last attribute of the node.
+ //! If node has no attributes, behaviour is undefined.
+ //! Use first_attribute() to test if node has attributes.
+ void remove_last_attribute()
+ {
+ assert(first_attribute());
+ xml_attribute<Ch> *attribute = m_last_attribute;
+ if (attribute->m_prev_attribute)
+ {
+ attribute->m_prev_attribute->m_next_attribute = 0;
+ m_last_attribute = attribute->m_prev_attribute;
+ }
+ else
+ m_first_attribute = 0;
+ attribute->m_parent = 0;
+ }
+
+ //! Removes specified attribute from node.
+ //! \param where Pointer to attribute to be removed.
+ void remove_attribute(xml_attribute<Ch> *where)
+ {
+ assert(first_attribute() && where->parent() == this);
+ if (where == m_first_attribute)
+ remove_first_attribute();
+ else if (where == m_last_attribute)
+ remove_last_attribute();
+ else
+ {
+ where->m_prev_attribute->m_next_attribute = where->m_next_attribute;
+ where->m_next_attribute->m_prev_attribute = where->m_prev_attribute;
+ where->m_parent = 0;
+ }
+ }
+
+ //! Removes all attributes of node.
+ void remove_all_attributes()
+ {
+ for (xml_attribute<Ch> *attribute = first_attribute(); attribute; attribute = attribute->m_next_attribute)
+ attribute->m_parent = 0;
+ m_first_attribute = 0;
+ }
+
+ private:
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Restrictions
+
+ // No copying
+ xml_node(const xml_node &);
+ void operator =(const xml_node &);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Data members
+
+ // Note that some of the pointers below have UNDEFINED values if certain other pointers are 0.
+ // This is required for maximum performance, as it allows the parser to omit initialization of
+ // unneded/redundant values.
+ //
+ // The rules are as follows:
+ // 1. first_node and first_attribute contain valid pointers, or 0 if node has no children/attributes respectively
+ // 2. last_node and last_attribute are valid only if node has at least one child/attribute respectively, otherwise they contain garbage
+ // 3. prev_sibling and next_sibling are valid only if node has a parent, otherwise they contain garbage
+
+ node_type m_type; // Type of node; always valid
+ xml_node<Ch> *m_first_node; // Pointer to first child node, or 0 if none; always valid
+ xml_node<Ch> *m_last_node; // Pointer to last child node, or 0 if none; this value is only valid if m_first_node is non-zero
+ xml_attribute<Ch> *m_first_attribute; // Pointer to first attribute of node, or 0 if none; always valid
+ xml_attribute<Ch> *m_last_attribute; // Pointer to last attribute of node, or 0 if none; this value is only valid if m_first_attribute is non-zero
+ xml_node<Ch> *m_prev_sibling; // Pointer to previous sibling of node, or 0 if none; this value is only valid if m_parent is non-zero
+ xml_node<Ch> *m_next_sibling; // Pointer to next sibling of node, or 0 if none; this value is only valid if m_parent is non-zero
+
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // XML document
+
+ //! This class represents root of the DOM hierarchy.
+ //! It is also an xml_node and a memory_pool through public inheritance.
+ //! Use parse() function to build a DOM tree from a zero-terminated XML text string.
+ //! parse() function allocates memory for nodes and attributes by using functions of xml_document,
+ //! which are inherited from memory_pool.
+ //! To access root node of the document, use the document itself, as if it was an xml_node.
+ //! \param Ch Character type to use.
+ template<class Ch = char>
+ class xml_document: public xml_node<Ch>, public memory_pool<Ch>
+ {
+
+ public:
+
+ //! Constructs empty XML document
+ xml_document()
+ : xml_node<Ch>(node_document)
+ {
+ }
+
+ //! Parses zero-terminated XML string according to given flags.
+ //! Passed string will be modified by the parser, unless rapidxml::parse_non_destructive flag is used.
+ //! The string must persist for the lifetime of the document.
+ //! In case of error, rapidxml::parse_error exception will be thrown.
+ //! <br><br>
+ //! If you want to parse contents of a file, you must first load the file into the memory, and pass pointer to its beginning.
+ //! Make sure that data is zero-terminated.
+ //! <br><br>
+ //! Document can be parsed into multiple times.
+ //! Each new call to parse removes previous nodes and attributes (if any), but does not clear memory pool.
+ //! \param text XML data to parse; pointer is non-const to denote fact that this data may be modified by the parser.
+ template<int Flags>
+ void parse(Ch *text)
+ {
+ assert(text);
+
+ // Remove current contents
+ this->remove_all_nodes();
+ this->remove_all_attributes();
+
+ // Parse BOM, if any
+ parse_bom<Flags>(text);
+
+ // Parse children
+ while (1)
+ {
+ // Skip whitespace before node
+ skip<whitespace_pred, Flags>(text);
+ if (*text == 0)
+ break;
+
+ // Parse and append new child
+ if (*text == Ch('<'))
+ {
+ ++text; // Skip '<'
+ if (xml_node<Ch> *node = parse_node<Flags>(text))
+ this->append_node(node);
+ }
+ else
+ RAPIDXML_PARSE_ERROR("expected <", text);
+ }
+
+ }
+
+ //! Clears the document by deleting all nodes and clearing the memory pool.
+ //! All nodes owned by document pool are destroyed.
+ void clear()
+ {
+ this->remove_all_nodes();
+ this->remove_all_attributes();
+ memory_pool<Ch>::clear();
+ }
+
+ private:
+
+ ///////////////////////////////////////////////////////////////////////
+ // Internal character utility functions
+
+ // Detect whitespace character
+ struct whitespace_pred
+ {
+ static unsigned char test(Ch ch)
+ {
+ return internal::lookup_tables<0>::lookup_whitespace[static_cast<unsigned char>(ch)];
+ }
+ };
+
+ // Detect node name character
+ struct node_name_pred
+ {
+ static unsigned char test(Ch ch)
+ {
+ return internal::lookup_tables<0>::lookup_node_name[static_cast<unsigned char>(ch)];
+ }
+ };
+
+ // Detect attribute name character
+ struct attribute_name_pred
+ {
+ static unsigned char test(Ch ch)
+ {
+ return internal::lookup_tables<0>::lookup_attribute_name[static_cast<unsigned char>(ch)];
+ }
+ };
+
+ // Detect text character (PCDATA)
+ struct text_pred
+ {
+ static unsigned char test(Ch ch)
+ {
+ return internal::lookup_tables<0>::lookup_text[static_cast<unsigned char>(ch)];
+ }
+ };
+
+ // Detect text character (PCDATA) that does not require processing
+ struct text_pure_no_ws_pred
+ {
+ static unsigned char test(Ch ch)
+ {
+ return internal::lookup_tables<0>::lookup_text_pure_no_ws[static_cast<unsigned char>(ch)];
+ }
+ };
+
+ // Detect text character (PCDATA) that does not require processing
+ struct text_pure_with_ws_pred
+ {
+ static unsigned char test(Ch ch)
+ {
+ return internal::lookup_tables<0>::lookup_text_pure_with_ws[static_cast<unsigned char>(ch)];
+ }
+ };
+
+ // Detect attribute value character
+ template<Ch Quote>
+ struct attribute_value_pred
+ {
+ static unsigned char test(Ch ch)
+ {
+ if (Quote == Ch('\''))
+ return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast<unsigned char>(ch)];
+ if (Quote == Ch('\"'))
+ return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast<unsigned char>(ch)];
+ return 0; // Should never be executed, to avoid warnings on Comeau
+ }
+ };
+
+ // Detect attribute value character
+ template<Ch Quote>
+ struct attribute_value_pure_pred
+ {
+ static unsigned char test(Ch ch)
+ {
+ if (Quote == Ch('\''))
+ return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast<unsigned char>(ch)];
+ if (Quote == Ch('\"'))
+ return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast<unsigned char>(ch)];
+ return 0; // Should never be executed, to avoid warnings on Comeau
+ }
+ };
+
+ // Insert coded character, using UTF8 or 8-bit ASCII
+ template<int Flags>
+ static void insert_coded_character(Ch *&text, unsigned long code)
+ {
+ if (Flags & parse_no_utf8)
+ {
+ // Insert 8-bit ASCII character
+ // Todo: possibly verify that code is less than 256 and use replacement char otherwise?
+ text[0] = static_cast<unsigned char>(code);
+ text += 1;
+ }
+ else
+ {
+ // Insert UTF8 sequence
+ if (code < 0x80) // 1 byte sequence
+ {
+ text[0] = static_cast<unsigned char>(code);
+ text += 1;
+ }
+ else if (code < 0x800) // 2 byte sequence
+ {
+ text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+ text[0] = static_cast<unsigned char>(code | 0xC0);
+ text += 2;
+ }
+ else if (code < 0x10000) // 3 byte sequence
+ {
+ text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+ text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+ text[0] = static_cast<unsigned char>(code | 0xE0);
+ text += 3;
+ }
+ else if (code < 0x110000) // 4 byte sequence
+ {
+ text[3] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+ text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+ text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+ text[0] = static_cast<unsigned char>(code | 0xF0);
+ text += 4;
+ }
+ else // Invalid, only codes up to 0x10FFFF are allowed in Unicode
+ {
+ RAPIDXML_PARSE_ERROR("invalid numeric character entity", text);
+ }
+ }
+ }
+
+ // Skip characters until predicate evaluates to true
+ template<class StopPred, int Flags>
+ static void skip(Ch *&text)
+ {
+ Ch *tmp = text;
+ while (StopPred::test(*tmp))
+ ++tmp;
+ text = tmp;
+ }
+
+ // Skip characters until predicate evaluates to true while doing the following:
+ // - replacing XML character entity references with proper characters (&apos; &amp; &quot; &lt; &gt; &#...;)
+ // - condensing whitespace sequences to single space character
+ template<class StopPred, class StopPredPure, int Flags>
+ static Ch *skip_and_expand_character_refs(Ch *&text)
+ {
+ // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
+ if (Flags & parse_no_entity_translation &&
+ !(Flags & parse_normalize_whitespace) &&
+ !(Flags & parse_trim_whitespace))
+ {
+ skip<StopPred, Flags>(text);
+ return text;
+ }
+
+ // Use simple skip until first modification is detected
+ skip<StopPredPure, Flags>(text);
+
+ // Use translation skip
+ Ch *src = text;
+ Ch *dest = src;
+ while (StopPred::test(*src))
+ {
+ // If entity translation is enabled
+ if (!(Flags & parse_no_entity_translation))
+ {
+ // Test if replacement is needed
+ if (src[0] == Ch('&'))
+ {
+ switch (src[1])
+ {
+
+ // &amp; &apos;
+ case Ch('a'):
+ if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
+ {
+ *dest = Ch('&');
+ ++dest;
+ src += 5;
+ continue;
+ }
+ if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
+ {
+ *dest = Ch('\'');
+ ++dest;
+ src += 6;
+ continue;
+ }
+ break;
+
+ // &quot;
+ case Ch('q'):
+ if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
+ {
+ *dest = Ch('"');
+ ++dest;
+ src += 6;
+ continue;
+ }
+ break;
+
+ // &gt;
+ case Ch('g'):
+ if (src[2] == Ch('t') && src[3] == Ch(';'))
+ {
+ *dest = Ch('>');
+ ++dest;
+ src += 4;
+ continue;
+ }
+ break;
+
+ // &lt;
+ case Ch('l'):
+ if (src[2] == Ch('t') && src[3] == Ch(';'))
+ {
+ *dest = Ch('<');
+ ++dest;
+ src += 4;
+ continue;
+ }
+ break;
+
+ // &#...; - assumes ASCII
+ case Ch('#'):
+ if (src[2] == Ch('x'))
+ {
+ unsigned long code = 0;
+ src += 3; // Skip &#x
+ while (1)
+ {
+ unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
+ if (digit == 0xFF)
+ break;
+ code = code * 16 + digit;
+ ++src;
+ }
+ insert_coded_character<Flags>(dest, code); // Put character in output
+ }
+ else
+ {
+ unsigned long code = 0;
+ src += 2; // Skip &#
+ while (1)
+ {
+ unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
+ if (digit == 0xFF)
+ break;
+ code = code * 10 + digit;
+ ++src;
+ }
+ insert_coded_character<Flags>(dest, code); // Put character in output
+ }
+ if (*src == Ch(';'))
+ ++src;
+ else
+ RAPIDXML_PARSE_ERROR("expected ;", src);
+ continue;
+
+ // Something else
+ default:
+ // Ignore, just copy '&' verbatim
+ break;
+
+ }
+ }
+ }
+
+ // If whitespace condensing is enabled
+ if (Flags & parse_normalize_whitespace)
+ {
+ // Test if condensing is needed
+ if (whitespace_pred::test(*src))
+ {
+ *dest = Ch(' '); ++dest; // Put single space in dest
+ ++src; // Skip first whitespace char
+ // Skip remaining whitespace chars
+ while (whitespace_pred::test(*src))
+ ++src;
+ continue;
+ }
+ }
+
+ // No replacement, only copy character
+ *dest++ = *src++;
+
+ }
+
+ // Return new end
+ text = src;
+ return dest;
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+ // Internal parsing functions
+
+ // Parse BOM, if any
+ template<int Flags>
+ void parse_bom(Ch *&text)
+ {
+ // UTF-8?
+ if (static_cast<unsigned char>(text[0]) == 0xEF &&
+ static_cast<unsigned char>(text[1]) == 0xBB &&
+ static_cast<unsigned char>(text[2]) == 0xBF)
+ {
+ text += 3; // Skup utf-8 bom
+ }
+ }
+
+ // Parse XML declaration (<?xml...)
+ template<int Flags>
+ xml_node<Ch> *parse_xml_declaration(Ch *&text)
+ {
+ // If parsing of declaration is disabled
+ if (!(Flags & parse_declaration_node))
+ {
+ // Skip until end of declaration
+ while (text[0] != Ch('?') || text[1] != Ch('>'))
+ {
+ if (!text[0])
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+ ++text;
+ }
+ text += 2; // Skip '?>'
+ return 0;
+ }
+
+ // Create declaration
+ xml_node<Ch> *declaration = this->allocate_node(node_declaration);
+
+ // Skip whitespace before attributes or ?>
+ skip<whitespace_pred, Flags>(text);
+
+ // Parse declaration attributes
+ parse_node_attributes<Flags>(text, declaration);
+
+ // Skip ?>
+ if (text[0] != Ch('?') || text[1] != Ch('>'))
+ RAPIDXML_PARSE_ERROR("expected ?>", text);
+ text += 2;
+
+ return declaration;
+ }
+
+ // Parse XML comment (<!--...)
+ template<int Flags>
+ xml_node<Ch> *parse_comment(Ch *&text)
+ {
+ // If parsing of comments is disabled
+ if (!(Flags & parse_comment_nodes))
+ {
+ // Skip until end of comment
+ while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
+ {
+ if (!text[0])
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+ ++text;
+ }
+ text += 3; // Skip '-->'
+ return 0; // Do not produce comment node
+ }
+
+ // Remember value start
+ Ch *value = text;
+
+ // Skip until end of comment
+ while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
+ {
+ if (!text[0])
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+ ++text;
+ }
+
+ // Create comment node
+ xml_node<Ch> *comment = this->allocate_node(node_comment);
+ comment->value(value, text - value);
+
+ // Place zero terminator after comment value
+ if (!(Flags & parse_no_string_terminators))
+ *text = Ch('\0');
+
+ text += 3; // Skip '-->'
+ return comment;
+ }
+
+ // Parse DOCTYPE
+ template<int Flags>
+ xml_node<Ch> *parse_doctype(Ch *&text)
+ {
+ // Remember value start
+ Ch *value = text;
+
+ // Skip to >
+ while (*text != Ch('>'))
+ {
+ // Determine character type
+ switch (*text)
+ {
+
+ // If '[' encountered, scan for matching ending ']' using naive algorithm with depth
+ // This works for all W3C test files except for 2 most wicked
+ case Ch('['):
+ {
+ ++text; // Skip '['
+ int depth = 1;
+ while (depth > 0)
+ {
+ switch (*text)
+ {
+ case Ch('['): ++depth; break;
+ case Ch(']'): --depth; break;
+ case 0: RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+ }
+ ++text;
+ }
+ break;
+ }
+
+ // Error on end of text
+ case Ch('\0'):
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+
+ // Other character, skip it
+ default:
+ ++text;
+
+ }
+ }
+
+ // If DOCTYPE nodes enabled
+ if (Flags & parse_doctype_node)
+ {
+ // Create a new doctype node
+ xml_node<Ch> *doctype = this->allocate_node(node_doctype);
+ doctype->value(value, text - value);
+
+ // Place zero terminator after value
+ if (!(Flags & parse_no_string_terminators))
+ *text = Ch('\0');
+
+ text += 1; // skip '>'
+ return doctype;
+ }
+ else
+ {
+ text += 1; // skip '>'
+ return 0;
+ }
+
+ }
+
+ // Parse PI
+ template<int Flags>
+ xml_node<Ch> *parse_pi(Ch *&text)
+ {
+ // If creation of PI nodes is enabled
+ if (Flags & parse_pi_nodes)
+ {
+ // Create pi node
+ xml_node<Ch> *pi = this->allocate_node(node_pi);
+
+ // Extract PI target name
+ Ch *name = text;
+ skip<node_name_pred, Flags>(text);
+ if (text == name)
+ RAPIDXML_PARSE_ERROR("expected PI target", text);
+ pi->name(name, text - name);
+
+ // Skip whitespace between pi target and pi
+ skip<whitespace_pred, Flags>(text);
+
+ // Remember start of pi
+ Ch *value = text;
+
+ // Skip to '?>'
+ while (text[0] != Ch('?') || text[1] != Ch('>'))
+ {
+ if (*text == Ch('\0'))
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+ ++text;
+ }
+
+ // Set pi value (verbatim, no entity expansion or whitespace normalization)
+ pi->value(value, text - value);
+
+ // Place zero terminator after name and value
+ if (!(Flags & parse_no_string_terminators))
+ {
+ pi->name()[pi->name_size()] = Ch('\0');
+ pi->value()[pi->value_size()] = Ch('\0');
+ }
+
+ text += 2; // Skip '?>'
+ return pi;
+ }
+ else
+ {
+ // Skip to '?>'
+ while (text[0] != Ch('?') || text[1] != Ch('>'))
+ {
+ if (*text == Ch('\0'))
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+ ++text;
+ }
+ text += 2; // Skip '?>'
+ return 0;
+ }
+ }
+
+ // Parse and append data
+ // Return character that ends data.
+ // This is necessary because this character might have been overwritten by a terminating 0
+ template<int Flags>
+ Ch parse_and_append_data(xml_node<Ch> *node, Ch *&text, Ch *contents_start)
+ {
+ // Backup to contents start if whitespace trimming is disabled
+ if (!(Flags & parse_trim_whitespace))
+ text = contents_start;
+
+ // Skip until end of data
+ Ch *value = text, *end;
+ if (Flags & parse_normalize_whitespace)
+ end = skip_and_expand_character_refs<text_pred, text_pure_with_ws_pred, Flags>(text);
+ else
+ end = skip_and_expand_character_refs<text_pred, text_pure_no_ws_pred, Flags>(text);
+
+ // Trim trailing whitespace if flag is set; leading was already trimmed by whitespace skip after >
+ if (Flags & parse_trim_whitespace)
+ {
+ if (Flags & parse_normalize_whitespace)
+ {
+ // Whitespace is already condensed to single space characters by skipping function, so just trim 1 char off the end
+ if (*(end - 1) == Ch(' '))
+ --end;
+ }
+ else
+ {
+ // Backup until non-whitespace character is found
+ while (whitespace_pred::test(*(end - 1)))
+ --end;
+ }
+ }
+
+ // If characters are still left between end and value (this test is only necessary if normalization is enabled)
+ // Create new data node
+ if (!(Flags & parse_no_data_nodes))
+ {
+ xml_node<Ch> *data = this->allocate_node(node_data);
+ data->value(value, end - value);
+ node->append_node(data);
+ }
+
+ // Add data to parent node if no data exists yet
+ if (!(Flags & parse_no_element_values))
+ if (*node->value() == Ch('\0'))
+ node->value(value, end - value);
+
+ // Place zero terminator after value
+ if (!(Flags & parse_no_string_terminators))
+ {
+ Ch ch = *text;
+ *end = Ch('\0');
+ return ch; // Return character that ends data; this is required because zero terminator overwritten it
+ }
+
+ // Return character that ends data
+ return *text;
+ }
+
+ // Parse CDATA
+ template<int Flags>
+ xml_node<Ch> *parse_cdata(Ch *&text)
+ {
+ // If CDATA is disabled
+ if (Flags & parse_no_data_nodes)
+ {
+ // Skip until end of cdata
+ while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
+ {
+ if (!text[0])
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+ ++text;
+ }
+ text += 3; // Skip ]]>
+ return 0; // Do not produce CDATA node
+ }
+
+ // Skip until end of cdata
+ Ch *value = text;
+ while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
+ {
+ if (!text[0])
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+ ++text;
+ }
+
+ // Create new cdata node
+ xml_node<Ch> *cdata = this->allocate_node(node_cdata);
+ cdata->value(value, text - value);
+
+ // Place zero terminator after value
+ if (!(Flags & parse_no_string_terminators))
+ *text = Ch('\0');
+
+ text += 3; // Skip ]]>
+ return cdata;
+ }
+
+ // Parse element node
+ template<int Flags>
+ xml_node<Ch> *parse_element(Ch *&text)
+ {
+ // Create element node
+ xml_node<Ch> *element = this->allocate_node(node_element);
+
+ // Extract element name
+ Ch *name = text;
+ skip<node_name_pred, Flags>(text);
+ if (text == name)
+ RAPIDXML_PARSE_ERROR("expected element name", text);
+ element->name(name, text - name);
+
+ // Skip whitespace between element name and attributes or >
+ skip<whitespace_pred, Flags>(text);
+
+ // Parse attributes, if any
+ parse_node_attributes<Flags>(text, element);
+
+ // Determine ending type
+ if (*text == Ch('>'))
+ {
+ ++text;
+ parse_node_contents<Flags>(text, element);
+ }
+ else if (*text == Ch('/'))
+ {
+ ++text;
+ if (*text != Ch('>'))
+ RAPIDXML_PARSE_ERROR("expected >", text);
+ ++text;
+ }
+ else
+ RAPIDXML_PARSE_ERROR("expected >", text);
+
+ // Place zero terminator after name
+ if (!(Flags & parse_no_string_terminators))
+ element->name()[element->name_size()] = Ch('\0');
+
+ // Return parsed element
+ return element;
+ }
+
+ // Determine node type, and parse it
+ template<int Flags>
+ xml_node<Ch> *parse_node(Ch *&text)
+ {
+ // Parse proper node type
+ switch (text[0])
+ {
+
+ // <...
+ default:
+ // Parse and append element node
+ return parse_element<Flags>(text);
+
+ // <?...
+ case Ch('?'):
+ ++text; // Skip ?
+ if ((text[0] == Ch('x') || text[0] == Ch('X')) &&
+ (text[1] == Ch('m') || text[1] == Ch('M')) &&
+ (text[2] == Ch('l') || text[2] == Ch('L')) &&
+ whitespace_pred::test(text[3]))
+ {
+ // '<?xml ' - xml declaration
+ text += 4; // Skip 'xml '
+ return parse_xml_declaration<Flags>(text);
+ }
+ else
+ {
+ // Parse PI
+ return parse_pi<Flags>(text);
+ }
+
+ // <!...
+ case Ch('!'):
+
+ // Parse proper subset of <! node
+ switch (text[1])
+ {
+
+ // <!-
+ case Ch('-'):
+ if (text[2] == Ch('-'))
+ {
+ // '<!--' - xml comment
+ text += 3; // Skip '!--'
+ return parse_comment<Flags>(text);
+ }
+ break;
+
+ // <![
+ case Ch('['):
+ if (text[2] == Ch('C') && text[3] == Ch('D') && text[4] == Ch('A') &&
+ text[5] == Ch('T') && text[6] == Ch('A') && text[7] == Ch('['))
+ {
+ // '<![CDATA[' - cdata
+ text += 8; // Skip '![CDATA['
+ return parse_cdata<Flags>(text);
+ }
+ break;
+
+ // <!D
+ case Ch('D'):
+ if (text[2] == Ch('O') && text[3] == Ch('C') && text[4] == Ch('T') &&
+ text[5] == Ch('Y') && text[6] == Ch('P') && text[7] == Ch('E') &&
+ whitespace_pred::test(text[8]))
+ {
+ // '<!DOCTYPE ' - doctype
+ text += 9; // skip '!DOCTYPE '
+ return parse_doctype<Flags>(text);
+ }
+
+ } // switch
+
+ // Attempt to skip other, unrecognized node types starting with <!
+ ++text; // Skip !
+ while (*text != Ch('>'))
+ {
+ if (*text == 0)
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+ ++text;
+ }
+ ++text; // Skip '>'
+ return 0; // No node recognized
+
+ }
+ }
+
+ // Parse contents of the node - children, data etc.
+ template<int Flags>
+ void parse_node_contents(Ch *&text, xml_node<Ch> *node)
+ {
+ // For all children and text
+ while (1)
+ {
+ // Skip whitespace between > and node contents
+ Ch *contents_start = text; // Store start of node contents before whitespace is skipped
+ skip<whitespace_pred, Flags>(text);
+ Ch next_char = *text;
+
+ // After data nodes, instead of continuing the loop, control jumps here.
+ // This is because zero termination inside parse_and_append_data() function
+ // would wreak havoc with the above code.
+ // Also, skipping whitespace after data nodes is unnecessary.
+ after_data_node:
+
+ // Determine what comes next: node closing, child node, data node, or 0?
+ switch (next_char)
+ {
+
+ // Node closing or child node
+ case Ch('<'):
+ if (text[1] == Ch('/'))
+ {
+ // Node closing
+ text += 2; // Skip '</'
+ if (Flags & parse_validate_closing_tags)
+ {
+ // Skip and validate closing tag name
+ Ch *closing_name = text;
+ skip<node_name_pred, Flags>(text);
+ if (!internal::compare(node->name(), node->name_size(), closing_name, text - closing_name, true))
+ RAPIDXML_PARSE_ERROR("invalid closing tag name", text);
+ }
+ else
+ {
+ // No validation, just skip name
+ skip<node_name_pred, Flags>(text);
+ }
+ // Skip remaining whitespace after node name
+ skip<whitespace_pred, Flags>(text);
+ if (*text != Ch('>'))
+ RAPIDXML_PARSE_ERROR("expected >", text);
+ ++text; // Skip '>'
+ return; // Node closed, finished parsing contents
+ }
+ else
+ {
+ // Child node
+ ++text; // Skip '<'
+ if (xml_node<Ch> *child = parse_node<Flags>(text))
+ node->append_node(child);
+ }
+ break;
+
+ // End of data - error
+ case Ch('\0'):
+ RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+
+ // Data node
+ default:
+ next_char = parse_and_append_data<Flags>(node, text, contents_start);
+ goto after_data_node; // Bypass regular processing after data nodes
+
+ }
+ }
+ }
+
+ // Parse XML attributes of the node
+ template<int Flags>
+ void parse_node_attributes(Ch *&text, xml_node<Ch> *node)
+ {
+ // For all attributes
+ while (attribute_name_pred::test(*text))
+ {
+ // Extract attribute name
+ Ch *name = text;
+ ++text; // Skip first character of attribute name
+ skip<attribute_name_pred, Flags>(text);
+ if (text == name)
+ RAPIDXML_PARSE_ERROR("expected attribute name", name);
+
+ // Create new attribute
+ xml_attribute<Ch> *attribute = this->allocate_attribute();
+ attribute->name(name, text - name);
+ node->append_attribute(attribute);
+
+ // Skip whitespace after attribute name
+ skip<whitespace_pred, Flags>(text);
+
+ // Skip =
+ if (*text != Ch('='))
+ RAPIDXML_PARSE_ERROR("expected =", text);
+ ++text;
+
+ // Add terminating zero after name
+ if (!(Flags & parse_no_string_terminators))
+ attribute->name()[attribute->name_size()] = 0;
+
+ // Skip whitespace after =
+ skip<whitespace_pred, Flags>(text);
+
+ // Skip quote and remember if it was ' or "
+ Ch quote = *text;
+ if (quote != Ch('\'') && quote != Ch('"'))
+ RAPIDXML_PARSE_ERROR("expected ' or \"", text);
+ ++text;
+
+ // Extract attribute value and expand char refs in it
+ Ch *value = text, *end;
+ const int AttFlags = Flags & ~parse_normalize_whitespace; // No whitespace normalization in attributes
+ if (quote == Ch('\''))
+ end = skip_and_expand_character_refs<attribute_value_pred<Ch('\'')>, attribute_value_pure_pred<Ch('\'')>, AttFlags>(text);
+ else
+ end = skip_and_expand_character_refs<attribute_value_pred<Ch('"')>, attribute_value_pure_pred<Ch('"')>, AttFlags>(text);
+
+ // Set attribute value
+ attribute->value(value, end - value);
+
+ // Make sure that end quote is present
+ if (*text != quote)
+ RAPIDXML_PARSE_ERROR("expected ' or \"", text);
+ ++text; // Skip quote
+
+ // Add terminating zero after value
+ if (!(Flags & parse_no_string_terminators))
+ attribute->value()[attribute->value_size()] = 0;
+
+ // Skip whitespace after attribute value
+ skip<whitespace_pred, Flags>(text);
+ }
+ }
+
+ };
+
+ //! \cond internal
+ namespace internal
+ {
+
+ // Whitespace (space \n \r \t)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_whitespace[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, // 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 2
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 5
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 7
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // F
+ };
+
+ // Node name (anything but space \n \r \t / > ? \0)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_node_name[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F
+ };
+
+ // Text (i.e. PCDATA) (anything but < \0)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_text[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F
+ };
+
+ // Text (i.e. PCDATA) that does not require processing when ws normalization is disabled
+ // (anything but < \0 &)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_text_pure_no_ws[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F
+ };
+
+ // Text (i.e. PCDATA) that does not require processing when ws normalizationis is enabled
+ // (anything but < \0 & space \n \r \t)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_text_pure_with_ws[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F
+ };
+
+ // Attribute name (anything but space \n \r \t / < > = ? ! \0)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_attribute_name[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F
+ };
+
+ // Attribute data with single quote (anything but ' \0)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F
+ };
+
+ // Attribute data with single quote that does not require processing (anything but ' \0 &)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1_pure[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F
+ };
+
+ // Attribute data with double quote (anything but " \0)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F
+ };
+
+ // Attribute data with double quote that does not require processing (anything but " \0 &)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2_pure[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // B
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // C
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // D
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // E
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // F
+ };
+
+ // Digits (dec and hex, 255 denotes end of numeric character reference)
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_digits[256] =
+ {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 0
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 1
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 2
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,255,255,255,255,255,255, // 3
+ 255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255, // 4
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 5
+ 255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255, // 6
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 7
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 8
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // 9
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // A
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // B
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // C
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // D
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, // E
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 // F
+ };
+
+ // Upper case conversion
+ template<int Dummy>
+ const unsigned char lookup_tables<Dummy>::lookup_upcase[256] =
+ {
+ // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A B C D E F
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 0
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, // 1
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, // 2
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, // 3
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, // 4
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, // 5
+ 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, // 6
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 123,124,125,126,127, // 7
+ 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, // 8
+ 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, // 9
+ 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, // A
+ 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, // B
+ 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, // C
+ 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, // D
+ 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, // E
+ 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 // F
+ };
+ }
+ //! \endcond
+
+}
+
+// Undefine internal macros
+#undef RAPIDXML_PARSE_ERROR
+
+// On MSVC, restore warnings state
+#ifdef _MSC_VER
+ #pragma warning(pop)
+#endif
+
+#endif
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_iterators.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_iterators.hpp
new file mode 100644
index 000000000..52ebc298a
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_iterators.hpp
@@ -0,0 +1,174 @@
+#ifndef RAPIDXML_ITERATORS_HPP_INCLUDED
+#define RAPIDXML_ITERATORS_HPP_INCLUDED
+
+// Copyright (C) 2006, 2009 Marcin Kalicinski
+// Version 1.13
+// Revision $DateTime: 2009/05/13 01:46:17 $
+//! \file rapidxml_iterators.hpp This file contains rapidxml iterators
+
+#include "rapidxml.hpp"
+
+namespace rapidxml
+{
+
+ //! Iterator of child nodes of xml_node
+ template<class Ch>
+ class node_iterator
+ {
+
+ public:
+
+ typedef typename xml_node<Ch> value_type;
+ typedef typename xml_node<Ch> &reference;
+ typedef typename xml_node<Ch> *pointer;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::bidirectional_iterator_tag iterator_category;
+
+ node_iterator()
+ : m_node(0)
+ {
+ }
+
+ node_iterator(xml_node<Ch> *node)
+ : m_node(node->first_node())
+ {
+ }
+
+ reference operator *() const
+ {
+ assert(m_node);
+ return *m_node;
+ }
+
+ pointer operator->() const
+ {
+ assert(m_node);
+ return m_node;
+ }
+
+ node_iterator& operator++()
+ {
+ assert(m_node);
+ m_node = m_node->next_sibling();
+ return *this;
+ }
+
+ node_iterator operator++(int)
+ {
+ node_iterator tmp = *this;
+ ++this;
+ return tmp;
+ }
+
+ node_iterator& operator--()
+ {
+ assert(m_node && m_node->previous_sibling());
+ m_node = m_node->previous_sibling();
+ return *this;
+ }
+
+ node_iterator operator--(int)
+ {
+ node_iterator tmp = *this;
+ ++this;
+ return tmp;
+ }
+
+ bool operator ==(const node_iterator<Ch> &rhs)
+ {
+ return m_node == rhs.m_node;
+ }
+
+ bool operator !=(const node_iterator<Ch> &rhs)
+ {
+ return m_node != rhs.m_node;
+ }
+
+ private:
+
+ xml_node<Ch> *m_node;
+
+ };
+
+ //! Iterator of child attributes of xml_node
+ template<class Ch>
+ class attribute_iterator
+ {
+
+ public:
+
+ typedef typename xml_attribute<Ch> value_type;
+ typedef typename xml_attribute<Ch> &reference;
+ typedef typename xml_attribute<Ch> *pointer;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::bidirectional_iterator_tag iterator_category;
+
+ attribute_iterator()
+ : m_attribute(0)
+ {
+ }
+
+ attribute_iterator(xml_node<Ch> *node)
+ : m_attribute(node->first_attribute())
+ {
+ }
+
+ reference operator *() const
+ {
+ assert(m_attribute);
+ return *m_attribute;
+ }
+
+ pointer operator->() const
+ {
+ assert(m_attribute);
+ return m_attribute;
+ }
+
+ attribute_iterator& operator++()
+ {
+ assert(m_attribute);
+ m_attribute = m_attribute->next_attribute();
+ return *this;
+ }
+
+ attribute_iterator operator++(int)
+ {
+ attribute_iterator tmp = *this;
+ ++this;
+ return tmp;
+ }
+
+ attribute_iterator& operator--()
+ {
+ assert(m_attribute && m_attribute->previous_attribute());
+ m_attribute = m_attribute->previous_attribute();
+ return *this;
+ }
+
+ attribute_iterator operator--(int)
+ {
+ attribute_iterator tmp = *this;
+ ++this;
+ return tmp;
+ }
+
+ bool operator ==(const attribute_iterator<Ch> &rhs)
+ {
+ return m_attribute == rhs.m_attribute;
+ }
+
+ bool operator !=(const attribute_iterator<Ch> &rhs)
+ {
+ return m_attribute != rhs.m_attribute;
+ }
+
+ private:
+
+ xml_attribute<Ch> *m_attribute;
+
+ };
+
+}
+
+#endif
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_print.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_print.hpp
new file mode 100644
index 000000000..0ae2b14fa
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_print.hpp
@@ -0,0 +1,421 @@
+#ifndef RAPIDXML_PRINT_HPP_INCLUDED
+#define RAPIDXML_PRINT_HPP_INCLUDED
+
+// Copyright (C) 2006, 2009 Marcin Kalicinski
+// Version 1.13
+// Revision $DateTime: 2009/05/13 01:46:17 $
+//! \file rapidxml_print.hpp This file contains rapidxml printer implementation
+
+#include "rapidxml.hpp"
+
+// Only include streams if not disabled
+#ifndef RAPIDXML_NO_STREAMS
+ #include <ostream>
+ #include <iterator>
+#endif
+
+namespace rapidxml
+{
+
+ ///////////////////////////////////////////////////////////////////////
+ // Printing flags
+
+ const int print_no_indenting = 0x1; //!< Printer flag instructing the printer to suppress indenting of XML. See print() function.
+
+ ///////////////////////////////////////////////////////////////////////
+ // Internal
+
+ //! \cond internal
+ namespace internal
+ {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Internal character operations
+
+ // Copy characters from given range to given output iterator
+ template<class OutIt, class Ch>
+ inline OutIt copy_chars(const Ch *begin, const Ch *end, OutIt out)
+ {
+ while (begin != end)
+ *out++ = *begin++;
+ return out;
+ }
+
+ // Copy characters from given range to given output iterator and expand
+ // characters into references (&lt; &gt; &apos; &quot; &amp;)
+ template<class OutIt, class Ch>
+ inline OutIt copy_and_expand_chars(const Ch *begin, const Ch *end, Ch noexpand, OutIt out)
+ {
+ while (begin != end)
+ {
+ if (*begin == noexpand)
+ {
+ *out++ = *begin; // No expansion, copy character
+ }
+ else
+ {
+ switch (*begin)
+ {
+ case Ch('<'):
+ *out++ = Ch('&'); *out++ = Ch('l'); *out++ = Ch('t'); *out++ = Ch(';');
+ break;
+ case Ch('>'):
+ *out++ = Ch('&'); *out++ = Ch('g'); *out++ = Ch('t'); *out++ = Ch(';');
+ break;
+ case Ch('\''):
+ *out++ = Ch('&'); *out++ = Ch('a'); *out++ = Ch('p'); *out++ = Ch('o'); *out++ = Ch('s'); *out++ = Ch(';');
+ break;
+ case Ch('"'):
+ *out++ = Ch('&'); *out++ = Ch('q'); *out++ = Ch('u'); *out++ = Ch('o'); *out++ = Ch('t'); *out++ = Ch(';');
+ break;
+ case Ch('&'):
+ *out++ = Ch('&'); *out++ = Ch('a'); *out++ = Ch('m'); *out++ = Ch('p'); *out++ = Ch(';');
+ break;
+ default:
+ *out++ = *begin; // No expansion, copy character
+ }
+ }
+ ++begin; // Step to next character
+ }
+ return out;
+ }
+
+ // Fill given output iterator with repetitions of the same character
+ template<class OutIt, class Ch>
+ inline OutIt fill_chars(OutIt out, int n, Ch ch)
+ {
+ for (int i = 0; i < n; ++i)
+ *out++ = ch;
+ return out;
+ }
+
+ // Find character
+ template<class Ch, Ch ch>
+ inline bool find_char(const Ch *begin, const Ch *end)
+ {
+ while (begin != end)
+ if (*begin++ == ch)
+ return true;
+ return false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Internal printing operations
+
+ // Print node
+ template<class OutIt, class Ch>
+ inline OutIt print_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
+ {
+ // Print proper node type
+ switch (node->type())
+ {
+
+ // Document
+ case node_document:
+ out = print_children(out, node, flags, indent);
+ break;
+
+ // Element
+ case node_element:
+ out = print_element_node(out, node, flags, indent);
+ break;
+
+ // Data
+ case node_data:
+ out = print_data_node(out, node, flags, indent);
+ break;
+
+ // CDATA
+ case node_cdata:
+ out = print_cdata_node(out, node, flags, indent);
+ break;
+
+ // Declaration
+ case node_declaration:
+ out = print_declaration_node(out, node, flags, indent);
+ break;
+
+ // Comment
+ case node_comment:
+ out = print_comment_node(out, node, flags, indent);
+ break;
+
+ // Doctype
+ case node_doctype:
+ out = print_doctype_node(out, node, flags, indent);
+ break;
+
+ // Pi
+ case node_pi:
+ out = print_pi_node(out, node, flags, indent);
+ break;
+
+ // Unknown
+ default:
+ assert(0);
+ break;
+ }
+
+ // If indenting not disabled, add line break after node
+ if (!(flags & print_no_indenting))
+ *out = Ch('\n'), ++out;
+
+ // Return modified iterator
+ return out;
+ }
+
+ // Print children of the node
+ template<class OutIt, class Ch>
+ inline OutIt print_children(OutIt out, const xml_node<Ch> *node, int flags, int indent)
+ {
+ for (xml_node<Ch> *child = node->first_node(); child; child = child->next_sibling())
+ out = print_node(out, child, flags, indent);
+ return out;
+ }
+
+ // Print attributes of the node
+ template<class OutIt, class Ch>
+ inline OutIt print_attributes(OutIt out, const xml_node<Ch> *node, int flags)
+ {
+ for (xml_attribute<Ch> *attribute = node->first_attribute(); attribute; attribute = attribute->next_attribute())
+ {
+ if (attribute->name() && attribute->value())
+ {
+ // Print attribute name
+ *out = Ch(' '), ++out;
+ out = copy_chars(attribute->name(), attribute->name() + attribute->name_size(), out);
+ *out = Ch('='), ++out;
+ // Print attribute value using appropriate quote type
+ if (find_char<Ch, Ch('"')>(attribute->value(), attribute->value() + attribute->value_size()))
+ {
+ *out = Ch('\''), ++out;
+ out = copy_and_expand_chars(attribute->value(), attribute->value() + attribute->value_size(), Ch('"'), out);
+ *out = Ch('\''), ++out;
+ }
+ else
+ {
+ *out = Ch('"'), ++out;
+ out = copy_and_expand_chars(attribute->value(), attribute->value() + attribute->value_size(), Ch('\''), out);
+ *out = Ch('"'), ++out;
+ }
+ }
+ }
+ return out;
+ }
+
+ // Print data node
+ template<class OutIt, class Ch>
+ inline OutIt print_data_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
+ {
+ assert(node->type() == node_data);
+ if (!(flags & print_no_indenting))
+ out = fill_chars(out, indent, Ch('\t'));
+ out = copy_and_expand_chars(node->value(), node->value() + node->value_size(), Ch(0), out);
+ return out;
+ }
+
+ // Print data node
+ template<class OutIt, class Ch>
+ inline OutIt print_cdata_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
+ {
+ assert(node->type() == node_cdata);
+ if (!(flags & print_no_indenting))
+ out = fill_chars(out, indent, Ch('\t'));
+ *out = Ch('<'); ++out;
+ *out = Ch('!'); ++out;
+ *out = Ch('['); ++out;
+ *out = Ch('C'); ++out;
+ *out = Ch('D'); ++out;
+ *out = Ch('A'); ++out;
+ *out = Ch('T'); ++out;
+ *out = Ch('A'); ++out;
+ *out = Ch('['); ++out;
+ out = copy_chars(node->value(), node->value() + node->value_size(), out);
+ *out = Ch(']'); ++out;
+ *out = Ch(']'); ++out;
+ *out = Ch('>'); ++out;
+ return out;
+ }
+
+ // Print element node
+ template<class OutIt, class Ch>
+ inline OutIt print_element_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
+ {
+ assert(node->type() == node_element);
+
+ // Print element name and attributes, if any
+ if (!(flags & print_no_indenting))
+ out = fill_chars(out, indent, Ch('\t'));
+ *out = Ch('<'), ++out;
+ out = copy_chars(node->name(), node->name() + node->name_size(), out);
+ out = print_attributes(out, node, flags);
+
+ // If node is childless
+ if (node->value_size() == 0 && !node->first_node())
+ {
+ // Print childless node tag ending
+ *out = Ch('/'), ++out;
+ *out = Ch('>'), ++out;
+ }
+ else
+ {
+ // Print normal node tag ending
+ *out = Ch('>'), ++out;
+
+ // Test if node contains a single data node only (and no other nodes)
+ xml_node<Ch> *child = node->first_node();
+ if (!child)
+ {
+ // If node has no children, only print its value without indenting
+ out = copy_and_expand_chars(node->value(), node->value() + node->value_size(), Ch(0), out);
+ }
+ else if (child->next_sibling() == 0 && child->type() == node_data)
+ {
+ // If node has a sole data child, only print its value without indenting
+ out = copy_and_expand_chars(child->value(), child->value() + child->value_size(), Ch(0), out);
+ }
+ else
+ {
+ // Print all children with full indenting
+ if (!(flags & print_no_indenting))
+ *out = Ch('\n'), ++out;
+ out = print_children(out, node, flags, indent + 1);
+ if (!(flags & print_no_indenting))
+ out = fill_chars(out, indent, Ch('\t'));
+ }
+
+ // Print node end
+ *out = Ch('<'), ++out;
+ *out = Ch('/'), ++out;
+ out = copy_chars(node->name(), node->name() + node->name_size(), out);
+ *out = Ch('>'), ++out;
+ }
+ return out;
+ }
+
+ // Print declaration node
+ template<class OutIt, class Ch>
+ inline OutIt print_declaration_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
+ {
+ // Print declaration start
+ if (!(flags & print_no_indenting))
+ out = fill_chars(out, indent, Ch('\t'));
+ *out = Ch('<'), ++out;
+ *out = Ch('?'), ++out;
+ *out = Ch('x'), ++out;
+ *out = Ch('m'), ++out;
+ *out = Ch('l'), ++out;
+
+ // Print attributes
+ out = print_attributes(out, node, flags);
+
+ // Print declaration end
+ *out = Ch('?'), ++out;
+ *out = Ch('>'), ++out;
+
+ return out;
+ }
+
+ // Print comment node
+ template<class OutIt, class Ch>
+ inline OutIt print_comment_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
+ {
+ assert(node->type() == node_comment);
+ if (!(flags & print_no_indenting))
+ out = fill_chars(out, indent, Ch('\t'));
+ *out = Ch('<'), ++out;
+ *out = Ch('!'), ++out;
+ *out = Ch('-'), ++out;
+ *out = Ch('-'), ++out;
+ out = copy_chars(node->value(), node->value() + node->value_size(), out);
+ *out = Ch('-'), ++out;
+ *out = Ch('-'), ++out;
+ *out = Ch('>'), ++out;
+ return out;
+ }
+
+ // Print doctype node
+ template<class OutIt, class Ch>
+ inline OutIt print_doctype_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
+ {
+ assert(node->type() == node_doctype);
+ if (!(flags & print_no_indenting))
+ out = fill_chars(out, indent, Ch('\t'));
+ *out = Ch('<'), ++out;
+ *out = Ch('!'), ++out;
+ *out = Ch('D'), ++out;
+ *out = Ch('O'), ++out;
+ *out = Ch('C'), ++out;
+ *out = Ch('T'), ++out;
+ *out = Ch('Y'), ++out;
+ *out = Ch('P'), ++out;
+ *out = Ch('E'), ++out;
+ *out = Ch(' '), ++out;
+ out = copy_chars(node->value(), node->value() + node->value_size(), out);
+ *out = Ch('>'), ++out;
+ return out;
+ }
+
+ // Print pi node
+ template<class OutIt, class Ch>
+ inline OutIt print_pi_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
+ {
+ assert(node->type() == node_pi);
+ if (!(flags & print_no_indenting))
+ out = fill_chars(out, indent, Ch('\t'));
+ *out = Ch('<'), ++out;
+ *out = Ch('?'), ++out;
+ out = copy_chars(node->name(), node->name() + node->name_size(), out);
+ *out = Ch(' '), ++out;
+ out = copy_chars(node->value(), node->value() + node->value_size(), out);
+ *out = Ch('?'), ++out;
+ *out = Ch('>'), ++out;
+ return out;
+ }
+
+ }
+ //! \endcond
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Printing
+
+ //! Prints XML to given output iterator.
+ //! \param out Output iterator to print to.
+ //! \param node Node to be printed. Pass xml_document to print entire document.
+ //! \param flags Flags controlling how XML is printed.
+ //! \return Output iterator pointing to position immediately after last character of printed text.
+ template<class OutIt, class Ch>
+ inline OutIt print(OutIt out, const xml_node<Ch> &node, int flags = 0)
+ {
+ return internal::print_node(out, &node, flags, 0);
+ }
+
+#ifndef RAPIDXML_NO_STREAMS
+
+ //! Prints XML to given output stream.
+ //! \param out Output stream to print to.
+ //! \param node Node to be printed. Pass xml_document to print entire document.
+ //! \param flags Flags controlling how XML is printed.
+ //! \return Output stream.
+ template<class Ch>
+ inline std::basic_ostream<Ch> &print(std::basic_ostream<Ch> &out, const xml_node<Ch> &node, int flags = 0)
+ {
+ print(std::ostream_iterator<Ch>(out), node, flags);
+ return out;
+ }
+
+ //! Prints formatted XML to given output stream. Uses default printing flags. Use print() function to customize printing process.
+ //! \param out Output stream to print to.
+ //! \param node Node to be printed.
+ //! \return Output stream.
+ template<class Ch>
+ inline std::basic_ostream<Ch> &operator <<(std::basic_ostream<Ch> &out, const xml_node<Ch> &node)
+ {
+ return print(out, node);
+ }
+
+#endif
+
+}
+
+#endif
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_utils.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_utils.hpp
new file mode 100644
index 000000000..37c29535f
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/rapidxml_utils.hpp
@@ -0,0 +1,122 @@
+#ifndef RAPIDXML_UTILS_HPP_INCLUDED
+#define RAPIDXML_UTILS_HPP_INCLUDED
+
+// Copyright (C) 2006, 2009 Marcin Kalicinski
+// Version 1.13
+// Revision $DateTime: 2009/05/13 01:46:17 $
+//! \file rapidxml_utils.hpp This file contains high-level rapidxml utilities that can be useful
+//! in certain simple scenarios. They should probably not be used if maximizing performance is the main objective.
+
+#include "rapidxml.hpp"
+#include <vector>
+#include <string>
+#include <fstream>
+#include <stdexcept>
+
+namespace rapidxml
+{
+
+ //! Represents data loaded from a file
+ template<class Ch = char>
+ class file
+ {
+
+ public:
+
+ //! Loads file into the memory. Data will be automatically destroyed by the destructor.
+ //! \param filename Filename to load.
+ file(const char *filename)
+ {
+ using namespace std;
+
+ // Open stream
+ basic_ifstream<Ch> stream(filename, ios::binary);
+ if (!stream)
+ throw runtime_error(string("cannot open file ") + filename);
+ stream.unsetf(ios::skipws);
+
+ // Determine stream size
+ stream.seekg(0, ios::end);
+ size_t size = stream.tellg();
+ stream.seekg(0);
+
+ // Load data and add terminating 0
+ m_data.resize(size + 1);
+ stream.read(&m_data.front(), static_cast<streamsize>(size));
+ m_data[size] = 0;
+ }
+
+ //! Loads file into the memory. Data will be automatically destroyed by the destructor
+ //! \param stream Stream to load from
+ file(std::basic_istream<Ch> &stream)
+ {
+ using namespace std;
+
+ // Load data and add terminating 0
+ stream.unsetf(ios::skipws);
+ m_data.assign(istreambuf_iterator<Ch>(stream), istreambuf_iterator<Ch>());
+ if (stream.fail() || stream.bad())
+ throw runtime_error("error reading stream");
+ m_data.push_back(0);
+ }
+
+ //! Gets file data.
+ //! \return Pointer to data of file.
+ Ch *data()
+ {
+ return &m_data.front();
+ }
+
+ //! Gets file data.
+ //! \return Pointer to data of file.
+ const Ch *data() const
+ {
+ return &m_data.front();
+ }
+
+ //! Gets file data size.
+ //! \return Size of file data, in characters.
+ std::size_t size() const
+ {
+ return m_data.size();
+ }
+
+ private:
+
+ std::vector<Ch> m_data; // File data
+
+ };
+
+ //! Counts children of node. Time complexity is O(n).
+ //! \return Number of children of node
+ template<class Ch>
+ inline std::size_t count_children(xml_node<Ch> *node)
+ {
+ xml_node<Ch> *child = node->first_node();
+ std::size_t count = 0;
+ while (child)
+ {
+ ++count;
+ child = child->next_sibling();
+ }
+ return count;
+ }
+
+ //! Counts attributes of node. Time complexity is O(n).
+ //! \return Number of attributes of node
+ template<class Ch>
+ inline std::size_t count_attributes(xml_node<Ch> *node)
+ {
+ xml_attribute<Ch> *attr = node->first_attribute();
+ std::size_t count = 0;
+ while (attr)
+ {
+ ++count;
+ attr = attr->next_attribute();
+ }
+ return count;
+ }
+
+}
+
+#endif
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/readme.txt b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/readme.txt
new file mode 100644
index 000000000..9d473a4bc
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/readme.txt
@@ -0,0 +1,5 @@
+Download RapidXml from here
+http://rapidxml.sourceforge.net/
+
+and put the contents in the folder rapidxml-1.13
+(adapt version if necessary)
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/deployment_path.vsprops b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/deployment_path.vsprops
new file mode 100644
index 000000000..02164b367
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/deployment_path.vsprops
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="deployment_path"
+ >
+ <UserMacro
+ Name="DEPLOYMENT_PATH"
+ Value="c:\software"
+ PerformEnvironmentSet="true"
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp
new file mode 100644
index 000000000..04d50dcfa
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp
@@ -0,0 +1,188 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// 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)
+//
+//
+#ifndef DOXYGEN_ELEMENTS_HPP
+#define DOXYGEN_ELEMENTS_HPP
+
+
+#include <string>
+#include <vector>
+
+
+enum markup_type { markup_default, markup_synopsis };
+enum markup_order_type { markup_any, markup_before, markup_after };
+
+// TODO: rename, not all are functions
+enum function_type
+{
+ function_unknown,
+ function_define,
+ function_constructor_destructor,
+ function_member,
+ function_free,
+};
+
+struct base_element
+{
+ std::string name;
+ std::string brief_description;
+
+ bool skip;
+
+ std::string id;
+
+ base_element(std::string const& n = "")
+ : name(n)
+ , skip(false)
+ {}
+};
+
+
+// contains (template)parameter
+struct parameter : public base_element
+{
+ std::string type;
+ std::string default_value; // for template parameters
+ std::string fulltype; // post-processed
+ std::string fulltype_without_links;
+};
+
+struct enumeration_value : public base_element
+{
+ std::string initializer;
+};
+
+
+
+struct markup
+{
+ std::string value;
+ markup_order_type order;
+ markup_type type;
+
+ markup(std::string const& v = "")
+ : value(v)
+ , order(markup_any)
+ , type(markup_default)
+ {
+ init();
+ }
+
+ markup(markup_order_type o, markup_type t, std::string const& v = "")
+ : value(v)
+ , order(o)
+ , type(t)
+ {
+ init();
+ }
+
+ void init()
+ {
+ boost::trim(value);
+ boost::replace_all(value, "\\*", "*");
+ }
+};
+
+struct paragraph
+{
+ std::string title;
+ std::string text;
+};
+
+// Base of a class/struct, function, define
+struct element : public base_element
+{
+ std::string detailed_description;
+ std::string location;
+ int line; // To sort - Doxygen changes order - we change it back
+
+ // QBK-includes
+ // Filled with e.g.: \qbk([include reference/myqbk.qbk]}
+ std::vector<markup> qbk_markup;
+
+ // To distinguish overloads: unary, binary etc,
+ // Filled with: \qbk{distinguish,<A discerning description>}
+ std::string additional_description;
+
+ std::vector<parameter> template_parameters;
+ std::vector<parameter> parameters;
+
+ std::vector<paragraph> paragraphs;
+ std::string warning;
+ std::string note;
+
+ element()
+ : line(0)
+ {}
+};
+
+
+struct function : public element
+{
+ function_type type;
+ std::string definition, argsstring;
+ std::string return_type, return_description;
+ std::string precondition;
+
+ std::string return_type_without_links;
+ bool is_static, is_const, is_explicit, is_virtual;
+
+ bool unique;
+
+ function()
+ : type(function_unknown)
+ , unique(true)
+ , is_static(false), is_const(false), is_explicit(false), is_virtual(false)
+ {}
+
+};
+
+
+struct enumeration : public element
+{
+ std::vector<enumeration_value> enumeration_values;
+};
+
+
+struct base_class
+{
+ std::string name;
+ std::string derivation; // "prot" element
+ std::string virtuality; // "virt" element
+};
+
+struct class_or_struct : public element
+{
+ bool is_class; // true if class, false if struct
+ std::string name, fullname;
+ std::vector<function> functions;
+
+ std::vector<base_element> typedefs;
+ std::vector<base_element> variables;
+
+ std::vector<base_class> base_classes;
+};
+
+
+struct documentation
+{
+ std::string group_id;
+ std::string group_title;
+
+ // Only one expected (no grouping)
+ class_or_struct cos;
+
+ // There can be many of them (in groups):
+ std::vector<function> functions;
+ std::vector<function> defines;
+ std::vector<enumeration> enumerations;
+};
+
+
+#endif // DOXYGEN_ELEMENTS_HPP
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp
new file mode 100644
index 000000000..87ac68e07
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.cpp
@@ -0,0 +1,243 @@
+// doxml2qbk (developed in the context of Boost.Geometry documentation)
+//
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// 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)
+//
+//
+// Barend Gehrels, Aug 1, 2010
+// In continuation of the QuickBook documentation of Boost.Geometry
+//
+// Converts XML files created by Doxygen to Quickbook
+// Notes:
+// - basically generic, but implemented with Boost.Geometry in mind
+// - makes use of some specific XML elements, which can be created by Doxygen
+// using /xmlonly
+// currently this is the element <qbk.example> which will make a reference
+// to an example.
+// - currently still in draft
+
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <vector>
+#include <map>
+
+#include <boost/foreach.hpp>
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/split.hpp>
+
+
+#include <boost/program_options.hpp>
+
+#include <rapidxml.hpp>
+
+#include <configuration.hpp>
+#include <file_to_string.hpp>
+#include <doxygen_elements.hpp>
+#include <doxygen_xml_parser.hpp>
+#include <parameter_predicates.hpp>
+#include <quickbook_output.hpp>
+#include <rapidxml_util.hpp>
+
+static const std::string version = "1.1.0";
+
+inline std::string program_description(bool decorated)
+{
+ std::string result;
+ if (decorated)
+ {
+ result = "=== ";
+ }
+ result += "doxygen_xml2qbk ";
+ result += version;
+ if (decorated)
+ {
+ result += " ===";
+ }
+ return result;
+}
+
+
+int main(int argc, char** argv)
+{
+ std::string filename;
+ try
+ {
+ configuration config;
+ std::string copyright_filename;
+ std::string output_style;
+
+ // Read/get configuration
+ {
+ namespace po = boost::program_options;
+ po::options_description description;
+
+ std::string convenience_headers;
+
+ description.add_options()
+ ("help", "Help message")
+ ("version", "Version description")
+ ("xml", po::value<std::string>(&filename),
+ "Name of XML file written by Doxygen")
+ ("start_include", po::value<std::string>(&config.start_include),
+ "Start include")
+ ("convenience_header_path", po::value<std::string>(&config.convenience_header_path),
+ "Convenience header path")
+ ("convenience_headers", po::value<std::string>(&convenience_headers),
+ "Convenience header(s) (comma-separated)")
+ ("skip_namespace", po::value<std::string>(&config.skip_namespace),
+ "Namespace to skip (e.g. boost::mylib::)")
+ ("copyright", po::value<std::string>(&copyright_filename),
+ "Name of QBK file including (commented) copyright and license")
+
+ ("output_style", po::value<std::string>(&output_style),
+ "Docbook output style. Available values: 'alt'")
+ ;
+
+ po::variables_map varmap;
+
+ if (argc == 2 && ! boost::starts_with(argv[1], "--"))
+ {
+ // (especially for debugging) options might go into an INI file
+ std::ifstream config_file (argv[1], std::ifstream::in);
+ po::store(po::parse_config_file(config_file, description), varmap);
+ }
+ else
+ {
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ }
+
+ po::notify(varmap);
+
+ if (varmap.count("version"))
+ {
+ std::cout << version << std::endl;
+ return 0;
+ }
+ else if (varmap.count("help"))
+ {
+ std::cout
+ << program_description(true) << std::endl
+ << "Available options:" << std::endl
+ << description << std::endl;
+ return 0;
+ }
+ else if (filename.empty())
+ {
+ std::cout
+ << program_description(true) << std::endl
+ << "Allowed options:" << std::endl
+ << description << std::endl;
+ return 1;
+ }
+
+ // Split CSV with headerfile names into configuration
+ if (! convenience_headers.empty())
+ {
+ boost::split(config.convenience_headers, convenience_headers, boost::is_any_of(","));
+ }
+ }
+
+ // Set output style
+ if ( "alt" == output_style )
+ config.output_style = configuration::alt;
+
+ // Read files into strings
+ std::string xml_string = file_to_string(filename);
+ std::string license = copyright_filename.empty()
+ ? ""
+ : file_to_string(copyright_filename);
+
+ // Parse the XML outputted by Doxygen
+ xml_doc xml(xml_string.c_str());
+
+ documentation doc;
+ parse(xml.first_node(), config, doc);
+
+ // Check for duplicate function names
+ for (std::size_t i = 0; i < doc.functions.size(); i++)
+ {
+ function& f1 = doc.functions[i];
+ for (std::size_t j = i + 1; j < doc.functions.size(); j++)
+ {
+ function& f2 = doc.functions[j];
+
+ if (f1.name == f2.name)
+ {
+ // It is not a unique function, so e.g. an overload,
+ // so a description must distinguish them.
+ // Difference is either the number of parameters, or a const / non-const version
+ // Use the "\qbk{distinguish,with strategy}" in the source code to distinguish
+ f1.unique = false;
+ f2.unique = false;
+ }
+ }
+ }
+
+
+ // Write copyright/license (keep inspect silent)
+ if (! license.empty())
+ {
+ std::cout << license << std::endl;
+ }
+
+ // Write warning comment
+ std::cout
+ << "[/ Generated by " << program_description(false) << ", don't change, will be overwritten automatically]" << std::endl
+ << "[/ Generated from " << filename << "]" << std::endl;
+
+ if ( configuration::def == config.output_style )
+ {
+ // Write the rest: functions, defines, classes or structs
+ BOOST_FOREACH(function const& f, doc.functions)
+ {
+ quickbook_output(f, config, std::cout);
+ }
+ BOOST_FOREACH(function const& f, doc.defines)
+ {
+ quickbook_output(f, config, std::cout);
+ }
+ BOOST_FOREACH(enumeration const& e, doc.enumerations)
+ {
+ quickbook_output(e, config, std::cout);
+ }
+
+ if (! doc.cos.name.empty())
+ {
+ std::sort(doc.cos.functions.begin(), doc.cos.functions.end(), sort_on_line<function>());
+ quickbook_output(doc.cos, config, std::cout);
+ }
+ }
+ else if ( configuration::alt == config.output_style )
+ {
+ if (! doc.cos.name.empty())
+ {
+ std::sort(doc.cos.functions.begin(), doc.cos.functions.end(), sort_on_line<function>());
+ quickbook_output_alt(doc.cos, config, std::cout);
+ }
+
+ if ( !doc.group_id.empty() )
+ quickbook_output_alt(doc, config, std::cout);
+ }
+ }
+ catch(std::exception const& e)
+ {
+ std::cerr << "Exception in doxygen_xml2qbk: " << std::endl
+ << " Message: " << e.what() << std::endl
+ << " File: " << filename << std::endl
+ << " Type: " << typeid(e).name() << std::endl
+ << std::endl;
+ return 1;
+ }
+ catch(...)
+ {
+ std::cerr << "Unknown exception in doxygen_xml2qbk"
+ << std::endl;
+ return 1;
+ }
+ return 0;
+}
+
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.sln b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.sln
new file mode 100644
index 000000000..5f1f115ea
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_xml2qbk", "doxygen_xml2qbk.vcproj", "{81BDA0FD-D3BC-4693-A389-D3ABFAD19214}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {81BDA0FD-D3BC-4693-A389-D3ABFAD19214}.Debug|Win32.ActiveCfg = Debug|Win32
+ {81BDA0FD-D3BC-4693-A389-D3ABFAD19214}.Debug|Win32.Build.0 = Debug|Win32
+ {81BDA0FD-D3BC-4693-A389-D3ABFAD19214}.Release|Win32.ActiveCfg = Release|Win32
+ {81BDA0FD-D3BC-4693-A389-D3ABFAD19214}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.vcproj b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.vcproj
new file mode 100644
index 000000000..266b8e2f3
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.vcproj
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="doxygen_xml2qbk"
+ ProjectGUID="{81BDA0FD-D3BC-4693-A389-D3ABFAD19214}"
+ RootNamespace="doxygen_xml2qbk"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops;.\deployment_path.vsprops"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;contrib/rapidxml-1.13"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;BOOST_ALL_NO_LIB"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops;.\deployment_path.vsprops"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;contrib/rapidxml-1.13"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy $(OutDir)\doxygen_xml2qbk.exe $(DEPLOYMENT_PATH)"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\doxygen_xml2qbk.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp
new file mode 100644
index 000000000..0a98f4296
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp
@@ -0,0 +1,740 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// 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)
+//
+//
+#ifndef DOXYGEN_XML_PARSER_HPP
+#define DOXYGEN_XML_PARSER_HPP
+
+
+#include <string>
+#include <vector>
+
+#include <boost/algorithm/string.hpp>
+
+#include <rapidxml_util.hpp>
+#include <doxygen_elements.hpp>
+#include <parameter_predicates.hpp>
+#include <configuration.hpp>
+
+
+inline std::string keep_after(std::string const& input, std::string const& sig)
+{
+ std::size_t pos = input.rfind(sig);
+ if (pos != std::string::npos)
+ {
+ std::string copy = input.substr(pos + sig.length());
+ return copy;
+ }
+ return input;
+}
+
+
+static inline void add_or_set(std::vector<parameter>& parameters, parameter const& p)
+{
+ std::vector<parameter>::iterator it = std::find_if(parameters.begin(), parameters.end(), par_by_name(p.name));
+ if (it != parameters.end())
+ {
+ if (it->brief_description.empty()) it->brief_description = p.brief_description;
+ if (it->type.empty()) it->type = p.type;
+ if (it->fulltype.empty()) it->fulltype = p.fulltype;
+ if (it->default_value.empty()) it->default_value = p.default_value;
+ }
+ else
+ {
+ parameters.push_back(p);
+ }
+}
+
+
+
+
+/// Parses a "para" element
+/*
+This is used for different purposes within Doxygen.
+- Either a detailed description, possibly containing several sections (para's)
+ -> so parse next siblings
+- Or a detailed description also containing qbk records
+
+So we have to list explicitly either where to recurse, or where not to...
+
+*/
+
+// Type used to store parsing state. It indicates if QBK formatting block was opened - [*...], [^...], etc.
+enum text_block
+{
+ not_in_block,
+ in_code_block,
+ in_block
+};
+
+static void parse_para(rapidxml::xml_node<>* node, configuration const& config, std::string& contents, bool& skip, bool first = true, text_block tb = not_in_block)
+{
+ if (node != NULL)
+ {
+ if (node->type() == rapidxml::node_element)
+ {
+ //std::cout << "ELEMENT: " << node->name() << "=" << node->value() << std::endl;
+ std::string name = node->name();
+ if ( boost::equals(name, "itemizedlist") )
+ {
+ contents += "\n\n";
+ parse_para(node->first_node(), config, contents, skip, true, tb);
+ contents += "\n";
+ parse_para(node->next_sibling(), config, contents, skip, true, tb);
+ return;
+ }
+ else if ( boost::equals(name, "listitem") )
+ {
+ contents += "* ";
+ parse_para(node->first_node(), config, contents, skip, true, tb);
+ contents += "\n";
+ parse_para(node->next_sibling(), config, contents, skip, true, tb);
+ return;
+ }
+ else if ( boost::equals(name, "verbatim") )
+ {
+ contents += "\n``\n";
+ parse_para(node->first_node(), config, contents, skip, false, tb);
+ contents += "``\n";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ return;
+ }
+ else if ( boost::equals(name, "bold") )
+ {
+ contents += "[*";
+ parse_para(node->first_node(), config, contents, skip, false, in_block);
+ contents += "]";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ return;
+ }
+ else if ( boost::equals(name, "emphasis") )
+ {
+ contents += "['";
+ parse_para(node->first_node(), config, contents, skip, false, in_block);
+ contents += "]";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ return;
+ }
+ else if ( boost::equals(name, "computeroutput") )
+ {
+ contents += "[^";
+ parse_para(node->first_node(), config, contents, skip, false, tb == in_block ? in_block : in_code_block);
+ contents += "]";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ return;
+ }
+ else if ( boost::equals(name, "ref") )
+ {
+ // If alternative output is used - insert links
+ if ( configuration::alt == config.output_style )
+ {
+ std::string refid = node->first_attribute("refid")->value();
+ if ( !refid.empty() )
+ {
+ contents += std::string("[link ") + refid + " ";
+ parse_para(node->first_node(), config, contents, skip, false, in_block);
+ contents += "]";
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ return;
+ }
+ }
+ }
+ else if (! (
+ (boost::equals(name, "para") && first)
+ || boost::equals(name, "defval")
+ || boost::equals(name, "linebreak")
+ ))
+ {
+ return;
+ }
+ }
+ else if (node->type() == rapidxml::node_data)
+ {
+ std::string str = node->value();
+ if ( tb == in_block )
+ {
+ boost::replace_all(str, "\\", "\\\\");
+ boost::replace_all(str, "[", "\\[");
+ boost::replace_all(str, "]", "\\]");
+ }
+ else if ( tb == in_code_block )
+ {
+ if ( str.find('`') == std::string::npos )
+ str = std::string("`") + str + "`";
+ }
+ contents += str;
+ //std::cout << "DATA: " << node->name() << "=" << node->value() << std::endl;
+ }
+ else
+ {
+ //std::cout << "OTHER: " << node->name() << "=" << node->value() << std::endl;
+ }
+
+ parse_para(node->first_node(), config, contents, skip, false, tb);
+ parse_para(node->next_sibling(), config, contents, skip, false, tb);
+ }
+}
+
+
+static void parse_parameter(rapidxml::xml_node<>* node, configuration const& config, parameter& p)
+{
+ // #define: <param><defname>Point</defname></param>
+ // template: <param><type>typename</type><declname>CoordinateType</declname><defname>CoordinateType</defname></param>
+ // template with default: <param><type>typename</type><declname>CoordinateSystem</declname><defname>CoordinateSystem</defname><defval><ref ....>cs::cartesian</ref></defval></param>
+ // with enum: <type><ref refid="group__enum_1ga7d33eca9a5389952bdf719972eb802b6" kindref="member">closure_selector</ref></type>
+ if (node != NULL)
+ {
+ std::string name = node->name();
+ if (name == "type")
+ {
+ get_contents(node->first_node(), p.fulltype);
+ p.type = p.fulltype;
+ boost::replace_all(p.type, " const", "");
+ boost::trim(p.type);
+ boost::replace_all(p.type, "&", "");
+ boost::replace_all(p.type, "*", "");
+ boost::trim(p.type);
+
+ // If alt output is used retrieve type with QBK links
+ if ( configuration::alt == config.output_style )
+ {
+ p.fulltype_without_links = p.fulltype;
+ p.fulltype.clear();
+ parse_para(node->first_node(), config, p.fulltype, p.skip);
+ }
+ }
+ else if (name == "declname") p.name = node->value();
+ else if (name == "parametername") p.name = node->value();
+ else if (name == "defname") p.name = node->value();
+ else if (name == "defval")
+ {
+ parse_para(node, config, p.default_value, p.skip);
+ }
+ else if (name == "para")
+ {
+ parse_para(node, config, p.brief_description, p.skip);
+ }
+
+ parse_parameter(node->first_node(), config, p);
+ parse_parameter(node->next_sibling(), config, p);
+ }
+}
+
+static void parse_enumeration_value(rapidxml::xml_node<>* node, configuration const& config, enumeration_value& value)
+{
+ // <enumvalue><name>green</name><initializer> 2</initializer>
+ // <briefdescription><para>...</para></briefdescription>
+ // <detaileddescription><para>...</para></detaileddescription>
+ // </enumvalue>
+ if (node != NULL)
+ {
+ std::string node_name = node->name();
+
+ if (node_name == "name") value.name = node->value();
+ else if (node_name == "para")
+ {
+ // Parses both brief AND detailed into this description
+ parse_para(node, config, value.brief_description, value.skip);
+ }
+ else if (node_name == "initializer")
+ {
+ value.initializer = node->value();
+ }
+
+ parse_enumeration_value(node->first_node(), config, value);
+ parse_enumeration_value(node->next_sibling(), config, value);
+ }
+}
+
+// Definition is a function or a class/struct
+template <typename Parameters>
+static void parse_parameter_list(rapidxml::xml_node<>* node, configuration const& config, Parameters& parameters)
+{
+ if (node != NULL)
+ {
+ std::string name = node->name();
+
+ if (name == "parameteritem")
+ {
+ parameter p;
+ parse_parameter(node->first_node(), config, p);
+ if (! p.name.empty())
+ {
+ // Copy its description
+ std::vector<parameter>::iterator it = std::find_if(parameters.begin(),
+ parameters.end(), par_by_name(p.name));
+ if (it != parameters.end())
+ {
+ it->brief_description = p.brief_description;
+ }
+ else
+ {
+ parameters.push_back(p);
+ }
+ }
+ }
+ else if (name == "param")
+ {
+ // Element of 'templateparamlist.param (.type,.declname,.defname)'
+ parameter p;
+ parse_parameter(node->first_node(), config, p);
+
+ // Doxygen handles templateparamlist param's differently:
+ //
+ // Case 1:
+ // <param><type>typename T</type></param>
+ // -> no name, assign type to name, replace typename
+ //
+ // Case 2:
+ // <type>typename</type><declname>T</declname><defname>T</defname>
+ // -> set full type
+ if (p.name.empty())
+ {
+ // Case 1
+ p.name = p.type;
+ boost::replace_all(p.name, "typename", "");
+ boost::trim(p.name);
+ }
+ else
+ {
+ // Case 2
+ p.fulltype = p.type + " " + p.name;
+ }
+
+ add_or_set(parameters, p);
+ }
+
+ parse_parameter_list(node->first_node(), config, parameters);
+ parse_parameter_list(node->next_sibling(), config, parameters);
+ }
+}
+
+static void copy_string_property(std::string const& source, std::string& target)
+{
+ if (target.empty())
+ {
+ target = source;
+ }
+}
+
+
+template <typename Parameters>
+static void copy_parameter_properties(parameter const& source, Parameters& target)
+{
+ BOOST_FOREACH(parameter& t, target)
+ {
+ if (source.name == t.name)
+ {
+ t.skip = source.skip;
+ copy_string_property(source.brief_description, t.brief_description);
+ copy_string_property(source.type, t.type);
+ copy_string_property(source.default_value, t.default_value);
+ copy_string_property(source.fulltype, t.fulltype);
+
+ return;
+ }
+ }
+ // If not found, write a warning
+ std::cerr << "Parameter not found: " << source.name << std::endl;
+}
+
+
+template <typename Parameters>
+static void copy_parameters_properties(Parameters const& source, Parameters& target)
+{
+ BOOST_FOREACH(parameter const& s, source)
+ {
+ copy_parameter_properties(s, target);
+ }
+}
+
+
+
+template <typename Element>
+static void parse_element(rapidxml::xml_node<>* node, configuration const& config, std::string const& parent, Element& el)
+{
+ if (node != NULL)
+ {
+ std::string name = node->name();
+ std::string full = parent + "." + name;
+
+ if (full == ".briefdescription.para")
+ {
+ parse_para(node, config, el.brief_description, el.skip);
+ }
+ else if (full == ".detaileddescription.para")
+ {
+ std::string para;
+ parse_para(node, config, para, el.skip);
+ if (!para.empty() && !el.detailed_description.empty())
+ {
+ el.detailed_description += "\n\n";
+ }
+ el.detailed_description += para;
+ }
+ else if (full == ".location")
+ {
+ std::string loc = get_attribute(node, "file");
+ // Location of (header)file. It is a FULL path, so find the start
+ // and strip the rest
+ std::size_t pos = loc.rfind(config.start_include);
+ if (pos != std::string::npos)
+ {
+ loc = loc.substr(pos);
+ }
+ el.location = loc;
+ el.line = atol(get_attribute(node, "line").c_str());
+ }
+ else if (full == ".detaileddescription.para.qbk")
+ {
+ el.qbk_markup.push_back(markup(node->value()));
+ }
+ else if (full == ".detaileddescription.para.qbk.after.synopsis")
+ {
+ el.qbk_markup.push_back(markup(markup_after, markup_synopsis, node->value()));
+ }
+ else if (full == ".detaileddescription.para.qbk.before.synopsis")
+ {
+ el.qbk_markup.push_back(markup(markup_before, markup_synopsis, node->value()));
+ }
+ else if (full == ".detaileddescription.para.qbk.distinguish")
+ {
+ el.additional_description = node->value();
+ boost::trim(el.additional_description);
+ }
+ else if (full == ".templateparamlist")
+ {
+ parse_parameter_list(node->first_node(), config, el.template_parameters);
+ }
+ else if (full == ".detaileddescription.para.parameterlist")
+ {
+ std::string kind = get_attribute(node, "kind");
+ if (kind == "param")
+ {
+ // Parse parameters and their descriptions.
+ // NOTE: they are listed here, but the order might not be the order in the function call
+ std::vector<parameter> parameters;
+ parse_parameter_list(node->first_node(), config, parameters);
+ copy_parameters_properties(parameters, el.parameters);
+ }
+ else if (kind == "templateparam")
+ {
+ parse_parameter_list(node->first_node(), config, el.template_parameters);
+ }
+ }
+ else if (full == ".detaileddescription.para.simplesect")
+ {
+ std::string kind = get_attribute(node, "kind");
+ if (kind == "par")
+ {
+ paragraph p;
+
+ rapidxml::xml_node<> * title_node = node->first_node("title");
+ if ( title_node )
+ p.title = title_node->value();
+
+ parse_para(node->first_node("para"), config, p.text, el.skip);
+
+ el.paragraphs.push_back(p);
+ }
+ else if (kind == "warning")
+ {
+ parse_para(node->first_node("para"), config, el.warning, el.skip);
+ }
+ else if (kind == "note")
+ {
+ parse_para(node->first_node("para"), config, el.note, el.skip);
+ }
+ }
+ else if (full == ".param")
+ {
+ // Parse one parameter, and add it to el.parameters
+ parameter p;
+ parse_parameter(node->first_node(), config, p);
+ el.parameters.push_back(p);
+ }
+
+
+ parse_element(node->first_node(), config, full, el);
+ parse_element(node->next_sibling(), config, parent, el);
+ }
+}
+
+static void parse_function(rapidxml::xml_node<>* node, configuration const& config, std::string const& parent, function& f)
+{
+ if (node != NULL)
+ {
+ std::string name = node->name();
+ std::string full = parent + "." + name;
+
+ if (full == ".name") f.name = node->value();
+ else if (full == ".argsstring") f.argsstring = node->value();
+ else if (full == ".definition")
+ {
+ f.definition = node->value();
+ if (! config.skip_namespace.empty())
+ {
+ boost::replace_all(f.definition, config.skip_namespace, "");
+ }
+ }
+ else if (full == ".param")
+ {
+ parameter p;
+ parse_parameter(node->first_node(), config, p);
+ add_or_set(f.parameters, p);
+ }
+ else if (full == ".type")
+ {
+ get_contents(node->first_node(), f.return_type);
+
+ // If alt output is used, retrieve return type with links
+ if ( configuration::alt == config.output_style )
+ {
+ f.return_type_without_links = f.return_type;
+ bool dummy_skip;
+ f.return_type.clear();
+ parse_para(node->first_node(), config, f.return_type, dummy_skip);
+ }
+ }
+ else if (full == ".detaileddescription.para.simplesect")
+ {
+ std::string kind = get_attribute(node, "kind");
+ if (kind == "return")
+ {
+ parse_para(node->first_node(), config, f.return_description, f.skip);
+ }
+ /*else if (kind == "param")
+ {
+ get_contents(node->first_node(), f.paragraphs);
+ }*/
+ else if (kind == "pre")
+ {
+ parse_para(node->first_node(), config, f.precondition, f.skip);
+ }
+ }
+ else if (full == ".detaileddescription.para.image")
+ {
+ }
+
+ parse_function(node->first_node(), config, full, f);
+ parse_function(node->next_sibling(), config, parent, f);
+ }
+}
+
+static void parse_enumeration(rapidxml::xml_node<>* node, configuration const& config, std::string const& parent, enumeration& e)
+{
+ if (node != NULL)
+ {
+ std::string name = node->name();
+ std::string full = parent + "." + name;
+
+ if (full == ".name") e.name = node->value();
+ else if (full == ".enumvalue")
+ {
+ enumeration_value value;
+ parse_enumeration_value(node->first_node(), config, value);
+ e.enumeration_values.push_back(value);
+ }
+
+ parse_enumeration(node->first_node(), config, full, e);
+ parse_enumeration(node->next_sibling(), config, parent, e);
+ }
+}
+
+
+static std::string parse_named_node(rapidxml::xml_node<>* node, std::string const& look_for_name)
+{
+ if (node != NULL)
+ {
+ std::string node_name = node->name();
+ std::string contents;
+
+ if (boost::equals(node_name, look_for_name))
+ {
+ contents = node->value();
+ }
+
+ return contents
+ + parse_named_node(node->first_node(), look_for_name)
+ + parse_named_node(node->next_sibling(), look_for_name);
+ }
+ return "";
+}
+
+
+
+
+static void parse(rapidxml::xml_node<>* node, configuration const& config, documentation& doc, bool member = false)
+{
+ if (node != NULL)
+ {
+ bool recurse = false;
+ bool is_member = member;
+
+ std::string nodename = node->name();
+
+ if (nodename == "doxygen")
+ {
+ recurse = true;
+ }
+ else if (nodename == "sectiondef")
+ {
+ std::string kind = get_attribute(node, "kind");
+
+ if (kind == "func"
+ || kind == "define"
+ || kind == "enum"
+ )
+ {
+ recurse = true;
+ }
+ else if (boost::starts_with(kind, "public"))
+ {
+ recurse = true;
+ is_member = true;
+ }
+ }
+ else if (nodename == "compounddef")
+ {
+ std::string kind = get_attribute(node, "kind");
+ std::string id = get_attribute(node, "id");
+ if (kind == "group")
+ {
+ recurse = true;
+ doc.group_id = id;
+ rapidxml::xml_node<> * n = node->first_node("title");
+ if ( n )
+ doc.group_title = n->value();
+ }
+ else if (kind == "struct")
+ {
+ recurse = true;
+ doc.cos.is_class = false;
+ doc.cos.id = id;
+ parse_element(node->first_node(), config, "", doc.cos);
+ }
+ else if (kind == "class")
+ {
+ recurse = true;
+ doc.cos.is_class = true;
+ doc.cos.id = id;
+ parse_element(node->first_node(), config, "", doc.cos);
+ }
+ }
+ else if (nodename == "memberdef")
+ {
+ std::string kind = get_attribute(node, "kind");
+ std::string id = get_attribute(node, "id");
+
+ if (kind == "function")
+ {
+ function f;
+ f.id = id;
+ f.is_static = get_attribute(node, "static") == "yes" ? true : false;
+ f.is_const = get_attribute(node, "const") == "yes" ? true : false;
+ f.is_explicit = get_attribute(node, "explicit") == "yes" ? true : false;
+ f.is_virtual = get_attribute(node, "virt") == "virtual" ? true : false;
+
+ parse_element(node->first_node(), config, "", f);
+ parse_function(node->first_node(), config, "", f);
+
+ if (member)
+ {
+ bool c_or_d = boost::equals(f.name, doc.cos.name) ||
+ boost::equals(f.name, std::string("~") + doc.cos.name);
+
+ f.type = c_or_d
+ ? function_constructor_destructor
+ : function_member;
+ doc.cos.functions.push_back(f);
+ }
+ else
+ {
+ f.type = function_free;
+ doc.functions.push_back(f);
+ }
+ }
+ else if (kind == "define")
+ {
+ function f;
+ f.id = id;
+ f.type = function_define;
+ parse_element(node->first_node(), config, "", f);
+ parse_function(node->first_node(), config, "", f);
+ doc.defines.push_back(f);
+ }
+ else if (kind == "enum")
+ {
+ enumeration e;
+ e.id = id;
+ parse_element(node->first_node(), config, "", e);
+ parse_enumeration(node->first_node(), config, "", e);
+ doc.enumerations.push_back(e);
+ }
+ else if (kind == "typedef")
+ {
+ if (boost::equals(get_attribute(node, "prot"), "public"))
+ {
+ std::string name = parse_named_node(node->first_node(), "name");
+ doc.cos.typedefs.push_back(base_element(name));
+ doc.cos.typedefs.back().id = id;
+
+ element dummy;
+ parse_element(node->first_node(), config, "", dummy);
+ doc.cos.typedefs.back().brief_description = dummy.brief_description;
+ }
+ }
+ else if (kind == "variable")
+ {
+ if (boost::equals(get_attribute(node, "static"), "yes")
+ && boost::equals(get_attribute(node, "mutable"), "no")
+ && boost::equals(get_attribute(node, "prot"), "public"))
+ {
+ std::string name = parse_named_node(node->first_node(), "name");
+ doc.cos.variables.push_back(base_element(name));
+ doc.cos.variables.back().id = id;
+ }
+ }
+
+ }
+ else if (nodename == "compoundname")
+ {
+ std::string name = node->value();
+ if (name.find("::") != std::string::npos)
+ {
+ doc.cos.fullname = name;
+
+ // For a class, it should have "boost::something::" before
+ // set its name without namespace
+ doc.cos.name = keep_after(name, "::");
+ }
+ }
+ else if (nodename == "basecompoundref")
+ {
+ base_class bc;
+ bc.name = node->value();
+ bc.derivation = get_attribute(node, "prot");
+ bc.virtuality = get_attribute(node, "virt");
+ doc.cos.base_classes.push_back(bc);
+ }
+ else
+ {
+ //std::cout << nodename << " ignored." << std::endl;
+ }
+
+
+ if (recurse)
+ {
+ // First recurse into childnodes, then handle next siblings
+ parse(node->first_node(), config, doc, is_member);
+ }
+ parse(node->next_sibling(), config, doc, is_member);
+ }
+}
+
+#endif // DOXYGEN_XML_PARSER_HPP
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/file_to_string.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/file_to_string.hpp
new file mode 100644
index 000000000..5af013056
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/file_to_string.hpp
@@ -0,0 +1,36 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// 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)
+//
+//
+#ifndef FILE_TO_STRING_HPP
+#define FILE_TO_STRING_HPP
+
+
+#include <string>
+#include <fstream>
+
+
+inline std::string file_to_string(std::string const& filename)
+{
+ std::string result;
+
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ result += line + "\n";
+ }
+ }
+ return result;
+}
+
+
+#endif // FILE_TO_STRING_HPP
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/for_debugger.ini b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/for_debugger.ini
new file mode 100644
index 000000000..7849e8f66
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/for_debugger.ini
@@ -0,0 +1,13 @@
+# xml=../../../../doxy/doxygen_output/xml/classboost_1_1geometry_1_1model_1_1d2_1_1point__xy.xml
+# xml=../../../../doxy/doxygen_output/xml/classboost_1_1geometry_1_1model_1_1polygon.xml
+# xml=../../../../doxy/doxygen_output/xml/group__area.xml
+# xml=../../../../doxy/doxygen_output/xml/classboost_1_1geometry_1_1strategy_1_1distance_1_1pythagoras.xml
+# xml=../../../../doxy/doxygen_output/xml/group__get.xml
+
+xml=../../../../doxy/doxygen_output/xml/structboost_1_1geometry_1_1closeable__view.xml
+
+start_include=boost/geometry/
+convenience_header_path=../../../../../../../boost/geometry/
+convenience_headers=geometry.hpp,geometries/geometries.hpp,multi/multi.hpp
+skip_namespace=boost::geometry::
+
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp
new file mode 100644
index 000000000..8d58709fb
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/parameter_predicates.hpp
@@ -0,0 +1,61 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// 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)
+//
+//
+#ifndef PARAMETER_PREDICATES_HPP
+#define PARAMETER_PREDICATES_HPP
+
+
+#include <string>
+
+#include <doxygen_elements.hpp>
+
+
+// Predicate for std::find_if
+struct par_by_name
+{
+ par_by_name(std::string const& n)
+ : m_name(n)
+ {}
+
+ inline bool operator()(parameter const& p)
+ {
+ return p.name == m_name;
+ }
+private :
+ std::string m_name;
+};
+
+
+// Predicate for std::find_if
+struct par_by_type
+{
+ par_by_type(std::string const& n)
+ : m_type(n)
+ {}
+
+ inline bool operator()(parameter const& p)
+ {
+ return p.type == m_type;
+ }
+private :
+ std::string m_type;
+};
+
+
+template <typename Element>
+struct sort_on_line
+{
+ inline bool operator()(Element const& left, Element const& right)
+ {
+ return left.line < right.line;
+ }
+};
+
+
+#endif // PARAMETER_PREDICATES_HPP
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp
new file mode 100644
index 000000000..34295b7d4
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp
@@ -0,0 +1,1389 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// 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)
+//
+//
+#ifndef QUICKBOOK_OUTPUT_HPP
+#define QUICKBOOK_OUTPUT_HPP
+
+
+#include <string>
+#include <vector>
+
+#include <boost/algorithm/string.hpp>
+
+#include <doxygen_elements.hpp>
+#include <parameter_predicates.hpp>
+
+std::string qbk_escaped(std::string const& s)
+{
+ // Replace _ by unicode to avoid accidental quickbook underlining.
+ // 1) do NOT do this in quickbook markup, so not within []
+ // (e.g. to avoid [include get_point.qbk] having unicoded)
+ // 2) \[ and \] should not count as []
+ std::size_t const len = s.length();
+ int counter = 0;
+ std::string result = "";
+ for (std::size_t i = 0; i < len; i++)
+ {
+ switch(s[i])
+ {
+ case '[' : counter++; break;
+ case ']' : counter--; break;
+ case '\\' :
+ {
+ result += s[i];
+ if (i + 1 < len)
+ {
+ result += s[i + 1];
+ }
+ i++;
+ continue;
+ }
+ case '_' :
+ if (counter == 0)
+ {
+ result += "\\u005f";
+ continue;
+ }
+ }
+ result += s[i];
+ }
+
+ return result;
+}
+
+
+
+void quickbook_template_parameter_list(std::vector<parameter> const& parameters,
+ std::string const& related_name,
+ std::ostream& out)
+{
+ if (!parameters.empty())
+ {
+ out << "template<" ;
+ bool first = true;
+ BOOST_FOREACH(parameter const& p, parameters)
+ {
+ if (p.fulltype.empty())
+ {
+ std::cerr << "Warning: template parameter " << p.name << " has no type in " << related_name << std::endl;
+ }
+ out << (first ? "" : ", ") << p.fulltype;
+ first = false;
+ }
+ out << ">" << std::endl;
+ }
+}
+
+
+void quickbook_synopsis(function const& f, std::ostream& out)
+{
+ out << "``";
+ quickbook_template_parameter_list(f.template_parameters, f.name, out);
+
+ switch(f.type)
+ {
+ case function_constructor_destructor :
+ out << f.name;
+ break;
+ case function_member :
+ out << f.return_type << " " << f.name;
+ break;
+ case function_free :
+ out << f.definition;
+ break;
+ case function_define :
+ out << "#define " << f.name;
+ break;
+ case function_unknown :
+ // do nothing
+ break;
+ }
+
+ // Output the parameters
+ // Because we want to be able to skip, we cannot use the argstring
+ {
+ bool first = true;
+ BOOST_FOREACH(parameter const& p, f.parameters)
+ {
+ if (! p.skip)
+ {
+ out
+ << (first ? "(" : ", ")
+ << p.fulltype << (p.fulltype.empty() ? "" : " ")
+ << p.name
+ << (p.default_value.empty() ? "" : " = ")
+ << p.default_value;
+ first = false;
+ }
+ }
+ if (! first)
+ {
+ out << ")";
+ }
+ else if (f.type != function_define)
+ {
+ out << "()";
+ }
+ }
+
+ out << "``"
+ << std::endl
+ << std::endl;
+}
+
+
+void quickbook_synopsis(enumeration const& e, std::ostream& out)
+{
+ out << "``enum " << e.name;
+ bool first = true;
+ BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+ {
+ out << (first ? " {" : ", ") << value.name;
+ if (! value.initializer.empty())
+ {
+ // Doxygen 1.6 does not include "=" in the <initializer> tag, Doxygen 1.8 does.
+ // We just remove the "=" to have consisten output
+ out << " = " << boost::trim_copy(boost::replace_all_copy(value.initializer, "=", ""));
+ }
+ first = false;
+ }
+ if (! first)
+ {
+ out << "};";
+ }
+ out << "``"
+ << std::endl
+ << std::endl;
+}
+
+inline bool includes(std::string const& filename, std::string const& header)
+{
+ std::string result;
+
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ boost::trim(line);
+ if (boost::starts_with(line, "#include")
+ && boost::contains(line, header))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+
+void quickbook_header(std::string const& location,
+ configuration const& config,
+ std::ostream& out)
+{
+ if (! location.empty())
+ {
+ std::vector<std::string> including_headers;
+
+ // Select headerfiles containing to this location
+ BOOST_FOREACH(std::string const& header, config.convenience_headers)
+ {
+ if (includes(config.convenience_header_path + header, location))
+ {
+ including_headers.push_back(header);
+ }
+ }
+
+ out << "[heading Header]" << std::endl;
+ if (! including_headers.empty())
+ {
+ out << "Either"
+ << (including_headers.size() > 1 ? " one of" : "")
+ << std::endl << std::endl;
+ BOOST_FOREACH(std::string const& header, including_headers)
+ {
+ out << "`#include <" << config.start_include << header << ">`" << std::endl;
+ }
+
+ out << std::endl << "Or" << std::endl << std::endl;
+ }
+ out << "`#include <" << location << ">`" << std::endl;
+ out << std::endl;
+ }
+}
+
+
+void quickbook_markup(std::vector<markup> const& qbk_markup,
+ markup_order_type order, markup_type type,
+ std::ostream& out)
+{
+ bool has_output = false;
+ BOOST_FOREACH(markup const& inc, qbk_markup)
+ {
+ if (inc.type == type && inc.order == order)
+ {
+ out << inc.value << std::endl;
+ has_output = true;
+ }
+ }
+ if (has_output)
+ {
+ out << std::endl;
+ }
+}
+
+
+
+void quickbook_string_with_heading_if_present(std::string const& heading,
+ std::string const& contents, std::ostream& out)
+{
+ if (! contents.empty())
+ {
+ out << "[heading " << heading << "]" << std::endl
+ << qbk_escaped(contents) << std::endl
+ << std::endl;
+ }
+}
+
+inline std::string to_section_name(std::string const& name)
+{
+ // Make section-name lowercase and remove :: because these are filenames
+ return boost::to_lower_copy(boost::replace_all_copy(name, "::", "_"));
+}
+
+
+
+void quickbook_short_output(function const& f, std::ostream& out)
+{
+ BOOST_FOREACH(parameter const& p, f.parameters)
+ {
+ if (! p.skip)
+ {
+ out << "[* " << p.fulltype << "]: ['" << p.name << "]: " << p.brief_description << std::endl << std::endl;
+ }
+ }
+ out << std::endl;
+ out << std::endl;
+
+ if (! f.return_description.empty())
+ {
+ out << "][" << std::endl;
+ out << f.return_description << std::endl;
+ out << std::endl;
+ }
+
+ out << std::endl;
+}
+
+inline std::string namespace_skipped(std::string const& name, configuration const& config)
+{
+ return config.skip_namespace.empty()
+ ? name
+ : boost::replace_all_copy(name, config.skip_namespace, "")
+ ;
+}
+
+inline std::string output_if_different(std::string const& s, std::string const& s2)
+{
+ return boost::equals(s, s2)
+ ? ""
+ : s + " "
+ ;
+}
+
+inline void quickbook_output_indexterm(std::string const& term, std::ostream& out
+ //, std::string const& secondary = ""
+ )
+{
+ out << "'''";
+ if (boost::contains(term, "::"))
+ {
+ // "Unnamespace" it and add all terms (also namespaces)
+ std::vector<std::string> splitted;
+ std::string for_split = boost::replace_all_copy(term, "::", ":");
+ boost::split(splitted, for_split, boost::is_any_of(":"), boost::token_compress_on);
+ BOOST_FOREACH(std::string const& part, splitted)
+ {
+ out << "<indexterm><primary>" << part << "</primary></indexterm>";
+ }
+ }
+ else
+ {
+ out << "<indexterm><primary>" << term;
+ /*if (! secondary.empty())
+ {
+ out << "<secondary>" << secondary << "</secondary>";
+ }*/
+ out << "</primary></indexterm>";
+ }
+ out << "'''" << std::endl;
+}
+
+void quickbook_output(function const& f, configuration const& config, std::ostream& out)
+{
+ // Write the parsed function
+ int arity = (int)f.parameters.size();
+
+ std::string additional_description;
+
+ if (! f.additional_description.empty())
+ {
+ additional_description = " (";
+ additional_description += f.additional_description;
+ additional_description += ")";
+ }
+
+ out << "[section:" << to_section_name(f.name);
+ // Make section name unique if necessary by arity and additional description
+ if (! f.unique)
+ {
+ out << "_" << arity;
+ if (! f.additional_description.empty())
+ {
+ out << "_" << boost::to_lower_copy(boost::replace_all_copy(f.additional_description, " ", "_"));
+ }
+ }
+ out << " " << f.name
+ << additional_description
+ << "]" << std::endl
+ << std::endl;
+
+ quickbook_output_indexterm(f.name, out);
+
+ out << qbk_escaped(f.brief_description) << std::endl;
+ out << std::endl;
+
+ quickbook_string_with_heading_if_present("Description", f.detailed_description, out);
+
+ // Synopsis
+ quickbook_markup(f.qbk_markup, markup_before, markup_synopsis, out);
+ out << "[heading Synopsis]" << std::endl;
+ quickbook_synopsis(f, out);
+ quickbook_markup(f.qbk_markup, markup_after, markup_synopsis, out);
+
+
+ out << "[heading Parameters]" << std::endl
+ << std::endl;
+
+ out << "[table" << std::endl << "[";
+ if (f.type != function_define)
+ {
+ out << "[Type] [Concept] ";
+ }
+ out << "[Name] [Description] ]" << std::endl;
+
+ // First: output any template parameter which is NOT used in the normal parameter list
+ BOOST_FOREACH(parameter const& tp, f.template_parameters)
+ {
+ if (! tp.skip)
+ {
+ std::vector<parameter>::const_iterator it = std::find_if(f.parameters.begin(), f.parameters.end(), par_by_type(tp.name));
+
+ if (it == f.parameters.end())
+ {
+ out << "[[" << tp.name << "] [" << tp.brief_description << "] [ - ] [Must be specified]]" << std::endl;
+ }
+ }
+ }
+
+ BOOST_FOREACH(parameter const& p, f.parameters)
+ {
+ if (! p.skip)
+ {
+ out << "[";
+ std::vector<parameter>::const_iterator it = std::find_if(f.template_parameters.begin(),
+ f.template_parameters.end(), par_by_name(p.type));
+
+ if (f.type != function_define)
+ {
+ out << "[" << p.fulltype
+ << "] [" << (it == f.template_parameters.end() ? "" : it->brief_description)
+ << "] ";
+ }
+ out << "[" << p.name
+ << "] [" << p.brief_description
+ << "]]"
+ << std::endl;
+ }
+ }
+ out << "]" << std::endl
+ << std::endl
+ << std::endl;
+
+ quickbook_string_with_heading_if_present("Returns", f.return_description, out);
+
+ quickbook_header(f.location, config, out);
+ quickbook_markup(f.qbk_markup, markup_any, markup_default, out);
+
+ out << std::endl;
+ out << "[endsect]" << std::endl;
+ out << std::endl;
+}
+
+void quickbook_output(enumeration const& e, configuration const& config, std::ostream& out)
+{
+ out << "[section:" << to_section_name(e.name);
+ out << " " << e.name
+ << "]" << std::endl
+ << std::endl;
+
+ quickbook_output_indexterm(e.name, out);
+ BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+ {
+ quickbook_output_indexterm(value.name, out);
+ }
+
+ out << e.brief_description << std::endl;
+ out << std::endl;
+
+ quickbook_string_with_heading_if_present("Description", e.detailed_description, out);
+
+ // Synopsis
+ quickbook_markup(e.qbk_markup, markup_before, markup_synopsis, out);
+ out << "[heading Synopsis]" << std::endl;
+ quickbook_synopsis(e, out);
+ quickbook_markup(e.qbk_markup, markup_after, markup_synopsis, out);
+
+
+ out << "[heading Values]" << std::endl
+ << std::endl;
+
+ out << "[table" << std::endl << "[";
+ out << "[Value] [Description] ]" << std::endl;
+
+ BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+ {
+ out << "[[" << value.name
+ << "] [" << value.brief_description
+ << "]]"
+ << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl
+ << std::endl;
+
+ quickbook_header(e.location, config, out);
+ quickbook_markup(e.qbk_markup, markup_any, markup_default, out);
+
+ out << std::endl;
+ out << "[endsect]" << std::endl;
+ out << std::endl;
+}
+
+void quickbook_output_function(std::vector<function> const& functions,
+ function_type type,
+ std::string const& title,
+ configuration const& config, std::ostream& out)
+{
+ std::string returns = type == function_constructor_destructor ? "" : " [Returns]";
+ out << "[heading " << title << "(s)]" << std::endl
+ << "[table" << std::endl
+ << "[[Function] [Description] [Parameters] " << returns << "]" << std::endl;
+
+ BOOST_FOREACH(function const& f, functions)
+ {
+ if (f.type == type)
+ {
+ out << "[[";
+ quickbook_synopsis(f, out);
+ out << "] [" << f.brief_description << "] [";
+ quickbook_short_output(f, out);
+ out << "]]" << std::endl;
+ }
+ }
+ out << "]" << std::endl
+ << std::endl;
+}
+
+void quickbook_output(class_or_struct const& cos, configuration const& config, std::ostream& out)
+{
+ // Skip namespace
+ std::string short_name = namespace_skipped(cos.fullname, config);
+
+ // Write the parsed function
+ out << "[section:" << to_section_name(short_name) << " " << short_name << "]" << std::endl
+ << std::endl;
+
+ quickbook_output_indexterm(short_name, out);
+
+ out << cos.brief_description << std::endl;
+ out << std::endl;
+
+ quickbook_string_with_heading_if_present("Description", cos.detailed_description, out);
+
+ quickbook_markup(cos.qbk_markup, markup_before, markup_synopsis, out);
+ out << "[heading Synopsis]" << std::endl
+ << "``";
+ quickbook_template_parameter_list(cos.template_parameters, cos.name, out);
+ out << (cos.is_class ? "class" : "struct")
+ << " " << short_name << std::endl;
+
+ if (! cos.base_classes.empty())
+ {
+ out << " : ";
+ bool first = true;
+ BOOST_FOREACH(base_class const& bc, cos.base_classes)
+ {
+ if (! first)
+ {
+ out << std::endl << " , ";
+ }
+ out << output_if_different(bc.derivation, "private")
+ << output_if_different(bc.virtuality, "non-virtual")
+ << namespace_skipped(bc.name, config);
+ first = false;
+ }
+ out << std::endl;
+ }
+
+ out << "{" << std::endl
+ << " // ..." << std::endl
+ << "};" << std::endl
+ << "``" << std::endl << std::endl;
+ quickbook_markup(cos.qbk_markup, markup_after, markup_synopsis, out);
+
+
+
+ if (! cos.template_parameters.empty())
+ {
+ bool has_default = false;
+ BOOST_FOREACH(parameter const& p, cos.template_parameters)
+ {
+ if (! p.default_value.empty())
+ {
+ has_default = true;
+ }
+ }
+
+ out << "[heading Template parameter(s)]" << std::endl
+ << "[table" << std::endl
+ << "[[Parameter]";
+ if (has_default)
+ {
+ out << " [Default]";
+ }
+ out << " [Description]]" << std::endl;
+
+ BOOST_FOREACH(parameter const& p, cos.template_parameters)
+ {
+ out << "[[" << p.fulltype;
+ if (has_default)
+ {
+ out << "] [" << p.default_value;
+ }
+ out << "] [" << p.brief_description << "]]" << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl;
+ }
+
+
+ std::map<function_type, int> counts;
+ BOOST_FOREACH(function const& f, cos.functions)
+ {
+ counts[f.type]++;
+ }
+
+ if (counts[function_constructor_destructor] > 0)
+ {
+ quickbook_output_function(cos.functions, function_constructor_destructor, "Constructor", config, out);
+ }
+
+ if (counts[function_member] > 0)
+ {
+ quickbook_output_function(cos.functions, function_member, "Member Function", config, out);
+ }
+
+ quickbook_header(cos.location, config, out);
+ quickbook_markup(cos.qbk_markup, markup_any, markup_default, out);
+
+ out << "[endsect]" << std::endl
+ << std::endl;
+}
+
+
+// ----------------------------------------------------------------------------------------------- //
+// ALT
+// ----------------------------------------------------------------------------------------------- //
+
+std::string remove_template_parameters(std::string const& name)
+{
+ std::string res;
+ std::string::size_type prev_i = 0, i = 0;
+ int blocks_counter = 0;
+ for ( ;; )
+ {
+ std::string::size_type next_begin = name.find('<', i);
+ std::string::size_type next_end = name.find('>', i);
+
+ if ( next_begin == next_end )
+ {
+ res += name.substr(prev_i, next_begin - prev_i);
+ break;
+ }
+ else if ( next_begin < next_end )
+ {
+ i = next_begin + 1;
+ if ( blocks_counter == 0 )
+ res += name.substr(prev_i, next_begin - prev_i) + "<...>";
+ blocks_counter++;
+ }
+ else
+ {
+ i = next_end + 1;
+ blocks_counter--;
+ if ( blocks_counter == 0 )
+ prev_i = i;
+ }
+ }
+
+ return res;
+}
+
+std::string replace_brackets(std::string const& str)
+{
+ return boost::replace_all_copy(boost::replace_all_copy(str, "[", "\\["), "]", "\\]");
+}
+
+void quickbook_output_enumerations(std::vector<enumeration> const& enumerations,
+ configuration const& config,
+ std::ostream& out)
+{
+ out << "[table" << std::endl
+ << "[[Enumeration][Description]]" << std::endl;
+
+ for ( size_t i = 0 ; i < enumerations.size() ; ++i )
+ {
+ enumeration const& e = enumerations[i];
+
+ out << "[[[link " << e.id << " `";
+ out << e.name;
+ out << "`]][" << e.brief_description << "]]" << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl;
+}
+
+void quickbook_synopsis_short(function const& f, std::ostream& out)
+{
+ if ( f.type != function_unknown )
+ out << f.name;
+
+ bool first = true;
+ BOOST_FOREACH(parameter const& p, f.parameters)
+ {
+ if ( !p.skip && p.default_value.empty() )
+ {
+ out << (first ? "(" : ", ") << remove_template_parameters(p.fulltype_without_links);
+ first = false;
+ }
+ }
+
+
+ if (! first)
+ out << ")";
+ else if (f.type != function_define)
+ out << "()";
+}
+
+void quickbook_output_functions(std::vector<function> const& functions,
+ function_type type,
+ configuration const& config,
+ std::ostream& out,
+ bool display_all = false,
+ std::string const& ColTitle = "Function")
+{
+ bool show_modifiers = false;
+ BOOST_FOREACH(function const& f, functions)
+ {
+ if ( (display_all || f.type == type) && (f.is_const || f.is_static) && !f.brief_description.empty() )
+ show_modifiers = true;
+ }
+
+ out << "[table\n"
+ << "[";
+ if ( show_modifiers )
+ out << "[Modifier]";
+ out << "[" << ColTitle << "]";
+ out << "[Description]";
+ out << "]" << std::endl;
+
+ for ( size_t i = 0 ; i < functions.size() ; ++i )
+ {
+ function const& f = functions[i];
+
+ if ( f.brief_description.empty() )
+ continue;
+
+ if (display_all || f.type == type)
+ {
+ out << "[";
+ if ( show_modifiers )
+ {
+ out << "[";
+ out << (f.is_static ? "`static`" : "");
+ out << (f.is_const ? " `const`" : "");
+ out << "]";
+ }
+ out << "[[link " << f.id << " `";
+ quickbook_synopsis_short(f, out);
+ out << "`]]";
+ out << "[" << f.brief_description << "]";
+ out << "]" << std::endl;
+ }
+ }
+ out << "]" << std::endl
+ << std::endl;
+}
+
+void output_paragraphs_note_warning(element const& el, std::ostream & out)
+{
+ // Additional paragraphs
+ if ( !el.paragraphs.empty() )
+ {
+ BOOST_FOREACH(paragraph const& p, el.paragraphs)
+ {
+ if ( !p.title.empty() )
+ out << "[heading " << p.title << "]" << std::endl;
+ else
+ out << "\n\n" << std::endl;
+ out << p.text << std::endl;
+ out << std::endl;
+ }
+ }
+
+ // Note
+ if ( !el.note.empty() )
+ {
+ out << "[note " << el.note << "]" << std::endl;
+ out << std::endl;
+ }
+
+ // Warning
+ if ( !el.warning.empty() )
+ {
+ out << "[warning " << el.warning << "]" << std::endl;
+ out << std::endl;
+ }
+}
+
+void inline_str_with_links(std::string const& str, std::ostream & out)
+{
+ typedef std::string::size_type ST;
+
+ bool link_started = false;
+ bool first = true;
+ for ( ST i = 0 ; i < str.size() ; ++i )
+ {
+ if ( !link_started )
+ {
+ if ( str[i] == '[' && str.substr(i, 6) == "[link " )
+ {
+ if ( !first )
+ {
+ out << "`";
+ first = true;
+ }
+ link_started = true;
+ out << "[^[link ";
+ i += 5; // (+ 6 - 1)
+ }
+ else
+ {
+ if ( first )
+ {
+ out << "`";
+ first = false;
+ }
+ out << str[i];
+ }
+ }
+ else
+ {
+ if ( str[i] == '\\' )
+ {
+ out << str[i];
+ ++i;
+ if ( i < str.size() )
+ out << str[i];
+ }
+ else if ( str[i] == ']' )
+ {
+ out << "]]";
+ link_started = false;
+ }
+ else
+ out << str[i];
+ }
+ }
+
+ if ( !first )
+ out << "`";
+ if ( link_started )
+ out << "]]";
+}
+
+void quickbook_template_parameter_list_alt(std::vector<parameter> const& parameters, std::ostream& out)
+{
+ std::string next_param;
+
+ if ( 2 < parameters.size() )
+ next_param = std::string("`,`\n") + " ";
+ else
+ next_param = "`,` ";
+
+ if (!parameters.empty())
+ {
+ out << "`template<`" ;
+ bool first = true;
+ BOOST_FOREACH(parameter const& p, parameters)
+ {
+ out << (first ? "" : next_param.c_str());
+ inline_str_with_links(p.fulltype, out);
+
+ if ( !p.default_value.empty() )
+ {
+ out << " = ";
+ inline_str_with_links(p.default_value, out);
+ }
+
+ first = false;
+ }
+ out << "`>`";
+ }
+}
+
+void quickbook_synopsis_alt(function const& f, std::ostream& out)
+{
+ out << "[pre\n";
+ quickbook_template_parameter_list_alt(f.template_parameters, out);
+ out << "\n";
+
+ std::size_t offset = 1; // '('
+ switch(f.type)
+ {
+ case function_constructor_destructor :
+ out << "`" << f.name << "`";
+ offset += f.name.size();
+ break;
+ case function_member :
+ inline_str_with_links(f.return_type, out);
+ out << " `" << f.name << "`";
+ offset += f.return_type_without_links.size() + 1 + f.name.size();
+ break;
+ case function_free :
+ inline_str_with_links(f.definition, out);
+ offset += f.definition.size();
+ break;
+ case function_define :
+ out << "`#define " << f.name << "`";
+ offset += 8 + f.name.size();
+ break;
+ case function_unknown :
+ // do nothing
+ break;
+ }
+
+ std::string par_end("`,` ");
+ if ( 2 < f.parameters.size() )
+ par_end = std::string("`,`\n") + std::string(offset, ' ');
+
+ // Output the parameters
+ // Because we want to be able to skip, we cannot use the argstring
+ {
+ bool first = true;
+ BOOST_FOREACH(parameter const& p, f.parameters)
+ {
+ if (! p.skip)
+ {
+ out << (first ? "`(`" : par_end);
+ if ( !p.fulltype.empty() )
+ {
+ inline_str_with_links(p.fulltype, out);
+ out << " ";
+ }
+ if ( !p.name.empty() )
+ out << "`" << p.name << "`";
+ if ( !p.default_value.empty() )
+ {
+ out << " = ";
+ inline_str_with_links(p.default_value, out);
+ }
+ first = false;
+ }
+ }
+
+ if (! first)
+ out << "`)`\n";
+ else if (f.type != function_define)
+ out << "`()`\n";
+ }
+
+ out << "]"
+ << std::endl
+ << std::endl;
+}
+
+void quickbook_synopsis_alt(class_or_struct const& cos, configuration const& config, std::ostream & out)
+{
+ std::string short_name = namespace_skipped(cos.fullname, config);
+
+ out << "[pre\n";
+
+ quickbook_template_parameter_list_alt(cos.template_parameters, out);
+ out << "\n";
+
+ out << (cos.is_class ? "`class " : "`struct ");
+ {
+ std::string::size_type last_scope = std::string::npos;
+ std::string::size_type i = short_name.find("<");
+ for(std::string::size_type j = short_name.find("::") ; j < i ; j = short_name.find("::", j+1))
+ last_scope = j;
+ if ( last_scope == std::string::npos )
+ out << short_name << "`" << std::endl;
+ else
+ out << short_name.substr(last_scope + 2) << "`" << std::endl;
+ }
+
+ if (! cos.base_classes.empty())
+ {
+ out << "` : ";
+ bool first = true;
+ BOOST_FOREACH(base_class const& bc, cos.base_classes)
+ {
+ if (! first)
+ {
+ out << std::endl << " , ";
+ }
+ out << output_if_different(bc.derivation, "private")
+ << output_if_different(bc.virtuality, "non-virtual")
+ << namespace_skipped(bc.name, config);
+ first = false;
+ }
+ out << "`" << std::endl;
+ }
+
+ out << "`{`" << std::endl
+ << "` // ...`" << std::endl
+ << "`};`" << std::endl
+ << "]" << std::endl << std::endl;
+}
+
+void quickbook_synopsis_alt(enumeration const& e, std::ostream& out)
+{
+ std::string values_separator =
+ e.enumeration_values.size() <= 2 ?
+ std::string(", ") :
+ ( std::string(",\n") + std::string(e.name.size() + 7, ' ') );
+
+ out << "``enum " << e.name << " ";
+ bool first = true;
+ BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+ {
+ out << (first ? "{" : values_separator.c_str());
+ out << value.name;
+ if ( !value.initializer.empty() )
+ {
+ out << " = " << boost::trim_copy(boost::replace_all_copy(value.initializer, "=", ""));
+ }
+ first = false;
+ }
+ if (! first)
+ {
+ out << "};";
+ }
+ out << "``"
+ << std::endl
+ << std::endl;
+}
+
+template <typename Range>
+bool has_brief_description(Range const& rng)
+{
+ typedef typename Range::value_type V;
+ BOOST_FOREACH(V const& bc, rng)
+ {
+ if ( !bc.brief_description.empty() )
+ return true;
+ }
+ return false;
+}
+
+template <typename Range>
+bool has_brief_description(Range const& rng, function_type t)
+{
+ typedef typename Range::value_type V;
+ BOOST_FOREACH(V const& bc, rng)
+ {
+ if ( bc.type == t && !bc.brief_description.empty() )
+ return true;
+ }
+ return false;
+}
+
+void quickbook_output_functions_details(std::vector<function> const& functions,
+ function_type type,
+ configuration const& config,
+ std::ostream& out,
+ bool display_all = false)
+{
+ for ( size_t i = 0 ; i < functions.size() ; ++i )
+ {
+ function const& f = functions[i];
+
+ if ( f.brief_description.empty() )
+ continue;
+
+ if ( display_all || f.type == type )
+ {
+ // Section
+ std::stringstream ss;
+ quickbook_synopsis_short(f, ss);
+ out << "[#" << f.id << "]" << std::endl;
+ out << "[section " << replace_brackets(ss.str()) << "]" << std::endl;
+
+ quickbook_output_indexterm(f.name, out);
+
+ // Brief description
+ out << f.brief_description << std::endl;
+ out << std::endl;
+
+ // Detail description
+ if ( !f.detailed_description.empty() )
+ {
+ out << "[heading Description]" << std::endl;
+ out << f.detailed_description;
+ }
+
+ // Synopsis
+ quickbook_markup(f.qbk_markup, markup_before, markup_synopsis, out);
+ out << "[heading Synopsis]" << std::endl;
+ quickbook_synopsis_alt(f, out);
+ quickbook_markup(f.qbk_markup, markup_after, markup_synopsis, out);
+
+ if ( f.is_static || f.is_virtual || f.is_explicit || f.is_const )
+ {
+ out << "[heading Modifier(s)]" << std::endl;
+ out << "``"
+ << (f.is_static ? "static " : "")
+ << (f.is_virtual ? "virtual " : "")
+ << (f.is_explicit ? "explicit " : "")
+ << (f.is_const ? "const " : "")
+ << "``";
+ }
+
+ // Template parameters
+ if ( !f.template_parameters.empty() && has_brief_description(f.template_parameters) )
+ {
+ out << "[heading Template parameter(s)]" << std::endl
+ << "[table" << std::endl
+ << "[[Parameter] [Description]]" << std::endl;
+
+ BOOST_FOREACH(parameter const& p, f.template_parameters)
+ {
+ if ( p.brief_description.empty() )
+ continue;
+
+ out << "[[`";
+ if ( p.fulltype.find("typename ") == 0 )
+ out << p.fulltype.substr(9);
+ else if ( p.fulltype.find("class ") == 0 )
+ out << p.fulltype.substr(6);
+ else
+ out << p.fulltype;
+ out << "`][" << p.brief_description << "]]" << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl;
+ }
+
+ // Parameters
+ if ( !f.parameters.empty() && has_brief_description(f.parameters) )
+ {
+ out << "[heading Parameter(s)]" << std::endl;
+ out << "[table " << std::endl;
+ out << "[";
+ if ( f.type != function_define )
+ out << "[Type]";
+ out << "[Name][Description]]" << std::endl;
+ BOOST_FOREACH(parameter const& p, f.parameters)
+ {
+ if (!p.skip)
+ {
+ out << "[";
+ if ( f.type != function_define )
+ {
+ out << "[";
+ inline_str_with_links(p.fulltype, out);
+ out << "]";
+ }
+ out << "[ `" << p.name << "` ][" << p.brief_description << "]]"<< std::endl;
+ }
+ }
+ out << "]" << std::endl;
+ }
+
+ // Precondition
+ if ( !f.precondition.empty() )
+ {
+ out << "[heading Precondition(s)]" << std::endl;
+ out << f.precondition << std::endl;
+ out << std::endl;
+ }
+
+ // Return
+ if ( !f.return_description.empty() )
+ {
+ out << "[heading Returns]" << std::endl;
+ out << f.return_description << std::endl;
+ }
+
+ // Additional paragraphs, note, warning
+ output_paragraphs_note_warning(f, out);
+
+ // QBK markup
+ quickbook_markup(f.qbk_markup, markup_any, markup_default, out);
+
+ // Section end
+ out << "[endsect]" << std::endl
+ //<< "[br]" << std::endl
+ << std::endl;
+ }
+ }
+}
+
+void quickbook_output_enumeration_details(enumeration const& e, configuration const& config, std::ostream& out)
+{
+ out << "[#" << e.id << "]\n";
+ out << "[section " << e.name << "]" << std::endl
+ << std::endl;
+
+ quickbook_output_indexterm(e.name, out);
+ BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+ {
+ quickbook_output_indexterm(value.name, out);
+ }
+
+ out << e.brief_description << std::endl;
+ out << std::endl;
+
+ if ( !e.detailed_description.empty() )
+ {
+ out << "[heading Description]\n\n";
+ out << e.detailed_description << "\n\n";
+ }
+
+ // Additional paragraphs, note, warning
+ output_paragraphs_note_warning(e, out);
+
+ quickbook_markup(e.qbk_markup, markup_any, markup_default, out);
+
+ // Synopsis
+ quickbook_markup(e.qbk_markup, markup_before, markup_synopsis, out);
+ out << "[heading Synopsis]" << std::endl;
+ quickbook_synopsis_alt(e, out);
+ quickbook_markup(e.qbk_markup, markup_after, markup_synopsis, out);
+
+
+ out << "[heading Values]" << std::endl
+ << std::endl;
+
+ out << "[table" << std::endl << "[";
+ out << "[Value] [Description] ]" << std::endl;
+
+ BOOST_FOREACH(enumeration_value const& value, e.enumeration_values)
+ {
+ out << "[[" << value.name << "] [" << value.brief_description << "]]\n";
+ }
+ out << "]\n\n\n";
+
+ out << std::endl;
+ out << "[endsect]" << std::endl;
+ out << std::endl;
+}
+
+void quickbook_output_alt(documentation const& doc, configuration const& config, std::ostream& out)
+{
+ if ( !doc.group_id.empty() )
+ {
+ std::cout << "[section:" << doc.group_id << " " << doc.group_title << "]" << std::endl;
+ }
+
+ if ( !doc.enumerations.empty() )
+ {
+ std::cout << "[heading Enumerations]\n";
+ quickbook_output_enumerations(doc.enumerations, config, out);
+ }
+
+ if ( !doc.defines.empty() )
+ {
+ std::cout << "[heading Defines]\n";
+ quickbook_output_functions(doc.defines, function_unknown, config, out, true, "Define");
+ }
+
+ if ( !doc.functions.empty() )
+ {
+ std::cout << "[heading Functions]\n";
+ quickbook_output_functions(doc.functions, function_unknown, config, out, true, "Function");
+ }
+
+ BOOST_FOREACH(enumeration const& e, doc.enumerations)
+ {
+ quickbook_output_enumeration_details(e, config, out);
+ }
+
+ quickbook_output_functions_details(doc.defines, function_unknown, config, out, true);
+ quickbook_output_functions_details(doc.functions, function_unknown, config, out, true);
+
+ if ( !doc.group_id.empty() )
+ {
+ out << "[endsect]" << std::endl
+ << std::endl;
+ }
+}
+
+void quickbook_output_alt(class_or_struct const& cos, configuration const& config, std::ostream& out)
+{
+ // Skip namespace
+ std::string short_name = namespace_skipped(cos.fullname, config);
+
+ BOOST_ASSERT(configuration::alt == config.output_style);
+
+ if ( !cos.id.empty() )
+ out << "[#" << cos.id << "]" << std::endl;
+ out << "[section " << short_name << "]" << std::endl << std::endl;
+
+ // WARNING! Can't be used in the case of specializations
+ quickbook_output_indexterm(short_name, out);
+
+ // Brief
+
+ out << cos.brief_description << std::endl;
+ out << std::endl;
+
+ // Description
+
+ quickbook_string_with_heading_if_present("Description", cos.detailed_description, out);
+
+ // Additional paragraphs, note, warning
+ output_paragraphs_note_warning(cos, out);
+
+ // Markup
+ quickbook_markup(cos.qbk_markup, markup_any, markup_default, out);
+
+ // Header
+
+ quickbook_header(cos.location, config, out);
+
+ // Class synposis
+
+ quickbook_markup(cos.qbk_markup, markup_before, markup_synopsis, out);
+ out << "[heading Synopsis]" << std::endl;
+ quickbook_synopsis_alt(cos, config, out);
+ quickbook_markup(cos.qbk_markup, markup_after, markup_synopsis, out);
+
+ // Template parameters
+
+ if (! cos.template_parameters.empty())
+ {
+ if ( has_brief_description(cos.template_parameters) )
+ {
+ out << "[heading Template parameter(s)]" << std::endl
+ << "[table" << std::endl
+ << "[[Parameter] [Description]]" << std::endl;
+
+ BOOST_FOREACH(parameter const& p, cos.template_parameters)
+ {
+ if ( p.brief_description.empty() )
+ continue;
+
+ out << "[[`";
+ if ( p.fulltype.find("typename ") == 0 )
+ out << p.fulltype.substr(9);
+ else if ( p.fulltype.find("class ") == 0 )
+ out << p.fulltype.substr(6);
+ else
+ out << p.fulltype;
+ out << "`][" << p.brief_description << "]]" << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl;
+ }
+ }
+
+ // Typedefs
+
+ if ( !cos.typedefs.empty() )
+ {
+ if ( has_brief_description(cos.typedefs) )
+ {
+ out << "[heading Typedef(s)]" << std::endl
+ << "[table" << std::endl
+ << "[[Type]";
+ out << " [Description]]" << std::endl;
+
+ BOOST_FOREACH(base_element const& e, cos.typedefs)
+ {
+ if ( e.brief_description.empty() )
+ continue;
+
+ out << "[[";
+ if ( !e.id.empty() )
+ out << "[#" << e.id << "]" << " ";
+ out << "`" << e.name << "`";
+ out << "][" << e.brief_description << "]]" << std::endl;
+ }
+ out << "]" << std::endl
+ << std::endl;
+ }
+ }
+
+ // Members
+
+ bool display_ctors = has_brief_description(cos.functions, function_constructor_destructor);
+ bool display_members = has_brief_description(cos.functions, function_member);
+
+ std::map<function_type, int> counts;
+ BOOST_FOREACH(function const& f, cos.functions)
+ {
+ counts[f.type]++;
+ }
+
+ if (display_ctors && counts[function_constructor_destructor] > 0)
+ {
+ out << "[heading Constructor(s) and destructor]" << std::endl;
+ quickbook_output_functions(cos.functions, function_constructor_destructor, config, out);
+ }
+
+ if (display_members && counts[function_member] > 0)
+ {
+ out << "[heading Member(s)]" << std::endl;
+ quickbook_output_functions(cos.functions, function_member, config, out);
+ }
+
+ // Details start
+
+ //if ( display_ctors || display_members )
+ // out << "[br]" << std::endl;
+
+ if (display_ctors && counts[function_constructor_destructor] > 0)
+ quickbook_output_functions_details(cos.functions, function_constructor_destructor, config, out);
+
+ if (display_members && counts[function_member] > 0)
+ quickbook_output_functions_details(cos.functions, function_member, config, out);
+
+ // Details end
+
+ out << "[endsect]" << std::endl
+ << std::endl;
+}
+
+#endif // QUICKBOOK_OUTPUT_HPP
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp
new file mode 100644
index 000000000..eea1f463c
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/rapidxml_util.hpp
@@ -0,0 +1,69 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// 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)
+//
+//
+#ifndef RAPIDXML_UTIL_HPP
+#define RAPIDXML_UTIL_HPP
+
+
+#include <string>
+#include <rapidxml.hpp>
+
+class xml_doc : public rapidxml::xml_document<>
+{
+ public :
+ xml_doc(const char* xml)
+ {
+ // Make a copy because rapidxml destructs string
+ m_copy = new char[strlen(xml) + 1];
+ strcpy(m_copy, xml);
+ this->parse<0>(m_copy);
+ };
+ virtual ~xml_doc()
+ {
+ delete[] m_copy;
+ }
+ private :
+ char* m_copy;
+
+};
+
+inline std::string get_attribute(rapidxml::xml_node<>* node, const char* name)
+{
+ rapidxml::xml_attribute<> *attr = node->first_attribute(name);
+ std::string value;
+ if (attr)
+ {
+ value = attr->value();
+ }
+ return value;
+}
+
+inline void get_contents(rapidxml::xml_node<>* node, std::string& contents)
+{
+ if (node != NULL)
+ {
+ if (node->type() == rapidxml::node_element)
+ {
+ //std::cout << "ELEMENT: " << node->name() << "=" << node->value() << std::endl;
+ }
+ else if (node->type() == rapidxml::node_data)
+ {
+ contents += node->value();
+ //std::cout << "DATA: " << node->name() << "=" << node->value() << std::endl;
+ }
+ else
+ {
+ //std::cout << "OTHER: " << node->name() << "=" << node->value() << std::endl;
+ }
+ get_contents(node->first_node(), contents);
+ get_contents(node->next_sibling(), contents);
+ }
+}
+
+#endif // RAPIDXML_UTIL_HPP
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/Jamfile.v2 b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/Jamfile.v2
new file mode 100644
index 000000000..2337a69b5
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/Jamfile.v2
@@ -0,0 +1,32 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project fruit ;
+
+import boostbook ;
+import quickbook ;
+
+
+boostbook fruit
+ : fruit.qbk
+ : <dependency>Jamfile.v2
+ <dependency>generated/apple.qbk
+ <dependency>generated/rose.qbk
+ <dependency>generated/grouped.qbk
+ : <xsl:param>chunk.section.depth=4
+ <xsl:param>chunk.first.sections=1
+ <xsl:param>toc.section.depth=3
+ <xsl:param>toc.max.depth=2
+ <xsl:param>generate.section.toc.level=4
+ <xsl:param>boost.root=../../../../../../../../..
+ ;
+
+
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/apple.qbk b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/apple.qbk
new file mode 100644
index 000000000..557caa6f8
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/apple.qbk
@@ -0,0 +1,55 @@
+[/ Generated by doxygen_xml2qbk, don't change, will be overwritten automatically]
+[/ Generated from xml/classfruit_1_1apple.xml]
+[section:fruit_apple fruit::apple]
+
+An apple.
+
+[heading Description]
+The apple is the pomaceous fruit of the apple tree, species Malus domestica in the rose family (Rosaceae)
+
+[heading Model of]
+Fruit Concept
+
+[heading Synopsis]
+``template<typename String>
+class fruit::apple : public fruit::rose, protected fruit::dutch
+{
+ // ...
+};
+``
+
+[heading Template parameter(s)]
+[table
+[[Parameter] [Default] [Description]]
+[[typename String] [std::string] [the string-type (string,wstring,utf8-string,etc)]]
+]
+
+[heading Constructor(s)]
+[table
+[[Function] [Description] [Parameters] ]
+[[``apple (String const &s)``
+
+] [constructor ] [[* String const &]: ['s]:
+
+
+
+
+]]
+]
+
+[heading Member Function(s)]
+[table
+[[Function] [Description] [Parameters] [Returns] ]
+[[``String const & name () const ``
+
+] [Get the name. ] [
+
+
+]]
+]
+
+[heading Header]
+`#include <sample/src/fruit.hpp>`
+
+[endsect]
+
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/eat.qbk b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/eat.qbk
new file mode 100644
index 000000000..6ffd1fbb5
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/eat.qbk
@@ -0,0 +1,31 @@
+[/ Generated by doxygen_xml2qbk, don't change, will be overwritten automatically]
+[/ Generated from xml/group__eat.xml]
+[section:eat eat]
+
+Eat it.
+
+[heading Description]
+Eat the fruit
+
+[heading Synopsis]
+``template<typename T>
+void fruit::eat (T const &fruit)``
+
+[heading Parameters]
+
+[table
+[[Type] [Concept] [Name] [Description] ]
+[[T const &] [the fruit type] [fruit] [the fruit ]]
+]
+
+
+[heading Header]
+`#include <sample/src/fruit.hpp>`
+
+[heading Example]
+[apple]
+[apple_output]
+
+
+[endsect]
+
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/fruit.dox b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/fruit.dox
new file mode 100644
index 000000000..3efb039b8
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/fruit.dox
@@ -0,0 +1,263 @@
+# Doxyfile 1.6.3
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
+PROJECT_NAME =
+PROJECT_NUMBER =
+OUTPUT_DIRECTORY =
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF =
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = YES
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+QT_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 8
+ALIASES = qbk{1}="\xmlonly <qbk>\1</qbk> \endxmlonly" \
+ qbk{2}="\xmlonly <qbk.\1>\2</qbk.\1> \endxmlonly"
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+EXTENSION_MAPPING =
+BUILTIN_STL_SUPPORT = NO
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
+DISTRIBUTE_GROUP_DOC = NO
+SUBGROUPING = YES
+TYPEDEF_HIDES_STRUCT = NO
+SYMBOL_CACHE_SIZE = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = NO
+EXTRACT_PRIVATE = NO
+EXTRACT_STATIC = NO
+EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = NO
+EXTRACT_ANON_NSPACES = NO
+HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_CLASSES = NO
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = NO
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = YES
+FORCE_LOCAL_INCLUDES = NO
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+SORT_BRIEF_DOCS = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES = NO
+SORT_BY_SCOPE_NAME = NO
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+SHOW_DIRECTORIES = NO
+SHOW_FILES = YES
+SHOW_NAMESPACES = YES
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = YES
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = src
+INPUT_ENCODING = UTF-8
+FILE_PATTERNS =
+RECURSIVE = NO
+EXCLUDE =
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = NO
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION = NO
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS = NO
+VERBATIM_HEADERS = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = NO
+COLS_IN_ALPHA_INDEX = 5
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html_by_doxygen
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_TIMESTAMP = YES
+HTML_ALIGN_MEMBERS = YES
+HTML_DYNAMIC_SECTIONS = NO
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
+BINARY_TOC = NO
+TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
+QHG_LOCATION =
+GENERATE_ECLIPSEHELP = NO
+ECLIPSE_DOC_ID = org.doxygen.Project
+DISABLE_INDEX = NO
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = NO
+USE_INLINE_TREES = NO
+TREEVIEW_WIDTH = 250
+FORMULA_FONTSIZE = 10
+SEARCHENGINE = YES
+SERVER_BASED_SEARCH = NO
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4wide
+EXTRA_PACKAGES =
+LATEX_HEADER =
+PDF_HYPERLINKS = YES
+USE_PDFLATEX = YES
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+LATEX_SOURCE_CODE = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = YES
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = NO
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = NO
+EXPAND_ONLY_PREDEF = NO
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE =
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+PERL_PATH = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+MSCGEN_PATH =
+HIDE_UNDOC_RELATIONS = YES
+HAVE_DOT = NO
+DOT_FONTNAME = FreeSans
+DOT_FONTSIZE = 10
+DOT_FONTPATH =
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+DOT_PATH =
+DOTFILE_DIRS =
+DOT_GRAPH_MAX_NODES = 50
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/fruit.qbk b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/fruit.qbk
new file mode 100644
index 000000000..39fe2a0e7
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/fruit.qbk
@@ -0,0 +1,35 @@
+[/============================================================================
+ Boost.Fruit (aka GGL, Generic Fruit Library)
+
+ Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ 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)
+=============================================================================/]
+
+[library Fruit
+ [quickbook 1.5]
+ [version 1.0]
+ [authors [Gehrels, Barend]]
+ [copyright 2011 Barend Gehrels]
+ [purpose Documentation of Boost.Fruit library]
+ [license
+ Distributed under 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])
+ ]
+ [id fruit]
+ [category fruit]
+]
+
+This is the fruit documentation (just a foo sample of the doxygen_xml2qbk doc tool)
+
+[import src/examples/apple_example.cpp]
+
+[include generated/rose.qbk]
+[include generated/apple.qbk]
+[include generated/grouped.qbk]
+[include generated/fruit_type.qbk]
+[include generated/fruit_value.qbk]
+
+Hope you enjoyed your fruit
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/make_qbk.py b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/make_qbk.py
new file mode 100755
index 000000000..1c9e02543
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/make_qbk.py
@@ -0,0 +1,26 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+# ===========================================================================
+# Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+#
+# 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)9
+# ============================================================================
+
+import os, sys
+
+cmd = "doxygen_xml2qbk"
+cmd = cmd + " --xml xml/%s.xml"
+cmd = cmd + " --start_include sample/"
+cmd = cmd + " > generated\%s.qbk"
+
+
+os.system("doxygen fruit.dox")
+os.system(cmd % ("group__fruit", "grouped"))
+os.system(cmd % ("classfruit_1_1apple", "apple"))
+os.system(cmd % ("classfruit_1_1rose", "rose"))
+os.system(cmd % ("structfruit_1_1fruit__value", "fruit_value"))
+os.system(cmd % ("structfruit_1_1fruit__type", "fruit_type"))
+
+os.system("bjam")
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/examples/apple_example.cpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/examples/apple_example.cpp
new file mode 100644
index 000000000..b97b676ed
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/examples/apple_example.cpp
@@ -0,0 +1,31 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// doxygen_xml2qbk Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[apple
+//` Call eat for the apple
+
+#include "fruit.hpp"
+
+int main()
+{
+ fruit::apple<> a("my sample apple");
+ eat(a);
+ return 0;
+}
+//]
+
+
+//[apple_output
+/*`
+Output:
+[pre
+my sample apple
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.cpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.cpp
new file mode 100644
index 000000000..e677cb1b3
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.cpp
@@ -0,0 +1,24 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// doxygen_xml2qbk Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <iostream>
+#include <string>
+
+#include "fruit.hpp"
+
+
+int main()
+{
+ fruit::apple<> a("my apple");
+ eat(a);
+
+ return 0;
+}
+
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.hpp
new file mode 100644
index 000000000..d67fe65ba
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.hpp
@@ -0,0 +1,113 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// doxygen_xml2qbk Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#ifndef FRUIT_HPP
+#define FRUIT_HPP
+
+
+#include <iostream>
+#include <string>
+
+/*!
+\defgroup fruit fruit: Fruit group
+*/
+
+namespace fruit
+{
+
+/*!
+\brief Enumeration to select color
+\ingroup fruit
+*/
+enum fruit_color
+{
+ /// A yellow or yellowish color
+ yellow = 1,
+ /// A green or greeny color
+ green = 2,
+ /// An orange color
+ orange = 3
+};
+
+
+/*!
+\brief Any metafunction (with type)
+\ingroup fruit
+*/
+struct fruit_type
+{
+ /// the type
+ typedef int type;
+};
+
+/*!
+\brief Any metafunction (with value)
+\ingroup fruit
+*/
+struct fruit_value
+{
+ /// the value
+ static const fruit_color value = yellow;
+};
+
+
+
+/// Rose (Rosaceae)
+class rose {};
+
+/*!
+\brief An apple
+\details The apple is the pomaceous fruit of the apple tree,
+ species Malus domestica in the rose family (Rosaceae)
+\tparam String the string-type (string,wstring,utf8-string,etc)
+
+\qbk{before.synopsis,
+[heading Model of]
+Fruit Concept
+}
+*/
+template <typename String = std::string>
+class apple : public rose
+{
+ String sort;
+
+public :
+ /// constructor
+ apple(String const& s) : sort(s) {}
+
+ /// Get the name
+ // (more doxygen e.g. @return, etc)
+ String const& name() const { return sort; }
+};
+
+
+/*!
+\brief Eat it
+\ingroup fruit
+\details Eat the fruit
+\param fruit the fruit
+\tparam T the fruit type
+
+\qbk{
+[heading Example]
+[apple]
+[apple_output]
+}
+*/
+template <typename T>
+void eat(T const& fruit)
+{
+ std::cout << fruit.name() << std::endl;
+}
+
+}
+
+
+#endif
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.sln b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.sln
new file mode 100644
index 000000000..7003de136
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fruit", "fruit.vcproj", "{CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}.Debug|Win32.Build.0 = Debug|Win32
+ {CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}.Release|Win32.ActiveCfg = Release|Win32
+ {CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.vcproj b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.vcproj
new file mode 100644
index 000000000..b08192f46
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.vcproj
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="fruit"
+ ProjectGUID="{CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}"
+ RootNamespace="fruit"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\fruit.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/doc/src/docutils/tools/implementation_status/Jamfile.v2 b/libs/geometry/doc/src/docutils/tools/implementation_status/Jamfile.v2
new file mode 100644
index 000000000..a2db50526
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/implementation_status/Jamfile.v2
@@ -0,0 +1,26 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project implementation-status
+ :
+ ;
+
+exe implementation-status : implementation_status.cpp
+ ;
+install dist-bin
+ :
+ implementation-status
+ :
+ <install-type>EXE
+ <location>../../../../../../../dist/bin
+ :
+ release
+ ;
diff --git a/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.cpp b/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.cpp
new file mode 100644
index 000000000..10cef081f
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.cpp
@@ -0,0 +1,402 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Tool reporting Implementation Status in QBK format
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2011-2012 Bruno Lalande, Paris, France.
+
+// 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)
+
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <stdlib.h>
+
+#include <boost/timer.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/algorithm/string/replace.hpp>
+#include <boost/algorithm/string/trim.hpp>
+
+static const int point = 0;
+static const int segment = 1;
+static const int box = 2;
+static const int linestring = 3;
+static const int ring = 4;
+static const int polygon = 5;
+static const int multi_point = 6;
+static const int multi_linestring = 7;
+static const int multi_polygon = 8;
+static const int geometry_count = 9;
+
+
+struct compile_bjam
+{
+ static inline bool apply(int type1, int type2)
+ {
+ std::ostringstream command;
+ // For debugging:
+ command << "bjam -a tmp > tmp/t" << type1 << "_" << type2 << ".out";
+ //command << "bjam -a tmp > tmp/t.out";
+ int failed = system(command.str().c_str());
+ return failed == 0;
+ }
+};
+
+struct compile_msvc
+{
+ bool first;
+ int count;
+
+ compile_msvc()
+ : first(true)
+ , count(0)
+ {}
+
+ inline bool apply(int type1, int type2)
+ {
+ std::ostringstream command;
+ command << "cl /nologo -I. -I/_svn/boost/trunk /EHsc /Y";
+ if (first)
+ {
+ std::cout << " (creating PCH)";
+ command << "c";
+ first = false;
+ }
+ else
+ {
+ command << "u";
+ }
+
+ command << "implementation_status.hpp tmp/t.cpp > tmp/t" //.out";
+ // For debugging:
+ << type1 << "_" << type2 << ".out";
+
+ int failed = system(command.str().c_str());
+ return failed == 0;
+ }
+};
+
+struct algorithm
+{
+ std::string name;
+ int arity;
+
+ explicit algorithm(std::string const& n, int a = 1)
+ : name(n)
+ , arity(a)
+ {}
+};
+
+
+inline std::string bool_string(bool v)
+{
+ return v ? "true" : "false";
+}
+
+inline std::string typedef_string(int type, bool clockwise, bool open)
+{
+ std::ostringstream out;
+ switch(type)
+ {
+ case point : return "P";
+ case linestring : return "bg::model::linestring<P>";
+ case box : return "bg::model::box<P>";
+ case segment : return "bg::model::segment<P>";
+ case ring :
+ out << "bg::model::ring<P, "
+ << bool_string(clockwise) << ", " << bool_string(open) << ">";
+ break;
+ case polygon :
+ out << "bg::model::polygon<P, "
+ << bool_string(clockwise) << ", " << bool_string(open) << ">";
+ break;
+ case multi_point : return "bg::model::multi_point<P>";
+ case multi_linestring :
+ out << "bg::model::multi_linestring<bg::model::linestring<P> >";
+ break;
+ case multi_polygon :
+ out << "bg::model::multi_polygon<bg::model::polygon<P, "
+ << bool_string(clockwise) << ", " << bool_string(open) << "> >";
+ break;
+ }
+ return out.str();
+}
+
+inline std::string wkt_string(int type)
+{
+ switch(type)
+ {
+ case point : return "POINT(1 1)";
+ case linestring : return "LINESTRING(1 1,2 2)";
+ case segment : return "LINESTRING(1 1,2 2)";
+ case box : return "POLYGON((1 1,2 2)";
+ case polygon :
+ case ring :
+ return "POLYGON((0 0,0 1,1 1,0 0))";
+ case multi_point : return "MULTIPOINT((1 1),(2 2))";
+ case multi_linestring : return "MULTILINESTRING((1 1,2 2))";
+ case multi_polygon : return "MULTIPOLYGON(((0 0,0 1,1 1,0 0)))";
+ }
+ return "";
+}
+
+inline std::string geometry_string(int type)
+{
+ switch(type)
+ {
+ case point : return "Point";
+ case linestring : return "Linestring";
+ case box : return "Box";
+ case polygon : return "Polygon";
+ case ring : return "Ring";
+ case segment : return "Segment";
+ case multi_point : return "MultiPoint";
+ case multi_linestring : return "MultiLinestring";
+ case multi_polygon : return "MultiPolygon";
+ }
+ return "";
+}
+
+
+template <typename CompilePolicy>
+int report_library(CompilePolicy& compile_policy,
+ int type, algorithm const& algo, bool clockwise,
+ bool open, int dimensions, std::string const& cs,
+ int type2 = -1)
+{
+ std::string lit;
+ {
+ std::ostringstream out;
+ out << geometry_string(type);
+ if (type2 != -1)
+ {
+ out << "_" << geometry_string(type2);
+ }
+ out
+ << "_" << algo.name
+ << "_" << bool_string(clockwise)
+ << "_" << bool_string(open)
+ << "_" << boost::replace_all_copy
+ (
+ boost::replace_all_copy
+ (
+ boost::replace_all_copy(cs, "bg::", "")
+ , "<", "_"
+ )
+ , ">", "_"
+ );
+ lit = out.str();
+ }
+
+ std::cout << lit;
+
+ {
+ std::ofstream out("tmp/t.cpp");
+
+ out
+ << "#include <implementation_status.hpp>" << std::endl
+ << "template <typename P>" << std::endl
+ << "inline void test()" << std::endl
+ << "{" << std::endl
+ << " namespace bg = boost::geometry;" << std::endl
+ << " " << typedef_string(type, clockwise, open) << " geometry;" << std::endl
+ << " bg::read_wkt(\"" << wkt_string(type) << "\", geometry);" << std::endl;
+
+
+ if (algo.arity > 1)
+ {
+ out
+ << " " << typedef_string(type2, clockwise, open) << " geometry2;" << std::endl
+ << " bg::read_wkt(\"" << wkt_string(type2) << "\", geometry2);" << std::endl;
+ }
+
+ switch(algo.arity)
+ {
+ case 1 :
+ out << " bg::" << algo.name << "(geometry);" << std::endl;
+ break;
+ case 2 :
+ out << " bg::" << algo.name << "(geometry, geometry2);" << std::endl;
+ break;
+ }
+
+ out
+ << "}" << std::endl
+ << std::endl
+ ;
+
+ out
+ << "int main()" << std::endl
+ << "{" << std::endl
+ << " namespace bg = boost::geometry;" << std::endl
+ << " test<bg::model::point< double, " << dimensions << ", bg::cs::" << cs << " > >();" << std::endl
+ << " return 0;" << std::endl
+ << "}" << std::endl
+ << std::endl
+ ;
+ }
+
+ bool result = compile_policy.apply(type, type2);
+ if (! result)
+ {
+ std::cout << " ERROR";
+ }
+ std::cout << std::endl;
+ return result;
+}
+
+
+template <typename CompilePolicy>
+std::vector<int> report(CompilePolicy& compile_policy,
+ int type, algorithm const& algo, bool clockwise,
+ bool open, int dimensions, std::string const& cs)
+{
+ std::vector<int> result;
+
+ switch(algo.arity)
+ {
+ case 1 :
+ result.push_back(report_library(compile_policy, type, algo, clockwise, open, dimensions, cs));
+ break;
+ case 2 :
+ for (int type2 = point; type2 < geometry_count; ++type2)
+ {
+ result.push_back(report_library(compile_policy, type, algo, clockwise, open, dimensions, cs, type2));
+ }
+ break;
+ }
+
+ return result;
+}
+
+
+struct cs
+{
+ std::string name;
+
+ cs(std::string const& n)
+ : name(n)
+ {}
+};
+
+
+int main(int argc, char** argv)
+{
+#if defined(_MSC_VER)
+ compile_msvc compile_policy;
+#else
+ compile_bjam compile_policy;
+#endif
+
+
+ typedef std::vector<algorithm> v_a_type;
+ v_a_type algorithms;
+ algorithms.push_back(algorithm("area"));
+ algorithms.push_back(algorithm("length"));
+ algorithms.push_back(algorithm("perimeter"));
+ algorithms.push_back(algorithm("correct"));
+ algorithms.push_back(algorithm("distance", 2));
+ algorithms.push_back(algorithm("centroid", 2));
+ algorithms.push_back(algorithm("intersects", 2));
+ algorithms.push_back(algorithm("within", 2));
+ algorithms.push_back(algorithm("equals", 2));
+
+ typedef std::vector<cs> cs_type;
+ cs_type css;
+ css.push_back(cs("cartesian"));
+ // css.push_back(cs("spherical<bg::degree>"));
+ // css.push_back(cs("spherical<bg::radian>"));
+
+
+ boost::timer timer;
+
+ for (v_a_type::const_iterator it = algorithms.begin(); it != algorithms.end(); ++it)
+ {
+/*([heading Behavior]
+[table
+[[Case] [Behavior] ]
+[[__2dim__][All combinations of: box, ring, polygon, multi_polygon]]
+[[__other__][__nyiversion__]]
+[[__sph__][__nyiversion__]]
+[[Three dimensional][__nyiversion__]]
+]*/
+
+ std::ostringstream name;
+ name << "../../../../generated/" << it->name << "_status.qbk";
+
+ std::ofstream out(name.str().c_str());
+ out << "[heading Supported geometries]" << std::endl;
+
+ cs_type::const_iterator cit = css.begin();
+
+ {
+ // Construct the table
+
+ std::vector<std::vector<int> > table;
+
+ for (int type = point; type < geometry_count; type++)
+ {
+ table.push_back(report(compile_policy, type, *it, true, true, 2, cit->name));
+ }
+
+
+ // Detect red rows/columns
+
+ std::vector<int> lines_status(table.size(), false);
+ std::vector<int> columns_status(table[0].size(), false);
+
+ for (unsigned int i = 0; i != table.size(); ++i)
+ {
+ for (unsigned int j = 0; j != table[i].size(); ++j)
+ {
+ lines_status[i] |= table[i][j];
+ columns_status[j] |= table[i][j];
+ }
+ }
+
+
+ // Display the table
+
+ out << "[table" << std::endl << "[";
+
+ if (it->arity > 1)
+ {
+ out << "[ ]";
+ for (int type = point; type < geometry_count; type++)
+ {
+ if (!columns_status[type]) continue;
+ out << "[" << geometry_string(type) << "]";
+ }
+ }
+ else
+ {
+ out << "[Geometry][Status]";
+ }
+
+ out << "]" << std::endl;
+
+ for (unsigned int i = 0; i != table.size(); ++i)
+ {
+ if (!lines_status[i]) continue;
+ out << "[";
+ out << "[" << geometry_string(i) << "]";
+ for (unsigned int j = 0; j != table[i].size(); ++j)
+ {
+ if (!columns_status[j]) continue;
+ out << "[[$img/" << (table[i][j] ? "ok" : "nyi") << ".png]]";
+ }
+ out << "]" << std::endl;
+ }
+
+ out << "]" << std::endl;
+ }
+ }
+
+ std::cout << "TIME: " << timer.elapsed() << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.hpp b/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.hpp
new file mode 100644
index 000000000..4f50c399e
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.hpp
@@ -0,0 +1,14 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// implementation_status (developed in the context of Boost.Geometry documentation)
+//
+// Copyright Barend Gehrels 2010, 2011, Geodan, Amsterdam, the Netherlands
+// 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)
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/multi/multi.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
diff --git a/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.sln b/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.sln
new file mode 100644
index 000000000..b21756780
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "implementation_status", "implementation_status.vcproj", "{2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}.Debug|Win32.Build.0 = Debug|Win32
+ {2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}.Release|Win32.ActiveCfg = Release|Win32
+ {2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.vcproj b/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.vcproj
new file mode 100644
index 000000000..f1aad144f
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.vcproj
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="implementation_status"
+ ProjectGUID="{2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\implementation_status.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/doc/src/docutils/tools/implementation_status/tmp/Jamfile.v2 b/libs/geometry/doc/src/docutils/tools/implementation_status/tmp/Jamfile.v2
new file mode 100644
index 000000000..21631f423
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/implementation_status/tmp/Jamfile.v2
@@ -0,0 +1,18 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2011-2012 Bruno Lalande, Paris, France.
+
+# 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)
+
+
+project implementation-status-test
+ :
+ ;
+
+exe status-test : t.cpp
+ : <include>../../../../../../../..
+ <include>..
+ ;
diff --git a/libs/geometry/doc/src/docutils/tools/support_status/qbk_outputter.hpp b/libs/geometry/doc/src/docutils/tools/support_status/qbk_outputter.hpp
new file mode 100644
index 000000000..14a365f75
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/support_status/qbk_outputter.hpp
@@ -0,0 +1,110 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Tool reporting Implementation Support Status in QBK or plain text format
+
+// Copyright (c) 2011-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_SUPPORT_STATUS_QBK_OUTPUTTER_HPP
+#define BOOST_GEOMETRY_SUPPORT_STATUS_QBK_OUTPUTTER_HPP
+
+
+template <typename Tag> struct qbk_geometry_name { static inline std::string name() { return "Range"; } }; // TODO / make general
+template <> struct qbk_geometry_name<boost::geometry::point_tag> { static inline std::string name() { return "Point"; } };
+template <> struct qbk_geometry_name<boost::geometry::segment_tag> { static inline std::string name() { return "Segment"; } };
+template <> struct qbk_geometry_name<boost::geometry::box_tag> { static inline std::string name() { return "Box"; } };
+template <> struct qbk_geometry_name<boost::geometry::linestring_tag> { static inline std::string name() { return "Linestring"; } };
+template <> struct qbk_geometry_name<boost::geometry::ring_tag> { static inline std::string name() { return "Ring"; } };
+template <> struct qbk_geometry_name<boost::geometry::polygon_tag> { static inline std::string name() { return "Polygon"; } };
+template <> struct qbk_geometry_name<boost::geometry::multi_point_tag> { static inline std::string name() { return "MultiPoint"; } };
+template <> struct qbk_geometry_name<boost::geometry::multi_linestring_tag> { static inline std::string name() { return "MultiLinestring"; } };
+template <> struct qbk_geometry_name<boost::geometry::multi_polygon_tag> { static inline std::string name() { return "MultiPolygon"; } };
+
+
+struct qbk_table_row_header
+{
+ std::ofstream& m_out;
+
+ qbk_table_row_header(std::ofstream& out)
+ : m_out(out)
+ {}
+
+ template <typename G>
+ void operator()(G)
+ {
+ m_out
+ << "["
+ << qbk_geometry_name
+ <
+ typename boost::geometry::tag<G>::type
+ >::name()
+ << "]";
+ }
+};
+
+struct qbk_outputter
+{
+ std::ofstream m_out;
+
+ std::string filename(std::string const& name)
+ {
+ std::ostringstream out;
+ out << "../../../../generated/" << name << "_status.qbk";
+ return out.str();
+ }
+
+ explicit qbk_outputter(std::string const& name)
+ : m_out(filename(name).c_str())
+ {
+ }
+
+ inline void ok() { m_out << "[ [$img/ok.png] ]"; }
+ inline void nyi() { m_out << "[ [$img/nyi.png] ]"; }
+
+ inline void header(std::string const& )
+ {
+ m_out << "[heading Supported geometries]" << std::endl;
+ }
+
+ template <typename Types>
+ inline void table_header()
+ {
+ m_out << "[table" << std::endl << "[[ ]";
+ boost::mpl::for_each<Types>(qbk_table_row_header(m_out));
+ m_out << "]" << std::endl;
+ }
+ inline void table_header()
+ {
+ m_out << "[table" << std::endl << "[[Geometry][Status]]" << std::endl;
+ }
+
+ inline void table_footer()
+ {
+ m_out << "]" << std::endl;
+ }
+
+ template <typename G>
+ inline void begin_row()
+ {
+ m_out
+ << "[["
+ << qbk_geometry_name
+ <
+ typename boost::geometry::tag<G>::type
+ >::name()
+ << "]"
+ ;
+ }
+
+ inline void end_row()
+ {
+ m_out << "]" << std::endl;
+ }
+
+};
+
+
+#endif // BOOST_GEOMETRY_SUPPORT_STATUS_QBK_OUTPUTTER_HPP
diff --git a/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp b/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp
new file mode 100644
index 000000000..5a8fa1e35
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/support_status/support_status.cpp
@@ -0,0 +1,289 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Tool reporting Implementation Support Status in QBK or plain text format
+
+// Copyright (c) 2011-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <fstream>
+#include <sstream>
+
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/mpl/for_each.hpp>
+#include <boost/mpl/vector.hpp>
+
+#define BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD true
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
+#include <boost/geometry/algorithms/append.hpp>
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/buffer.hpp>
+#include <boost/geometry/algorithms/centroid.hpp>
+#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/algorithms/convex_hull.hpp>
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/disjoint.hpp>
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/algorithms/envelope.hpp>
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/algorithms/expand.hpp>
+#include <boost/geometry/algorithms/for_each.hpp>
+#include <boost/geometry/algorithms/length.hpp>
+#include <boost/geometry/algorithms/num_geometries.hpp>
+#include <boost/geometry/algorithms/num_interior_rings.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/algorithms/overlaps.hpp>
+#include <boost/geometry/algorithms/perimeter.hpp>
+#include <boost/geometry/algorithms/reverse.hpp>
+#include <boost/geometry/algorithms/simplify.hpp>
+#include <boost/geometry/algorithms/transform.hpp>
+#include <boost/geometry/algorithms/unique.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/algorithms/append.hpp>
+#include <boost/geometry/multi/algorithms/area.hpp>
+#include <boost/geometry/multi/algorithms/centroid.hpp>
+#include <boost/geometry/multi/algorithms/clear.hpp>
+#include <boost/geometry/multi/algorithms/convert.hpp>
+#include <boost/geometry/multi/algorithms/correct.hpp>
+#include <boost/geometry/multi/algorithms/covered_by.hpp>
+#include <boost/geometry/multi/algorithms/distance.hpp>
+#include <boost/geometry/multi/algorithms/envelope.hpp>
+#include <boost/geometry/multi/algorithms/equals.hpp>
+#include <boost/geometry/multi/algorithms/for_each.hpp>
+#include <boost/geometry/multi/algorithms/length.hpp>
+#include <boost/geometry/multi/algorithms/num_geometries.hpp>
+#include <boost/geometry/multi/algorithms/num_interior_rings.hpp>
+#include <boost/geometry/multi/algorithms/num_points.hpp>
+#include <boost/geometry/multi/algorithms/perimeter.hpp>
+#include <boost/geometry/multi/algorithms/reverse.hpp>
+#include <boost/geometry/multi/algorithms/simplify.hpp>
+#include <boost/geometry/multi/algorithms/transform.hpp>
+#include <boost/geometry/multi/algorithms/unique.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include "text_outputter.hpp"
+#include "qbk_outputter.hpp"
+
+typedef boost::geometry::cs::cartesian cartesian;
+
+typedef boost::geometry::model::point<double, 2, cartesian> point_type;
+typedef boost::geometry::model::linestring<point_type> linestring_type;
+typedef boost::geometry::model::polygon<point_type> polygon_type;
+typedef boost::geometry::model::box<point_type> box_type;
+typedef boost::geometry::model::ring<point_type> ring_type;
+typedef boost::geometry::model::segment<point_type> segment_type;
+
+typedef boost::geometry::model::multi_point<point_type> multi_point_type;
+typedef boost::geometry::model::multi_linestring<linestring_type> multi_linestring_type;
+typedef boost::geometry::model::multi_polygon<polygon_type> multi_polygon_type;
+
+typedef boost::mpl::vector<
+ point_type,
+ segment_type,
+ box_type,
+ linestring_type,
+ ring_type,
+ polygon_type,
+ multi_point_type,
+ multi_linestring_type,
+ multi_polygon_type
+> all_types;
+
+#define DECLARE_UNARY_ALGORITHM(algorithm) \
+ template <typename G> \
+ struct algorithm: boost::geometry::dispatch::algorithm<G> \
+ {};
+
+#define DECLARE_BINARY_ALGORITHM(algorithm) \
+ template <typename G1, typename G2> \
+ struct algorithm: boost::geometry::dispatch::algorithm<G1, G2> \
+ {};
+
+DECLARE_BINARY_ALGORITHM(append)
+DECLARE_UNARY_ALGORITHM(area)
+DECLARE_BINARY_ALGORITHM(buffer)
+DECLARE_UNARY_ALGORITHM(centroid)
+DECLARE_UNARY_ALGORITHM(clear)
+DECLARE_BINARY_ALGORITHM(convert)
+DECLARE_UNARY_ALGORITHM(convex_hull)
+DECLARE_UNARY_ALGORITHM(correct)
+DECLARE_BINARY_ALGORITHM(covered_by)
+DECLARE_BINARY_ALGORITHM(disjoint)
+DECLARE_BINARY_ALGORITHM(distance)
+DECLARE_UNARY_ALGORITHM(envelope)
+DECLARE_BINARY_ALGORITHM(equals)
+DECLARE_BINARY_ALGORITHM(expand)
+DECLARE_UNARY_ALGORITHM(for_each_point)
+DECLARE_UNARY_ALGORITHM(for_each_segment)
+DECLARE_UNARY_ALGORITHM(length)
+DECLARE_UNARY_ALGORITHM(num_geometries)
+DECLARE_UNARY_ALGORITHM(num_interior_rings)
+DECLARE_UNARY_ALGORITHM(num_points)
+DECLARE_BINARY_ALGORITHM(overlaps)
+DECLARE_UNARY_ALGORITHM(perimeter)
+DECLARE_UNARY_ALGORITHM(reverse)
+DECLARE_UNARY_ALGORITHM(simplify)
+DECLARE_BINARY_ALGORITHM(transform)
+DECLARE_UNARY_ALGORITHM(unique)
+DECLARE_BINARY_ALGORITHM(within)
+DECLARE_UNARY_ALGORITHM(wkt)
+
+
+template <template <typename> class Dispatcher, typename Outputter, typename G>
+struct do_unary_test
+{
+ Outputter& m_outputter;
+ inline do_unary_test(Outputter& outputter)
+ : m_outputter(outputter)
+ {}
+
+ void operator()()
+ {
+ if (boost::is_base_of<boost::geometry::nyi::not_implemented_tag, Dispatcher<G> >::type::value)
+ {
+ m_outputter.nyi();
+ }
+ else
+ {
+ m_outputter.ok();
+ }
+ }
+};
+
+template <template <typename, typename> class Dispatcher, typename Outputter, typename G2 = void>
+struct do_binary_test
+{
+ Outputter& m_outputter;
+ inline do_binary_test(Outputter& outputter)
+ : m_outputter(outputter)
+ {}
+
+ template <typename G1>
+ void operator()(G1)
+ {
+ if (boost::is_base_of<boost::geometry::nyi::not_implemented_tag, Dispatcher<G1, G2> >::type::value)
+ {
+ m_outputter.nyi();
+ }
+ else
+ {
+ m_outputter.ok();
+ }
+ }
+};
+
+template <template <typename> class Dispatcher, typename Outputter>
+struct unary_test
+{
+ Outputter& m_outputter;
+ inline unary_test(Outputter& outputter)
+ : m_outputter(outputter)
+ {}
+
+ template <typename G>
+ void operator()(G)
+ {
+ m_outputter.template begin_row<G>();
+ do_unary_test<Dispatcher, Outputter, G> test(m_outputter);
+ test();
+ m_outputter.end_row();
+ }
+};
+
+template <template <typename, typename> class Dispatcher, typename Types, typename Outputter>
+struct binary_test
+{
+ Outputter& m_outputter;
+ inline binary_test(Outputter& outputter)
+ : m_outputter(outputter)
+ {}
+
+ template <typename G2>
+ void operator()(G2)
+ {
+ m_outputter.template begin_row<G2>();
+ boost::mpl::for_each<Types>(do_binary_test<Dispatcher, Outputter, G2>(m_outputter));
+ m_outputter.end_row();
+ }
+};
+
+template <template <typename> class Dispatcher, typename Types, typename Outputter>
+void test_unary_algorithm(std::string const& name)
+{
+ Outputter outputter(name);
+ outputter.header(name);
+
+ outputter.table_header();
+ boost::mpl::for_each<Types>(unary_test<Dispatcher, Outputter>(outputter));
+
+ outputter.table_footer();
+}
+
+template <template <typename, typename> class Dispatcher, typename Types1, typename Types2, typename Outputter>
+void test_binary_algorithm(std::string const& name)
+{
+ Outputter outputter(name);
+ outputter.header(name);
+
+ outputter.template table_header<Types2>();
+ boost::mpl::for_each<Types1>(binary_test<Dispatcher, Types2, Outputter>(outputter));
+
+ outputter.table_footer();
+}
+
+
+template <typename OutputFactory>
+void support_status()
+{
+ test_binary_algorithm<append, all_types, boost::mpl::vector<point_type, std::vector<point_type> >, OutputFactory>("append");
+ test_unary_algorithm<area, all_types, OutputFactory>("area");
+ test_binary_algorithm<buffer, all_types, all_types, OutputFactory>("buffer");
+ test_unary_algorithm<centroid, all_types, OutputFactory>("centroid");
+ test_unary_algorithm<clear, all_types, OutputFactory>("clear");
+ test_binary_algorithm<convert, all_types, all_types, OutputFactory>("convert");
+ test_unary_algorithm<convex_hull, all_types, OutputFactory>("convex_hull");
+ test_unary_algorithm<correct, all_types, OutputFactory>("correct");
+ test_binary_algorithm<covered_by, all_types, all_types, OutputFactory>("covered_by");
+ test_binary_algorithm<disjoint, all_types, all_types, OutputFactory>("disjoint");
+ test_binary_algorithm<distance, all_types, all_types, OutputFactory>("distance");
+ test_unary_algorithm<envelope, all_types, OutputFactory>("envelope");
+ test_binary_algorithm<equals, all_types, all_types, OutputFactory>("equals");
+ test_binary_algorithm<expand, all_types, all_types, OutputFactory>("expand");
+ test_unary_algorithm<for_each_point, all_types, OutputFactory>("for_each_point");
+ test_unary_algorithm<for_each_segment, all_types, OutputFactory>("for_each_segment");
+ test_unary_algorithm<length, all_types, OutputFactory>("length");
+ test_unary_algorithm<num_geometries, all_types, OutputFactory>("num_geometries");
+ test_unary_algorithm<num_interior_rings, all_types, OutputFactory>("num_interior_rings");
+ test_unary_algorithm<num_interior_rings, all_types, OutputFactory>("num_points");
+ test_binary_algorithm<overlaps, all_types, all_types, OutputFactory>("overlaps");
+ test_unary_algorithm<perimeter, all_types, OutputFactory>("perimeter");
+ test_unary_algorithm<reverse, all_types, OutputFactory>("reverse");
+ test_unary_algorithm<simplify, all_types, OutputFactory>("simplify");
+ test_binary_algorithm<transform, all_types, all_types, OutputFactory>("transform");
+ test_unary_algorithm<unique, all_types, OutputFactory>("unique");
+ test_binary_algorithm<within, all_types, all_types, OutputFactory>("within");
+ test_unary_algorithm<wkt, all_types, OutputFactory>("wkt");
+}
+
+
+int main(int argc, char** argv)
+{
+ if (argc > 1 && ! strcmp(argv[1], "qbk"))
+ {
+ support_status<qbk_outputter>();
+ }
+ else
+ {
+ support_status<text_outputter>();
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/doc/src/docutils/tools/support_status/support_status.sln b/libs/geometry/doc/src/docutils/tools/support_status/support_status.sln
new file mode 100644
index 000000000..491a33ea6
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/support_status/support_status.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{047EF2F6-2E37-11E1-91D6-C70F4924019B}") = "support_status", "support_status.vcxproj", "{72FDA9D6-899F-5B22-C919-4723D44FB2A0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {72FDA9D6-899F-5B22-C919-4723D44FB2A0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {72FDA9D6-899F-5B22-C919-4723D44FB2A0}.Debug|Win32.Build.0 = Debug|Win32
+ {72FDA9D6-899F-5B22-C919-4723D44FB2A0}.Release|Win32.ActiveCfg = Release|Win32
+ {72FDA9D6-899F-5B22-C919-4723D44FB2A0}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/doc/src/docutils/tools/support_status/support_status.vcxproj b/libs/geometry/doc/src/docutils/tools/support_status/support_status.vcxproj
new file mode 100644
index 000000000..9d0749361
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/support_status/support_status.vcxproj
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../../../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="support_status.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/libs/geometry/doc/src/docutils/tools/support_status/text_outputter.hpp b/libs/geometry/doc/src/docutils/tools/support_status/text_outputter.hpp
new file mode 100644
index 000000000..17def9961
--- /dev/null
+++ b/libs/geometry/doc/src/docutils/tools/support_status/text_outputter.hpp
@@ -0,0 +1,36 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Tool reporting Implementation Support Status in QBK or plain text format
+
+// Copyright (c) 2011-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_SUPPORT_STATUS_TEXT_OUTPUTTER_HPP
+#define BOOST_GEOMETRY_SUPPORT_STATUS_TEXT_OUTPUTTER_HPP
+
+
+struct text_outputter
+{
+ explicit text_outputter(const std::string&) {}
+
+ static inline void ok() { std::cout << "OK\t"; }
+ static inline void nyi() { std::cout << "-\t"; }
+ static inline void header(std::string const& algo) { std::cout << algo << std::endl; }
+
+ template <typename T>
+ static inline void table_header() { }
+ static inline void table_header() { }
+
+ static inline void table_footer() { std::cout << std::endl; }
+
+ template <typename G>
+ static inline void begin_row() {}
+
+ static inline void end_row() { std::cout << std::endl; }
+
+};
+
+#endif // BOOST_GEOMETRY_SUPPORT_STATUS_TEXT_OUTPUTTER_HPP
diff --git a/libs/geometry/doc/src/examples/Jamfile.v2 b/libs/geometry/doc/src/examples/Jamfile.v2
new file mode 100644
index 000000000..faddc32a5
--- /dev/null
+++ b/libs/geometry/doc/src/examples/Jamfile.v2
@@ -0,0 +1,21 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project boost-geometry-doc-src-example
+ : # requirements
+ ;
+
+exe quick_start : quick_start.cpp ;
+
+build-project algorithms ;
+build-project core ;
+build-project geometries ;
+build-project views ;
diff --git a/libs/geometry/doc/src/examples/algorithms/Jamfile.v2 b/libs/geometry/doc/src/examples/algorithms/Jamfile.v2
new file mode 100644
index 000000000..6adad2105
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/Jamfile.v2
@@ -0,0 +1,78 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project boost-geometry-doc-example-algorithms
+ : # requirements
+ ;
+
+exe append : append.cpp ;
+
+exe area : area.cpp ;
+exe area_with_strategy : area_with_strategy.cpp ;
+
+exe assign : assign.cpp ;
+exe assign_2d_point : assign_2d_point.cpp ;
+exe assign_3d_point : assign_3d_point.cpp ;
+exe assign_inverse : assign_inverse.cpp ;
+exe assign_points : assign_points.cpp ;
+# exe assign_box_corners : assign_box_corners.cpp ;
+# exe assign_point_from_index : assign_point_from_index.cpp ;
+# exe assign_point_to_index : assign_point_to_index.cpp ;
+
+exe centroid : centroid.cpp ;
+exe clear : clear.cpp ;
+exe comparable_distance : comparable_distance.cpp ;
+exe convert : convert.cpp ;
+exe convex_hull : convex_hull.cpp ;
+exe correct : correct.cpp ;
+
+exe difference : difference.cpp ;
+exe distance : distance.cpp ;
+
+exe envelope : envelope.cpp ;
+exe equals : equals.cpp ;
+exe expand : expand.cpp ;
+
+exe for_each_point : for_each_point.cpp ;
+exe for_each_point_const : for_each_point_const.cpp ;
+exe for_each_segment_const : for_each_segment_const.cpp ;
+
+exe intersection_ls_ls_point : intersection_ls_ls_point.cpp ;
+exe intersection_segment : intersection_segment.cpp ;
+
+exe intersects_linestring : intersects_linestring.cpp ;
+
+exe length : length.cpp ;
+exe length_with_strategy : length_with_strategy.cpp ;
+
+exe make_2d_point : make_2d_point.cpp ;
+exe make_3d_point : make_3d_point.cpp ;
+exe make_inverse : make_inverse.cpp ;
+# exe make_with_range : make_with_range.cpp ;
+
+exe num_geometries : num_geometries.cpp ;
+exe num_interior_rings : num_interior_rings.cpp ;
+exe num_points : num_points.cpp ;
+
+exe return_envelope : return_envelope.cpp ;
+
+exe reverse : reverse.cpp ;
+
+exe simplify : length.cpp ;
+exe sym_difference : sym_difference.cpp ;
+
+exe transform : transform.cpp ;
+exe transform_with_strategy : transform_with_strategy.cpp ;
+
+exe union : union.cpp ;
+exe unique : unique.cpp ;
+
+exe within : within.cpp ;
diff --git a/libs/geometry/doc/src/examples/algorithms/append.cpp b/libs/geometry/doc/src/examples/algorithms/append.cpp
new file mode 100644
index 000000000..f5a3085b5
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/append.cpp
@@ -0,0 +1,61 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[append
+//` Shows usage of Boost.Geometry's append to append a point or a range to a polygon
+
+#include <iostream>
+
+#include <boost/assign.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+int main()
+{
+ using boost::assign::tuple_list_of;
+ using boost::make_tuple;
+ using boost::geometry::append;
+
+ typedef boost::geometry::model::polygon<boost::tuple<int, int> > polygon;
+
+ polygon poly;
+
+ // Append a range
+ append(poly, tuple_list_of(0, 0)(0, 10)(11, 11)(10, 0)); /*< tuple_list_of delivers a range and can therefore be used in boost::geometry::append >*/
+ // Append a point (in this case the closing point)
+ append(poly, make_tuple(0, 0));
+
+ // Create an interior ring (append does not do this automatically)
+ boost::geometry::interior_rings(poly).resize(1);
+
+ // Append a range to the interior ring
+ append(poly, tuple_list_of(2, 2)(2, 5)(6, 6)(5, 2), 0); /*< The last parameter ring_index 0 denotes the first interior ring >*/
+ // Append a point to the first interior ring
+ append(poly, make_tuple(2, 2), 0);
+
+ std::cout << boost::geometry::dsv(poly) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[append_output
+/*`
+Output:
+[pre
+(((0, 0), (0, 10), (11, 11), (10, 0), (0, 0)), ((2, 2), (2, 5), (6, 6), (5, 2), (2, 2)))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/area.cpp b/libs/geometry/doc/src/examples/algorithms/area.cpp
new file mode 100644
index 000000000..5816db719
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/area.cpp
@@ -0,0 +1,50 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[area
+//` Calculate the area of a polygon
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+namespace bg = boost::geometry; /*< Convenient namespace alias >*/
+
+int main()
+{
+ // Calculate the area of a cartesian polygon
+ bg::model::polygon<bg::model::d2::point_xy<double> > poly;
+ bg::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ double area = bg::area(poly);
+ std::cout << "Area: " << area << std::endl;
+
+ // Calculate the area of a spherical equatorial polygon
+ bg::model::polygon<bg::model::point<float, 2, bg::cs::spherical_equatorial<bg::degree> > > sph_poly;
+ bg::read_wkt("POLYGON((0 0,0 45,45 0,0 0))", sph_poly);
+ area = bg::area(sph_poly);
+ std::cout << "Area: " << area << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[area_output
+/*`
+Output:
+[pre
+Area: 16
+Area: 0.339837
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/area_with_strategy.cpp b/libs/geometry/doc/src/examples/algorithms/area_with_strategy.cpp
new file mode 100644
index 000000000..c0a7bfc18
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/area_with_strategy.cpp
@@ -0,0 +1,50 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[area_with_strategy
+//` Calculate the area of a polygon
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+namespace bg = boost::geometry; /*< Convenient namespace alias >*/
+
+int main()
+{
+ // Calculate the area of a cartesian polygon
+ bg::model::polygon<bg::model::d2::point_xy<double> > poly;
+ bg::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ double area = bg::area(poly);
+ std::cout << "Area: " << area << std::endl;
+
+ // Calculate the area of a spherical polygon (for latitude: 0 at equator)
+ bg::model::polygon<bg::model::point<float, 2, bg::cs::spherical_equatorial<bg::degree> > > sph_poly;
+ bg::read_wkt("POLYGON((0 0,0 45,45 0,0 0))", sph_poly);
+ area = bg::area(sph_poly);
+ std::cout << "Area: " << area << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[area_with_strategy_output
+/*`
+Output:
+[pre
+Area: 16
+Area: 0.339837
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/assign.cpp b/libs/geometry/doc/src/examples/algorithms/assign.cpp
new file mode 100644
index 000000000..857eebb34
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/assign.cpp
@@ -0,0 +1,66 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[assign
+//` Shows how to assign a geometry from another geometry
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point;
+ typedef boost::geometry::model::box<point> box;
+ typedef boost::geometry::model::polygon<point> polygon;
+
+ point p1;
+ box b;
+ boost::geometry::assign_values(p1, 1, 1);
+ boost::geometry::assign_values(b, 1, 1, 2, 2);
+
+ // Assign a box to a polygon (target = source)
+ polygon p;
+ boost::geometry::assign(p, b);
+
+ // Assign a point to another point type (conversion of point-type)
+ boost::tuple<double, double> p2;
+ boost::geometry::assign(p2, p1);
+
+ using boost::geometry::dsv;
+ std::cout
+ << "box: " << dsv(b) << std::endl
+ << "polygon: " << dsv(p) << std::endl
+ << "point: " << dsv(p1) << std::endl
+ << "point tuples: " << dsv(p2) << std::endl
+ ;
+
+ return 0;
+}
+
+//]
+
+
+//[assign_output
+/*`
+Output:
+[pre
+box: ((1, 1), (2, 2))
+polygon: (((1, 1), (1, 2), (2, 2), (2, 1), (1, 1)))
+point: (1, 1)
+point tuples: (1, 1)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/assign_2d_point.cpp b/libs/geometry/doc/src/examples/algorithms/assign_2d_point.cpp
new file mode 100644
index 000000000..b03dc0519
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/assign_2d_point.cpp
@@ -0,0 +1,62 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[assign_2d_point
+//` Shows the usage of assign to set point coordinates, and, besides that, shows how you can initialize ttmath points with high precision
+
+#include <iostream>
+#include <iomanip>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#if defined(HAVE_TTMATH)
+# include <boost/geometry/extensions/contrib/ttmath_stub.hpp>
+#endif
+
+
+int main()
+{
+ using boost::geometry::assign_values;
+
+
+ boost::geometry::model::d2::point_xy<double> p1;
+ assign_values(p1, 1.2345, 2.3456);
+
+#if defined(HAVE_TTMATH)
+ boost::geometry::model::d2::point_xy<ttmath::Big<1,4> > p2;
+ assign_values(p2, "1.2345", "2.3456"); /*< It is possible to assign coordinates with other types than the coordinate type.
+ For ttmath, you can e.g. conveniently use strings. The advantage is that it then has higher precision, because
+ if doubles are used for assignments the double-precision is used.
+ >*/
+#endif
+
+ std::cout
+ << std::setprecision(20)
+ << boost::geometry::dsv(p1) << std::endl
+#if defined(HAVE_TTMATH)
+ << boost::geometry::dsv(p2) << std::endl
+#endif
+ ;
+
+ return 0;
+}
+
+//]
+
+
+//[assign_2d_point_output
+/*`
+Output:
+[pre
+(1.2344999999999999, 2.3456000000000001)
+(1.2345, 2.3456)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/assign_3d_point.cpp b/libs/geometry/doc/src/examples/algorithms/assign_3d_point.cpp
new file mode 100644
index 000000000..9475416e7
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/assign_3d_point.cpp
@@ -0,0 +1,39 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[assign_3d_point
+//` Use assign to set three coordinates of a 3D point
+
+#include <iostream>
+#include <iomanip>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.hpp>
+
+int main()
+{
+ boost::geometry::model::point<double, 3, boost::geometry::cs::cartesian> p;
+ boost::geometry::assign_values(p, 1.2345, 2.3456, 3.4567);
+
+ std::cout << boost::geometry::dsv(p) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[assign_3d_point_output
+/*`
+Output:
+[pre
+(1.2345, 2.3456, 3.4567)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/assign_box_corners.cpp b/libs/geometry/doc/src/examples/algorithms/assign_box_corners.cpp
new file mode 100644
index 000000000..9d3e9f3b2
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/assign_box_corners.cpp
@@ -0,0 +1,60 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[assign_box_corners
+//` Shows how four point can be assigned from a 2D box
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+using namespace boost::geometry;
+
+int main()
+{
+ typedef model::d2::point_xy<double> point;
+ typedef model::box<point> box;
+
+ box b;
+ assign_values(b, 2, 2, 5, 5);
+
+ point ll, lr, ul, ur;
+ assign_box_corners(b, ll, lr, ul, ur);
+
+ std::cout << "box: " << dsv(b) << std::endl << std::endl;
+
+ std::cout << dsv(ul) << " --- " << dsv(ur) << std::endl;
+ for (int i = 0; i < 3; i++)
+ {
+ std::cout << " | |" << std::endl;
+ }
+ std::cout << dsv(ll) << " --- " << dsv(lr) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[assign_box_corners_output
+/*`
+Output:
+[pre
+box: ((2, 2), (5, 5))
+
+(2, 5) --- (5, 5)
+ | |
+ | |
+ | |
+(2, 2) --- (5, 2)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/assign_inverse.cpp b/libs/geometry/doc/src/examples/algorithms/assign_inverse.cpp
new file mode 100644
index 000000000..3390ac1b8
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/assign_inverse.cpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[assign_inverse
+//` Usage of assign_inverse and expand to conveniently determine bounding 3D box of two points
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point.hpp>
+
+using namespace boost::geometry;
+
+int main()
+{
+ typedef model::point<float, 3, cs::cartesian> point;
+ typedef model::box<point> box;
+
+ box all;
+ assign_inverse(all);
+ std::cout << dsv(all) << std::endl;
+ expand(all, point(0, 0, 0));
+ expand(all, point(1, 2, 3));
+ std::cout << dsv(all) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[assign_inverse_output
+/*`
+Output:
+[pre
+((3.40282e+038, 3.40282e+038, 3.40282e+038), (-3.40282e+038, -3.40282e+038, -3.40282e+038))
+((0, 0, 0), (1, 2, 3))]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/assign_point_from_index.cpp b/libs/geometry/doc/src/examples/algorithms/assign_point_from_index.cpp
new file mode 100644
index 000000000..6bcc89d83
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/assign_point_from_index.cpp
@@ -0,0 +1,52 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[assign_point_from_index
+//` Shows how to retrieve one point from a box (either lower-left or upper-right) or segment
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+
+using namespace boost::geometry;
+
+int main()
+{
+ typedef model::d2::point_xy<double> point;
+ typedef model::segment<point> segment;
+
+ segment s;
+ assign_values(s, 1, 1, 2, 2);
+
+ point first, second;
+ assign_point_from_index<0>(s, first);
+ assign_point_from_index<1>(s, second);
+ std::cout
+ << "segment: " << dsv(s) << std::endl
+ << "first: " << dsv(first) << std::endl
+ << "second: " << dsv(second) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[assign_point_from_index_output
+/*`
+Output:
+[pre
+segment: ((1, 1), (2, 2))
+first: (1, 1)
+second: (2, 2)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/assign_point_to_index.cpp b/libs/geometry/doc/src/examples/algorithms/assign_point_to_index.cpp
new file mode 100644
index 000000000..450d3c61f
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/assign_point_to_index.cpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[assign_point_to_index
+//` Shows how to assign the lower-left or upper-right point from a box
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+using namespace boost::geometry;
+
+int main()
+{
+ typedef model::d2::point_xy<int> point;
+ typedef model::box<point> box;
+
+ point lower_left(0, 0), upper_right(2, 2);
+
+ box b;
+ assign_point_to_index<0>(lower_left, b);
+ assign_point_to_index<1>(upper_right, b);
+ std::cout << "box: " << dsv(b) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[assign_point_to_index_output
+/*`
+Output:
+[pre
+box: ((0, 0), (2, 2))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/assign_points.cpp b/libs/geometry/doc/src/examples/algorithms/assign_points.cpp
new file mode 100644
index 000000000..9ec1df019
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/assign_points.cpp
@@ -0,0 +1,73 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[assign_points
+//` Shows usage of Boost.Geometry's assign, Boost.Assign, and Boost.Range to assign ranges of a linestring
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/assign.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/filtered.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+template <typename T>
+struct x_between
+{
+ x_between(T a, T b)
+ : fa(a), fb(b)
+ {}
+
+ template <typename P>
+ bool operator()(P const& p) const
+ {
+ return boost::geometry::get<0>(p) >= fa
+ && boost::geometry::get<0>(p) <= fb;
+ }
+private :
+ T fa, fb;
+};
+
+
+int main()
+{
+ using namespace boost::assign;
+
+ typedef boost::geometry::model::linestring<boost::tuple<int, int> > ls;
+
+ ls line1, line2, line3;
+
+ line1 = tuple_list_of(0, 0)(2, 3)(4, 0)(6, 3)(8, 0)(10, 3)(12, 0); /*< tuple_list_of is part of Boost.Assign and can be used for Boost.Geometry if points are tuples >*/
+ boost::geometry::assign_points(line2, tuple_list_of(0, 0)(2, 2)(4, 0)(6, 2)(8, 0)); /*< tuple_list_of delivers a range and can therefore be used in boost::geometry::assign >*/
+ boost::geometry::assign_points(line3, line1 | boost::adaptors::filtered(x_between<int>(4, 8))); /*< Boost.Range adaptors can also be used in boost::geometry::assign >*/
+
+ std::cout << "line 1: " << boost::geometry::dsv(line1) << std::endl;
+ std::cout << "line 2: " << boost::geometry::dsv(line2) << std::endl;
+ std::cout << "line 3: " << boost::geometry::dsv(line3) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[assign_points_output
+/*`
+Output:
+[pre
+line 1: ((0, 0), (2, 3), (4, 0), (6, 3), (8, 0), (10, 3), (12, 0))
+line 2: ((0, 0), (2, 2), (4, 0), (6, 2), (8, 0))
+line 3: ((4, 0), (6, 3), (8, 0))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/centroid.cpp b/libs/geometry/doc/src/examples/algorithms/centroid.cpp
new file mode 100644
index 000000000..2e6c8d761
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/centroid.cpp
@@ -0,0 +1,52 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[centroid
+//` Shows calculation of a centroid of a polygon
+
+#include <iostream>
+#include <list>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+/*<-*/ #include "create_svg_two.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type> polygon_type;
+
+ polygon_type poly;
+ boost::geometry::read_wkt(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", poly);
+
+ point_type p;
+ boost::geometry::centroid(poly, p);
+
+ std::cout << "centroid: " << boost::geometry::dsv(p) << std::endl;
+ /*<-*/ create_svg("centroid.svg", poly, p); /*->*/
+ return 0;
+}
+
+//]
+
+//[centroid_output
+/*`
+Output:
+[pre
+centroid: (4.04663, 1.6349)
+[$img/algorithms/centroid.png]
+]
+Note that the centroid might be located in a hole or outside a polygon, easily.
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/clear.cpp b/libs/geometry/doc/src/examples/algorithms/clear.cpp
new file mode 100644
index 000000000..da41711a8
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/clear.cpp
@@ -0,0 +1,65 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[clear
+//` Shows how to clear a ring or polygon
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+#include <boost/assign.hpp>
+
+int main()
+{
+ using boost::assign::tuple_list_of;
+
+ typedef boost::tuple<float, float> point;
+ typedef boost::geometry::model::polygon<point> polygon;
+ typedef boost::geometry::model::ring<point> ring;
+
+ polygon poly;
+
+ // Fill the polygon (using its own methods + Boost.Assign)
+ poly.outer() = tuple_list_of(0, 0)(0, 9)(10, 10)(0, 0);
+ poly.inners().push_back(tuple_list_of(1, 2)(4, 6)(2, 8)(1, 2));
+
+ std::cout << boost::geometry::dsv(poly) << std::endl;
+ boost::geometry::clear(poly);
+ std::cout << boost::geometry::dsv(poly) << std::endl;
+
+ // Create a ring using Boost.Assign
+ ring r = tuple_list_of(0, 0)(0, 9)(8, 8)(0, 0);
+
+ std::cout << boost::geometry::dsv(r) << std::endl;
+ boost::geometry::clear(r);
+ std::cout << boost::geometry::dsv(r) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[clear_output
+/*`
+Output:
+[pre
+(((0, 0), (0, 10), (11, 11), (0, 0)), ((0, 0), (0, 10), (11, 11), (0, 0)))
+(())
+((0, 0), (0, 9), (8, 8), (0, 0))
+()
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/comparable_distance.cpp b/libs/geometry/doc/src/examples/algorithms/comparable_distance.cpp
new file mode 100644
index 000000000..87b5100ce
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/comparable_distance.cpp
@@ -0,0 +1,67 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[comparable_distance
+//` Shows how to efficiently get the closest point
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/numeric/conversion/bounds.hpp>
+#include <boost/foreach.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+
+ point_type p(1.4, 2.6);
+
+ std::vector<point_type> v;
+ for (double x = 0.0; x <= 4.0; x++)
+ {
+ for (double y = 0.0; y <= 4.0; y++)
+ {
+ v.push_back(point_type(x, y));
+ }
+ }
+
+ point_type min_p;
+ double min_d = boost::numeric::bounds<double>::highest();
+ BOOST_FOREACH(point_type const& pv, v)
+ {
+ double d = boost::geometry::comparable_distance(p, pv);
+ if (d < min_d)
+ {
+ min_d = d;
+ min_p = pv;
+ }
+ }
+
+ std::cout
+ << "Closest: " << boost::geometry::dsv(min_p) << std::endl
+ << "At: " << boost::geometry::distance(p, min_p) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[comparable_distance_output
+/*`
+Output:
+[pre
+Closest: (1, 3)
+At: 0.565685
+]
+*/
+//]
+
diff --git a/libs/geometry/doc/src/examples/algorithms/convert.cpp b/libs/geometry/doc/src/examples/algorithms/convert.cpp
new file mode 100644
index 000000000..6d43fd4d8
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/convert.cpp
@@ -0,0 +1,64 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[convert
+//` Shows how to convert a geometry into another geometry
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point;
+ typedef boost::geometry::model::box<point> box;
+ typedef boost::geometry::model::polygon<point> polygon;
+
+ point p1(1, 1);
+ box bx = boost::geometry::make<box>(1, 1, 2, 2);
+
+ // Assign a box to a polygon (conversion box->poly)
+ polygon poly;
+ boost::geometry::convert(bx, poly);
+
+ // Convert a point to another point type (conversion of point-type)
+ boost::tuple<double, double> p2;
+ boost::geometry::convert(p1, p2); // source -> target
+
+ using boost::geometry::dsv;
+ std::cout
+ << "box: " << dsv(bx) << std::endl
+ << "polygon: " << dsv(poly) << std::endl
+ << "point: " << dsv(p1) << std::endl
+ << "point tuples: " << dsv(p2) << std::endl
+ ;
+
+ return 0;
+}
+
+//]
+
+
+//[convert_output
+/*`
+Output:
+[pre
+box: ((1, 1), (2, 2))
+polygon: (((1, 1), (1, 2), (2, 2), (2, 1), (1, 1)))
+point: (1, 1)
+point tuples: (1, 1)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/convex_hull.cpp b/libs/geometry/doc/src/examples/algorithms/convex_hull.cpp
new file mode 100644
index 000000000..2d9394f73
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/convex_hull.cpp
@@ -0,0 +1,57 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[convex_hull
+//` Shows how to generate the convex_hull of a geometry
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+/*<-*/ #include "create_svg_two.hpp" /*->*/
+int main()
+{
+ typedef boost::tuple<double, double> point;
+ typedef boost::geometry::model::polygon<point> polygon;
+
+ polygon poly;
+ boost::geometry::read_wkt("polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0"
+ ", 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))", poly);
+
+ polygon hull;
+ boost::geometry::convex_hull(poly, hull);
+
+ using boost::geometry::dsv;
+ std::cout
+ << "polygon: " << dsv(poly) << std::endl
+ << "hull: " << dsv(hull) << std::endl
+ ;
+
+ /*<-*/ create_svg("hull.svg", poly, hull); /*->*/
+ return 0;
+}
+
+//]
+
+
+//[convex_hull_output
+/*`
+Output:
+[pre
+polygon: (((2, 1.3), (2.4, 1.7), (2.8, 1.8), (3.4, 1.2), (3.7, 1.6), (3.4, 2), (4.1, 3), (5.3, 2.6), (5.4, 1.2), (4.9, 0.8), (2.9, 0.7), (2, 1.3)))
+hull: (((2, 1.3), (2.4, 1.7), (4.1, 3), (5.3, 2.6), (5.4, 1.2), (4.9, 0.8), (2.9, 0.7), (2, 1.3)))
+
+[$img/algorithms/convex_hull.png]
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/correct.cpp b/libs/geometry/doc/src/examples/algorithms/correct.cpp
new file mode 100644
index 000000000..c33ace9ae
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/correct.cpp
@@ -0,0 +1,68 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[correct
+//` Shows how to correct a polygon with respect to its orientation and closure
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+#include <boost/assign.hpp>
+
+int main()
+{
+ using boost::assign::tuple_list_of;
+
+ typedef boost::geometry::model::polygon
+ <
+ boost::tuple<int, int>
+ > clockwise_closed_polygon;
+
+ clockwise_closed_polygon cwcp;
+
+ // Fill it counterclockwise (so wrongly), forgetting the closing point
+ boost::geometry::exterior_ring(cwcp) = tuple_list_of(0, 0)(10, 10)(0, 9);
+
+ // Add a counterclockwise closed inner ring (this is correct)
+ boost::geometry::interior_rings(cwcp).push_back(tuple_list_of(1, 2)(4, 6)(2, 8)(1, 2));
+
+ // Its area should be negative (because of wrong orientation)
+ // and wrong (because of omitted closing point)
+ double area_before = boost::geometry::area(cwcp);
+
+ // Correct it!
+ boost::geometry::correct(cwcp);
+
+ // Check its new area
+ double area_after = boost::geometry::area(cwcp);
+
+ // And output it
+ std::cout << boost::geometry::dsv(cwcp) << std::endl;
+ std::cout << area_before << " -> " << area_after << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[correct_output
+/*`
+Output:
+[pre
+(((0, 0), (0, 9), (10, 10), (0, 0)), ((1, 2), (4, 6), (2, 8), (1, 2)))
+-7 -> 38
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/create_svg_overlay.hpp b/libs/geometry/doc/src/examples/algorithms/create_svg_overlay.hpp
new file mode 100644
index 000000000..53d81d6d6
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/create_svg_overlay.hpp
@@ -0,0 +1,60 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+// Code to create SVG for examples
+
+#ifndef CREATE_SVG_OVERLAY_HPP
+#define CREATE_SVG_OVERLAY_HPP
+
+#include <fstream>
+
+#include <boost/foreach.hpp>
+#include <boost/algorithm/string.hpp>
+
+#if defined(HAVE_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+template <typename Geometry, typename Range>
+void create_svg(std::string const& filename, Geometry const& a, Geometry const& b, Range const& range)
+{
+#if defined(HAVE_SVG)
+ std::cout << std::endl << "[$img/algorithms/" << boost::replace_all_copy(filename, ".svg", ".png") << "]" << std::endl << std::endl;
+
+ typedef typename boost::geometry::point_type<Geometry>::type point_type;
+ std::ofstream svg(filename.c_str());
+
+ boost::geometry::svg_mapper<point_type> mapper(svg, 400, 400);
+ mapper.add(a);
+ mapper.add(b);
+
+ mapper.map(a, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:2");
+ mapper.map(b, "fill-opacity:0.3;fill:rgb(51,51,153);stroke:rgb(51,51,153);stroke-width:2");
+ int i = 0;
+ BOOST_FOREACH(typename boost::range_value<Range>::type const& g, range)
+ {
+ mapper.map(g, "opacity:0.8;fill:none;stroke:rgb(255,128,0);stroke-width:4;stroke-dasharray:1,7;stroke-linecap:round");
+ std::ostringstream out;
+ out << i++;
+ mapper.text(boost::geometry::return_centroid<point_type>(g), out.str(),
+ "fill:rgb(0,0,0);font-family:Arial;font-size:10px");
+ }
+#else
+ boost::ignore_unused_variable_warning(filename);
+ boost::ignore_unused_variable_warning(a);
+ boost::ignore_unused_variable_warning(b);
+ boost::ignore_unused_variable_warning(range);
+#endif
+}
+
+// NOTE: convert manually from svg to png using Inkscape ctrl-shift-E
+// and copy png to html/img/algorithms/
+
+
+#endif // CREATE_SVG_OVERLAY_HPP
+
diff --git a/libs/geometry/doc/src/examples/algorithms/create_svg_two.hpp b/libs/geometry/doc/src/examples/algorithms/create_svg_two.hpp
new file mode 100644
index 000000000..6dbdb60d9
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/create_svg_two.hpp
@@ -0,0 +1,55 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+// Code to create SVG for examples
+
+#ifndef CREATE_SVG_TWO_HPP
+#define CREATE_SVG_TWO_HPP
+
+#include <fstream>
+#include <boost/algorithm/string.hpp>
+
+#if defined(HAVE_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+template <typename Geometry1, typename Geometry2>
+void create_svg(std::string const& filename, Geometry1 const& a, Geometry2 const& b)
+{
+#if defined(HAVE_SVG)
+ std::cout << std::endl << "[$img/algorithms/" << boost::replace_all_copy(filename, ".svg", ".png") << "]" << std::endl << std::endl;
+
+ typedef typename boost::geometry::point_type<Geometry1>::type point_type;
+ std::ofstream svg(filename.c_str());
+
+ boost::geometry::svg_mapper<point_type> mapper(svg, 400, 400);
+ mapper.add(a);
+ mapper.add(b);
+
+ mapper.map(a, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:2");
+ if (boost::geometry::geometry_id<Geometry2>::value == 1)
+ {
+ mapper.map(b, "fill:rgb(255,128,0);stroke:rgb(0,0,100);stroke-width:1");
+ }
+ else
+ {
+ mapper.map(b, "opacity:0.8;fill:none;stroke:rgb(255,128,0);stroke-width:4;stroke-dasharray:1,7;stroke-linecap:round");
+ }
+#else
+ boost::ignore_unused_variable_warning(filename);
+ boost::ignore_unused_variable_warning(a);
+ boost::ignore_unused_variable_warning(b);
+#endif
+}
+
+// NOTE: convert manually from svg to png using Inkscape ctrl-shift-E
+// and copy png to html/img/algorithms/
+
+
+#endif // CREATE_SVG_TWO_HPP
+
diff --git a/libs/geometry/doc/src/examples/algorithms/difference.cpp b/libs/geometry/doc/src/examples/algorithms/difference.cpp
new file mode 100644
index 000000000..77c935de9
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/difference.cpp
@@ -0,0 +1,90 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[difference
+//` Shows how to subtract one polygon from another polygon
+
+#include <iostream>
+#include <list>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <boost/foreach.hpp>
+/*<-*/ #include "create_svg_overlay.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;
+
+ polygon green, blue;
+
+ boost::geometry::read_wkt(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", green);
+
+ boost::geometry::read_wkt(
+ "POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))", blue);
+
+ std::list<polygon> output;
+ boost::geometry::difference(green, blue, output);
+
+ int i = 0;
+ std::cout << "green - blue:" << std::endl;
+ BOOST_FOREACH(polygon const& p, output)
+ {
+ std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
+ }
+
+ /*<-*/ create_svg("difference_a.svg", green, blue, output); /*->*/
+ output.clear();
+ boost::geometry::difference(blue, green, output);
+
+ i = 0;
+ std::cout << "blue - green:" << std::endl;
+ BOOST_FOREACH(polygon const& p, output)
+ {
+ std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
+ }
+
+ /*<-*/ create_svg("difference_b.svg", green, blue, output); /*->*/
+ return 0;
+}
+
+//]
+
+
+//[difference_output
+/*`
+Output:
+[pre
+green - blue:
+0: 0.02375
+1: 0.542951
+2: 0.0149697
+3: 0.226855
+4: 0.839424
+
+[$img/algorithms/difference_a.png]
+
+blue - green:
+0: 0.525154
+1: 0.015
+2: 0.181136
+3: 0.128798
+4: 0.340083
+5: 0.307778
+
+[$img/algorithms/difference_b.png]
+]
+*/
+//]
+
diff --git a/libs/geometry/doc/src/examples/algorithms/difference_inserter.cpp b/libs/geometry/doc/src/examples/algorithms/difference_inserter.cpp
new file mode 100644
index 000000000..5ba4d0c23
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/difference_inserter.cpp
@@ -0,0 +1,88 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[difference_inserter
+//` Shows how the difference_inserter function can be used
+
+#include <iostream>
+#include <vector>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <boost/foreach.hpp>
+/*<-*/ #include "create_svg_overlay.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;
+
+ polygon green, blue;
+
+ boost::geometry::read_wkt(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", green);
+
+ boost::geometry::read_wkt(
+ "POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))", blue);
+
+ std::vector<polygon> output;
+
+ // Note that this sample simulates the symmetric difference,
+ // which is also available as a separate algorithm.
+ // It chains the output iterator returned by the function to the second instance.
+ boost::geometry::difference_inserter<polygon>
+ (
+ green, blue,
+ boost::geometry::difference_inserter<polygon>
+ (
+ blue, green,
+ std::back_inserter(output)
+ )
+ );
+
+
+ int i = 0;
+ std::cout << "(blue \ green) u (green \ blue):" << std::endl;
+ BOOST_FOREACH(polygon const& p, output)
+ {
+ std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
+ }
+
+ /*<-*/ create_svg("difference_inserter.svg", green, blue, output); /*->*/
+ return 0;
+}
+
+//]
+
+
+//[difference_inserter_output
+/*`
+Output:
+[pre
+(blue \\ green) u (green \\ blue):
+0: 0.525154
+1: 0.015
+2: 0.181136
+3: 0.128798
+4: 0.340083
+5: 0.307778
+6: 0.02375
+7: 0.542951
+8: 0.0149697
+9: 0.226855
+10: 0.839424
+
+[$img/algorithms/sym_difference.png]
+
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/distance.cpp b/libs/geometry/doc/src/examples/algorithms/distance.cpp
new file mode 100644
index 000000000..89a629641
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/distance.cpp
@@ -0,0 +1,68 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[distance
+//` Shows calculation of distance of point to some other geometries
+
+#include <iostream>
+#include <list>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <boost/foreach.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type> polygon_type;
+ typedef boost::geometry::model::linestring<point_type> linestring_type;
+ typedef boost::geometry::model::multi_point<point_type> multi_point_type;
+
+ point_type p(1,2);
+ polygon_type poly;
+ linestring_type line;
+ multi_point_type mp;
+
+ boost::geometry::read_wkt(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", poly);
+ line.push_back(point_type(0,0));
+ line.push_back(point_type(0,3));
+ mp.push_back(point_type(0,0));
+ mp.push_back(point_type(3,3));
+
+ std::cout
+ << "Point-Poly: " << boost::geometry::distance(p, poly) << std::endl
+ << "Point-Line: " << boost::geometry::distance(p, line) << std::endl
+ << "Point-MultiPoint: " << boost::geometry::distance(p, mp) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[distance_output
+/*`
+Output:
+[pre
+Point-Poly: 1.22066
+Point-Line: 1
+Point-MultiPoint: 2.23607
+]
+*/
+//]
+
diff --git a/libs/geometry/doc/src/examples/algorithms/envelope.cpp b/libs/geometry/doc/src/examples/algorithms/envelope.cpp
new file mode 100644
index 000000000..1a3c6e454
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/envelope.cpp
@@ -0,0 +1,55 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[envelope
+//` Shows how to calculate the bounding box of a polygon
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+/*<-*/ #include "create_svg_two.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point;
+
+ boost::geometry::model::polygon<point> polygon;
+
+ boost::geometry::read_wkt(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", polygon);
+
+ boost::geometry::model::box<point> box;
+ boost::geometry::envelope(polygon, box);
+
+ std::cout << "envelope:" << boost::geometry::dsv(box) << std::endl;
+
+ /*<-*/ create_svg("envelope.svg", polygon, box); /*->*/
+ return 0;
+}
+
+//]
+
+
+//[envelope_output
+/*`
+Output:
+[pre
+envelope:((2, 0.7), (5.4, 3))
+
+[$img/algorithms/envelope.png]
+]
+*/
+//]
+
diff --git a/libs/geometry/doc/src/examples/algorithms/equals.cpp b/libs/geometry/doc/src/examples/algorithms/equals.cpp
new file mode 100644
index 000000000..fe2836a48
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/equals.cpp
@@ -0,0 +1,61 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[equals
+//` Shows the predicate equals, which returns true if two geometries are spatially equal
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+#include <boost/assign.hpp>
+
+int main()
+{
+ using boost::assign::tuple_list_of;
+
+ typedef boost::tuple<int, int> point;
+
+ boost::geometry::model::polygon<point> poly1, poly2;
+ boost::geometry::exterior_ring(poly1) = tuple_list_of(0, 0)(0, 5)(5, 5)(5, 0)(0, 0);
+ boost::geometry::exterior_ring(poly2) = tuple_list_of(5, 0)(0, 0)(0, 5)(5, 5)(5, 0);
+
+ std::cout
+ << "polygons are spatially "
+ << (boost::geometry::equals(poly1, poly2) ? "equal" : "not equal")
+ << std::endl;
+
+ boost::geometry::model::box<point> box;
+ boost::geometry::assign_values(box, 0, 0, 5, 5);
+
+ std::cout
+ << "polygon and box are spatially "
+ << (boost::geometry::equals(box, poly2) ? "equal" : "not equal")
+ << std::endl;
+
+
+ return 0;
+}
+
+//]
+
+
+//[equals_output
+/*`
+Output:
+[pre
+polygons are spatially equal
+polygon and box are spatially equal
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/expand.cpp b/libs/geometry/doc/src/examples/algorithms/expand.cpp
new file mode 100644
index 000000000..cba03b247
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/expand.cpp
@@ -0,0 +1,48 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[expand
+//` Shows the usage of expand
+
+#include <iostream>
+#include <list>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<short int> point_type;
+ typedef boost::geometry::model::box<point_type> box_type;
+
+ using boost::geometry::expand;
+
+ box_type box = boost::geometry::make_inverse<box_type>(); /*< expand is usually preceded by a call to assign_inverse or make_inverse >*/
+
+ expand(box, point_type(0, 0));
+ expand(box, point_type(1, 2));
+ expand(box, point_type(5, 4));
+ expand(box, boost::geometry::make<box_type>(3, 3, 5, 5));
+
+ std::cout << boost::geometry::dsv(box) << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[expand_output
+/*`
+Output:
+[pre
+((0, 0), (5, 5))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/for_each_point.cpp b/libs/geometry/doc/src/examples/algorithms/for_each_point.cpp
new file mode 100644
index 000000000..86547c940
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/for_each_point.cpp
@@ -0,0 +1,69 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[for_each_point
+//` Convenient usage of for_each_point, rounding all points of a geometry
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+
+template <typename Point>
+class round_coordinates
+{
+private :
+ typedef typename boost::geometry::coordinate_type<Point>::type coordinate_type;
+ coordinate_type factor;
+
+ inline coordinate_type round(coordinate_type value)
+ {
+ return floor(0.5 + (value / factor)) * factor;
+ }
+
+public :
+ round_coordinates(coordinate_type f)
+ : factor(f)
+ {}
+
+ inline void operator()(Point& p)
+ {
+ using boost::geometry::get;
+ using boost::geometry::set;
+ set<0>(p, round(get<0>(p)));
+ set<1>(p, round(get<1>(p)));
+ }
+};
+
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point;
+ boost::geometry::model::polygon<point> poly;
+ boost::geometry::read_wkt("POLYGON((0 0,1.123 9.987,8.876 2.234,0 0),(3.345 4.456,7.654 8.765,9.123 5.432,3.345 4.456))", poly);
+ boost::geometry::for_each_point(poly, round_coordinates<point>(0.1));
+ std::cout << "Rounded: " << boost::geometry::wkt(poly) << std::endl;
+ return 0;
+}
+
+//]
+
+
+//[for_each_point_output
+/*`
+Output:
+[pre
+ Rounded: POLYGON((0 0,1.1 10,8.9 2.2,0 0),(3.3 4.5,7.7 8.8,9.1 5.4,3.3 4.5))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/for_each_point_const.cpp b/libs/geometry/doc/src/examples/algorithms/for_each_point_const.cpp
new file mode 100644
index 000000000..42c5bf016
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/for_each_point_const.cpp
@@ -0,0 +1,50 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[for_each_point_const
+//` Sample using for_each_point, using a function to list coordinates
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+template <typename Point>
+void list_coordinates(Point const& p)
+{
+ using boost::geometry::get;
+ std::cout << "x = " << get<0>(p) << " y = " << get<1>(p) << std::endl;
+}
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point;
+ boost::geometry::model::polygon<point> poly;
+ boost::geometry::read_wkt("POLYGON((0 0,0 4,4 0,0 0))", poly);
+ boost::geometry::for_each_point(poly, list_coordinates<point>);
+ return 0;
+}
+
+//]
+
+
+//[for_each_point_const_output
+/*`
+Output:
+[pre
+x = 0 y = 0
+x = 0 y = 4
+x = 4 y = 0
+x = 0 y = 0
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/for_each_segment_const.cpp b/libs/geometry/doc/src/examples/algorithms/for_each_segment_const.cpp
new file mode 100644
index 000000000..f7296bc76
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/for_each_segment_const.cpp
@@ -0,0 +1,95 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[for_each_segment_const
+//` Sample using for_each_segment, using a functor to get the minimum and maximum length of a segment in a linestring
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/assign.hpp>
+
+
+template <typename Segment>
+struct gather_segment_statistics
+{
+ // Remember that if coordinates are integer, the length might be floating point
+ // So use "double" for integers. In other cases, use coordinate type
+ typedef typename boost::geometry::select_most_precise
+ <
+ typename boost::geometry::coordinate_type<Segment>::type,
+ double
+ >::type type;
+
+ type min_length, max_length;
+
+ // Initialize min and max
+ gather_segment_statistics()
+ : min_length(1e38)
+ , max_length(-1)
+ {}
+
+ // This operator is called for each segment
+ inline void operator()(Segment const& s)
+ {
+ type length = boost::geometry::length(s);
+ if (length < min_length) min_length = length;
+ if (length > max_length) max_length = length;
+ }
+};
+
+int main()
+{
+ // Bring "+=" for a vector into scope
+ using namespace boost::assign;
+
+ // Define a type
+ typedef boost::geometry::model::d2::point_xy<double> point;
+
+ // Declare a linestring
+ boost::geometry::model::linestring<point> polyline;
+
+ // Use Boost.Assign to initialize a linestring
+ polyline += point(0, 0), point(3, 3), point(5, 1), point(6, 2),
+ point(8, 0), point(4, -4), point(1, -1), point(3, 2);
+
+
+ // Declare the gathering class...
+ gather_segment_statistics
+ <
+ boost::geometry::model::referring_segment<point>
+ > functor;
+
+ // ... and use it, the essention.
+ // As also in std::for_each it is a const value, so retrieve it as a return value.
+ functor = boost::geometry::for_each_segment(polyline, functor);
+
+ // Output the results
+ std::cout
+ << "Min segment length: " << functor.min_length << std::endl
+ << "Max segment length: " << functor.max_length << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[for_each_segment_const_output
+/*`
+Output:
+[pre
+Min segment length: 1.41421
+Max segment length: 5.65685
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/intersection_ls_ls_point.cpp b/libs/geometry/doc/src/examples/algorithms/intersection_ls_ls_point.cpp
new file mode 100644
index 000000000..630c60cd6
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/intersection_ls_ls_point.cpp
@@ -0,0 +1,55 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[intersection_ls_ls_point
+//` Calculate the intersection of two linestrings
+
+#include <iostream>
+#include <deque>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+#include <boost/foreach.hpp>
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> P;
+ std::vector<P> line1, line2;
+ boost::geometry::read_wkt("linestring(1 1,2 2,3 1)", line1);
+ boost::geometry::read_wkt("linestring(1 2,2 1,3 2)", line2);
+
+ std::deque<P> intersection_points;
+ boost::geometry::intersection(line1, line2, intersection_points);
+
+ BOOST_FOREACH(P const& p, intersection_points)
+ {
+ std::cout << " " << boost::geometry::wkt(p);
+ }
+ std::cout << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[intersection_ls_ls_point_output
+/*`
+Output:
+[pre
+ POINT(1.5 1.5) POINT(2.5 1.5)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/intersection_poly_poly.cpp b/libs/geometry/doc/src/examples/algorithms/intersection_poly_poly.cpp
new file mode 100644
index 000000000..a6034e439
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/intersection_poly_poly.cpp
@@ -0,0 +1,66 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[intersection
+//` Shows the intersection of two polygons
+
+#include <iostream>
+#include <deque>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <boost/foreach.hpp>
+/*<-*/ #include "create_svg_overlay.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;
+
+ polygon green, blue;
+
+ boost::geometry::read_wkt(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", green);
+
+ boost::geometry::read_wkt(
+ "POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))", blue);
+
+ std::deque<polygon> output;
+ boost::geometry::intersection(green, blue, output);
+
+ int i = 0;
+ std::cout << "green && blue:" << std::endl;
+ BOOST_FOREACH(polygon const& p, output)
+ {
+ std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
+ }
+
+ /*<-*/ create_svg("intersection.svg", green, blue, output); /*->*/
+ return 0;
+}
+
+//]
+
+
+//[intersection_output
+/*`
+Output:
+[pre
+green && blue:
+0: 2.50205
+
+[$img/algorithms/intersection.png]
+
+]
+*/
+//]
+
diff --git a/libs/geometry/doc/src/examples/algorithms/intersection_segment.cpp b/libs/geometry/doc/src/examples/algorithms/intersection_segment.cpp
new file mode 100644
index 000000000..367b9b4fb
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/intersection_segment.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[intersection_segment
+//` Calculate the intersection point (or points) of two segments
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <boost/foreach.hpp>
+
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> P;
+ boost::geometry::model::segment<P> segment1, segment2;
+ boost::geometry::read_wkt("linestring(1 1,2 2)", segment1);
+ boost::geometry::read_wkt("linestring(2 1,1 2)", segment2);
+
+ std::vector<P> intersections;
+ boost::geometry::intersection(segment1, segment2, intersections);
+
+ BOOST_FOREACH(P const& p, intersections)
+ {
+ std::cout << " " << boost::geometry::wkt(p);
+ }
+ std::cout << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[intersection_segment_output
+/*`
+Output:
+[pre
+ POINT(1.5 1.5)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/intersects_linestring.cpp b/libs/geometry/doc/src/examples/algorithms/intersects_linestring.cpp
new file mode 100644
index 000000000..ec8dd89dd
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/intersects_linestring.cpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[intersects_linestring
+//` Check if two linestrings intersect each other
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+int main()
+{
+ // Calculate the intersects of a cartesian polygon
+ typedef boost::geometry::model::d2::point_xy<double> P;
+ boost::geometry::model::linestring<P> line1, line2;
+
+ boost::geometry::read_wkt("linestring(1 1,2 2,3 3)", line1);
+ boost::geometry::read_wkt("linestring(2 1,1 2,4 0)", line2);
+
+ bool b = boost::geometry::intersects(line1, line2);
+
+ std::cout << "Intersects: " << (b ? "YES" : "NO") << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[intersects_linestring_output
+/*`
+Output:
+[pre
+Intersects: YES
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/intersects_segment.cpp b/libs/geometry/doc/src/examples/algorithms/intersects_segment.cpp
new file mode 100644
index 000000000..223d9b079
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/intersects_segment.cpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[intersects
+//` Check if two linestrings intersect each other
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+int main()
+{
+ // Calculate the intersects of a cartesian polygon
+ typedef boost::geometry::model::d2::point_xy<double> P;
+ bg::model::linestring<P> line1, line2;
+
+ boost::geometry::read_wkt("linestring(1 1,2 2)", line1);
+ boost::geometry::read_wkt("linestring(2 1,1 2)", line2);
+
+ bool b = boost::geometry::intersects(line1, line2);
+
+ std::cout << "Intersects: " << (b ? "YES" : "NO") << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[intersects_output
+/*`
+Output:
+[pre
+Intersects: YES
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/length.cpp b/libs/geometry/doc/src/examples/algorithms/length.cpp
new file mode 100644
index 000000000..35fa50ea3
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/length.cpp
@@ -0,0 +1,42 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[length
+ //` The following simple example shows the calculation of the length of a linestring containing three points
+
+#include <iostream>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+int main()
+{
+ using namespace boost::geometry;
+ model::linestring<model::d2::point_xy<double> > line;
+ read_wkt("linestring(0 0,1 1,4 8,3 2)", line);
+ std::cout << "linestring length is "
+ << length(line)
+ << " units" << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[length_output
+/*`
+Output:
+[pre
+linestring length is 15.1127 units
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/length_with_strategy.cpp b/libs/geometry/doc/src/examples/algorithms/length_with_strategy.cpp
new file mode 100644
index 000000000..99c15fb19
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/length_with_strategy.cpp
@@ -0,0 +1,43 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[length_with_strategy
+//`The following example shows the length measured over a sphere, expressed in kilometers. To do that the radius of the sphere must be specified in the constructor of the strategy.
+
+#include <iostream>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+
+int main()
+{
+ using namespace boost::geometry;
+ typedef model::point<float, 2, cs::spherical_equatorial<degree> > P;
+ model::linestring<P> line;
+ line.push_back(P(2, 41));
+ line.push_back(P(2, 48));
+ line.push_back(P(5, 52));
+ double const mean_radius = 6371.0; /*< [@http://en.wikipedia.org/wiki/Earth_radius Wiki] >*/
+ std::cout << "length is "
+ << length(line, strategy::distance::haversine<P>(mean_radius) )
+ << " kilometers " << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[length_with_strategy_output
+/*`
+Output:
+[pre
+length is 1272.03 kilometers
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/make_2d_point.cpp b/libs/geometry/doc/src/examples/algorithms/make_2d_point.cpp
new file mode 100644
index 000000000..92f7b0259
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/make_2d_point.cpp
@@ -0,0 +1,63 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[make_2d_point
+//` Shows the usage of make as a generic constructor for different point types
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon/point.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+struct mypoint { float _x, _y; };
+
+BOOST_GEOMETRY_REGISTER_POINT_2D(mypoint, float, cs::cartesian, _x, _y)
+
+template <typename Point>
+void construct_and_display()
+{
+ using boost::geometry::make;
+ using boost::geometry::get;
+
+ Point p = make<Point>(1, 2);
+
+ std::cout << "x=" << get<0>(p) << " y=" << get<1>(p)
+ << " (" << typeid(Point).name() << ")"
+ << std::endl;
+}
+
+int main()
+{
+ construct_and_display<boost::geometry::model::d2::point_xy<double> >();
+ construct_and_display<boost::geometry::model::d2::point_xy<int> >();
+ construct_and_display<boost::tuple<double, double> >();
+ construct_and_display<boost::polygon::point_data<int> >();
+ construct_and_display<mypoint>();
+ return 0;
+}
+
+//]
+
+//[make_2d_point_output
+/*`
+Output (compiled using gcc):
+[pre
+x=1 y=2 (N5boost8geometry5model2d28point_xyIdNS0_2cs9cartesianEEE)
+x=1 y=2 (N5boost8geometry5model2d28point_xyIiNS0_2cs9cartesianEEE)
+x=1 y=2 (N5boost6tuples5tupleIddNS0_9null_typeES2_S2_S2_S2_S2_S2_S2_EE)
+x=1 y=2 (N5boost7polygon10point_dataIiEE)
+x=1 y=2 (7mypoint)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/make_3d_point.cpp b/libs/geometry/doc/src/examples/algorithms/make_3d_point.cpp
new file mode 100644
index 000000000..6b7e8e7db
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/make_3d_point.cpp
@@ -0,0 +1,36 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[make_3d_point
+//` Using make to construct a three dimensional point
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::point<double, 3, boost::geometry::cs::cartesian> point_type;
+ point_type p = boost::geometry::make<point_type>(1, 2, 3);
+ std::cout << boost::geometry::dsv(p) << std::endl;
+ return 0;
+}
+
+//]
+
+
+//[make_3d_point_output
+/*`
+Output:
+[pre
+(1, 2, 3)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/make_inverse.cpp b/libs/geometry/doc/src/examples/algorithms/make_inverse.cpp
new file mode 100644
index 000000000..339b0f4b1
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/make_inverse.cpp
@@ -0,0 +1,47 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[make_inverse
+//` Usage of make_inverse and expand to conveniently determine bounding box of several objects
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+using namespace boost::geometry;
+
+int main()
+{
+
+ typedef model::d2::point_xy<double> point;
+ typedef model::box<point> box;
+
+ box all = make_inverse<box>();
+ std::cout << dsv(all) << std::endl;
+ expand(all, make<box>(0, 0, 3, 4));
+ expand(all, make<box>(2, 2, 5, 6));
+ std::cout << dsv(all) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[make_inverse_output
+/*`
+Output:
+[pre
+((1.79769e+308, 1.79769e+308), (-1.79769e+308, -1.79769e+308))
+((0, 0), (5, 6))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/make_with_range.cpp b/libs/geometry/doc/src/examples/algorithms/make_with_range.cpp
new file mode 100644
index 000000000..56ff34c45
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/make_with_range.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[make_with_range
+//` Using make to construct a linestring with two different range types
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian) /*< Necessary to register a C array like {1,2} as a point >*/
+
+int main()
+{
+ using boost::geometry::make;
+ using boost::geometry::detail::make::make_points;
+
+ typedef boost::geometry::model::d2::point_xy<double> point;
+ typedef boost::geometry::model::linestring<point> linestring;
+
+ double coordinates[][2] = {{1,2}, {3,4}, {5, 6}}; /*< Initialize with C array points >*/
+ linestring ls = make_points<linestring>(coordinates);
+ std::cout << boost::geometry::dsv(ls) << std::endl;
+
+ point points[3] = { make<point>(9,8), make<point>(7,6), make<point>(5,4) }; /*< Construct array with points, using make which should work for any point type >*/
+ std::cout << boost::geometry::dsv(make_points<linestring>(points)) << std::endl; /*< Construct linestring with point-array and output it as Delimiter Separated Values >*/
+
+ return 0;
+}
+
+//]
+
+
+//[make_with_range_output
+/*`
+Output:
+[pre
+((1, 2), (3, 4), (5, 6))
+((9, 8), (7, 6), (5, 4))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/num_geometries.cpp b/libs/geometry/doc/src/examples/algorithms/num_geometries.cpp
new file mode 100644
index 000000000..8a350d5b8
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/num_geometries.cpp
@@ -0,0 +1,48 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[num_geometries
+//` Get the number of geometries making up a multi-geometry
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+
+int main()
+{
+ boost::geometry::model::multi_polygon
+ <
+ boost::geometry::model::polygon
+ <
+ boost::geometry::model::d2::point_xy<double>
+ >
+ > mp;
+ boost::geometry::read_wkt("MULTIPOLYGON(((0 0,0 10,10 0,0 0),(1 1,1 9,9 1,1 1)),((10 10,10 7,7 10,10 10)))", mp);
+ std::cout << "Number of geometries: " << boost::geometry::num_geometries(mp) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[num_geometries_output
+/*`
+Output:
+[pre
+ Number of geometries: 2
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/num_interior_rings.cpp b/libs/geometry/doc/src/examples/algorithms/num_interior_rings.cpp
new file mode 100644
index 000000000..aeb8c92b7
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/num_interior_rings.cpp
@@ -0,0 +1,48 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[num_interior_rings
+//` Get the number of interior rings in a multi-polygon
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+
+int main()
+{
+ boost::geometry::model::multi_polygon
+ <
+ boost::geometry::model::polygon
+ <
+ boost::geometry::model::d2::point_xy<double>
+ >
+ > mp;
+ boost::geometry::read_wkt("MULTIPOLYGON(((0 0,0 10,10 0,0 0),(1 1,1 9,9 1,1 1)),((10 10,10 7,7 10,10 10)))", mp);
+ std::cout << "Number of interior rings: " << boost::geometry::num_interior_rings(mp) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[num_interior_rings_output
+/*`
+Output:
+[pre
+ Number of interior rings: 1
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/num_points.cpp b/libs/geometry/doc/src/examples/algorithms/num_points.cpp
new file mode 100644
index 000000000..2e3c5c678
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/num_points.cpp
@@ -0,0 +1,49 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[num_points
+//` Get the number of points in a geometry
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/multi/multi.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+
+int main()
+{
+ boost::geometry::model::multi_polygon
+ <
+ boost::geometry::model::polygon
+ <
+ boost::geometry::model::d2::point_xy<double>
+ >
+ > mp;
+ boost::geometry::read_wkt("MULTIPOLYGON(((0 0,0 10,10 0,0 0),(1 1,1 9,9 1,1 1)),((10 10,10 7,7 10,10 10)))", mp);
+ std::cout << "Number of points: " << boost::geometry::num_points(mp) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[num_points_output
+/*`
+Output:
+[pre
+ Number of points: 12
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/return_envelope.cpp b/libs/geometry/doc/src/examples/algorithms/return_envelope.cpp
new file mode 100644
index 000000000..3c8ef3045
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/return_envelope.cpp
@@ -0,0 +1,63 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[return_envelope
+//` Shows how to return the envelope of a ring
+
+#include <iostream>
+
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+
+#include <boost/assign.hpp>
+
+/*<-*/ #include "create_svg_two.hpp" /*->*/
+
+int main()
+{
+ using namespace boost::assign;
+
+ typedef boost::geometry::model::d2::point_xy<double> point;
+
+ boost::geometry::model::ring<point> ring;
+ ring +=
+ point(4.0, -0.5), point(3.5, 1.0),
+ point(2.0, 1.5), point(3.5, 2.0),
+ point(4.0, 3.5), point(4.5, 2.0),
+ point(6.0, 1.5), point(4.5, 1.0),
+ point(4.0, -0.5);
+
+ typedef boost::geometry::model::box<point> box;
+
+ std::cout
+ << "return_envelope:"
+ << boost::geometry::dsv(boost::geometry::return_envelope<box>(ring))
+ << std::endl;
+
+ /*<-*/ create_svg("return_envelope.svg", ring, boost::geometry::return_envelope<box>(ring)); /*->*/
+ return 0;
+}
+
+//]
+
+
+//[return_envelope_output
+/*`
+Output:
+[pre
+return_envelope:((2, -0.5), (6, 3.5))
+
+[$img/algorithms/return_envelope.png]
+]
+*/
+//]
+
diff --git a/libs/geometry/doc/src/examples/algorithms/reverse.cpp b/libs/geometry/doc/src/examples/algorithms/reverse.cpp
new file mode 100644
index 000000000..89e299e56
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/reverse.cpp
@@ -0,0 +1,67 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[reverse
+//` Shows how to reverse a ring or polygon
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+#include <boost/assign.hpp>
+
+int main()
+{
+ using boost::assign::tuple_list_of;
+
+ typedef boost::tuple<int, int> point;
+ typedef boost::geometry::model::polygon<point> polygon;
+ typedef boost::geometry::model::ring<point> ring;
+
+
+ polygon poly;
+ boost::geometry::exterior_ring(poly) = tuple_list_of(0, 0)(0, 9)(10, 10)(0, 0);
+ boost::geometry::interior_rings(poly).push_back(tuple_list_of(1, 2)(4, 6)(2, 8)(1, 2));
+
+ double area_before = boost::geometry::area(poly);
+ boost::geometry::reverse(poly);
+ double area_after = boost::geometry::area(poly);
+ std::cout << boost::geometry::dsv(poly) << std::endl;
+ std::cout << area_before << " -> " << area_after << std::endl;
+
+ ring r = tuple_list_of(0, 0)(0, 9)(8, 8)(0, 0);
+
+ area_before = boost::geometry::area(r);
+ boost::geometry::reverse(r);
+ area_after = boost::geometry::area(r);
+ std::cout << boost::geometry::dsv(r) << std::endl;
+ std::cout << area_before << " -> " << area_after << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[reverse_output
+/*`
+Output:
+[pre
+(((0, 0), (10, 10), (0, 9), (0, 0)), ((1, 2), (2, 8), (4, 6), (1, 2)))
+38 -> -38
+((0, 0), (8, 8), (0, 9), (0, 0))
+36 -> -36
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/simplify.cpp b/libs/geometry/doc/src/examples/algorithms/simplify.cpp
new file mode 100644
index 000000000..2d9b77d09
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/simplify.cpp
@@ -0,0 +1,54 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[simplify
+//` Example showing how to simplify a linestring
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+/*< For this example we use Boost.Assign to add points >*/
+#include <boost/assign.hpp>
+
+using namespace boost::assign;
+
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> xy;
+
+ boost::geometry::model::linestring<xy> line;
+ line += xy(1.1, 1.1), xy(2.5, 2.1), xy(3.1, 3.1), xy(4.9, 1.1), xy(3.1, 1.9); /*< With Boost.Assign >*/
+
+ // Simplify it, using distance of 0.5 units
+ boost::geometry::model::linestring<xy> simplified;
+ boost::geometry::simplify(line, simplified, 0.5);
+ std::cout
+ << " original: " << boost::geometry::dsv(line) << std::endl
+ << "simplified: " << boost::geometry::dsv(simplified) << std::endl;
+
+
+ return 0;
+}
+
+//]
+
+
+//[simplify_output
+/*`
+Output:
+[pre
+ original: ((1.1, 1.1), (2.5, 2.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+simplified: ((1.1, 1.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/simplify_insert.cpp b/libs/geometry/doc/src/examples/algorithms/simplify_insert.cpp
new file mode 100644
index 000000000..b80686f91
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/simplify_insert.cpp
@@ -0,0 +1,52 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[simplify_inserter
+//` Simplify a linestring using a back inserter
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> P;
+ typedef boost::geometry::model::linestring<P> L;
+
+ L line;
+ line.push_back(P(1.1, 1.1));
+ line.push_back(P(2.5, 2.1));
+ line.push_back(P(3.1, 3.1));
+ line.push_back(P(4.9, 1.1));
+ line.push_back(P(3.1, 1.9));
+
+ L simplified;
+ boost::geometry::simplify_inserter(line, std::back_inserter(simplified), 0.5);
+
+ std::cout
+ << " original: " << boost::geometry::dsv(line) << std::endl
+ << "simplified: " << boost::geometry::dsv(simplified) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[simplify_inserter_output
+/*`
+Output:
+[pre
+ original: ((1.1, 1.1), (2.5, 2.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+simplified: ((1.1, 1.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/simplify_insert_with_strategy.cpp b/libs/geometry/doc/src/examples/algorithms/simplify_insert_with_strategy.cpp
new file mode 100644
index 000000000..95deab38d
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/simplify_insert_with_strategy.cpp
@@ -0,0 +1,72 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[simplify_inserter
+//` Simplify a linestring using an output iterator
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> P;
+ typedef boost::geometry::model::linestring<P> L;
+
+ L line;
+ boost::geometry::read_wkt("linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", line);
+
+ typedef boost::geometry::strategy::distance::projected_point<P, P> DS;
+ typedef boost::geometry::strategy::simplify::douglas_peucker<P, DS> simplification;
+
+ L simplified;
+ boost::geometry::simplify_inserter(line, std::back_inserter(simplified), 0.5, simplification()); //std::ostream_iterator<P>(std::cout, "\n"), 0.5);//);
+ //std::cout << simplified[0];
+ //boost::geometry::simplify_inserter(line, std::ostream_iterator<P>(std::cout, "\n"), 0.5);//, simplification());
+
+ std::ostream_iterator<P> out(std::cout, "\n");
+ std::copy(simplified.begin(), simplified.end(), out);
+
+ std::cout
+ << " original: " << boost::geometry::dsv(line) << std::endl
+ << "simplified: " << boost::geometry::dsv(simplified) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[simplify_inserter_output
+/*`
+Output:
+[pre
+simplify_inserter: 16
+simplify_inserter: 0.339837
+]
+*/
+//]
+/*
+OUTPUT
+POINT(1.1 1.1) original: ((1.1, 1.1), (2.5, 2.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+simplified: ((1.1, 1.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+*/
+/*
+OUTPUT
+POINT(1.1 1.1) original: ((1.1, 1.1), (2.5, 2.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+simplified: ((1.1, 1.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+*/
+/*
+OUTPUT
+POINT(1.1 1.1) original: ((1.1, 1.1), (2.5, 2.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+simplified: ((1.1, 1.1), (3.1, 3.1), (4.9, 1.1), (3.1, 1.9))
+*/
diff --git a/libs/geometry/doc/src/examples/algorithms/sym_difference.cpp b/libs/geometry/doc/src/examples/algorithms/sym_difference.cpp
new file mode 100644
index 000000000..1bb955bcd
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/sym_difference.cpp
@@ -0,0 +1,80 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[sym_difference
+//` Shows how to calculate the symmetric difference (XOR) of two polygons
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <boost/foreach.hpp>
+/*<-*/ #include "create_svg_overlay.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;
+
+ polygon green, blue;
+
+ boost::geometry::read_wkt(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", green);
+
+ boost::geometry::read_wkt(
+ "POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))", blue);
+
+ boost::geometry::model::multi_polygon<polygon> multi;
+
+ boost::geometry::sym_difference(green, blue, multi);
+
+ std::cout
+ << "green XOR blue:" << std::endl
+ << "total: " << boost::geometry::area(multi) << std::endl;
+ int i = 0;
+ BOOST_FOREACH(polygon const& p, multi)
+ {
+ std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
+ }
+
+ /*<-*/ create_svg("sym_difference.svg", green, blue, multi); /*->*/
+ return 0;
+}
+
+//]
+
+
+//[sym_difference_output
+/*`
+Output:
+[pre
+green XOR blue:
+total: 3.1459
+0: 0.02375
+1: 0.542951
+2: 0.0149697
+3: 0.226855
+4: 0.839424
+5: 0.525154
+6: 0.015
+7: 0.181136
+8: 0.128798
+9: 0.340083
+10: 0.307778
+
+[$img/algorithms/sym_difference.png]
+
+]
+*/
+//]
+
diff --git a/libs/geometry/doc/src/examples/algorithms/transform.cpp b/libs/geometry/doc/src/examples/algorithms/transform.cpp
new file mode 100644
index 000000000..97aea3c3d
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/transform.cpp
@@ -0,0 +1,54 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[transform
+//` Shows how points can be transformed using the default strategy
+
+#include <iostream>
+#include <boost/geometry.hpp>
+
+
+int main()
+{
+ namespace bg = boost::geometry;
+
+ // Select a point near the pole (theta=5.0, phi=15.0)
+ bg::model::point<long double, 2, bg::cs::spherical<bg::degree> > p1(15.0, 5.0);
+
+ // Transform from degree to radian. Default strategy is automatically selected,
+ // it will convert from degree to radian
+ bg::model::point<long double, 2, bg::cs::spherical<bg::radian> > p2;
+ bg::transform(p1, p2);
+
+ // Transform from degree (lon-lat) to 3D (x,y,z). Default strategy is automatically selected,
+ // it will consider points on a unit sphere
+ bg::model::point<long double, 3, bg::cs::cartesian> p3;
+ bg::transform(p1, p3);
+
+ std::cout
+ << "p1: " << bg::dsv(p1) << std::endl
+ << "p2: " << bg::dsv(p2) << std::endl
+ << "p3: " << bg::dsv(p3) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[transform_output
+/*`
+Output:
+[pre
+p1: (15, 5)
+p2: (0.261799, 0.0872665)
+p3: (0.084186, 0.0225576, 0.996195)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/transform_with_strategy.cpp b/libs/geometry/doc/src/examples/algorithms/transform_with_strategy.cpp
new file mode 100644
index 000000000..df44d6336
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/transform_with_strategy.cpp
@@ -0,0 +1,63 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[transform_with_strategy
+//` Shows how points can be scaled, translated or rotated
+
+#include <iostream>
+#include <boost/geometry.hpp>
+
+
+int main()
+{
+ namespace trans = boost::geometry::strategy::transform;
+ using boost::geometry::dsv;
+
+ typedef boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian> point_type;
+
+ point_type p1(1.0, 1.0);
+
+ // Translate over (1.5, 1.5)
+ point_type p2;
+ trans::translate_transformer<point_type, point_type> translate(1.5, 1.5);
+ boost::geometry::transform(p1, p2, translate);
+
+ // Scale with factor 3.0
+ point_type p3;
+ trans::scale_transformer<point_type, point_type> scale(3.0);
+ boost::geometry::transform(p1, p3, scale);
+
+ // Rotate with respect to the origin (0,0) over 90 degrees (clockwise)
+ point_type p4;
+ trans::rotate_transformer<point_type, point_type, boost::geometry::degree> rotate(90.0);
+ boost::geometry::transform(p1, p4, rotate);
+
+ std::cout
+ << "p1: " << dsv(p1) << std::endl
+ << "p2: " << dsv(p2) << std::endl
+ << "p3: " << dsv(p3) << std::endl
+ << "p4: " << dsv(p4) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[transform_with_strategy_output
+/*`
+Output:
+[pre
+p1: (1, 1)
+p2: (2.5, 2.5)
+p3: (3, 3)
+p4: (1, -1)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/union.cpp b/libs/geometry/doc/src/examples/algorithms/union.cpp
new file mode 100644
index 000000000..cf93a1db9
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/union.cpp
@@ -0,0 +1,66 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[union
+//` Shows how to get a united geometry of two polygons
+
+#include <iostream>
+#include <vector>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <boost/foreach.hpp>
+/*<-*/ #include "create_svg_overlay.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;
+
+ polygon green, blue;
+
+ boost::geometry::read_wkt(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", green);
+
+ boost::geometry::read_wkt(
+ "POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))", blue);
+
+ std::vector<polygon> output;
+ boost::geometry::union_(green, blue, output);
+
+ int i = 0;
+ std::cout << "green || blue:" << std::endl;
+ BOOST_FOREACH(polygon const& p, output)
+ {
+ std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
+ }
+
+ /*<-*/ create_svg("union.svg", green, blue, output); /*->*/
+ return 0;
+}
+
+//]
+
+
+//[union_output
+/*`
+Output:
+[pre
+green || blue:
+0: 5.64795
+
+[$img/algorithms/union.png]
+
+]
+*/
+//]
+
diff --git a/libs/geometry/doc/src/examples/algorithms/unique.cpp b/libs/geometry/doc/src/examples/algorithms/unique.cpp
new file mode 100644
index 000000000..0b975698e
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/unique.cpp
@@ -0,0 +1,41 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[unique
+//` Shows how to make a so-called minimal set of a polygon by removing duplicate points
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+int main()
+{
+ boost::geometry::model::polygon<boost::tuple<double, double> > poly;
+ boost::geometry::read_wkt("POLYGON((0 0,0 0,0 5,5 5,5 5,5 5,5 0,5 0,0 0,0 0,0 0,0 0))", poly);
+ boost::geometry::unique(poly);
+ std::cout << boost::geometry::wkt(poly) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[unique_output
+/*`
+Output:
+[pre
+POLYGON((0 0,0 5,5 5,5 0,0 0))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/within.cpp b/libs/geometry/doc/src/examples/algorithms/within.cpp
new file mode 100644
index 000000000..487753fc7
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/within.cpp
@@ -0,0 +1,52 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[within
+//` Shows how to detect if a point is inside a polygon, or not
+
+#include <iostream>
+#include <list>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+/*<-*/ #include "create_svg_two.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type> polygon_type;
+
+ polygon_type poly;
+ boost::geometry::read_wkt(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", poly);
+
+ point_type p(4, 1);
+
+ std::cout << "within: " << (boost::geometry::within(p, poly) ? "yes" : "no") << std::endl;
+ /*<-*/ create_svg("within.svg", poly, p); /*->*/
+ return 0;
+}
+
+//]
+
+//[within_output
+/*`
+Output:
+[pre
+within: yes
+
+[$img/algorithms/within.png]
+]
+
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/Jamfile.v2 b/libs/geometry/doc/src/examples/core/Jamfile.v2
new file mode 100644
index 000000000..4f46ca1de
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/Jamfile.v2
@@ -0,0 +1,33 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project boost-geometry-doc-example-core
+ : # requirements
+ ;
+
+exe get_point : get_point.cpp ;
+exe get_box : get_box.cpp ;
+exe set_point : set_point.cpp ;
+exe set_box : set_box.cpp ;
+exe degree_radian : degree_radian.cpp ;
+
+exe coordinate_type : coordinate_type.cpp ;
+exe coordinate_system : coordinate_system.cpp ;
+exe coordinate_dimension : coordinate_dimension.cpp ;
+exe point_order : point_order.cpp ;
+exe closure : closure.cpp ;
+
+exe interior_type : interior_type.cpp ;
+exe point_type : point_type.cpp ;
+exe ring_type : ring_type.cpp ;
+exe rings : rings.cpp ;
+exe tag : tag.cpp ;
+exe tag_cast : tag_cast.cpp ;
diff --git a/libs/geometry/doc/src/examples/core/closure.cpp b/libs/geometry/doc/src/examples/core/closure.cpp
new file mode 100644
index 000000000..62c6c1895
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/closure.cpp
@@ -0,0 +1,45 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[closure
+//` Examine if a polygon is defined as "should be closed"
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type> polygon_type;
+
+ boost::geometry::closure_selector clos = boost::geometry::closure<polygon_type>::value;
+
+ std::cout << "closure: " << clos << std::endl
+ << "(open = " << boost::geometry::open
+ << ", closed = " << boost::geometry::closed
+ << ") "<< std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[closure_output
+/*`
+Output:
+[pre
+closure: 1
+(open = 0, closed = 1)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/coordinate_dimension.cpp b/libs/geometry/doc/src/examples/core/coordinate_dimension.cpp
new file mode 100644
index 000000000..05881d274
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/coordinate_dimension.cpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[dimension
+//` Examine the number of coordinates making up the points in a linestring type
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);
+
+int main()
+{
+ int dim = boost::geometry::dimension
+ <
+ boost::geometry::model::linestring
+ <
+ boost::tuple<float, float, float>
+ >
+ >::value;
+
+ std::cout << "dimensions: " << dim << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[dimension_output
+/*`
+Output:
+[pre
+dimensions: 3
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/coordinate_system.cpp b/libs/geometry/doc/src/examples/core/coordinate_system.cpp
new file mode 100644
index 000000000..63db3a5dc
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/coordinate_system.cpp
@@ -0,0 +1,42 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[coordinate_system
+//` Examine the coordinate system of a point
+
+#include <iostream>
+#include <typeinfo>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type> polygon_type;
+
+ typedef boost::geometry::coordinate_system<polygon_type>::type system;
+
+ std::cout << "system: " << typeid(system).name() << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[coordinate_system_output
+/*`
+Output (using MSVC):
+[pre
+system: struct boost::geometry::cs::cartesian
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/coordinate_type.cpp b/libs/geometry/doc/src/examples/core/coordinate_type.cpp
new file mode 100644
index 000000000..dd043bddb
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/coordinate_type.cpp
@@ -0,0 +1,42 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[coordinate_type
+//` Examine the coordinate type of a point
+
+#include <iostream>
+#include <typeinfo>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type> polygon_type;
+
+ typedef boost::geometry::coordinate_type<polygon_type>::type ctype;
+
+ std::cout << "type: " << typeid(ctype).name() << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[coordinate_type_output
+/*`
+Output (using MSVC):
+[pre
+type: double
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/degree_radian.cpp b/libs/geometry/doc/src/examples/core/degree_radian.cpp
new file mode 100644
index 000000000..aed6bbead
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/degree_radian.cpp
@@ -0,0 +1,47 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[degree_radian
+//` Specify two coordinate systems, one in degrees, one in radians.
+
+#include <iostream>
+#include <boost/geometry.hpp>
+
+using namespace boost::geometry;
+
+int main()
+{
+ typedef model::point<double, 2, cs::spherical_equatorial<degree> > degree_point;
+ typedef model::point<double, 2, cs::spherical_equatorial<radian> > radian_point;
+
+ degree_point d(4.893, 52.373);
+ radian_point r(0.041, 0.8527);
+
+ double dist = distance(d, r);
+ std::cout
+ << "distance:" << std::endl
+ << dist << " over unit sphere" << std::endl
+ << dist * 3959 << " over a spherical earth, in miles" << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[degree_radian_output
+/*`
+Output:
+[pre
+distance:
+0.0675272 over unit sphere
+267.34 over a spherical earth, in miles
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/get_box.cpp b/libs/geometry/doc/src/examples/core/get_box.cpp
new file mode 100644
index 000000000..a159d4c73
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/get_box.cpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[get_box
+//` Get the coordinate of a box
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+namespace bg = boost::geometry;
+
+int main()
+{
+ bg::model::box<bg::model::d2::point_xy<double> > box;
+
+ bg::assign_values(box, 1, 3, 5, 6);
+
+ std::cout << "Box:"
+ << " " << bg::get<bg::min_corner, 0>(box)
+ << " " << bg::get<bg::min_corner, 1>(box)
+ << " " << bg::get<bg::max_corner, 0>(box)
+ << " " << bg::get<bg::max_corner, 1>(box)
+ << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[get_box_output
+/*`
+Output:
+[pre
+Box: 1 3 5 6
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/get_point.cpp b/libs/geometry/doc/src/examples/core/get_point.cpp
new file mode 100644
index 000000000..458c9877c
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/get_point.cpp
@@ -0,0 +1,42 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[get_point
+//` Get the coordinate of a point
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+namespace bg = boost::geometry;
+
+int main()
+{
+ bg::model::d2::point_xy<double> point(1, 2);
+
+ double x = bg::get<0>(point);
+ double y = bg::get<1>(point);
+
+ std::cout << "x=" << x << " y=" << y << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[get_point_output
+/*`
+Output:
+[pre
+x=1 y=2
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/interior_type.cpp b/libs/geometry/doc/src/examples/core/interior_type.cpp
new file mode 100644
index 000000000..61096bf47
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/interior_type.cpp
@@ -0,0 +1,49 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[interior_type
+//`Shows how to use the interior_type metafunction
+
+#include <iostream>
+#include <typeinfo>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/adapted/boost_array.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_ARRAY_CS(cs::cartesian)
+
+int main()
+{
+ // Define a polygon storing points in a deque and storing interior rings
+ // in a list (note that std::list is not supported by most algorithms
+ // because not supporting a random access iterator)
+ typedef boost::geometry::model::polygon
+ <
+ boost::array<short, 3>,
+ true, true,
+ std::deque, std::list
+ > polygon;
+
+ std::cout << typeid(boost::geometry::interior_type<polygon>::type).name() << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[interior_type_output
+/*`
+Output (using MSVC) is a long story (part manually replaced with ellipsis):
+[pre
+class std::list<class boost::geometry::model::ring<class boost::array<short,3>,1,1,class std::deque,class std::allocator>,class std::allocator<...> > >
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/point_order.cpp b/libs/geometry/doc/src/examples/core/point_order.cpp
new file mode 100644
index 000000000..2f8b7058e
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/point_order.cpp
@@ -0,0 +1,45 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[point_order
+//` Examine the expected point order of a polygon type
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type, false> polygon_type;
+
+ boost::geometry::order_selector order = boost::geometry::point_order<polygon_type>::value;
+
+ std::cout << "order: " << order << std::endl
+ << "(clockwise = " << boost::geometry::clockwise
+ << ", counterclockwise = " << boost::geometry::counterclockwise
+ << ") "<< std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[point_order_output
+/*`
+Output:
+[pre
+order: 2
+(clockwise = 1, counterclockwise = 2)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/point_type.cpp b/libs/geometry/doc/src/examples/core/point_type.cpp
new file mode 100644
index 000000000..17ab38ffc
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/point_type.cpp
@@ -0,0 +1,44 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[point_type
+//` Examine the point type of a multi_polygon
+
+#include <iostream>
+#include <typeinfo>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type> polygon_type;
+ typedef boost::geometry::model::multi_polygon<polygon_type> mp_type;
+
+ typedef boost::geometry::point_type<mp_type>::type ptype;
+
+ std::cout << "point type: " << typeid(ptype).name() << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[point_type_output
+/*`
+Output (in MSVC):
+[pre
+point type: class boost::geometry::model::d2::point_xy<double,struct boost::geometry::cs::cartesian>
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/ring_type.cpp b/libs/geometry/doc/src/examples/core/ring_type.cpp
new file mode 100644
index 000000000..9e19bd421
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/ring_type.cpp
@@ -0,0 +1,56 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[ring_type
+//`Shows how to use the ring_type metafunction, as well as interior_type
+
+#include <iostream>
+#include <typeinfo>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point;
+ typedef boost::geometry::model::polygon<point> polygon;
+
+ typedef boost::geometry::ring_type<polygon>::type ring_type;
+ typedef boost::geometry::interior_type<polygon>::type int_type;
+
+ std::cout << typeid(ring_type).name() << std::endl;
+ std::cout << typeid(int_type).name() << std::endl;
+
+ // So int_type defines a collection of rings,
+ // which is a Boost.Range compatible range
+ // The type of an element of the collection is the very same ring type again.
+ // We show that.
+ typedef boost::range_value<int_type>::type int_ring_type;
+
+ std::cout
+ << std::boolalpha
+ << boost::is_same<ring_type, int_ring_type>::value
+ << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[ring_type_output
+/*`
+Output (using gcc):
+[pre
+ N5boost8geometry5model4ringINS1_2d28point_xyIdNS0_2cs9cartesianEEELb1ELb1ESt6vectorSaEE
+St6vectorIN5boost8geometry5model4ringINS2_2d28point_xyIdNS1_2cs9cartesianEEELb1ELb1ES_SaEESaIS9_EE
+true
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/rings.cpp b/libs/geometry/doc/src/examples/core/rings.cpp
new file mode 100644
index 000000000..81f1ded65
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/rings.cpp
@@ -0,0 +1,77 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[rings
+/*`
+Shows how to access the exterior ring (one)
+and interior rings (zero or more) of a polygon.
+Also shows the related ring_type and interior_type.
+*/
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point;
+ typedef boost::geometry::model::polygon<point> polygon_type;
+
+ polygon_type poly;
+
+ typedef boost::geometry::ring_type<polygon_type>::type ring_type;
+ ring_type& ring = boost::geometry::exterior_ring(poly);
+
+ // For a ring of model::polygon, you can call "push_back".
+ // (internally, it is done using a traits::push_back class)
+ ring.push_back(point(0, 0));
+ ring.push_back(point(0, 5));
+ ring.push_back(point(5, 4));
+ ring.push_back(point(0, 0));
+
+ ring_type inner;
+ inner.push_back(point(1, 1));
+ inner.push_back(point(2, 1));
+ inner.push_back(point(2, 2));
+ inner.push_back(point(1, 1));
+
+ typedef boost::geometry::interior_type<polygon_type>::type int_type;
+ int_type& interiors = boost::geometry::interior_rings(poly);
+ interiors.push_back(inner);
+
+ std::cout << boost::geometry::dsv(poly) << std::endl;
+
+ // So int_type defines a collection of rings,
+ // which is a Boost.Range compatible range
+ // The type of an element of the collection is the very same ring type again.
+ // We show that.
+ typedef boost::range_value<int_type>::type int_ring_type;
+
+ std::cout
+ << std::boolalpha
+ << boost::is_same<ring_type, int_ring_type>::value
+ << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[rings_output
+/*`
+Output:
+[pre
+(((0, 0), (0, 5), (5, 4), (0, 0)), ((1, 1), (2, 1), (2, 2), (1, 1)))
+true
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/set_box.cpp b/libs/geometry/doc/src/examples/core/set_box.cpp
new file mode 100644
index 000000000..c95e31042
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/set_box.cpp
@@ -0,0 +1,44 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[set_box
+//` Set the coordinate of a box
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+namespace bg = boost::geometry;
+
+int main()
+{
+ bg::model::box<bg::model::d2::point_xy<double> > box;
+
+ bg::set<bg::min_corner, 0>(box, 0);
+ bg::set<bg::min_corner, 1>(box, 2);
+ bg::set<bg::max_corner, 0>(box, 4);
+ bg::set<bg::max_corner, 1>(box, 5);
+
+ std::cout << "Extent: " << bg::dsv(box) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[set_box_output
+/*`
+Output:
+[pre
+Extent: ((0, 2), (4, 5))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/set_point.cpp b/libs/geometry/doc/src/examples/core/set_point.cpp
new file mode 100644
index 000000000..adab1fbe6
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/set_point.cpp
@@ -0,0 +1,42 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[set_point
+//` Set the coordinate of a point
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+namespace bg = boost::geometry;
+
+int main()
+{
+ bg::model::d2::point_xy<double> point;
+
+ bg::set<0>(point, 1);
+ bg::set<1>(point, 2);
+
+ std::cout << "Location: " << bg::dsv(point) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[set_point_output
+/*`
+Output:
+[pre
+Location: (1, 2)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/tag.cpp b/libs/geometry/doc/src/examples/core/tag.cpp
new file mode 100644
index 000000000..13bf4ff79
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/tag.cpp
@@ -0,0 +1,110 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[tag
+//` Shows how tag dispatching essentially works in Boost.Geometry
+
+#include <iostream>
+
+#include <boost/assign.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+template <typename Tag> struct dispatch {};
+
+// Specialization for points
+template <> struct dispatch<boost::geometry::point_tag>
+{
+ template <typename Point>
+ static inline void apply(Point const& p)
+ {
+ // Use the Boost.Geometry free function "get"
+ // working on all supported point types
+ std::cout << "Hello POINT, you are located at: "
+ << boost::geometry::get<0>(p) << ", "
+ << boost::geometry::get<1>(p)
+ << std::endl;
+ }
+};
+
+// Specialization for polygons
+template <> struct dispatch<boost::geometry::polygon_tag>
+{
+ template <typename Polygon>
+ static inline void apply(Polygon const& p)
+ {
+ // Use the Boost.Geometry manipulator "dsv"
+ // working on all supported geometries
+ std::cout << "Hello POLYGON, you look like: "
+ << boost::geometry::dsv(p)
+ << std::endl;
+ }
+};
+
+// Specialization for multipolygons
+template <> struct dispatch<boost::geometry::multi_polygon_tag>
+{
+ template <typename MultiPolygon>
+ static inline void apply(MultiPolygon const& m)
+ {
+ // Use the Boost.Range free function "size" because all
+ // multigeometries comply to Boost.Range
+ std::cout << "Hello MULTIPOLYGON, you contain: "
+ << boost::size(m) << " polygon(s)"
+ << std::endl;
+ }
+};
+
+template <typename Geometry>
+inline void hello(Geometry const& geometry)
+{
+ // Call the metafunction "tag" to dispatch, and call method (here "apply")
+ dispatch
+ <
+ typename boost::geometry::tag<Geometry>::type
+ >::apply(geometry);
+}
+
+int main()
+{
+ // Define polygon type (here: based on a Boost.Tuple)
+ typedef boost::geometry::model::polygon<boost::tuple<int, int> > polygon_type;
+
+ // Declare and fill a polygon and a multipolygon
+ polygon_type poly;
+ boost::geometry::exterior_ring(poly) = boost::assign::tuple_list_of(0, 0)(0, 10)(10, 5)(0, 0);
+
+ boost::geometry::model::multi_polygon<polygon_type> multi;
+ multi.push_back(poly);
+
+ // Call "hello" for point, polygon, multipolygon
+ hello(boost::make_tuple(2, 3));
+ hello(poly);
+ hello(multi);
+
+ return 0;
+}
+
+//]
+
+//[tag_output
+/*`
+Output:
+[pre
+Hello POINT, you are located at: 2, 3
+Hello POLYGON, you look like: (((0, 0), (0, 10), (10, 5), (0, 0)))
+Hello MULTIPOLYGON, you contain: 1 polygon(s)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/core/tag_cast.cpp b/libs/geometry/doc/src/examples/core/tag_cast.cpp
new file mode 100644
index 000000000..2e85f3d34
--- /dev/null
+++ b/libs/geometry/doc/src/examples/core/tag_cast.cpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[tag_cast
+//` Check if the polygon_tag can be casted to the areal_tag
+
+#include <iostream>
+#include <typeinfo>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+namespace geo = boost::geometry;
+int main()
+{
+ typedef geo::model::d2::point_xy<double> point_type;
+ typedef geo::model::polygon<point_type> polygon_type;
+
+ typedef geo::tag<polygon_type>::type tag;
+ typedef geo::tag_cast<tag, geo::linear_tag, geo::areal_tag>::type base_tag;
+
+ std::cout << "tag: " << typeid(tag).name() << std::endl
+ << "base tag: " << typeid(base_tag).name() << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[tag_cast_output
+/*`
+Output (in MSVC):
+[pre
+tag: struct boost::geometry::polygon_tag
+base tag: struct boost::geometry::areal_tag
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/Jamfile.v2 b/libs/geometry/doc/src/examples/geometries/Jamfile.v2
new file mode 100644
index 000000000..68a99b57a
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/Jamfile.v2
@@ -0,0 +1,19 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project boost-geometry-doc-src-example-geometries
+ : # requirements
+ ;
+
+exe point : point.cpp ;
+
+build-project adapted ;
+build-project register ;
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/Jamfile.v2 b/libs/geometry/doc/src/examples/geometries/adapted/Jamfile.v2
new file mode 100644
index 000000000..2fd3aefaa
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/Jamfile.v2
@@ -0,0 +1,22 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project boost-geometry-doc-src-example-geometries-adapted
+ : # requirements
+ ;
+
+exe c_array : c_array.cpp ;
+exe boost_array : boost_array.cpp ;
+exe boost_fusion : boost_fusion.cpp ;
+exe boost_polygon : boost_polygon.cpp ;
+exe boost_tuple : boost_tuple.cpp ;
+
+build-project boost_range ;
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_array.cpp b/libs/geometry/doc/src/examples/geometries/adapted/boost_array.cpp
new file mode 100644
index 000000000..846c0be7b
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_array.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[boost_array
+//` Shows how to use a Boost.Array using Boost.Geometry's distance, set and assign_values algorithms
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/adapted/boost_array.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_ARRAY_CS(cs::cartesian)
+
+int main()
+{
+ boost::array<float, 2> a = { {1, 2} };
+ boost::array<double, 2> b = { {2, 3} };
+ std::cout << boost::geometry::distance(a, b) << std::endl;
+
+ boost::geometry::set<0>(a, 1.1);
+ boost::geometry::set<1>(a, 2.2);
+ std::cout << boost::geometry::distance(a, b) << std::endl;
+
+ boost::geometry::assign_values(b, 2.2, 3.3);
+ std::cout << boost::geometry::distance(a, b) << std::endl;
+
+ boost::geometry::model::linestring<boost::array<double, 2> > line;
+ line.push_back(b);
+
+ return 0;
+}
+
+//]
+
+//[boost_array_output
+/*`
+Output:
+[pre
+1.41421
+1.20416
+1.55563
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_fusion.cpp b/libs/geometry/doc/src/examples/geometries/adapted/boost_fusion.cpp
new file mode 100644
index 000000000..89f044699
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_fusion.cpp
@@ -0,0 +1,62 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[boost_fusion
+//` Shows how to combine Boost.Fusion with Boost.Geometry
+
+#include <iostream>
+
+#include <boost/fusion/include/adapt_struct_named.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/adapted/boost_fusion.hpp>
+
+
+struct sample_point
+{
+ double x, y, z;
+};
+
+BOOST_FUSION_ADAPT_STRUCT(sample_point, (double, x) (double, y) (double, z))
+BOOST_GEOMETRY_REGISTER_BOOST_FUSION_CS(cs::cartesian)
+
+int main()
+{
+ sample_point a, b, c;
+
+ // Set coordinates the Boost.Geometry way (one of the ways)
+ boost::geometry::assign_values(a, 3, 2, 1);
+
+ // Set coordinates the Boost.Fusion way
+ boost::fusion::at_c<0>(b) = 6;
+ boost::fusion::at_c<1>(b) = 5;
+ boost::fusion::at_c<2>(b) = 4;
+
+ // Set coordinates the native way
+ c.x = 9;
+ c.y = 8;
+ c.z = 7;
+
+ std::cout << "Distance a-b: " << boost::geometry::distance(a, b) << std::endl;
+ std::cout << "Distance a-c: " << boost::geometry::distance(a, c) << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[boost_fusion_output
+/*`
+Output:
+[pre
+Distance a-b: 5.19615
+Distance a-c: 10.3923
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_polygon.cpp b/libs/geometry/doc/src/examples/geometries/adapted/boost_polygon.cpp
new file mode 100644
index 000000000..3f71990fa
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_polygon.cpp
@@ -0,0 +1,38 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[boost_polygon
+//`Shows how to use Boost.Polygon points within Boost.Geometry
+
+#include <iostream>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon.hpp>
+
+int main()
+{
+ boost::polygon::point_data<int> a(1, 2), b(3, 4);
+ std::cout << "Distance (using Boost.Geometry): "
+ << boost::geometry::distance(a, b) << std::endl;
+ std::cout << "Distance (using Boost.Polygon): "
+ << boost::polygon::euclidean_distance(a, b) << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[boost_polygon_output
+/*`
+Output:
+[pre
+Distance (using Boost.Geometry): 2.82843
+Distance (using Boost.Polygon): 2.82843
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_range/Jamfile.v2 b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/Jamfile.v2
new file mode 100644
index 000000000..364d30181
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/Jamfile.v2
@@ -0,0 +1,22 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project boost-geometry-doc-src-example-geometries-adapted-boost_range
+ : # requirements
+ ;
+
+exe filtered : filtered.cpp ;
+exe reversed : reversed.cpp ;
+exe sliced : sliced.cpp ;
+exe strided : strided.cpp ;
+# exe uniqued : uniqued.cpp ;
+
+
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_range/filtered.cpp b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/filtered.cpp
new file mode 100644
index 000000000..ffc394a5e
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/filtered.cpp
@@ -0,0 +1,64 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[boost_range_filtered
+//` Shows how to use a Boost.Geometry linestring, filtered by Boost.Range adaptor
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/filtered.hpp>
+
+struct not_two
+{
+ template <typename P>
+ bool operator()(P const& p) const
+ {
+ return boost::geometry::get<1>(p) != 2;
+ }
+};
+
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<int> xy;
+ boost::geometry::model::linestring<xy> line;
+ line.push_back(xy(0, 0));
+ line.push_back(xy(1, 1));
+ line.push_back(xy(2, 2));
+ line.push_back(xy(3, 1));
+ line.push_back(xy(4, 0));
+ line.push_back(xy(5, 1));
+ line.push_back(xy(6, 2));
+ line.push_back(xy(7, 1));
+ line.push_back(xy(8, 0));
+
+ using boost::adaptors::filtered;
+ std::cout
+ << boost::geometry::length(line) << std::endl
+ << boost::geometry::length(line | filtered(not_two())) << std::endl
+ << boost::geometry::dsv(line | filtered(not_two())) << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[boost_range_filtered_output
+/*`
+Output:
+[pre
+11.3137
+9.65685
+((0, 0), (1, 1), (3, 1), (4, 0), (5, 1), (7, 1), (8, 0))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_range/reversed.cpp b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/reversed.cpp
new file mode 100644
index 000000000..a73343850
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/reversed.cpp
@@ -0,0 +1,43 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[boost_range_reversed
+//` Shows how to use a Boost.Geometry linestring, reversed by Boost.Range adaptor
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/reversed.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<int> xy;
+ boost::geometry::model::linestring<xy> line;
+ line.push_back(xy(0, 0));
+ line.push_back(xy(1, 1));
+
+ std::cout
+ << boost::geometry::dsv(line | boost::adaptors::reversed)
+ << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[boost_range_reversed_output
+/*`
+Output:
+[pre
+((1, 1), (0, 0))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_range/sliced.cpp b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/sliced.cpp
new file mode 100644
index 000000000..b07d6d584
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/sliced.cpp
@@ -0,0 +1,50 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[boost_range_sliced
+//` Shows how to use a Boost.Geometry linestring, sliced by Boost.Range adaptor
+
+#include <iostream>
+
+#include <boost/assign.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/sliced.hpp>
+
+
+int main()
+{
+ using namespace boost::assign;
+
+ typedef boost::geometry::model::d2::point_xy<int> xy;
+ boost::geometry::model::linestring<xy> line;
+ line += xy(0, 0);
+ line += xy(1, 1);
+ line += xy(2, 2);
+ line += xy(3, 3);
+ line += xy(4, 4);
+
+ std::cout
+ << boost::geometry::dsv(line | boost::adaptors::sliced(1, 3)) << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[boost_range_sliced_output
+/*`
+Output:
+[pre
+((1, 1), (2, 2))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_range/strided.cpp b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/strided.cpp
new file mode 100644
index 000000000..95a130acb
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/strided.cpp
@@ -0,0 +1,56 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[boost_range_strided
+//` Shows how to use a Boost.Geometry ring, strided by Boost.Range adaptor
+
+#include <iostream>
+
+#include <boost/assign.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/strided.hpp>
+
+
+int main()
+{
+ using namespace boost::assign;
+ using boost::adaptors::strided;
+
+ typedef boost::geometry::model::d2::point_xy<int> xy;
+ boost::geometry::model::ring<xy> ring;
+ ring += xy(0, 0);
+ ring += xy(0, 1);
+ ring += xy(0, 2);
+ ring += xy(1, 2);
+ ring += xy(2, 2);
+ ring += xy(2, 0);
+
+ boost::geometry::correct(ring);
+
+ std::cout
+ << "Normal : " << boost::geometry::dsv(ring) << std::endl
+ << "Strided: " << boost::geometry::dsv(ring | strided(2)) << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[boost_range_strided_output
+/*`
+Output:
+[pre
+Normal : ((0, 0), (0, 1), (0, 2), (1, 2), (2, 2), (2, 0), (0, 0))
+Strided: ((0, 0), (0, 2), (2, 2), (0, 0))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_range/uniqued.cpp b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/uniqued.cpp
new file mode 100644
index 000000000..9f138b00c
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_range/uniqued.cpp
@@ -0,0 +1,64 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[boost_range_uniqued
+//` Shows how to use a Boost.Geometry ring, made unique by Boost.Range adaptor
+
+#include <iostream>
+
+#include <boost/assign.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/uniqued.hpp>
+
+typedef boost::geometry::model::d2::point_xy<int> xy;
+
+inline bool operator==(xy const& left, xy const& right)
+{
+ boost::geometry::equal_to<xy> eq;
+ return eq(left, right);
+}
+
+
+int main()
+{
+ using namespace boost::assign;
+ using boost::adaptors::uniqued;
+
+ boost::geometry::model::ring<xy> ring;
+ ring += xy(0, 0);
+ ring += xy(0, 1);
+ ring += xy(0, 2);
+ ring += xy(1, 2);
+ ring += xy(2, 2);
+ ring += xy(2, 2);
+ ring += xy(2, 2);
+ ring += xy(2, 0);
+ ring += xy(0, 0);
+
+ std::cout
+ << "Normal: " << boost::geometry::dsv(ring) << std::endl
+ << "Unique: " << boost::geometry::dsv(ring | uniqued) << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[boost_range_uniqued_output
+/*`
+Output:
+[pre
+Normal : ((0, 0), (0, 1), (0, 2), (1, 2), (2, 2), (2, 0), (0, 0))
+uniqued: ((0, 0), (0, 2), (2, 2), (0, 0))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/boost_tuple.cpp b/libs/geometry/doc/src/examples/geometries/adapted/boost_tuple.cpp
new file mode 100644
index 000000000..747df8881
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/boost_tuple.cpp
@@ -0,0 +1,54 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[boost_tuple
+/*`
+Shows how to use Boost.Tuple points in Boost.Geometry
+
+Working with Boost.Tuples in Boost.Geometry is straightforward and shown in
+various other examples as well.
+
+*/
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+int main()
+{
+ boost::geometry::model::polygon<boost::tuple<double, double> > poly;
+ poly.outer().push_back(boost::make_tuple(1.0, 2.0));
+ poly.outer().push_back(boost::make_tuple(6.0, 4.0));
+ poly.outer().push_back(boost::make_tuple(5.0, 1.0));
+ poly.outer().push_back(boost::make_tuple(1.0, 2.0));
+
+ std::cout << "Area: " << boost::geometry::area(poly) << std::endl;
+ std::cout << "Contains (1.5, 2.5): "
+ << std::boolalpha
+ << boost::geometry::within(boost::make_tuple(1.5, 2.5), poly)
+ << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[boost_tuple_output
+/*`
+Output:
+[pre
+Area: 6.5
+Contains (1.5, 2.5): false
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/adapted/c_array.cpp b/libs/geometry/doc/src/examples/geometries/adapted/c_array.cpp
new file mode 100644
index 000000000..335346b89
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/adapted/c_array.cpp
@@ -0,0 +1,38 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[c_array
+//` Small example showing the combination of an array with a Boost.Geometry algorithm
+
+#include <iostream>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+
+int main()
+{
+ int a[3] = {1, 2, 3};
+ int b[3] = {2, 3, 4};
+
+ std::cout << boost::geometry::distance(a, b) << std::endl;
+
+ return 0;
+}
+
+//]
+
+//[c_array_output
+/*`
+Output:
+[pre
+1.73205
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/point.cpp b/libs/geometry/doc/src/examples/geometries/point.cpp
new file mode 100644
index 000000000..82774cd83
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/point.cpp
@@ -0,0 +1,42 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[point
+//` Declaration and use of the Boost.Geometry model::point, modelling the Point Concept
+
+#include <iostream>
+#include <boost/geometry.hpp>
+
+namespace bg = boost::geometry;
+
+int main()
+{
+ bg::model::point<double, 2, bg::cs::cartesian> point1;
+ bg::model::point<double, 3, bg::cs::cartesian> point2(1.0, 2.0, 3.0); /*< Construct, assigning three coordinates >*/
+ point1.set<0>(1.0); /*< Set a coordinate. [*Note]: prefer using `bg::set<0>(point1, 1.0);` >*/
+ point1.set<1>(2.0);
+
+ double x = point1.get<0>(); /*< Get a coordinate. [*Note]: prefer using `x = bg::get<0>(point1);` >*/
+ double y = point1.get<1>();
+
+ std::cout << x << ", " << y << std::endl;
+ return 0;
+}
+
+//]
+
+
+//[point_output
+/*`
+Output:
+[pre
+1, 2
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/Jamfile.v2 b/libs/geometry/doc/src/examples/geometries/register/Jamfile.v2
new file mode 100644
index 000000000..662bd6ee7
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/Jamfile.v2
@@ -0,0 +1,30 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project boost-geometry-doc-src-example-geometries-register
+ : # requirements
+ ;
+
+exe box : box.cpp ;
+exe box_templated : box_templated.cpp ;
+exe box_2d_4values : box_2d_4values.cpp ;
+exe point : point.cpp ;
+
+exe linestring : linestring.cpp ;
+exe linestring_templated : linestring_templated.cpp ;
+exe ring : ring.cpp ;
+exe ring_templated : ring_templated.cpp ;
+
+exe multi_point : multi_point.cpp ;
+exe multi_point_templated : multi_point_templated.cpp ;
+
+exe multi_linestring : multi_linestring.cpp ;
+exe multi_polygon : multi_polygon.cpp ;
diff --git a/libs/geometry/doc/src/examples/geometries/register/box.cpp b/libs/geometry/doc/src/examples/geometries/register/box.cpp
new file mode 100644
index 000000000..d4b8f6f81
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/box.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_box
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_BOX
+
+#include <iostream>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/box.hpp>
+
+struct my_point
+{
+ double x, y;
+};
+
+struct my_box
+{
+ my_point ll, ur;
+};
+
+// Register the point type
+BOOST_GEOMETRY_REGISTER_POINT_2D(my_point, double, cs::cartesian, x, y)
+
+// Register the box type, also notifying that it is based on "my_point"
+BOOST_GEOMETRY_REGISTER_BOX(my_box, my_point, ll, ur)
+
+int main()
+{
+ my_box b = boost::geometry::make<my_box>(0, 0, 2, 2);
+ std::cout << "Area: " << boost::geometry::area(b) << std::endl;
+ return 0;
+}
+
+//]
+
+
+//[register_box_output
+/*`
+Output:
+[pre
+Area: 4
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/box_2d_4values.cpp b/libs/geometry/doc/src/examples/geometries/register/box_2d_4values.cpp
new file mode 100644
index 000000000..0ae971512
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/box_2d_4values.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_box_2d_4values
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES
+
+#include <iostream>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/box.hpp>
+
+struct my_point
+{
+ int x, y;
+};
+
+struct my_box
+{
+ int left, top, right, bottom;
+};
+
+BOOST_GEOMETRY_REGISTER_POINT_2D(my_point, int, cs::cartesian, x, y)
+
+// Register the box type, also notifying that it is based on "my_point"
+// (even if it does not contain it)
+BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES(my_box, my_point, left, top, right, bottom)
+
+int main()
+{
+ my_box b = boost::geometry::make<my_box>(0, 0, 2, 2);
+ std::cout << "Area: " << boost::geometry::area(b) << std::endl;
+ return 0;
+}
+
+//]
+
+
+//[register_box_2d_4values_output
+/*`
+Output:
+[pre
+Area: 4
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/box_templated.cpp b/libs/geometry/doc/src/examples/geometries/register/box_templated.cpp
new file mode 100644
index 000000000..c54e19e06
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/box_templated.cpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_box_templated
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/box.hpp>
+
+template <typename P>
+struct my_box
+{
+ P ll, ur;
+};
+
+// Register the box type
+BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED(my_box, ll, ur)
+
+int main()
+{
+ typedef my_box<boost::geometry::model::d2::point_xy<double> > box;
+ box b = boost::geometry::make<box>(0, 0, 2, 2);
+ std::cout << "Area: " << boost::geometry::area(b) << std::endl;
+ return 0;
+}
+
+//]
+
+
+//[register_box_templated_output
+/*`
+Output:
+[pre
+Area: 4
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/linestring.cpp b/libs/geometry/doc/src/examples/geometries/register/linestring.cpp
new file mode 100644
index 000000000..ce4d97d7b
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/linestring.cpp
@@ -0,0 +1,54 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_linestring
+//` Show the use of BOOST_GEOMETRY_REGISTER_LINESTRING
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+typedef boost::geometry::model::d2::point_xy<double> point_2d;
+
+BOOST_GEOMETRY_REGISTER_LINESTRING(std::vector<point_2d>)
+
+int main()
+{
+ // Normal usage of std::
+ std::vector<point_2d> line;
+ line.push_back(point_2d(1, 1));
+ line.push_back(point_2d(2, 2));
+ line.push_back(point_2d(3, 1));
+
+ // Usage of Boost.Geometry's length and wkt functions
+ std::cout << "Length: "
+ << boost::geometry::length(line)
+ << std::endl;
+
+ std::cout << "WKT: "
+ << boost::geometry::wkt(line)
+ << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[register_linestring_output
+/*`
+Output:
+[pre
+Length: 2.82843
+WKT: LINESTRING(1 1,2 2,3 1)
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/linestring_templated.cpp b/libs/geometry/doc/src/examples/geometries/register/linestring_templated.cpp
new file mode 100644
index 000000000..064f78eee
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/linestring_templated.cpp
@@ -0,0 +1,47 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_linestring_templated
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED
+
+#include <iostream>
+#include <deque>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+// Adapt any deque to Boost.Geometry Linestring Concept
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+int main()
+{
+ std::deque<boost::geometry::model::d2::point_xy<double> > line(2);
+ boost::geometry::assign_values(line[0], 1, 1);
+ boost::geometry::assign_values(line[1], 2, 2);
+
+ // Boost.Geometry algorithms work on any deque now
+ std::cout << "Length: " << boost::geometry::length(line) << std::endl;
+ std::cout << "Line: " << boost::geometry::dsv(line) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[register_linestring_templated_output
+/*`
+Output:
+[pre
+Length: 1.41421
+Line: ((1, 1), (2, 2))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/multi_linestring.cpp b/libs/geometry/doc/src/examples/geometries/register/multi_linestring.cpp
new file mode 100644
index 000000000..9ed40da73
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/multi_linestring.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_multi_linestring
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/multi/geometries/register/multi_linestring.hpp>
+
+typedef boost::geometry::model::linestring
+ <
+ boost::tuple<float, float>
+ > linestring_type;
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING(std::deque<linestring_type>)
+
+int main()
+{
+ // Normal usage of std::
+ std::deque<linestring_type> lines(2);
+ boost::geometry::read_wkt("LINESTRING(0 0,1 1)", lines[0]);
+ boost::geometry::read_wkt("LINESTRING(2 2,3 3)", lines[1]);
+
+ // Usage of Boost.Geometry
+ std::cout << "LENGTH: " << boost::geometry::length(lines) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[register_multi_linestring_output
+/*`
+Output:
+[pre
+LENGTH: 2.82843
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/multi_point.cpp b/libs/geometry/doc/src/examples/geometries/register/multi_point.cpp
new file mode 100644
index 000000000..e854da2b0
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/multi_point.cpp
@@ -0,0 +1,47 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_multi_point
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_MULTI_POINT
+
+#include <iostream>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/multi/geometries/register/multi_point.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+typedef boost::tuple<float, float> point_type;
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_MULTI_POINT(std::deque< ::point_type >)
+
+int main()
+{
+ // Normal usage of std::
+ std::deque<point_type> multi_point;
+ multi_point.push_back(point_type(1, 1));
+ multi_point.push_back(point_type(3, 2));
+
+ // Usage of Boost.Geometry
+ std::cout << "WKT: " << boost::geometry::wkt(multi_point) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[register_multi_point_output
+/*`
+Output:
+[pre
+WKT: MULTIPOINT((1 1),(3 2))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/multi_point_templated.cpp b/libs/geometry/doc/src/examples/geometries/register/multi_point_templated.cpp
new file mode 100644
index 000000000..bba16bbbd
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/multi_point_templated.cpp
@@ -0,0 +1,47 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_multi_point_templated
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED
+
+#include <iostream>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/multi/geometries/register/multi_point.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+
+BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED(std::deque)
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+int main()
+{
+ // Normal usage of std::
+ std::deque<boost::tuple<float, float> > multi_point;
+ multi_point.push_back(boost::tuple<float, float>(1, 1));
+ multi_point.push_back(boost::tuple<float, float>(3, 2));
+
+ // Usage of Boost.Geometry
+ std::cout << "WKT: " << boost::geometry::wkt(multi_point) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[register_multi_point_templated_output
+/*`
+Output:
+[pre
+WKT: MULTIPOINT((1 1),(3 2))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/multi_polygon.cpp b/libs/geometry/doc/src/examples/geometries/register/multi_polygon.cpp
new file mode 100644
index 000000000..f21f3cf95
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/multi_polygon.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_multi_polygon
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_MULTI_POLYGON
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/multi/geometries/register/multi_polygon.hpp>
+
+typedef boost::geometry::model::polygon
+ <
+ boost::tuple<float, float>
+ > polygon_type;
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_MULTI_POLYGON(std::vector<polygon_type>)
+
+int main()
+{
+ // Normal usage of std::
+ std::vector<polygon_type> polygons(2);
+ boost::geometry::read_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", polygons[0]);
+ boost::geometry::read_wkt("POLYGON((3 0,3 1,4 1,4 0,3 0))", polygons[1]);
+
+ // Usage of Boost.Geometry
+ std::cout << "AREA: " << boost::geometry::area(polygons) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[register_multi_polygon_output
+/*`
+Output:
+[pre
+AREA: 2
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/point.cpp b/libs/geometry/doc/src/examples/geometries/register/point.cpp
new file mode 100644
index 000000000..9d898b2e0
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/point.cpp
@@ -0,0 +1,52 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_point_2d
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_POINT_2D
+
+#include <iostream>
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+
+/*< Somewhere, any legacy point struct is defined >*/
+struct legacy_point
+{
+ double x, y;
+};
+
+BOOST_GEOMETRY_REGISTER_POINT_2D(legacy_point, double, cs::cartesian, x, y) /*< The magic: adapt it to Boost.Geometry Point Concept >*/
+
+int main()
+{
+ legacy_point p1, p2;
+
+ namespace bg = boost::geometry;
+
+ /*< Any Boost.Geometry function can be used for legacy point now. Here: assign_values and distance >*/
+ bg::assign_values(p1, 1, 1);
+ bg::assign_values(p2, 2, 2);
+
+ double d = bg::distance(p1, p2);
+
+ std::cout << "Distance: " << d << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[register_point_2d_output
+/*`
+Output:
+[pre
+Distance: 1.41421
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/ring.cpp b/libs/geometry/doc/src/examples/geometries/register/ring.cpp
new file mode 100644
index 000000000..4d7ca2a0a
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/ring.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_ring
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_RING
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+
+typedef boost::geometry::model::d2::point_xy<double> point_2d;
+
+BOOST_GEOMETRY_REGISTER_RING(std::vector<point_2d>) /*< The magic: adapt vector to Boost.Geometry Ring Concept >*/
+
+int main()
+{
+ // Normal usage of std::
+ std::vector<point_2d> ring;
+ ring.push_back(point_2d(1, 1));
+ ring.push_back(point_2d(2, 2));
+ ring.push_back(point_2d(2, 1));
+
+
+ // Usage of Boost.Geometry
+ boost::geometry::correct(ring);
+ std::cout << "Area: " << boost::geometry::area(ring) << std::endl;
+ std::cout << "WKT: " << boost::geometry::wkt(ring) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[register_ring_output
+/*`
+Output:
+[pre
+Area: 0.5
+WKT: POLYGON((1 1,2 2,2 1,1 1))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/geometries/register/ring_templated.cpp b/libs/geometry/doc/src/examples/geometries/register/ring_templated.cpp
new file mode 100644
index 000000000..0a27c99ca
--- /dev/null
+++ b/libs/geometry/doc/src/examples/geometries/register/ring_templated.cpp
@@ -0,0 +1,49 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[register_ring_templated
+//` Show the use of the macro BOOST_GEOMETRY_REGISTER_RING_TEMPLATED
+
+#include <iostream>
+#include <deque>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+
+// Adapt any deque to Boost.Geometry Ring Concept
+BOOST_GEOMETRY_REGISTER_RING_TEMPLATED(std::deque)
+
+int main()
+{
+ std::deque<boost::geometry::model::d2::point_xy<double> > ring(3);
+ boost::geometry::assign_values(ring[0], 0, 0);
+ boost::geometry::assign_values(ring[2], 4, 1);
+ boost::geometry::assign_values(ring[1], 1, 4);
+
+ // Boost.Geometry algorithms work on any deque now
+ boost::geometry::correct(ring);
+ std::cout << "Area: " << boost::geometry::area(ring) << std::endl;
+ std::cout << "Contents: " << boost::geometry::wkt(ring) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[register_ring_templated_output
+/*`
+Output:
+[pre
+Area: 7.5
+Line: ((0, 0), (1, 4), (4, 1), (0, 0))
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/io/svg.cpp b/libs/geometry/doc/src/examples/io/svg.cpp
new file mode 100644
index 000000000..1a423b8c2
--- /dev/null
+++ b/libs/geometry/doc/src/examples/io/svg.cpp
@@ -0,0 +1,65 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[svg_mapper
+//` Shows the usage of svg_mapper
+
+#include <iostream>
+#include <fstream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+int main()
+{
+ // Specify the basic type
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+
+ // Declare some geometries and set their values
+ point_type a;
+ boost::geometry::assign_values(a, 3, 6);
+
+ boost::geometry::model::polygon<point_type> b;
+ boost::geometry::read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", b);
+
+ boost::geometry::model::linestring<point_type> c;
+ c.push_back(point_type(3, 4));
+ c.push_back(point_type(4, 5));
+
+ // Declare a stream and an SVG mapper
+ std::ofstream svg("my_map.svg");
+ boost::geometry::svg_mapper<point_type> mapper(svg, 400, 400);
+
+ // Add geometries such that all these geometries fit on the map
+ mapper.add(a);
+ mapper.add(b);
+ mapper.add(c);
+
+ // Draw the geometries on the SVG map, using a specific SVG style
+ mapper.map(a, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:2", 5);
+ mapper.map(b, "fill-opacity:0.3;fill:rgb(51,51,153);stroke:rgb(51,51,153);stroke-width:2");
+ mapper.map(c, "opacity:0.4;fill:none;stroke:rgb(212,0,0);stroke-width:5");
+
+ // Destructor of map will be called - adding </svg>
+ // Destructor of stream will be called, closing the file
+
+ return 0;
+}
+
+//]
+
+
+//[svg_mapper_output
+/*`
+Output:
+
+[$img/io/svg_mapper.png]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/quick_start.cpp b/libs/geometry/doc/src/examples/quick_start.cpp
new file mode 100644
index 000000000..9a739efab
--- /dev/null
+++ b/libs/geometry/doc/src/examples/quick_start.cpp
@@ -0,0 +1,167 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Quickbook Examples, for main page
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+//
+
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's here so turn off warning
+//#pragma warning( disable : 4244 )
+#endif // defined(_MSC_VER)
+
+//[quickstart_include
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+using namespace boost::geometry;
+//]
+
+#include <boost/geometry/geometries/register/point.hpp>
+
+
+//[quickstart_register_c_array
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+//]
+
+//[quickstart_register_boost_tuple
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+//]
+
+// Small QRect simulations following http://doc.trolltech.com/4.4/qrect.html
+// Todo: once work the traits out further, would be nice if there is a real example of this.
+// However for the example it makes no difference, it will work any way.
+struct QPoint
+{
+ int x, y;
+ // In Qt these are methods but for example below it makes no difference
+};
+
+struct QRect
+{
+ int x, y, width, height;
+ QRect(int _x, int _y, int w, int h)
+ : x(_x), y(_y), width(w), height(h)
+ {}
+ // In Qt these are methods but that will work as well, requires changing traits below
+};
+
+
+// Would be get/set with x(),y(),setX(),setY()
+BOOST_GEOMETRY_REGISTER_POINT_2D(QPoint, int, cs::cartesian, x, y)
+
+
+// Register the QT rectangle. The macro(s) does not offer (yet) enough flexibility to do this in one line,
+// but the traits classes do their job perfectly.
+namespace boost { namespace geometry { namespace traits
+{
+
+template <> struct tag<QRect> { typedef box_tag type; };
+template <> struct point_type<QRect> { typedef QPoint type; };
+
+template <size_t C, size_t D>
+struct indexed_access<QRect, C, D>
+{
+ static inline int get(const QRect& qr)
+ {
+ // Would be: x(), y(), width(), height()
+ return C == min_corner && D == 0 ? qr.x
+ : C == min_corner && D == 1 ? qr.y
+ : C == max_corner && D == 0 ? qr.x + qr.width
+ : C == max_corner && D == 1 ? qr.y + qr.height
+ : 0;
+ }
+
+ static inline void set(QRect& qr, const int& value)
+ {
+ // Would be: setX, setY, setWidth, setHeight
+ if (C == min_corner && D == 0) qr.x = value;
+ else if (C == min_corner && D == 1) qr.y = value;
+ else if (C == max_corner && D == 0) qr.width = value - qr.x;
+ else if (C == max_corner && D == 1) qr.height = value - qr.y;
+ }
+};
+
+
+}}}
+
+
+int main(void)
+{
+ //[quickstart_distance
+ model::d2::point_xy<int> p1(1, 1), p2(2, 2);
+ std::cout << "Distance p1-p2 is: " << distance(p1, p2) << std::endl;
+ //]
+
+ //[quickstart_distance_c_array
+ int a[2] = {1,1};
+ int b[2] = {2,3};
+ double d = distance(a, b);
+ std::cout << "Distance a-b is: " << d << std::endl;
+ //]
+
+ //[quickstart_point_in_polygon
+ double points[][2] = {{2.0, 1.3}, {4.1, 3.0}, {5.3, 2.6}, {2.9, 0.7}, {2.0, 1.3}};
+ model::polygon<model::d2::point_xy<double> > poly;
+ append(poly, points);
+ boost::tuple<double, double> p = boost::make_tuple(3.7, 2.0);
+ std::cout << "Point p is in polygon? " << std::boolalpha << within(p, poly) << std::endl;
+ //]
+
+ //[quickstart_area
+ std::cout << "Area: " << area(poly) << std::endl;
+ //]
+
+ //[quickstart_distance_mixed
+ double d2 = distance(a, p);
+ std::cout << "Distance a-p is: " << d2 << std::endl;
+ //]
+
+ //[quick_start_spherical
+ typedef boost::geometry::model::point
+ <
+ double, 2, boost::geometry::cs::spherical_equatorial<boost::geometry::degree>
+ > spherical_point;
+
+ spherical_point amsterdam(4.90, 52.37);
+ spherical_point paris(2.35, 48.86);
+
+ double const earth_radius = 3959; // miles
+ std::cout << "Distance in miles: " << distance(amsterdam, paris) * earth_radius << std::endl;
+ //]
+
+ /***
+ Now extension
+ point_ll_deg amsterdam, paris;
+ parse(amsterdam, "52 22 23 N", "4 53 32 E");
+ parse(paris, "48 52 0 N", "2 19 59 E");
+ std::cout << "Distance A'dam-Paris: " << distance(amsterdam, paris) / 1000.0 << " kilometers " << std::endl;
+ ***/
+
+ //[quickstart_qt
+ QRect r1(100, 200, 15, 15);
+ QRect r2(110, 210, 20, 20);
+ if (overlaps(r1, r2))
+ {
+ assign_values(r2, 200, 300, 220, 320);
+ }
+ //]
+
+ return 0;
+}
+
diff --git a/libs/geometry/doc/src/examples/views/Jamfile.v2 b/libs/geometry/doc/src/examples/views/Jamfile.v2
new file mode 100644
index 000000000..4dd82eab8
--- /dev/null
+++ b/libs/geometry/doc/src/examples/views/Jamfile.v2
@@ -0,0 +1,17 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project boost-geometry-doc-example-views
+ : # requirements
+ ;
+
+exe box_view : box_view.cpp ;
+exe segment_view : segment_view.cpp ;
diff --git a/libs/geometry/doc/src/examples/views/box_view.cpp b/libs/geometry/doc/src/examples/views/box_view.cpp
new file mode 100644
index 000000000..e95b54ecb
--- /dev/null
+++ b/libs/geometry/doc/src/examples/views/box_view.cpp
@@ -0,0 +1,58 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[box_view
+//` Shows usage of the Boost.Range compatible view on a box
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+
+
+int main()
+{
+ typedef boost::geometry::model::box
+ <
+ boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>
+ > box_type;
+
+ // Define the Boost.Range compatible type:
+ typedef boost::geometry::box_view<box_type> box_view;
+
+ box_type box;
+ boost::geometry::assign_values(box, 0, 0, 4, 4);
+
+ box_view view(box);
+
+ // Iterating in clockwise direction over the points of this box
+ for (boost::range_iterator<box_view const>::type it = boost::begin(view);
+ it != boost::end(view); ++it)
+ {
+ std::cout << " " << boost::geometry::dsv(*it);
+ }
+ std::cout << std::endl;
+
+ // Note that a box_view is tagged as a ring, so supports area etc.
+ std::cout << "Area: " << boost::geometry::area(view) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[box_view_output
+/*`
+Output:
+[pre
+ (0, 0) (0, 4) (4, 4) (4, 0) (0, 0)
+Area: 16
+]
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/views/segment_view.cpp b/libs/geometry/doc/src/examples/views/segment_view.cpp
new file mode 100644
index 000000000..5337189f9
--- /dev/null
+++ b/libs/geometry/doc/src/examples/views/segment_view.cpp
@@ -0,0 +1,57 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+//[segment_view
+//` Shows usage of the Boost.Range compatible view on a box
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+
+
+int main()
+{
+ typedef boost::geometry::model::segment
+ <
+ boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>
+ > segment_type;
+
+ typedef boost::geometry::segment_view<segment_type> segment_view;
+
+ segment_type segment;
+ boost::geometry::assign_values(segment, 0, 0, 1, 1);
+
+ segment_view view(segment);
+
+ // Iterating over the points of this segment
+ for (boost::range_iterator<segment_view const>::type it = boost::begin(view);
+ it != boost::end(view); ++it)
+ {
+ std::cout << " " << boost::geometry::dsv(*it);
+ }
+ std::cout << std::endl;
+
+ // Note that a segment_view is tagged as a linestring, so supports length etc.
+ std::cout << "Length: " << boost::geometry::length(view) << std::endl;
+
+ return 0;
+}
+
+//]
+
+
+//[segment_view_output
+/*`
+Output:
+[pre
+ (0, 0) (0, 4) (4, 4) (4, 0) (0, 0)
+Area: 16
+]
+*/
+//]
diff --git a/libs/geometry/example/01_point_example.cpp b/libs/geometry/example/01_point_example.cpp
new file mode 100644
index 000000000..4feee82c6
--- /dev/null
+++ b/libs/geometry/example/01_point_example.cpp
@@ -0,0 +1,135 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Point Example - showing different type of points
+
+#include <iostream>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon/point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+int main()
+{
+ using namespace boost::geometry;
+
+ // Boost.Geometry contains several point types:
+ // 1: its own generic type
+ model::point<double, 2, cs::cartesian> pt1;
+
+ // 2: its own type targetted to Cartesian (x,y) coordinates
+ model::d2::point_xy<double> pt2;
+
+ // 3: it supports Boost tuple's
+ boost::tuple<double, double> pt3;
+
+ // 4: it supports normal arrays
+ double pt4[2];
+
+ // 5: it supports arrays-as-points from Boost.Array
+ boost::array<double, 2> pt5;
+
+ // 6: it supports points from Boost.Polygon
+ boost::polygon::point_data<double> pt6;
+
+ // 7: in the past there was a typedef point_2d
+ // But users are now supposted to do that themselves:
+ typedef model::d2::point_xy<double> point_2d;
+ point_2d pt7;
+
+
+ // 7: there are more variants, and you can create your own.
+ // (see therefore the custom_point example)
+
+ // All these types are handled the same way. We show here
+ // assigning them and calculating distances.
+ assign_values(pt1, 1, 1);
+ assign_values(pt2, 2, 2);
+ assign_values(pt3, 3, 3);
+ assign_values(pt4, 4, 4);
+ assign_values(pt5, 5, 5);
+ assign_values(pt6, 6, 6);
+ assign_values(pt7, 7, 7);
+
+
+ double d1 = distance(pt1, pt2);
+ double d2 = distance(pt3, pt4);
+ double d3 = distance(pt5, pt6);
+ std::cout << "Distances: "
+ << d1 << " and " << d2 << " and " << d3 << std::endl;
+
+ // (in case you didn't note, distances can be calculated
+ // from points with different point-types)
+
+
+ // Several ways of construction and setting point values
+ // 1: default, empty constructor, causing no initialization at all
+ model::d2::point_xy<double> p1;
+
+ // 2: as shown above, assign_values
+ model::d2::point_xy<double> p2;
+ assign_values(p2, 1, 1);
+
+ // 3: using "set" function
+ // set uses the concepts behind, such that it can be applied for
+ // every point-type (like assign_values)
+ model::d2::point_xy<double> p3;
+ set<0>(p3, 1);
+ set<1>(p3, 1);
+ // set<2>(p3, 1); //will result in compile-error
+
+
+ // 3: for any point type, and other geometry objects:
+ // there is the "make" object generator
+ // (this one requires to specify the point-type).
+ model::d2::point_xy<double> p4 = make<model::d2::point_xy<double> >(1,1);
+
+
+ // 5: for the d2::point_xy<...> type only: constructor with two values
+ model::d2::point_xy<double> p5(1,1);
+
+ // 6: for boost tuples you can of course use make_tuple
+
+
+ // Some ways of getting point values
+
+ // 1: using the "get" function following the concepts behind
+ std::cout << get<0>(p2) << "," << get<1>(p2) << std::endl;
+
+ // 2: for point_xy only
+ std::cout << p2.x() << "," << p2.y() << std::endl;
+
+ // 3: using boost-tuples you of course can boost-tuple-methods
+ std::cout << pt3.get<0>() << "," << pt3.get<1>() << std::endl;
+
+ // 4: Boost.Geometry supports various output formats, e.g. DSV
+ // (delimiter separated values)
+ std::cout << dsv(pt3) << std::endl;
+
+ // There are 3-dimensional points too
+ model::point<double, 3, cs::cartesian> d3a, d3b;
+ assign_values(d3a, 1, 2, 3);
+ assign_values(d3b, 4, 5, 6);
+ d3 = distance(d3a, d3b);
+
+
+
+ // Other examples show other types of points, geometries and more algorithms
+
+ return 0;
+}
diff --git a/libs/geometry/example/02_linestring_example.cpp b/libs/geometry/example/02_linestring_example.cpp
new file mode 100644
index 000000000..94a2809fe
--- /dev/null
+++ b/libs/geometry/example/02_linestring_example.cpp
@@ -0,0 +1,232 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Linestring Example
+
+#include <algorithm> // for reverse, unique
+#include <iostream>
+#include <iterator>
+#include <utility>
+#include <vector>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+// Optional includes and defines to handle c-arrays as points, std::vectors as linestrings
+#include <boost/geometry/geometries/register/linestring.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+
+template<typename P>
+inline void translate_function(P& p)
+{
+ p.x(p.x() + 100.0);
+}
+
+template<typename P>
+struct scale_functor
+{
+ inline void operator()(P& p)
+ {
+ p.x(p.x() * 1000.0);
+ p.y(p.y() * 1000.0);
+ }
+};
+
+
+template<typename Point>
+struct round_coordinates
+{
+ typedef typename boost::geometry::coordinate_type<Point>::type coordinate_type;
+ coordinate_type m_factor;
+
+ inline round_coordinates(coordinate_type const& factor)
+ : m_factor(factor)
+ {}
+
+ template <int Dimension>
+ inline void round(Point& p)
+ {
+ coordinate_type c = boost::geometry::get<Dimension>(p) / m_factor;
+ int rounded = c;
+ boost::geometry::set<Dimension>(p, coordinate_type(rounded) * m_factor);
+ }
+
+ inline void operator()(Point& p)
+ {
+ round<0>(p);
+ round<1>(p);
+ }
+};
+
+
+int main(void)
+{
+ using namespace boost::geometry;
+
+ // Define a linestring, which is a vector of points, and add some points
+ // (we add them deliberately in different ways)
+ typedef model::d2::point_xy<double> point_2d;
+ typedef model::linestring<point_2d> linestring_2d;
+ linestring_2d ls;
+
+ // points can be created using "make" and added to a linestring using the std:: "push_back"
+ ls.push_back(make<point_2d>(1.1, 1.1));
+
+ // points can also be assigned using "assign_values" and added to a linestring using "append"
+ point_2d lp;
+ assign_values(lp, 2.5, 2.1);
+ append(ls, lp);
+
+ // Lines can be streamed using DSV (delimiter separated values)
+ std::cout << dsv(ls) << std::endl;
+
+ // The bounding box of linestrings can be calculated
+ typedef model::box<point_2d> box_2d;
+ box_2d b;
+ envelope(ls, b);
+ std::cout << dsv(b) << std::endl;
+
+ // The length of the line can be calulated
+ std::cout << "length: " << length(ls) << std::endl;
+
+ // All things from std::vector can be called, because a linestring is a vector
+ std::cout << "number of points 1: " << ls.size() << std::endl;
+
+ // All things from boost ranges can be called because a linestring is considered as a range
+ std::cout << "number of points 2: " << boost::size(ls) << std::endl;
+
+ // Generic function from geometry/OGC delivers the same value
+ std::cout << "number of points 3: " << num_points(ls) << std::endl;
+
+ // The distance from a point to a linestring can be calculated
+ point_2d p(1.9, 1.2);
+ std::cout << "distance of " << dsv(p)
+ << " to line: " << distance(p, ls) << std::endl;
+
+ // A linestring is a vector. However, some algorithms consider "segments",
+ // which are the line pieces between two points of a linestring.
+ double d = distance(p, model::segment<point_2d >(ls.front(), ls.back()));
+ std::cout << "distance: " << d << std::endl;
+
+ // Add some three points more, let's do it using a classic array.
+ // (See documentation for picture of this linestring)
+ const double c[][2] = { {3.1, 3.1}, {4.9, 1.1}, {3.1, 1.9} };
+ append(ls, c);
+ std::cout << "appended: " << dsv(ls) << std::endl;
+
+ // Output as iterator-pair on a vector
+ {
+ std::vector<point_2d> v;
+ std::copy(ls.begin(), ls.end(), std::back_inserter(v));
+
+ std::cout
+ << "as vector: "
+ << dsv(v)
+ << std::endl;
+ }
+
+ // All algorithms from std can be used: a linestring is a vector
+ std::reverse(ls.begin(), ls.end());
+ std::cout << "reversed: " << dsv(ls) << std::endl;
+ std::reverse(boost::begin(ls), boost::end(ls));
+
+ // The other way, using a vector instead of a linestring, is also possible
+ std::vector<point_2d> pv(ls.begin(), ls.end());
+ std::cout << "length: " << length(pv) << std::endl;
+
+ // If there are double points in the line, you can use unique to remove them
+ // So we add the last point, print, make a unique copy and print
+ {
+ // (sidenote, we have to make copies, because
+ // ls.push_back(ls.back()) often succeeds but
+ // IS dangerous and erroneous!
+ point_2d last = ls.back(), first = ls.front();
+ ls.push_back(last);
+ ls.insert(ls.begin(), first);
+ }
+ std::cout << "extra duplicate points: " << dsv(ls) << std::endl;
+
+ {
+ linestring_2d ls_copy;
+ std::unique_copy(ls.begin(), ls.end(), std::back_inserter(ls_copy),
+ boost::geometry::equal_to<point_2d>());
+ ls = ls_copy;
+ std::cout << "uniquecopy: " << dsv(ls) << std::endl;
+ }
+
+ // Lines can be simplified. This removes points, but preserves the shape
+ linestring_2d ls_simplified;
+ simplify(ls, ls_simplified, 0.5);
+ std::cout << "simplified: " << dsv(ls_simplified) << std::endl;
+
+
+ // for_each:
+ // 1) Lines can be visited with std::for_each
+ // 2) for_each_point is also defined for all geometries
+ // 3) for_each_segment is defined for all geometries to all segments
+ // 4) loop is defined for geometries to visit segments
+ // with state apart, and to be able to break out (not shown here)
+ {
+ linestring_2d lscopy = ls;
+ std::for_each(lscopy.begin(), lscopy.end(), translate_function<point_2d>);
+ for_each_point(lscopy, scale_functor<point_2d>());
+ for_each_point(lscopy, translate_function<point_2d>);
+ std::cout << "modified line: " << dsv(lscopy) << std::endl;
+ }
+
+ // Lines can be clipped using a clipping box. Clipped lines are added to the output iterator
+ box_2d cb(point_2d(1.5, 1.5), point_2d(4.5, 2.5));
+
+ std::vector<linestring_2d> clipped;
+ intersection(cb, ls, clipped);
+
+ // Also possible: clip-output to a vector of vectors
+ std::vector<std::vector<point_2d> > vector_out;
+ intersection(cb, ls, vector_out);
+
+ std::cout << "clipped output as vector:" << std::endl;
+ for (std::vector<std::vector<point_2d> >::const_iterator it
+ = vector_out.begin(); it != vector_out.end(); ++it)
+ {
+ std::cout << dsv(*it) << std::endl;
+ }
+
+ // Calculate the convex hull of the linestring
+ model::polygon<point_2d> hull;
+ convex_hull(ls, hull);
+ std::cout << "Convex hull:" << dsv(hull) << std::endl;
+
+ // All the above assumed 2D Cartesian linestrings. 3D is possible as well
+ // Let's define a 3D point ourselves, this time using 'float'
+ typedef model::point<float, 3, cs::cartesian> point_3d;
+ model::linestring<point_3d> line3;
+ line3.push_back(make<point_3d>(1,2,3));
+ line3.push_back(make<point_3d>(4,5,6));
+ line3.push_back(make<point_3d>(7,8,9));
+
+ // Not all algorithms work on 3d lines. For example convex hull does NOT.
+ // But, for example, length, distance, simplify, envelope and stream do.
+ std::cout << "3D: length: " << length(line3) << " line: " << dsv(line3) << std::endl;
+
+ // With DSV you can also use other delimiters, e.g. JSON style
+ std::cout << "JSON: "
+ << dsv(ls, ", ", "[", "]", ", ", "[ ", " ]")
+ << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/03_polygon_example.cpp b/libs/geometry/example/03_polygon_example.cpp
new file mode 100644
index 000000000..3b962ce01
--- /dev/null
+++ b/libs/geometry/example/03_polygon_example.cpp
@@ -0,0 +1,141 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Polygon Example
+
+#include <algorithm> // for reverse, unique
+#include <iostream>
+#include <string>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+
+
+std::string boolstr(bool v)
+{
+ return v ? "true" : "false";
+}
+
+int main(void)
+{
+ using namespace boost::geometry;
+
+ typedef model::d2::point_xy<double> point_2d;
+ typedef model::polygon<point_2d> polygon_2d;
+ typedef model::box<point_2d> box_2d;
+
+ // Define a polygon and fill the outer ring.
+ // In most cases you will read it from a file or database
+ polygon_2d poly;
+ {
+ const double coor[][2] = {
+ {2.0, 1.3}, {2.4, 1.7}, {2.8, 1.8}, {3.4, 1.2}, {3.7, 1.6},
+ {3.4, 2.0}, {4.1, 3.0}, {5.3, 2.6}, {5.4, 1.2}, {4.9, 0.8}, {2.9, 0.7},
+ {2.0, 1.3} // closing point is opening point
+ };
+ assign_points(poly, coor);
+ }
+
+ // Polygons should be closed, and directed clockwise. If you're not sure if that is the case,
+ // call the correct algorithm
+ correct(poly);
+
+ // Polygons can be streamed as text
+ // (or more precisely: as DSV (delimiter separated values))
+ std::cout << dsv(poly) << std::endl;
+
+ // As with lines, bounding box of polygons can be calculated
+ box_2d b;
+ envelope(poly, b);
+ std::cout << dsv(b) << std::endl;
+
+ // The area of the polygon can be calulated
+ std::cout << "area: " << area(poly) << std::endl;
+
+ // And the centroid, which is the center of gravity
+ point_2d cent;
+ centroid(poly, cent);
+ std::cout << "centroid: " << dsv(cent) << std::endl;
+
+
+ // The number of points can be requested per ring (using .size())
+ // or per polygon (using num_points)
+ std::cout << "number of points in outer ring: " << poly.outer().size() << std::endl;
+
+ // Polygons can have one or more inner rings, also called holes, islands, interior rings.
+ // Let's add one
+ {
+ poly.inners().resize(1);
+ model::ring<point_2d>& inner = poly.inners().back();
+
+ const double coor[][2] = { {4.0, 2.0}, {4.2, 1.4}, {4.8, 1.9}, {4.4, 2.2}, {4.0, 2.0} };
+ assign_points(inner, coor);
+ }
+
+ correct(poly);
+
+ std::cout << "with inner ring:" << dsv(poly) << std::endl;
+ // The area of the polygon is changed of course
+ std::cout << "new area of polygon: " << area(poly) << std::endl;
+ centroid(poly, cent);
+ std::cout << "new centroid: " << dsv(cent) << std::endl;
+
+ // You can test whether points are within a polygon
+ std::cout << "point in polygon:"
+ << " p1: " << boolstr(within(make<point_2d>(3.0, 2.0), poly))
+ << " p2: " << boolstr(within(make<point_2d>(3.7, 2.0), poly))
+ << " p3: " << boolstr(within(make<point_2d>(4.4, 2.0), poly))
+ << std::endl;
+
+ // As with linestrings and points, you can derive from polygon to add, for example,
+ // fill color and stroke color. Or SRID (spatial reference ID). Or Z-value. Or a property map.
+ // We don't show this here.
+
+ // Clip the polygon using a box
+ box_2d cb(make<point_2d>(1.5, 1.5), make<point_2d>(4.5, 2.5));
+ typedef std::vector<polygon_2d> polygon_list;
+ polygon_list v;
+
+ intersection(cb, poly, v);
+ std::cout << "Clipped output polygons" << std::endl;
+ for (polygon_list::const_iterator it = v.begin(); it != v.end(); ++it)
+ {
+ std::cout << dsv(*it) << std::endl;
+ }
+
+ typedef model::multi_polygon<polygon_2d> polygon_set;
+ polygon_set ps;
+ union_(cb, poly, ps);
+
+ polygon_2d hull;
+ convex_hull(poly, hull);
+ std::cout << "Convex hull:" << dsv(hull) << std::endl;
+
+ // If you really want:
+ // You don't have to use a vector, you can define a polygon with a deque
+ // You can specify the container for the points and for the inner rings independantly
+
+ typedef model::polygon<point_2d, true, true, std::deque, std::deque> deque_polygon;
+ deque_polygon poly2;
+ ring_type<deque_polygon>::type& ring = exterior_ring(poly2);
+ append(ring, make<point_2d>(2.8, 1.9));
+ append(ring, make<point_2d>(2.9, 2.4));
+ append(ring, make<point_2d>(3.3, 2.2));
+ append(ring, make<point_2d>(3.2, 1.8));
+ append(ring, make<point_2d>(2.8, 1.9));
+ std::cout << dsv(poly2) << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/04_boost_example.cpp b/libs/geometry/example/04_boost_example.cpp
new file mode 100644
index 000000000..1f2c29b14
--- /dev/null
+++ b/libs/geometry/example/04_boost_example.cpp
@@ -0,0 +1,94 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Example combining Boost.Geometry with Boost.Assign and Boost.Range and Boost.Tuple
+
+#include <iostream>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/assign.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);
+
+
+int main(void)
+{
+ using namespace boost::geometry;
+ using namespace boost::assign;
+
+ {
+ typedef model::d2::point_xy<double> point;
+ typedef model::polygon<point> polygon;
+ typedef model::linestring<point> linestring;
+
+ // Boost.Assign automatically works for linestring, rings, multi-geometries
+ // It works because these are std:: containers
+
+ // Using Boost.Assign operator +=
+ linestring ls1;
+ ls1 += point(1,2);
+ ls1 += point(3,4), point(5,6), point(7,8);
+ std::cout << dsv(ls1) << std::endl;
+
+ // Using Boost.Assign operator()
+ linestring ls2;
+ push_back(ls2)(point(1, 2))(point(3, 4));
+ std::cout << dsv(ls2) << std::endl;
+
+ // Using Boost.Assign list_of
+ linestring ls3 = list_of(point(1,2))(point(3,4));
+ std::cout << dsv(ls3) << std::endl;
+
+ // Using Boost.Assign + Boost.Range
+ linestring ls4;
+ push_back(ls4)(point(0, 0)).range(ls2).range(ls3);
+ std::cout << dsv(ls4) << std::endl;
+
+ // For a ring, it is similar to a linestring.
+ // For a multi-point or multi-linestring, it is also similar
+ // For a polygon, take the exterior ring or one of the interiors
+ polygon p;
+ push_back(exterior_ring(p))
+ (point(0, 0))
+ (point(0, 2))
+ (point(2, 2))
+ (point(2, 0))
+ (point(0, 0))
+ ;
+
+ std::cout << dsv(p) << std::endl;
+ }
+
+ {
+ // It is convenient to combine Boost.Assign on a geometry (e.g. polygon) with tuples.
+ typedef model::polygon<boost::tuple<double,double> > polygon;
+
+ polygon p;
+ exterior_ring(p) = tuple_list_of(0, 0)(0, 5)(5, 5)(5, 0)(0, 0);
+
+ std::cout << dsv(p) << std::endl;
+
+ // And let it work on the interior_rings as well
+ push_back(interior_rings(p))
+ (tuple_list_of(1, 1)(2, 1)(2, 2)(1, 2)(1, 1))
+ (tuple_list_of(3, 3)(4, 3)(4, 4)(3, 4)(3, 3))
+ ;
+
+ std::cout << "Area of " << dsv(p) << " is " << area(p) << std::endl;
+ }
+
+
+ return 0;
+}
diff --git a/libs/geometry/example/05_a_overlay_polygon_example.cpp b/libs/geometry/example/05_a_overlay_polygon_example.cpp
new file mode 100644
index 000000000..26fdd1e1e
--- /dev/null
+++ b/libs/geometry/example/05_a_overlay_polygon_example.cpp
@@ -0,0 +1,89 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Polygon Overlay Example
+
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <boost/foreach.hpp>
+
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+
+#if defined(HAVE_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+
+
+int main(void)
+{
+ namespace bg = boost::geometry;
+
+ typedef bg::model::d2::point_xy<double> point_2d;
+ typedef bg::model::polygon<point_2d> polygon_2d;
+
+
+#if defined(HAVE_SVG)
+ std::ofstream stream("05_a_intersection_polygon_example.svg");
+ bg::svg_mapper<point_2d> svg(stream, 500, 500);
+#endif
+
+ // Define a polygons and fill the outer rings.
+ polygon_2d a;
+ {
+ const double c[][2] = {
+ {160, 330}, {60, 260}, {20, 150}, {60, 40}, {190, 20}, {270, 130}, {260, 250}, {160, 330}
+ };
+ bg::assign_points(a, c);
+ }
+ bg::correct(a);
+ std::cout << "A: " << bg::dsv(a) << std::endl;
+
+ polygon_2d b;
+ {
+ const double c[][2] = {
+ {300, 330}, {190, 270}, {150, 170}, {150, 110}, {250, 30}, {380, 50}, {380, 250}, {300, 330}
+ };
+ bg::assign_points(b, c);
+ }
+ bg::correct(b);
+ std::cout << "B: " << bg::dsv(b) << std::endl;
+#if defined(HAVE_SVG)
+ svg.add(a);
+ svg.add(b);
+
+ svg.map(a, "opacity:0.6;fill:rgb(0,255,0);");
+ svg.map(b, "opacity:0.6;fill:rgb(0,0,255);");
+#endif
+
+
+ // Calculate interesection(s)
+ std::vector<polygon_2d> intersection;
+ bg::intersection(a, b, intersection);
+
+ std::cout << "Intersection of polygons A and B" << std::endl;
+ BOOST_FOREACH(polygon_2d const& polygon, intersection)
+ {
+ std::cout << bg::dsv(polygon) << std::endl;
+#if defined(HAVE_SVG)
+ svg.map(polygon, "opacity:0.5;fill:none;stroke:rgb(255,0,0);stroke-width:6");
+#endif
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp b/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp
new file mode 100644
index 000000000..49e54b443
--- /dev/null
+++ b/libs/geometry/example/05_b_overlay_linestring_polygon_example.cpp
@@ -0,0 +1,98 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Linestring Polygon Overlay Example
+
+// NOTE: this example is obsolete. Boost.Geometry can now
+// overlay linestrings/polygons.
+// This sample will be removed in next version.
+
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <boost/foreach.hpp>
+
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+
+#if defined(HAVE_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian);
+
+
+int main(void)
+{
+ namespace bg = boost::geometry;
+
+ typedef bg::model::d2::point_xy<double> point_2d;
+
+ bg::model::linestring<point_2d> ls;
+ {
+ const double c[][2] = { {0, 1}, {2, 5}, {5, 3} };
+ bg::assign_points(ls, c);
+ }
+
+ bg::model::polygon<point_2d> p;
+ {
+ const double c[][2] = { {3, 0}, {0, 3}, {4, 5}, {3, 0} };
+ bg::assign_points(p, c);
+ }
+ bg::correct(p);
+
+#if defined(HAVE_SVG)
+ // Create SVG-mapper
+ std::ofstream stream("05_b_overlay_linestring_polygon_example.svg");
+ bg::svg_mapper<point_2d> svg(stream, 500, 500);
+ // Determine extend by adding geometries
+ svg.add(p);
+ svg.add(ls);
+ // Map geometries
+ svg.map(ls, "opacity:0.6;stroke:rgb(255,0,0);stroke-width:2;");
+ svg.map(p, "opacity:0.6;fill:rgb(0,0,255);");
+#endif
+
+ // Calculate intersection points (turn points)
+ typedef bg::detail::overlay::turn_info<point_2d> turn_info;
+ std::vector<turn_info> turns;
+ bg::detail::get_turns::no_interrupt_policy policy;
+ bg::get_turns<false, false, bg::detail::overlay::assign_null_policy>(ls, p, turns, policy);
+
+ std::cout << "Intersection of linestring/polygon" << std::endl;
+ BOOST_FOREACH(turn_info const& turn, turns)
+ {
+ std::string action = "intersecting";
+ if (turn.operations[0].operation
+ == bg::detail::overlay::operation_intersection)
+ {
+ action = "entering";
+ }
+ else if (turn.operations[0].operation
+ == bg::detail::overlay::operation_union)
+ {
+ action = "leaving";
+
+ }
+ std::cout << action << " polygon at " << bg::dsv(turn.point) << std::endl;
+#if defined(HAVE_SVG)
+ svg.map(turn.point, "fill:rgb(255,128,0);stroke:rgb(0,0,100);stroke-width:1");
+ svg.text(turn.point, action, "fill:rgb(0,0,0);font-family:Arial;font-size:10px");
+#endif
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/example/06_a_transformation_example.cpp b/libs/geometry/example/06_a_transformation_example.cpp
new file mode 100644
index 000000000..367d5e16f
--- /dev/null
+++ b/libs/geometry/example/06_a_transformation_example.cpp
@@ -0,0 +1,56 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Transformation Example
+
+#include <iostream>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+
+
+int main()
+{
+ using namespace boost::geometry;
+
+ typedef model::d2::point_xy<double> point_2d;
+ point_2d p(1, 1);
+ point_2d p2;
+
+ // Example: translate a point over (5,5)
+ strategy::transform::translate_transformer<point_2d, point_2d> translate(5, 5);
+
+ transform(p, p2, translate);
+ std::cout << "transformed point " << boost::geometry::dsv(p2) << std::endl;
+
+ // Transform a polygon
+ model::polygon<point_2d> poly, poly2;
+ const double coor[][2] = { {0, 0}, {0, 7}, {2, 2}, {2, 0}, {0, 0} };
+ // note that for this syntax you have to include the two
+ // include files above (c_array.hpp)
+ assign_points(poly, coor);
+ //read_wkt("POLYGON((0 0,0 7,4 2,2 0,0 0))", poly);
+ transform(poly, poly2, translate);
+
+ std::cout << "source polygon " << boost::geometry::dsv(poly) << std::endl;
+ std::cout << "transformed polygon " << boost::geometry::dsv(poly2) << std::endl;
+
+ // Many more transformations are possible:
+ // - from Cartesian to Spherical coordinate systems and back
+ // - from Cartesian to Cartesian (mapping, affine transformations) and back (inverse)
+ // - Map Projections
+ // - from Degree to Radian and back in spherical_equatorial or geographic coordinate systems
+
+ return 0;
+}
diff --git a/libs/geometry/example/06_b_transformation_example.cpp b/libs/geometry/example/06_b_transformation_example.cpp
new file mode 100644
index 000000000..5dd972548
--- /dev/null
+++ b/libs/geometry/example/06_b_transformation_example.cpp
@@ -0,0 +1,170 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Example: Affine Transformation (translate, scale, rotate)
+//
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+//
+// 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)
+
+
+#include <ctime> // for std::time
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <limits>
+#include <sstream>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/algorithms/centroid.hpp>
+#include <boost/geometry/strategies/transform.hpp>
+#include <boost/geometry/strategies/transform/matrix_transformers.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+
+#if defined(HAVE_SVG)
+# include <boost/geometry/io/svg/write_svg.hpp>
+#endif
+
+#include <boost/bind.hpp>
+#include <boost/random.hpp>
+#include <boost/range.hpp>
+#include <boost/shared_ptr.hpp>
+
+using namespace boost::geometry;
+
+struct random_style
+{
+ random_style()
+ : rng(static_cast<int>(std::time(0))), dist(0, 255), colour(rng, dist)
+ {}
+
+ std::string fill(double opacity = 1)
+ {
+ std::ostringstream oss;
+ oss << "fill:rgba(" << colour() << "," << colour() << "," << colour() << "," << opacity << ");";
+ return oss.str();
+ }
+
+ std::string stroke(int width, double opacity = 1)
+ {
+ std::ostringstream oss;
+ oss << "stroke:rgba(" << colour() << "," << colour() << "," << colour() << "," << opacity << ");";
+ oss << "stroke-width:" << width << ";";
+ return oss.str();
+ }
+
+ template <typename T>
+ std::string text(T x, T y, std::string const& text)
+ {
+ std::ostringstream oss;
+ oss << "<text x=\"" << static_cast<int>(x) - 90 << "\" y=\"" << static_cast<int>(y) << "\" font-family=\"Verdana\">" << text << "</text>";
+ return oss.str();
+ }
+
+ boost::mt19937 rng;
+ boost::uniform_int<> dist;
+ boost::variate_generator<boost::mt19937&, boost::uniform_int<> > colour;
+};
+
+template <typename OutputStream>
+struct svg_output
+{
+ svg_output(OutputStream& os, double opacity = 1) : os(os), opacity(opacity)
+ {
+ os << "<?xml version=\"1.0\" standalone=\"no\"?>\n"
+ << "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n"
+ << "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"
+ << "<svg width=\"100%\" height=\"100%\" version=\"1.1\"\n"
+ << "xmlns=\"http://www.w3.org/2000/svg\">" << std::endl;
+ }
+
+ ~svg_output()
+ {
+ os << "</svg>" << std::endl;
+ }
+
+ template <typename G>
+ void put(G const& g, std::string const& label)
+ {
+ std::string style_str(style.fill(opacity) + style.stroke(5, opacity));
+#if defined(HAVE_SVG)
+ os << boost::geometry::svg(g, style_str) << std::endl;
+#endif
+ if (!label.empty())
+ {
+ typename point_type<G>::type c;
+ centroid(g, c);
+ os << style.text(static_cast<int>(get<0>(c)), static_cast<int>(get<1>(c)), label);
+ }
+ }
+
+private:
+
+ OutputStream& os;
+ double opacity;
+ random_style style;
+};
+
+
+int main()
+{
+ using namespace boost::geometry::strategy::transform;
+
+ typedef boost::geometry::model::d2::point_xy<double> point_2d;
+
+ try
+ {
+ std::string file("06_b_transformation_example.svg");
+ std::ofstream ofs(file.c_str());
+ svg_output<std::ofstream> svg(ofs, 0.5);
+
+ // G1 - create subject for affine transformations
+ model::polygon<point_2d> g1;
+ read_wkt("POLYGON((50 250, 400 250, 150 50, 50 250))", g1);
+ std::clog << "source box:\t" << boost::geometry::dsv(g1) << std::endl;
+ svg.put(g1, "g1");
+
+ // G1 - Translate -> G2
+ translate_transformer<point_2d, point_2d> translate(0, 250);
+ model::polygon<point_2d> g2;
+ transform(g1, g2, translate);
+ std::clog << "translated:\t" << boost::geometry::dsv(g2) << std::endl;
+ svg.put(g2, "g2=g1.translate(0,250)");
+
+ // G2 - Scale -> G3
+ scale_transformer<point_2d, point_2d> scale(0.5, 0.5);
+ model::polygon<point_2d> g3;
+ transform(g2, g3, scale);
+ std::clog << "scaled:\t" << boost::geometry::dsv(g3) << std::endl;
+ svg.put(g3, "g3=g2.scale(0.5,0.5)");
+
+ // G3 - Combine rotate and translate -> G4
+ rotate_transformer<point_2d, point_2d, degree> rotate(45);
+
+ // Compose matrix for the two transformation
+ // Create transformer attached to the transformation matrix
+ ublas_transformer<point_2d, point_2d, 2, 2>
+ combined(boost::numeric::ublas::prod(rotate.matrix(), translate.matrix()));
+ //combined(rotate.matrix());
+
+ // Apply transformation to subject geometry point-by-point
+ model::polygon<point_2d> g4;
+ transform(g3, g4, combined);
+
+ std::clog << "rotated & translated:\t" << boost::geometry::dsv(g4) << std::endl;
+ svg.put(g4, "g4 = g3.(rotate(45) * translate(0,250))");
+
+ std::clog << "Saved SVG file:\t" << file << std::endl;
+ }
+ catch (std::exception const& e)
+ {
+ std::cerr << e.what() << std::endl;
+ }
+ catch (...)
+ {
+ std::cerr << "unknown error" << std::endl;
+ }
+ return 0;
+}
diff --git a/libs/geometry/example/07_a_graph_route_example.cpp b/libs/geometry/example/07_a_graph_route_example.cpp
new file mode 100644
index 000000000..735d2dfa7
--- /dev/null
+++ b/libs/geometry/example/07_a_graph_route_example.cpp
@@ -0,0 +1,391 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Example showing Boost.Geometry combined with Boost.Graph, calculating shortest routes
+// input: two WKT's, provided in subfolder data
+// output: text, + an SVG, displayable in e.g. Firefox)
+
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <limits>
+
+#include <boost/tuple/tuple.hpp>
+#include <boost/foreach.hpp>
+
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+// For output:
+#include <boost/geometry/io/svg/svg_mapper.hpp>
+
+// Yes, this example currently uses an extension:
+
+// For distance-calculations over the Earth:
+//#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp>
+// Yes, this example currently uses some extensions:
+
+
+// Read an ASCII file containing WKT's, fill a vector of tuples
+// The tuples consist of at least <0> a geometry and <1> an identifying string
+template <typename Geometry, typename Tuple, typename Box>
+void read_wkt(std::string const& filename, std::vector<Tuple>& tuples, Box& box)
+{
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ Geometry geometry;
+ boost::trim(line);
+ if (! line.empty() && ! boost::starts_with(line, "#"))
+ {
+ std::string name;
+
+ // Split at ';', if any
+ std::string::size_type pos = line.find(";");
+ if (pos != std::string::npos)
+ {
+ name = line.substr(pos + 1);
+ line.erase(pos);
+
+ boost::trim(line);
+ boost::trim(name);
+ }
+
+ Geometry geometry;
+ boost::geometry::read_wkt(line, geometry);
+
+ Tuple tuple(geometry, name);
+
+ tuples.push_back(tuple);
+ boost::geometry::expand(box, boost::geometry::return_envelope<Box>(geometry));
+ }
+ }
+ }
+}
+
+
+
+// Code to define properties for Boost Graph's
+enum vertex_bg_property_t { vertex_bg_property };
+enum edge_bg_property_t { edge_bg_property };
+namespace boost
+{
+ BOOST_INSTALL_PROPERTY(vertex, bg_property);
+ BOOST_INSTALL_PROPERTY(edge, bg_property);
+}
+
+// Define properties for vertex
+template <typename Point>
+struct bg_vertex_property
+{
+ bg_vertex_property()
+ {
+ boost::geometry::assign_zero(location);
+ }
+ bg_vertex_property(Point const& loc)
+ {
+ location = loc;
+ }
+
+ Point location;
+};
+
+// Define properties for edge
+template <typename Linestring>
+struct bg_edge_property
+{
+ bg_edge_property(Linestring const& line)
+ : m_line(line)
+ {
+ m_length = boost::geometry::length(line);
+ }
+
+ inline operator double() const
+ {
+ return m_length;
+ }
+
+ inline Linestring const& line() const
+ {
+ return m_line;
+ }
+
+private :
+ double m_length;
+ Linestring m_line;
+};
+
+// Utility function to add a vertex to a graph. It might exist already. Then do not insert,
+// but return vertex descriptor back. It might not exist. Then add it (and return).
+// To efficiently handle this, a std::map is used.
+template <typename M, typename K, typename G>
+inline typename boost::graph_traits<G>::vertex_descriptor find_or_insert(M& map, K const& key, G& graph)
+{
+ typename M::const_iterator it = map.find(key);
+ if (it == map.end())
+ {
+ // Add a vertex to the graph
+ typename boost::graph_traits<G>::vertex_descriptor new_vertex
+ = boost::add_vertex(graph);
+
+ // Set the property (= location)
+ boost::put(boost::get(vertex_bg_property, graph), new_vertex,
+ bg_vertex_property<typename M::key_type>(key));
+
+ // Add to the map, using POINT as key
+ map[key] = new_vertex;
+ return new_vertex;
+ }
+ return it->second;
+}
+
+template
+<
+ typename Graph,
+ typename RoadTupleVector,
+ typename CityTupleVector
+>
+void add_roads_and_connect_cities(Graph& graph,
+ RoadTupleVector const& roads,
+ CityTupleVector& cities)
+{
+ typedef typename boost::range_value<RoadTupleVector>::type road_type;
+ typedef typename boost::tuples::element<0, road_type>::type line_type;
+ typedef typename boost::geometry::point_type<line_type>::type point_type;
+
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_type;
+
+ // Define a map to be used during graph filling
+ // Maps from point to vertex-id's
+ typedef std::map<point_type, vertex_type, boost::geometry::less<point_type> > map_type;
+ map_type map;
+
+
+ // Fill the graph
+ BOOST_FOREACH(road_type const& road, roads)
+ {
+ line_type const& line = road.template get<0>();
+ // Find or add begin/end point of these line
+ vertex_type from = find_or_insert(map, line.front(), graph);
+ vertex_type to = find_or_insert(map, line.back(), graph);
+ boost::add_edge(from, to, bg_edge_property<line_type>(line), graph);
+ }
+
+ // Find nearest graph vertex for each city, using the map
+ typedef typename boost::range_value<CityTupleVector>::type city_type;
+ BOOST_FOREACH(city_type& city, cities)
+ {
+ double min_distance = 1e300;
+ for(typename map_type::const_iterator it = map.begin(); it != map.end(); ++it)
+ {
+ double dist = boost::geometry::distance(it->first, city.template get<0>());
+ if (dist < min_distance)
+ {
+ min_distance = dist;
+ // Set the vertex
+ city.template get<2>() = it->second;
+ }
+ }
+ }
+}
+
+template <typename Graph, typename Route>
+inline void add_edge_to_route(Graph const& graph,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex1,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex2,
+ Route& route)
+{
+ std::pair
+ <
+ typename boost::graph_traits<Graph>::edge_descriptor,
+ bool
+ > opt_edge = boost::edge(vertex1, vertex2, graph);
+ if (opt_edge.second)
+ {
+ // Get properties of edge and of vertex
+ bg_edge_property<Route> const& edge_prop =
+ boost::get(boost::get(edge_bg_property, graph), opt_edge.first);
+
+ bg_vertex_property<typename boost::geometry::point_type<Route>::type> const& vertex_prop =
+ boost::get(boost::get(vertex_bg_property, graph), vertex2);
+
+ // Depending on how edge connects to vertex, copy it forward or backward
+ if (boost::geometry::equals(edge_prop.line().front(), vertex_prop.location))
+ {
+ std::copy(edge_prop.line().begin(), edge_prop.line().end(),
+ std::back_inserter(route));
+ }
+ else
+ {
+ std::reverse_copy(edge_prop.line().begin(), edge_prop.line().end(),
+ std::back_inserter(route));
+ }
+ }
+}
+
+
+template <typename Graph, typename Route>
+inline void build_route(Graph const& graph,
+ std::vector<typename boost::graph_traits<Graph>::vertex_descriptor> const& predecessors,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex1,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex2,
+ Route& route)
+{
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_type;
+ vertex_type pred = predecessors[vertex2];
+
+ add_edge_to_route(graph, vertex2, pred, route);
+ while (pred != vertex1)
+ {
+ add_edge_to_route(graph, predecessors[pred], pred, route);
+ pred = predecessors[pred];
+ }
+}
+
+
+int main()
+{
+ // Define a point in the Geographic coordinate system (currently Spherical)
+ // (geographic calculations are in an extension; for sample it makes no difference)
+ typedef boost::geometry::model::point
+ <
+ double, 2, boost::geometry::cs::spherical_equatorial<boost::geometry::degree>
+ > point_type;
+
+ typedef boost::geometry::model::linestring<point_type> line_type;
+
+ // Define the graph, lateron containing the road network
+ typedef boost::adjacency_list
+ <
+ boost::vecS, boost::vecS, boost::undirectedS
+ , boost::property<vertex_bg_property_t, bg_vertex_property<point_type> >
+ , boost::property<edge_bg_property_t, bg_edge_property<line_type> >
+ > graph_type;
+
+ typedef boost::graph_traits<graph_type>::vertex_descriptor vertex_type;
+
+
+ // Init a bounding box, lateron used to define SVG map
+ boost::geometry::model::box<point_type> box;
+ boost::geometry::assign_inverse(box);
+
+ // Read the cities
+ typedef boost::tuple<point_type, std::string, vertex_type> city_type;
+ std::vector<city_type> cities;
+ read_wkt<point_type>("data/cities.wkt", cities, box);
+
+ // Read the road network
+ typedef boost::tuple<line_type, std::string> road_type;
+ std::vector<road_type> roads;
+ read_wkt<line_type>("data/roads.wkt", roads, box);
+
+
+ graph_type graph;
+
+ // Add roads and connect cities
+ add_roads_and_connect_cities(graph, roads, cities);
+
+ double const km = 1000.0;
+ std::cout << "distances, all in KM" << std::endl
+ << std::fixed << std::setprecision(0);
+
+ // To calculate distance, declare and construct a strategy with average earth radius
+ boost::geometry::strategy::distance::haversine<point_type> haversine(6372795.0);
+
+ // Main functionality: calculate shortest routes from/to all cities
+
+
+ // For the first one, the complete route is stored as a linestring
+ bool first = true;
+ line_type route;
+
+ int const n = boost::num_vertices(graph);
+ BOOST_FOREACH(city_type const& city1, cities)
+ {
+ std::vector<vertex_type> predecessors(n);
+ std::vector<double> costs(n);
+
+ // Call Dijkstra (without named-parameter to be compatible with all VC)
+ boost::dijkstra_shortest_paths(graph, city1.get<2>(),
+ &predecessors[0], &costs[0],
+ boost::get(edge_bg_property, graph),
+ boost::get(boost::vertex_index, graph),
+ std::less<double>(), std::plus<double>(),
+ (std::numeric_limits<double>::max)(), double(),
+ boost::dijkstra_visitor<boost::null_visitor>());
+
+ BOOST_FOREACH(city_type const& city2, cities)
+ {
+ if (! boost::equals(city1.get<1>(), city2.get<1>()))
+ {
+ double distance = costs[city2.get<2>()] / km;
+ double acof = boost::geometry::distance(city1.get<0>(), city2.get<0>(), haversine) / km;
+
+ std::cout
+ << std::setiosflags (std::ios_base::left) << std::setw(15)
+ << city1.get<1>() << " - "
+ << std::setiosflags (std::ios_base::left) << std::setw(15)
+ << city2.get<1>()
+ << " -> through the air: " << std::setw(4) << acof
+ << " , over the road: " << std::setw(4) << distance
+ << std::endl;
+
+ if (first)
+ {
+ build_route(graph, predecessors,
+ city1.get<2>(), city2.get<2>(),
+ route);
+ first = false;
+ }
+ }
+ }
+ }
+
+#if defined(HAVE_SVG)
+ // Create the SVG
+ std::ofstream stream("routes.svg");
+ boost::geometry::svg_mapper<point_type> mapper(stream, 600, 600);
+
+ // Map roads
+ BOOST_FOREACH(road_type const& road, roads)
+ {
+ mapper.add(road.get<0>());
+ }
+
+ BOOST_FOREACH(road_type const& road, roads)
+ {
+ mapper.map(road.get<0>(),
+ "stroke:rgb(128,128,128);stroke-width:1");
+ }
+
+ mapper.map(route,
+ "stroke:rgb(0, 255, 0);stroke-width:6;opacity:0.5");
+
+ // Map cities
+ BOOST_FOREACH(city_type const& city, cities)
+ {
+ mapper.map(city.get<0>(),
+ "fill:rgb(255,255,0);stroke:rgb(0,0,0);stroke-width:1");
+ mapper.text(city.get<0>(), city.get<1>(),
+ "fill:rgb(0,0,0);font-family:Arial;font-size:10px", 5, 5);
+ }
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/example/07_b_graph_route_example.cpp b/libs/geometry/example/07_b_graph_route_example.cpp
new file mode 100644
index 000000000..843a84e6f
--- /dev/null
+++ b/libs/geometry/example/07_b_graph_route_example.cpp
@@ -0,0 +1,377 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Example showing Boost.Geometry combined with Boost.Graph, calculating shortest routes
+// input: two WKT's, provided in subfolder data
+// output: text, + an SVG, displayable in e.g. Firefox)
+
+
+// Second variant, with bundled properties
+
+
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <limits>
+
+#include <boost/tuple/tuple.hpp>
+#include <boost/foreach.hpp>
+
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+
+// For output:
+#include <boost/geometry/io/svg/svg_mapper.hpp>
+
+// Yes, this example currently uses an extension:
+
+// For distance-calculations over the Earth:
+//#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp>
+
+
+
+// Read an ASCII file containing WKT's, fill a vector of tuples
+// The tuples consist of at least <0> a geometry and <1> an identifying string
+template <typename Geometry, typename Tuple, typename Box>
+void read_wkt(std::string const& filename, std::vector<Tuple>& tuples, Box& box)
+{
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ Geometry geometry;
+ boost::trim(line);
+ if (! line.empty() && ! boost::starts_with(line, "#"))
+ {
+ std::string name;
+
+ // Split at ';', if any
+ std::string::size_type pos = line.find(";");
+ if (pos != std::string::npos)
+ {
+ name = line.substr(pos + 1);
+ line.erase(pos);
+
+ boost::trim(line);
+ boost::trim(name);
+ }
+
+ Geometry geometry;
+ boost::geometry::read_wkt(line, geometry);
+
+ Tuple tuple(geometry, name);
+
+ tuples.push_back(tuple);
+ boost::geometry::expand(box, boost::geometry::return_envelope<Box>(geometry));
+ }
+ }
+ }
+}
+
+
+
+// Define properties for vertex
+template <typename Point>
+struct bg_vertex_property
+{
+ bg_vertex_property()
+ {
+ boost::geometry::assign_zero(location);
+ }
+ bg_vertex_property(Point const& loc)
+ {
+ location = loc;
+ }
+
+ Point location;
+};
+
+// Define properties for edge
+template <typename Linestring>
+struct bg_edge_property
+{
+ bg_edge_property(Linestring const& line)
+ : m_line(line)
+ {
+ length = boost::geometry::length(line);
+ }
+
+ inline Linestring const& line() const
+ {
+ return m_line;
+ }
+
+ double length;
+private :
+ Linestring m_line;
+};
+
+// Utility function to add a vertex to a graph. It might exist already. Then do not insert,
+// but return vertex descriptor back. It might not exist. Then add it (and return).
+// To efficiently handle this, a std::map is used.
+template <typename M, typename K, typename G>
+inline typename boost::graph_traits<G>::vertex_descriptor find_or_insert(M& map, K const& key, G& graph)
+{
+ typename M::const_iterator it = map.find(key);
+ if (it == map.end())
+ {
+ // Add a vertex to the graph
+ typename boost::graph_traits<G>::vertex_descriptor new_vertex
+ = boost::add_vertex(bg_vertex_property<typename M::key_type>(key), graph);
+
+ // Add to the map, using POINT as key
+ map[key] = new_vertex;
+ return new_vertex;
+ }
+ return it->second;
+}
+
+template
+<
+ typename Graph,
+ typename RoadTupleVector,
+ typename CityTupleVector
+>
+void add_roads_and_connect_cities(Graph& graph,
+ RoadTupleVector const& roads,
+ CityTupleVector& cities)
+{
+ typedef typename boost::range_value<RoadTupleVector>::type road_type;
+ typedef typename boost::tuples::element<0, road_type>::type line_type;
+ typedef typename boost::geometry::point_type<line_type>::type point_type;
+
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_type;
+
+ // Define a map to be used during graph filling
+ // Maps from point to vertex-id's
+ typedef std::map<point_type, vertex_type, boost::geometry::less<point_type> > map_type;
+ map_type map;
+
+
+ // Fill the graph
+ BOOST_FOREACH(road_type const& road, roads)
+ {
+ line_type const& line = road.template get<0>();
+ // Find or add begin/end point of these line
+ vertex_type from = find_or_insert(map, line.front(), graph);
+ vertex_type to = find_or_insert(map, line.back(), graph);
+ boost::add_edge(from, to, bg_edge_property<line_type>(line), graph);
+ }
+
+ // Find nearest graph vertex for each city, using the map
+ typedef typename boost::range_value<CityTupleVector>::type city_type;
+ BOOST_FOREACH(city_type& city, cities)
+ {
+ double min_distance = 1e300;
+ for(typename map_type::const_iterator it = map.begin(); it != map.end(); ++it)
+ {
+ double dist = boost::geometry::distance(it->first, city.template get<0>());
+ if (dist < min_distance)
+ {
+ min_distance = dist;
+ // Set the vertex
+ city.template get<2>() = it->second;
+ }
+ }
+ }
+}
+
+template <typename Graph, typename Route>
+inline void add_edge_to_route(Graph const& graph,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex1,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex2,
+ Route& route)
+{
+ std::pair
+ <
+ typename boost::graph_traits<Graph>::edge_descriptor,
+ bool
+ > opt_edge = boost::edge(vertex1, vertex2, graph);
+ if (opt_edge.second)
+ {
+ // Get properties of edge and of vertex
+ bg_edge_property<Route> const& edge_prop = graph[opt_edge.first];
+ bg_vertex_property
+ <
+ typename boost::geometry::point_type<Route>::type
+ > const& vertex_prop = graph[vertex2];
+
+ // Depending on how edge connects to vertex, copy it forward or backward
+ if (boost::geometry::equals(edge_prop.line().front(), vertex_prop.location))
+ {
+ std::copy(edge_prop.line().begin(), edge_prop.line().end(),
+ std::back_inserter(route));
+ }
+ else
+ {
+ std::reverse_copy(edge_prop.line().begin(), edge_prop.line().end(),
+ std::back_inserter(route));
+ }
+ }
+}
+
+
+template <typename Graph, typename Route>
+inline void build_route(Graph const& graph,
+ std::vector<typename boost::graph_traits<Graph>::vertex_descriptor> const& predecessors,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex1,
+ typename boost::graph_traits<Graph>::vertex_descriptor vertex2,
+ Route& route)
+{
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_type;
+ vertex_type pred = predecessors[vertex2];
+
+ add_edge_to_route(graph, vertex2, pred, route);
+ while (pred != vertex1)
+ {
+ add_edge_to_route(graph, predecessors[pred], pred, route);
+ pred = predecessors[pred];
+ }
+}
+
+
+int main()
+{
+ // Define a point in the Geographic coordinate system (currently spherical-equatorial)
+ // (geographic calculations are in an extension; for sample it makes no difference)
+ typedef boost::geometry::model::point
+ <
+ double, 2, boost::geometry::cs::spherical_equatorial<boost::geometry::degree>
+ > point_type;
+
+ typedef boost::geometry::model::linestring<point_type> line_type;
+
+ // Define the graph, lateron containing the road network
+ // With this, specify bundled properties for vertex and edge,
+ // as in http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/bundles.html
+ typedef boost::adjacency_list
+ <
+ boost::vecS, boost::vecS, boost::undirectedS
+ , bg_vertex_property<point_type> // bundled
+ , bg_edge_property<line_type>
+ > graph_type;
+
+ typedef boost::graph_traits<graph_type>::vertex_descriptor vertex_type;
+
+
+ // Init a bounding box, lateron used to define SVG map
+ boost::geometry::model::box<point_type> box;
+ boost::geometry::assign_inverse(box);
+
+ graph_type graph;
+
+ // Read the cities
+ typedef boost::tuple<point_type, std::string, vertex_type> city_type;
+ std::vector<city_type> cities;
+ read_wkt<point_type>("data/cities.wkt", cities, box);
+
+ // Read the road network
+ typedef boost::tuple<line_type, std::string> road_type;
+ std::vector<road_type> roads;
+ read_wkt<line_type>("data/roads.wkt", roads, box);
+
+
+ // Add roads and connect cities
+ add_roads_and_connect_cities(graph, roads, cities);
+
+ double const km = 1000.0;
+ std::cout << "distances, all in KM" << std::endl
+ << std::fixed << std::setprecision(0);
+
+ // To calculate distance, declare and construct a strategy with average earth radius
+ boost::geometry::strategy::distance::haversine<point_type> haversine(6372795.0);
+
+ // Main functionality: calculate shortest routes from/to all cities
+
+ // For the first one, the complete route is stored as a linestring
+ bool first = true;
+ line_type route;
+
+ int const n = boost::num_vertices(graph);
+ BOOST_FOREACH(city_type const& city1, cities)
+ {
+ std::vector<vertex_type> predecessors(n);
+ std::vector<double> costs(n);
+
+ // Call Dijkstra (without named-parameter to be compatible with all VC)
+ boost::dijkstra_shortest_paths(graph, city1.get<2>(),
+ &predecessors[0], &costs[0],
+ boost::get(&bg_edge_property<line_type>::length, graph),
+ boost::get(boost::vertex_index, graph),
+ std::less<double>(), std::plus<double>(),
+ (std::numeric_limits<double>::max)(), double(),
+ boost::dijkstra_visitor<boost::null_visitor>());
+
+ BOOST_FOREACH(city_type const& city2, cities)
+ {
+ if (! boost::equals(city1.get<1>(), city2.get<1>()))
+ {
+ double distance = costs[city2.get<2>()] / km;
+ double acof = boost::geometry::distance(city1.get<0>(), city2.get<0>(), haversine) / km;
+
+ std::cout
+ << std::setiosflags (std::ios_base::left) << std::setw(15)
+ << city1.get<1>() << " - "
+ << std::setiosflags (std::ios_base::left) << std::setw(15)
+ << city2.get<1>()
+ << " -> through the air: " << std::setw(4) << acof
+ << " , over the road: " << std::setw(4) << distance
+ << std::endl;
+
+ if (first)
+ {
+ build_route(graph, predecessors,
+ city1.get<2>(), city2.get<2>(),
+ route);
+ first = false;
+ }
+ }
+ }
+ }
+
+#if defined(HAVE_SVG)
+ // Create the SVG
+ std::ofstream stream("routes.svg");
+ boost::geometry::svg_mapper<point_type> mapper(stream, 600, 600);
+
+ // Map roads
+ BOOST_FOREACH(road_type const& road, roads)
+ {
+ mapper.add(road.get<0>());
+ }
+
+ BOOST_FOREACH(road_type const& road, roads)
+ {
+ mapper.map(road.get<0>(),
+ "stroke:rgb(128,128,128);stroke-width:1");
+ }
+
+ mapper.map(route,
+ "stroke:rgb(0, 255, 0);stroke-width:6;opacity:0.5");
+
+ // Map cities
+ BOOST_FOREACH(city_type const& city, cities)
+ {
+ mapper.map(city.get<0>(),
+ "fill:rgb(255,255,0);stroke:rgb(0,0,0);stroke-width:1");
+ mapper.text(city.get<0>(), city.get<1>(),
+ "fill:rgb(0,0,0);font-family:Arial;font-size:10px", 5, 5);
+ }
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/example/Jamfile.v2 b/libs/geometry/example/Jamfile.v2
new file mode 100644
index 000000000..17fae5000
--- /dev/null
+++ b/libs/geometry/example/Jamfile.v2
@@ -0,0 +1,38 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+# Controls building of Boost.Geometry examples
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+
+project boost-geometry-example
+ : # requirements
+ ;
+
+exe 01_point_example : 01_point_example.cpp ;
+exe 02_linestring_example : 02_linestring_example.cpp ;
+exe 03_polygon_example : 03_polygon_example.cpp ;
+exe 05_a_overlay_polygon_example : 05_a_overlay_polygon_example.cpp ;
+exe 05_b_overlay_linestring_polygon_example : 05_b_overlay_linestring_polygon_example.cpp ;
+exe 06_a_transformation_example : 06_a_transformation_example.cpp ;
+exe 06_b_transformation_example : 06_b_transformation_example.cpp ;
+exe 07_a_graph_route_example : 07_a_graph_route_example.cpp ;
+exe 07_b_graph_route_example : 07_b_graph_route_example.cpp ;
+
+exe c01_custom_point_example : c01_custom_point_example.cpp ;
+exe c02_custom_box_example : c02_custom_box_example.cpp ;
+exe c03_custom_linestring_example : c03_custom_linestring_example.cpp ;
+exe c04_a_custom_triangle_example : c04_a_custom_triangle_example.cpp ;
+exe c04_b_custom_triangle_example : c04_b_custom_triangle_example.cpp ;
+exe c05_custom_point_pointer_example : c05_custom_point_pointer_example.cpp ;
+exe c06_custom_polygon_example : c06_custom_polygon_example.cpp ;
+exe c07_custom_ring_pointer_example : c07_custom_ring_pointer_example.cpp ;
+exe c08_custom_non_std_example : c08_custom_non_std_example.cpp ;
+exe c09_custom_fusion_example : c09_custom_fusion_example.cpp ;
+exe c10_custom_cs_example : c10_custom_cs_example.cpp ;
+exe c11_custom_cs_transform_example : c11_custom_cs_transform_example.cpp ;
diff --git a/libs/geometry/example/boost.vsprops b/libs/geometry/example/boost.vsprops
new file mode 100644
index 000000000..e376ce44a
--- /dev/null
+++ b/libs/geometry/example/boost.vsprops
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(BOOST_ROOT);..\..\.."
+ PreprocessorDefinitions="_SCL_SECURE_NO_WARNINGS"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(BOOST_ROOT)\lib"
+ />
+ <UserMacro
+ Name="BOOST_ROOT"
+ Value="../../.."
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/example/c01_custom_point_example.cpp b/libs/geometry/example/c01_custom_point_example.cpp
new file mode 100644
index 000000000..6fa5957e3
--- /dev/null
+++ b/libs/geometry/example/c01_custom_point_example.cpp
@@ -0,0 +1,160 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Custom point Example
+
+#include <iostream>
+
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+
+// Sample point, defining three color values
+struct my_color_point
+{
+ double red, green, blue;
+};
+
+// Sample point, having an int array defined
+struct my_array_point
+{
+ int c[3];
+};
+
+// Sample point, having x/y
+struct my_2d
+{
+ float x,y;
+};
+
+// Sample class, protected and construction-time-only x/y,
+// Can (of course) only used in algorithms which take const& points
+class my_class_ro
+{
+public:
+ my_class_ro(double x, double y) : m_x(x), m_y(y) {}
+ double x() const { return m_x; }
+ double y() const { return m_y; }
+private:
+ double m_x, m_y;
+};
+
+// Sample class using references for read/write
+class my_class_rw
+{
+public:
+ const double& x() const { return m_x; }
+ const double& y() const { return m_y; }
+ double& x() { return m_x; }
+ double& y() { return m_y; }
+private:
+ double m_x, m_y;
+};
+
+// Sample class using getters / setters
+class my_class_gs
+{
+public:
+ const double get_x() const { return m_x; }
+ const double get_y() const { return m_y; }
+ void set_x(double v) { m_x = v; }
+ void set_y(double v) { m_y = v; }
+private:
+ double m_x, m_y;
+};
+
+// Sample point within a namespace
+namespace my
+{
+ struct my_namespaced_point
+ {
+ double x, y;
+ };
+}
+
+
+
+BOOST_GEOMETRY_REGISTER_POINT_3D(my_color_point, double, cs::cartesian, red, green, blue)
+BOOST_GEOMETRY_REGISTER_POINT_3D(my_array_point, int, cs::cartesian, c[0], c[1], c[2])
+BOOST_GEOMETRY_REGISTER_POINT_2D(my_2d, float, cs::cartesian, x, y)
+BOOST_GEOMETRY_REGISTER_POINT_2D_CONST(my_class_ro, double, cs::cartesian, x(), y())
+BOOST_GEOMETRY_REGISTER_POINT_2D(my_class_rw, double, cs::cartesian, x(), y())
+BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(my_class_gs, double, cs::cartesian, get_x, get_y, set_x, set_y)
+
+BOOST_GEOMETRY_REGISTER_POINT_2D(my::my_namespaced_point, double, cs::cartesian, x, y)
+
+
+int main()
+{
+ // Create 2 instances of our custom color point
+ my_color_point c1 = boost::geometry::make<my_color_point>(255, 3, 233);
+ my_color_point c2 = boost::geometry::make<my_color_point>(0, 50, 200);
+
+ // The distance between them can be calculated using the cartesian method (=pythagoras)
+ // provided with the library, configured by the coordinate_system type of the point
+ std::cout << "color distance "
+ << boost::geometry::dsv(c1) << " to "
+ << boost::geometry::dsv(c2) << " is "
+ << boost::geometry::distance(c1,c2) << std::endl;
+
+ my_array_point a1 = {{0}};
+ my_array_point a2 = {{0}};
+ boost::geometry::assign_values(a1, 1, 2, 3);
+ boost::geometry::assign_values(a2, 3, 2, 1);
+
+ std::cout << "color distance "
+ << boost::geometry::dsv(a1) << " to "
+ << boost::geometry::dsv(a2) << " is "
+ << boost::geometry::distance(a1,a2) << std::endl;
+
+ my_2d p1 = {1, 5};
+ my_2d p2 = {3, 4};
+ std::cout << "float distance "
+ << boost::geometry::dsv(p1) << " to "
+ << boost::geometry::dsv(p2) << " is "
+ << boost::geometry::distance(p1,p2) << std::endl;
+
+ my_class_ro cro1(1, 2);
+ my_class_ro cro2(3, 4);
+ std::cout << "class ro distance "
+ << boost::geometry::dsv(cro1) << " to "
+ << boost::geometry::dsv(cro2) << " is "
+ << boost::geometry::distance(cro1,cro2) << std::endl;
+
+ my_class_rw crw1;
+ my_class_rw crw2;
+ boost::geometry::assign_values(crw1, 1, 2);
+ boost::geometry::assign_values(crw2, 3, 4);
+ std::cout << "class r/w distance "
+ << boost::geometry::dsv(crw1) << " to "
+ << boost::geometry::dsv(crw2) << " is "
+ << boost::geometry::distance(crw1,crw2) << std::endl;
+
+ my_class_gs cgs1;
+ my_class_gs cgs2;
+ boost::geometry::assign_values(cgs1, 1, 2);
+ boost::geometry::assign_values(cgs2, 3, 4);
+ std::cout << "class g/s distance "
+ << boost::geometry::dsv(crw1) << " to "
+ << boost::geometry::dsv(crw2) << " is "
+ << boost::geometry::distance(cgs1,cgs2) << std::endl;
+
+ my::my_namespaced_point nsp1 = boost::geometry::make<my::my_namespaced_point>(1, 2);
+ my::my_namespaced_point nsp2 = boost::geometry::make<my::my_namespaced_point>(3, 4);
+ std::cout << "namespaced distance "
+ << boost::geometry::dsv(nsp1) << " to "
+ << boost::geometry::dsv(nsp2) << " is "
+ << boost::geometry::distance(nsp1,nsp2) << std::endl;
+
+
+ return 0;
+}
diff --git a/libs/geometry/example/c02_custom_box_example.cpp b/libs/geometry/example/c02_custom_box_example.cpp
new file mode 100644
index 000000000..ef6438d1a
--- /dev/null
+++ b/libs/geometry/example/c02_custom_box_example.cpp
@@ -0,0 +1,78 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Custom Box Example
+
+#include <iostream>
+
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/box.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+
+struct my_point
+{
+ double x, y;
+};
+
+struct my_int_point
+{
+ int x, y;
+};
+
+struct my_box
+{
+ my_point ll, ur;
+};
+
+struct my_box_ltrb
+{
+ int left, top, right, bottom;
+};
+
+struct my_box_4
+{
+ double coors[4];
+};
+
+template <typename P>
+struct my_box_t
+{
+ P ll, ur;
+};
+
+BOOST_GEOMETRY_REGISTER_POINT_2D(my_point, double, cs::cartesian, x, y)
+BOOST_GEOMETRY_REGISTER_POINT_2D(my_int_point, int, cs::cartesian, x, y)
+BOOST_GEOMETRY_REGISTER_BOX(my_box, my_point, ll, ur)
+BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED(my_box_t, ll, ur)
+BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES(my_box_ltrb, my_int_point, left, top, right, bottom)
+BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES(my_box_4, my_point, coors[0], coors[1], coors[2], coors[3])
+
+int main()
+{
+ my_point p = boost::geometry::make<my_point>(3.5, 3.5);
+ my_box b = boost::geometry::make<my_box>(0, 0, 2, 2);
+ my_box_ltrb b1 = boost::geometry::make<my_box_ltrb>(0, 0, 3, 3);
+ my_box_4 b4 = boost::geometry::make<my_box_4>(0, 0, 4, 4);
+ my_box_t<my_point> bt = boost::geometry::make<my_box_t<my_point> >(0, 0, 5, 5);
+
+ std::cout << boost::geometry::dsv(p) << " IN " << boost::geometry::dsv(b)
+ << " : " << int(boost::geometry::within(p, b)) << std::endl;
+ std::cout << boost::geometry::dsv(p) << " IN " << boost::geometry::dsv(b1)
+ << " : " << int(boost::geometry::within(p, b1)) << std::endl;
+ std::cout << boost::geometry::dsv(p) << " IN " << boost::geometry::dsv(b4)
+ << " : " << int(boost::geometry::within(p, b4)) << std::endl;
+ std::cout << boost::geometry::dsv(p) << " IN " << boost::geometry::dsv(bt)
+ << " : " << int(boost::geometry::within(p, bt)) << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/c03_custom_linestring_example.cpp b/libs/geometry/example/c03_custom_linestring_example.cpp
new file mode 100644
index 000000000..8c6fd3697
--- /dev/null
+++ b/libs/geometry/example/c03_custom_linestring_example.cpp
@@ -0,0 +1,87 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Custom Linestring Example
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+// To register the 'geographic' distance function to calculate distance over the earth:
+#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp>
+#include <boost/geometry/extensions/algorithms/parse.hpp>
+
+// Define a GPS point with coordinates in latitude/longitude and some additional values
+struct gps_point
+{
+ double latitude, longitude, height;
+ double speed;
+ // Date/time, heading, etc could be added
+
+ // The default constructor is required if being used in a vector
+ gps_point() {}
+
+ // Define a constructor to create the point in one line. Order of latitude/longitude
+ // does not matter as long as "E", "N", etc are included
+ gps_point(std::string const& c1, std::string const& c2, double h, double s)
+ : height(h)
+ , speed(s)
+ {
+ boost::geometry::parse(*this, c1, c2);
+ }
+};
+
+// Declare a custom linestring which will have the GPS points
+struct gps_track : std::vector<gps_point>
+{
+ std::string owner;
+ int route_identifier;
+ // etc
+
+ gps_track(int i, std::string const& o)
+ : owner(o)
+ , route_identifier(i)
+ {}
+};
+
+
+// Register this point as being a recognizable point by Boost.Geometry
+BOOST_GEOMETRY_REGISTER_POINT_2D(gps_point, double, cs::geographic<degree>, longitude, latitude)
+
+// Register the track as well, as being a "linestring"
+BOOST_GEOMETRY_REGISTER_LINESTRING(gps_track)
+
+
+int main()
+{
+ // Declare a "GPS Track" and add some GPS points
+ gps_track track(23, "Mister G");
+ track.push_back(gps_point("52 22 23 N", "4 53 32 E", 50, 180));
+ track.push_back(gps_point("52 10 00 N", "4 59 59 E", 110, 170));
+ track.push_back(gps_point("52 5 20 N", "5 6 56 E", 0, 90));
+
+ std::cout
+ << "track: " << track.route_identifier << std::endl
+ << "from: " << track.owner << std::endl
+ << "as wkt: " << boost::geometry::dsv(track) << std::endl
+ << "length: " << boost::geometry::length(track)/1000.0 << " km" << std::endl;
+
+ // Above gives the idea, shows that custom linestrings can be useful.
+ // We could of course do anything with this track which the library can handle, e.g.:
+ // - simplify it
+ // - calculate distance of point-to-line
+ // - project it to UTM, then transform it to a GIF image (see p03_example)
+
+ return 0;
+}
diff --git a/libs/geometry/example/c04_a_custom_triangle_example.cpp b/libs/geometry/example/c04_a_custom_triangle_example.cpp
new file mode 100644
index 000000000..5b255e421
--- /dev/null
+++ b/libs/geometry/example/c04_a_custom_triangle_example.cpp
@@ -0,0 +1,83 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Custom Triangle Example
+
+#include <iostream>
+
+#include <boost/array.hpp>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/centroid.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+
+
+struct triangle : public boost::array<boost::geometry::model::d2::point_xy<double>, 4>
+{
+ inline void close()
+ {
+ (*this)[3] = (*this)[0];
+ }
+};
+
+
+// Register triangle as a ring
+BOOST_GEOMETRY_REGISTER_RING(triangle)
+
+
+// Specializations of algorithms, where useful. If not specialized the default ones
+// (for linear rings) will be used for triangle. Which is OK as long as the triangle
+// is closed, that means, has 4 points (the last one being the first).
+namespace boost { namespace geometry {
+
+template<>
+inline double area<triangle>(const triangle& t)
+{
+ /* C
+ / \
+ / \
+ A-----B
+
+ ((Bx - Ax) * (Cy - Ay)) - ((Cx - Ax) * (By - Ay))
+ -------------------------------------------------
+ 2
+ */
+
+ return 0.5 * ((t[1].x() - t[0].x()) * (t[2].y() - t[0].y())
+ - (t[2].x() - t[0].x()) * (t[1].y() - t[0].y()));
+}
+
+}} // namespace boost::geometry
+
+int main()
+{
+ triangle t;
+
+ t[0].x(0);
+ t[0].y(0);
+ t[1].x(5);
+ t[1].y(0);
+ t[2].x(2.5);
+ t[2].y(2.5);
+
+ t.close();
+
+ std::cout << "Triangle: " << boost::geometry::dsv(t) << std::endl;
+ std::cout << "Area: " << boost::geometry::area(t) << std::endl;
+
+ boost::geometry::model::d2::point_xy<double> c;
+ boost::geometry::centroid(t, c);
+ std::cout << "Centroid: " << boost::geometry::dsv(c) << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/c04_b_custom_triangle_example.cpp b/libs/geometry/example/c04_b_custom_triangle_example.cpp
new file mode 100644
index 000000000..a48100529
--- /dev/null
+++ b/libs/geometry/example/c04_b_custom_triangle_example.cpp
@@ -0,0 +1,71 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Custom triangle template Example
+
+#include <iostream>
+
+#include <boost/array.hpp>
+#include <boost/tuple/tuple.hpp>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/centroid.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P>
+struct triangle : public boost::array<P, 3>
+{
+};
+
+
+// Register triangle<P> as a ring
+BOOST_GEOMETRY_REGISTER_RING_TEMPLATED(triangle)
+
+
+namespace boost { namespace geometry { namespace dispatch {
+
+// Specializations of area dispatch structure, implement algorithm
+template<typename P, typename S>
+struct area<ring_tag, triangle<P>, S>
+{
+ static inline double apply(triangle<P> const& t, S const&)
+ {
+ return 0.5 * ((get<0>(t[1]) - get<0>(t[0])) * (get<1>(t[2]) - get<1>(t[0]))
+ - (get<0>(t[2]) - get<0>(t[0])) * (get<1>(t[1]) - get<1>(t[0])));
+ }
+};
+
+}}} // namespace boost::geometry::dispatch
+
+
+int main()
+{
+ //triangle<boost::geometry::point_xy<double> > t;
+ triangle<boost::tuple<double, double> > t;
+ t[0] = boost::make_tuple(0, 0);
+ t[1] = boost::make_tuple(5, 0);
+ t[2] = boost::make_tuple(2.5, 2.5);
+
+ std::cout << "Triangle: " << boost::geometry::dsv(t) << std::endl;
+ std::cout << "Area: " << boost::geometry::area(t) << std::endl;
+
+ //boost::geometry::point_xy<double> c;
+ boost::tuple<double, double> c;
+ boost::geometry::centroid(t, c);
+ std::cout << "Centroid: " << boost::geometry::dsv(c) << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/c05_custom_point_pointer_example.cpp b/libs/geometry/example/c05_custom_point_pointer_example.cpp
new file mode 100644
index 000000000..d8059fe04
--- /dev/null
+++ b/libs/geometry/example/c05_custom_point_pointer_example.cpp
@@ -0,0 +1,120 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Custom pointer-to-point example
+
+#include <iostream>
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/algorithms/length.hpp>
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/algorithms/intersection.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+// Sample point, having x/y
+struct my_point
+{
+ double x,y;
+};
+
+
+namespace boost { namespace geometry { namespace traits {
+
+template<> struct tag<my_point>
+{ typedef point_tag type; };
+
+template<> struct coordinate_type<my_point>
+{ typedef double type; };
+
+template<> struct coordinate_system<my_point>
+{ typedef cs::cartesian type; };
+
+template<> struct dimension<my_point> : boost::mpl::int_<2> {};
+
+template<>
+struct access<my_point, 0>
+{
+ static double get(my_point const& p)
+ {
+ return p.x;
+ }
+
+ static void set(my_point& p, double const& value)
+ {
+ p.x = value;
+ }
+};
+
+template<>
+struct access<my_point, 1>
+{
+ static double get(my_point const& p)
+ {
+ return p.y;
+ }
+
+ static void set(my_point& p, double const& value)
+ {
+ p.y = value;
+ }
+};
+
+}}} // namespace boost::geometry::traits
+
+
+
+int main()
+{
+ typedef std::vector<my_point*> ln;
+ ln myline;
+ for (float i = 0.0; i < 10.0; i++)
+ {
+ my_point* p = new my_point;
+ p->x = i;
+ p->y = i + 1;
+ myline.push_back(p);
+ }
+
+ std::cout << boost::geometry::length(myline) << std::endl;
+
+ typedef boost::geometry::model::d2::point_xy<double> point_2d;
+ typedef boost::geometry::model::box<point_2d> box_2d;
+ box_2d cb(point_2d(1.5, 1.5), point_2d(4.5, 4.5));
+
+ // This will NOT work because would need dynamicly allocating memory for point* in algorithms:
+ // std::vector<ln> clipped;
+ //boost::geometry::intersection(cb, myline, clipped);
+
+ // This works because outputs to a normal struct point, no point*
+ typedef boost::geometry::model::linestring<point_2d> linestring_2d;
+ std::vector<linestring_2d> clipped;
+ boost::geometry::strategy::intersection::liang_barsky<box_2d, point_2d> strategy;
+ boost::geometry::detail::intersection::clip_range_with_box<linestring_2d>(cb,
+ myline, std::back_inserter(clipped), strategy);
+
+
+ std::cout << boost::geometry::length(clipped.front()) << std::endl;
+
+ // free
+ BOOST_FOREACH(my_point* p, myline)
+ {
+ delete p;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/example/c06_custom_polygon_example.cpp b/libs/geometry/example/c06_custom_polygon_example.cpp
new file mode 100644
index 000000000..a69a31c67
--- /dev/null
+++ b/libs/geometry/example/c06_custom_polygon_example.cpp
@@ -0,0 +1,141 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Custom Polygon Example
+#include <iostream>
+
+#include <boost/geometry/geometry.hpp>
+
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+
+
+struct my_point
+{
+ my_point(double an_x = 0, double an_y = 0)
+ : x(an_x)
+ , y(an_y)
+ {}
+
+ double x, y;
+};
+
+struct my_ring : std::deque<my_point>
+{};
+
+// Define a struct of a polygon, having always two holes
+// (of course this can be implemented differently, usually
+// with a vector or deque, but it is just an exampe)
+struct my_polygon
+{
+ // required for a polygon: an outer ring...
+ my_ring boundary;
+ // ... and a Boost.Range compatible inner ring collection
+ boost::array<my_ring, 2> holes;
+
+ // just for the sample
+ std::string name;
+
+ my_polygon(std::string const& n = "") : name(n) {}
+};
+
+
+// We can conveniently use macro's to register point and ring
+BOOST_GEOMETRY_REGISTER_POINT_2D(my_point, double, cs::cartesian, x, y)
+BOOST_GEOMETRY_REGISTER_RING(my_ring)
+
+
+
+// There is currently no registration macro for polygons
+// and besides that a boost::array<T,N> in a macro would
+// be very specific, so we show it "by hand":
+namespace boost { namespace geometry { namespace traits
+{
+
+template<> struct tag<my_polygon> { typedef polygon_tag type; };
+template<> struct ring_const_type<my_polygon> { typedef my_ring const& type; };
+template<> struct ring_mutable_type<my_polygon> { typedef my_ring& type; };
+
+template<> struct interior_const_type<my_polygon>
+{
+ typedef boost::array<my_ring, 2> const& type;
+};
+
+template<> struct interior_mutable_type<my_polygon>
+{
+ typedef boost::array<my_ring, 2>& type;
+};
+
+template<> struct exterior_ring<my_polygon>
+{
+ static my_ring& get(my_polygon& p)
+ {
+ return p.boundary;
+ }
+
+ static my_ring const& get(my_polygon const& p)
+ {
+ return p.boundary;
+ }
+};
+
+template<> struct interior_rings<my_polygon>
+{
+ typedef boost::array<my_ring, 2> holes_type;
+
+ static holes_type& get(my_polygon& p)
+ {
+ return p.holes;
+ }
+
+ static holes_type const& get(my_polygon const& p)
+ {
+ return p.holes;
+ }
+};
+
+}}} // namespace boost::geometry::traits
+
+
+
+int main()
+{
+ my_polygon p1("my polygon");
+
+ // Fill it the my-way, triangle
+ p1.boundary.push_back(my_point(2, 0));
+ p1.boundary.push_back(my_point(1, 5));
+ p1.boundary.push_back(my_point(7, 6));
+ p1.boundary.push_back(my_point(2, 0));
+
+ // Triangle
+ p1.holes[0].push_back(my_point(2, 1));
+ p1.holes[0].push_back(my_point(2.4, 2));
+ p1.holes[0].push_back(my_point(1.9, 2));
+ p1.holes[0].push_back(my_point(2, 1));
+
+ // Box
+ p1.holes[1].push_back(my_point(3, 3));
+ p1.holes[1].push_back(my_point(4, 3));
+ p1.holes[1].push_back(my_point(4, 4));
+ p1.holes[1].push_back(my_point(3, 4));
+ p1.holes[1].push_back(my_point(3, 3));
+
+ std::cout << "Representation of " << p1.name << ": "
+ << boost::geometry::dsv(p1) << std::endl;
+ std::cout << "Area of " << p1.name << ": "
+ << boost::geometry::area(p1) << std::endl;
+ std::cout << "Perimeter of " << p1.name << ": "
+ << boost::geometry::perimeter(p1) << std::endl;
+ std::cout << "Centroid of " << p1.name << ": "
+ << boost::geometry::dsv(boost::geometry::return_centroid<my_point>(p1)) << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/c07_custom_ring_pointer_example.cpp b/libs/geometry/example/c07_custom_ring_pointer_example.cpp
new file mode 100644
index 000000000..9126e04bc
--- /dev/null
+++ b/libs/geometry/example/c07_custom_ring_pointer_example.cpp
@@ -0,0 +1,146 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Custom pointer-to-point example
+
+#include <iostream>
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+
+BOOST_GEOMETRY_REGISTER_RING_TEMPLATED(std::vector)
+
+
+// Sample point, having x/y
+struct my_point
+{
+ my_point(double a = 0, double b = 0)
+ : x(a), y(b)
+ {}
+ double x,y;
+};
+
+
+namespace boost { namespace geometry { namespace traits {
+
+template<> struct tag<my_point>
+{ typedef point_tag type; };
+
+template<> struct coordinate_type<my_point>
+{ typedef double type; };
+
+template<> struct coordinate_system<my_point>
+{ typedef cs::cartesian type; };
+
+template<> struct dimension<my_point> : boost::mpl::int_<2> {};
+
+template<>
+struct access<my_point, 0>
+{
+ static double get(my_point const& p)
+ {
+ return p.x;
+ }
+
+ static void set(my_point& p, double const& value)
+ {
+ p.x = value;
+ }
+};
+
+template<>
+struct access<my_point, 1>
+{
+ static double get(my_point const& p)
+ {
+ return p.y;
+ }
+
+ static void set(my_point& p, double const& value)
+ {
+ p.y = value;
+ }
+};
+
+}}} // namespace boost::geometry::traits
+
+
+
+int main()
+{
+ typedef std::vector<my_point*> ring_type;
+
+ ring_type a, b;
+
+ a.push_back(new my_point(0, 1));
+ a.push_back(new my_point(2, 5));
+ a.push_back(new my_point(5, 3));
+ a.push_back(new my_point(0, 1));
+
+ b.push_back(new my_point(3, 0));
+ b.push_back(new my_point(0, 3));
+ b.push_back(new my_point(4, 5));
+ b.push_back(new my_point(3, 0));
+
+ double aa = boost::geometry::area(a);
+ double ab = boost::geometry::area(b);
+
+ std::cout << "a: " << aa << std::endl;
+ std::cout << "b: " << ab << std::endl;
+
+ // This will NOT work because would need dynamicly allocating memory for point* in algorithms:
+ //std::vector<ring_type> unioned;
+ //boost::geometry::union<ring_type>(a, b, unioned);
+
+ // BEGIN TODO
+ // This compiles (and once worked) using pointers, but has to be fixed or deprecated
+ // The problem is now the cart_intersect/side where a temporary point is generated
+ //typedef boost::geometry::model::ring<boost::geometry::model::d2::point_xy<double> > ring_2d;
+ //std::vector<ring_2d> unioned;
+ //std::vector<ring_2d> intersected;
+
+ //boost::geometry::intersection(a, b, intersected);
+ //boost::geometry::union_(a, b, unioned);
+
+ //double ai = 0, au = 0;
+ //BOOST_FOREACH(ring_2d const& ring, intersected)
+ //{
+ // ai += boost::geometry::area(ring);
+ //}
+ //BOOST_FOREACH(ring_2d const& ring, unioned)
+ //{
+ // au += boost::geometry::area(ring);
+ //}
+
+ //std::cout << "a: " << aa << std::endl;
+ //std::cout << "b: " << ab << std::endl;
+ //std::cout << "a & b: " << ai << std::endl;
+ //std::cout << "a | b: " << au << std::endl;
+ //std::cout << "a + b - (a & b): " << (aa + ab - ai) << std::endl;
+ // END TODO
+
+
+ // free
+ BOOST_FOREACH(my_point* p, a)
+ {
+ delete p;
+ }
+
+ BOOST_FOREACH(my_point* p, b)
+ {
+ delete p;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/example/c08_custom_non_std_example.cpp b/libs/geometry/example/c08_custom_non_std_example.cpp
new file mode 100644
index 000000000..966c6298b
--- /dev/null
+++ b/libs/geometry/example/c08_custom_non_std_example.cpp
@@ -0,0 +1,296 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Custom polygon example
+
+#include <iostream>
+
+#include <boost/iterator.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+#include <boost/geometry/util/add_const_if_c.hpp>
+
+// Sample point, having x/y
+struct my_point
+{
+ my_point(double a = 0, double b = 0)
+ : x(a), y(b)
+ {}
+ double x,y;
+};
+
+// Sample polygon, having legacy methods
+// (similar to e.g. COM objects)
+class my_polygon
+{
+ std::vector<my_point> points;
+ public :
+ void add_point(my_point const& p) { points.push_back(p); }
+
+ // Const access
+ my_point const& get_point(std::size_t i) const
+ {
+ assert(i < points.size());
+ return points[i];
+ }
+
+ // Mutable access
+ my_point & get_point(std::size_t i)
+ {
+ assert(i < points.size());
+ return points[i];
+ }
+
+
+ int point_count() const { return points.size(); }
+ void erase_all() { points.clear(); }
+
+ inline void set_size(int n) { points.resize(n); }
+};
+
+// ----------------------------------------------------------------------------
+// Adaption: implement iterator and range-extension, and register with Boost.Geometry
+
+// 1) implement iterator (const and non-const versions)
+template <bool IsConst>
+struct custom_iterator : public boost::iterator_facade
+ <
+ custom_iterator<IsConst>,
+ my_point,
+ boost::random_access_traversal_tag,
+ typename boost::geometry::add_const_if_c<IsConst, my_point>::type&
+ >
+{
+ // Constructor for begin()
+ explicit custom_iterator(typename boost::geometry::add_const_if_c<IsConst, my_polygon>::type& polygon)
+ : m_polygon(&polygon)
+ , m_index(0)
+ {}
+
+ // Constructor for end()
+ explicit custom_iterator(bool, typename boost::geometry::add_const_if_c<IsConst, my_polygon>::type& polygon)
+ : m_polygon(&polygon)
+ , m_index(polygon.point_count())
+ {}
+
+
+
+private:
+ friend class boost::iterator_core_access;
+
+ typedef boost::iterator_facade
+ <
+ custom_iterator<IsConst>,
+ my_point,
+ boost::random_access_traversal_tag,
+ typename boost::geometry::add_const_if_c<IsConst, my_point>::type&
+ > facade;
+
+ typename boost::geometry::add_const_if_c<IsConst, my_polygon>::type* m_polygon;
+ int m_index;
+
+ bool equal(custom_iterator const& other) const
+ {
+ return this->m_index == other.m_index;
+ }
+ typename facade::difference_type distance_to(custom_iterator const& other) const
+ {
+ return other.m_index - this->m_index;
+ }
+
+ void advance(typename facade::difference_type n)
+ {
+ m_index += n;
+ if(m_polygon != NULL
+ && (m_index >= m_polygon->point_count()
+ || m_index < 0)
+ )
+ {
+ m_index = m_polygon->point_count();
+ }
+ }
+
+ void increment()
+ {
+ advance(1);
+ }
+
+ void decrement()
+ {
+ advance(-1);
+ }
+
+ // const and non-const dereference of this iterator
+ typename boost::geometry::add_const_if_c<IsConst, my_point>::type& dereference() const
+ {
+ return m_polygon->get_point(m_index);
+ }
+};
+
+
+
+
+// 2) Implement Boost.Range const functionality
+// using method 2, "provide free-standing functions and specialize metafunctions"
+// 2a) meta-functions
+namespace boost
+{
+ template<> struct range_mutable_iterator<my_polygon>
+ {
+ typedef custom_iterator<false> type;
+ };
+
+ template<> struct range_const_iterator<my_polygon>
+ {
+ typedef custom_iterator<true> type;
+ };
+
+ // RangeEx
+ template<> struct range_size<my_polygon>
+ {
+ typedef std::size_t type;
+ };
+
+} // namespace 'boost'
+
+
+// 2b) free-standing function for Boost.Range ADP
+inline custom_iterator<false> range_begin(my_polygon& polygon)
+{
+ return custom_iterator<false>(polygon);
+}
+
+inline custom_iterator<true> range_begin(my_polygon const& polygon)
+{
+ return custom_iterator<true>(polygon);
+}
+
+inline custom_iterator<false> range_end(my_polygon& polygon)
+{
+ return custom_iterator<false>(true, polygon);
+}
+
+inline custom_iterator<true> range_end(my_polygon const& polygon)
+{
+ return custom_iterator<true>(true, polygon);
+}
+
+
+
+// 3) optional, for writable geometries only, implement push_back/resize/clear
+namespace boost { namespace geometry { namespace traits
+{
+
+template<> struct push_back<my_polygon>
+{
+ static inline void apply(my_polygon& polygon, my_point const& point)
+ {
+ polygon.add_point(point);
+ }
+};
+
+template<> struct resize<my_polygon>
+{
+ static inline void apply(my_polygon& polygon, std::size_t new_size)
+ {
+ polygon.set_size(new_size);
+ }
+};
+
+}}}
+
+
+// 4) register with Boost.Geometry
+BOOST_GEOMETRY_REGISTER_POINT_2D(my_point, double, cs::cartesian, x, y)
+
+BOOST_GEOMETRY_REGISTER_RING(my_polygon)
+
+
+// end adaption
+// ----------------------------------------------------------------------------
+
+
+void walk_using_iterator(my_polygon const& polygon)
+{
+ for (custom_iterator<true> it = custom_iterator<true>(polygon);
+ it != custom_iterator<true>(true, polygon);
+ ++it)
+ {
+ std::cout << boost::geometry::dsv(*it) << std::endl;
+ }
+ std::cout << std::endl;
+}
+
+
+void walk_using_range(my_polygon const& polygon)
+{
+ for (boost::range_iterator<my_polygon const>::type it
+ = boost::begin(polygon);
+ it != boost::end(polygon);
+ ++it)
+ {
+ std::cout << boost::geometry::dsv(*it) << std::endl;
+ }
+ std::cout << std::endl;
+}
+
+
+int main()
+{
+ my_polygon container1;
+
+ // Create (as an example) a regular polygon
+ const int n = 5;
+ const double d = (360 / n) * boost::geometry::math::d2r;
+ double a = 0;
+ for (int i = 0; i < n + 1; i++, a += d)
+ {
+ container1.add_point(my_point(sin(a), cos(a)));
+ }
+
+ std::cout << "Walk using Boost.Iterator derivative" << std::endl;
+ walk_using_iterator(container1);
+
+ std::cout << "Walk using Boost.Range extension" << std::endl << std::endl;
+ walk_using_range(container1);
+
+ std::cout << "Use it by Boost.Geometry" << std::endl;
+ std::cout << "Area: " << boost::geometry::area(container1) << std::endl;
+
+ // Container 2 will be modified by Boost.Geometry. Add all points but the last one.
+ my_polygon container2;
+ for (int i = 0; i < n; i++)
+ {
+ // Use here the Boost.Geometry internal way of inserting (but the my_polygon way of getting)
+ boost::geometry::traits::push_back<my_polygon>::apply(container2, container1.get_point(i));
+ }
+
+ std::cout << "Second container is not closed:" << std::endl;
+ walk_using_range(container2);
+
+ // Correct (= close it)
+ boost::geometry::correct(container2);
+
+ std::cout << "Now it is closed:" << std::endl;
+ walk_using_range(container2);
+ std::cout << "Area: " << boost::geometry::area(container2) << std::endl;
+
+ // Use things from std:: using Boost.Range
+ std::reverse(boost::begin(container2), boost::end(container2));
+ std::cout << "Area reversed: " << boost::geometry::area(container2) << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/c09_custom_fusion_example.cpp b/libs/geometry/example/c09_custom_fusion_example.cpp
new file mode 100644
index 000000000..4b74b0580
--- /dev/null
+++ b/libs/geometry/example/c09_custom_fusion_example.cpp
@@ -0,0 +1,62 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2011-2012 Akira Takahashi
+
+// 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)
+//
+// Custom point / Boost.Fusion Example
+
+#include <iostream>
+
+#include <boost/fusion/include/adapt_struct_named.hpp>
+
+#include <boost/geometry/algorithms/distance.hpp>
+
+#include <boost/geometry/geometries/adapted/boost_fusion.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_FUSION_CS(cs::cartesian);
+
+
+// Sample point, having x/y
+struct my_2d
+{
+ float x,y;
+};
+
+
+BOOST_FUSION_ADAPT_STRUCT(my_2d,
+ (float, x)
+ (float, y))
+
+
+int main()
+{
+ my_2d p1 = {1, 5};
+ my_2d p2 = {3, 4};
+
+ std::cout << "Coordinate using direct access: "
+ << p1.x
+ << std::endl;
+ std::cout << "Coordinate using Boost.Fusion: "
+ << boost::fusion::at_c<0>(p1)
+ << std::endl;
+ std::cout << "Coordinate using Boost.Geometry: "
+ << boost::geometry::get<0>(p1)
+ << std::endl;
+
+ std::cout << "Two points are: "
+ << boost::geometry::dsv(p1) << " "
+ << boost::geometry::dsv(p2) << std::endl;
+
+ std::cout << "Distance: "
+ << boost::geometry::distance(p1, p2)
+ << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/c10_custom_cs_example.cpp b/libs/geometry/example/c10_custom_cs_example.cpp
new file mode 100644
index 000000000..b71ad8976
--- /dev/null
+++ b/libs/geometry/example/c10_custom_cs_example.cpp
@@ -0,0 +1,106 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Example: Custom coordinate system example
+
+#include <iostream>
+
+#include <boost/geometry/geometry.hpp>
+
+#ifdef OPTIONALLY_ELLIPSOIDAL // see below
+#include <boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp>
+#endif
+
+// 1: declare a coordinate system. For example for Mars
+// Like for the Earth, we let the use choose between degrees or radians
+// (Unfortunately, in real life Mars has two coordinate systems:
+// http://planetarynames.wr.usgs.gov/Page/MARS/system)
+template<typename DegreeOrRadian>
+struct martian
+{
+ typedef DegreeOrRadian units;
+};
+
+// 2: give it also a family
+struct martian_tag;
+
+// 3: register to which coordinate system family it belongs to
+// this must be done in namespace boost::geometry::traits
+namespace boost { namespace geometry { namespace traits
+{
+
+template <typename DegreeOrRadian>
+struct cs_tag<martian<DegreeOrRadian> >
+{
+ typedef martian_tag type;
+};
+
+}}} // namespaces
+
+
+// NOTE: if the next steps would not be here,
+// compiling a distance function call with martian coordinates
+// would result in a MPL assertion
+
+// 4: so register a distance strategy as its default strategy
+namespace boost { namespace geometry { namespace strategy { namespace distance { namespace services
+{
+
+template <typename Point1, typename Point2>
+struct default_strategy<point_tag, Point1, Point2, martian_tag, martian_tag>
+{
+ typedef haversine<Point1, Point2> type;
+};
+
+}}}}} // namespaces
+
+// 5: not worked out. To implement a specific distance strategy for Mars,
+// e.g. with the Mars radius given by default,
+// you will have to implement (/register) several other metafunctions:
+// tag, return_type, similar_type, comparable_type,
+// and structs:
+// get_similar, get_comparable, result_from_distance
+// See e.g. .../boost/geometry/extensions/gis/geographic/strategies/andoyer.hpp
+
+int main()
+{
+ typedef boost::geometry::model::point
+ <
+ double, 2, martian<boost::geometry::degree>
+ > mars_point;
+
+ // Declare two points
+ // (Source: http://nssdc.gsfc.nasa.gov/planetary/mars_mileage_guide.html)
+ // (Other sources: Wiki and Google give slightly different coordinates, resulting
+ // in other distance, 20 km off)
+ mars_point viking1(-48.23, 22.54); // Viking 1 landing site in Chryse Planitia
+ mars_point pathfinder(-33.55, 19.33); // Pathfinder landing site in Ares Vallis
+
+ double d = boost::geometry::distance(viking1, pathfinder); // Distance in radians on unit-sphere
+
+ // Using the Mars mean radius
+ // (Source: http://nssdc.gsfc.nasa.gov/planetary/factsheet/marsfact.html)
+ std::cout << "Distance between Viking1 and Pathfinder landing sites: "
+ << d * 3389.5 << " km" << std::endl;
+
+ // We would get 832.616 here, same order as the 835 (rounded on 5 km) listed
+ // on the mentioned site
+
+#ifdef OPTIONALLY_ELLIPSOIDAL
+ // Optionally the distance can be calculated more accurate by an Ellipsoidal approach,
+ // giving 834.444 km
+ d = boost::geometry::distance(viking1, pathfinder,
+ boost::geometry::strategy::distance::andoyer<mars_point>
+ (boost::geometry::detail::ellipsoid<double>(3396.2, 3376.2)));
+ std::cout << "Ellipsoidal distance: " << d << " km" << std::endl;
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/example/c11_custom_cs_transform_example.cpp b/libs/geometry/example/c11_custom_cs_transform_example.cpp
new file mode 100644
index 000000000..38a3f012a
--- /dev/null
+++ b/libs/geometry/example/c11_custom_cs_transform_example.cpp
@@ -0,0 +1,132 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Example: Custom coordinate system example, using transform
+
+#include <iostream>
+
+#include <boost/geometry/geometry.hpp>
+
+// See also c10_custom_cs_example
+
+// 1: declare, for example two cartesian coordinate systems
+struct cart {};
+struct cart_shifted5 {};
+
+// 2: register to which coordinate system family they belong
+namespace boost { namespace geometry { namespace traits
+{
+
+template<> struct cs_tag<cart> { typedef cartesian_tag type; };
+template<> struct cs_tag<cart_shifted5> { typedef cartesian_tag type; };
+
+}}} // namespaces
+
+
+// 3: sample implementation of a shift
+// to convert coordinate system "cart" to "cart_shirted5"
+template <typename P1, typename P2>
+struct shift
+{
+ inline bool apply(P1 const& p1, P2& p2) const
+ {
+ namespace bg = boost::geometry;
+ bg::set<0>(p2, bg::get<0>(p1) + 5);
+ bg::set<1>(p2, bg::get<1>(p1));
+ return true;
+ }
+};
+
+
+// 4: register the default strategy to transform any cart point to any cart_shifted5 point
+namespace boost { namespace geometry { namespace strategy { namespace transform { namespace services
+{
+
+template <typename P1, typename P2>
+struct default_strategy<cartesian_tag, cartesian_tag, cart, cart_shifted5, 2, 2, P1, P2>
+{
+ typedef shift<P1, P2> type;
+};
+
+}}}}} // namespaces
+
+
+// 5: implement a distance strategy between the two different ones
+template <typename P1, typename P2>
+struct shift_and_calc_distance
+{
+ inline double apply(P1 const& p1, P2 const& p2) const
+ {
+ P2 p1_shifted;
+ boost::geometry::transform(p1, p1_shifted);
+ return boost::geometry::distance(p1_shifted, p2);
+ }
+};
+
+// 6: Define point types using this explicitly
+typedef boost::geometry::model::point<double, 2, cart> point1;
+typedef boost::geometry::model::point<double, 2, cart_shifted5> point2;
+
+// 7: register the distance strategy
+namespace boost { namespace geometry { namespace strategy { namespace distance { namespace services
+{
+ template <typename Point1, typename Point2>
+ struct tag<shift_and_calc_distance<Point1, Point2> >
+ {
+ typedef strategy_tag_distance_point_point type;
+ };
+
+ template <typename Point1, typename Point2>
+ struct return_type<shift_and_calc_distance<Point1, Point2> >
+ {
+ typedef double type;
+ };
+
+ template <>
+ struct default_strategy<point_tag, point1, point2, cartesian_tag, cartesian_tag>
+ {
+ typedef shift_and_calc_distance<point1, point2> type;
+ };
+
+
+}}}}}
+
+
+
+int main()
+{
+ point1 p1_a(0, 0), p1_b(5, 5);
+ point2 p2_a(2, 2), p2_b(6, 6);
+
+ // Distances run for points on the same coordinate system.
+ // This is possible by default because they are cartesian coordinate systems.
+ double d1 = boost::geometry::distance(p1_a, p1_b);
+ double d2 = boost::geometry::distance(p2_a, p2_b);
+
+ std::cout << d1 << " " << d2 << std::endl;
+
+ // Transform from a to b:
+ boost::geometry::model::point<double, 2, cart_shifted5> p1_shifted;
+ boost::geometry::transform(p1_a, p1_shifted);
+
+
+ // Of course this can be calculated now, same CS
+ double d3 = boost::geometry::distance(p1_shifted, p2_a);
+
+
+ // Calculate distance between them. Note that inside distance the
+ // transformation is called.
+ double d4 = boost::geometry::distance(p1_a, p2_a);
+
+ // The result should be the same.
+ std::cout << d3 << " " << d4 << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/data/cities.sql b/libs/geometry/example/data/cities.sql
new file mode 100644
index 000000000..1349eff4a
--- /dev/null
+++ b/libs/geometry/example/data/cities.sql
@@ -0,0 +1,21 @@
+-- script to generate cities table for PostGis
+-- used in examples
+
+-- Source: http://www.realestate3d.com/gps/latlong.htm
+
+create user ggl password 'ggl' createdb;
+create database ggl owner=ggl template=postgis;
+
+
+drop table if exists cities;
+create table cities(id serial primary key, name varchar(25));
+
+select addgeometrycolumn('','cities','location','4326','POINT',2);
+insert into cities(location, name) values(GeometryFromText('POINT( -71.03 42.37)', 4326), 'Boston');
+insert into cities(location, name) values(GeometryFromText('POINT( -87.65 41.90)', 4326), 'Chicago');
+insert into cities(location, name) values(GeometryFromText('POINT( -95.35 29.97)', 4326), 'Houston');
+insert into cities(location, name) values(GeometryFromText('POINT(-118.40 33.93)', 4326), 'Los Angeles');
+insert into cities(location, name) values(GeometryFromText('POINT( -80.28 25.82)', 4326), 'Miami');
+insert into cities(location, name) values(GeometryFromText('POINT( -73.98 40.77)', 4326), 'New York');
+insert into cities(location, name) values(GeometryFromText('POINT(-112.02 33.43)', 4326), 'Phoenix');
+insert into cities(location, name) values(GeometryFromText('POINT( -77.04 38.85)', 4326), 'Washington DC');
diff --git a/libs/geometry/example/data/cities.wkt b/libs/geometry/example/data/cities.wkt
new file mode 100644
index 000000000..6a1feaa13
--- /dev/null
+++ b/libs/geometry/example/data/cities.wkt
@@ -0,0 +1,10 @@
+# Source: http://www.realestate3d.com/gps/latlong.htm
+# Note: selected and converted manually
+POINT( -71.03 42.37) ; Boston
+POINT( -87.65 41.90) ; Chicago
+POINT( -95.35 29.97) ; Houston
+POINT(-118.40 33.93) ; Los Angeles
+POINT( -80.28 25.82) ; Miami
+POINT( -73.98 40.77) ; New York
+POINT(-112.02 33.43) ; Phoenix
+POINT( -77.04 38.85) ; Washington DC
diff --git a/libs/geometry/example/data/roads.wkt b/libs/geometry/example/data/roads.wkt
new file mode 100644
index 000000000..1b45a12c0
--- /dev/null
+++ b/libs/geometry/example/data/roads.wkt
@@ -0,0 +1,1331 @@
+LINESTRING(-122.191 47.9758,-122.181 47.9958,-122.177 48.0022,-122.171 48.0081,-122.174 48.0402,-122.178 48.0718,-122.181 48.1036,-122.183 48.1361,-122.189 48.143,-122.206 48.205,-122.231 48.2515,-122.261 48.2977,-122.291 48.3592,-122.297 48.4234,-122.299 48.5183,-122.324 48.6237,-122.41 48.7339,-122.407 48.7538,-122.4 48.7749,-122.399 48.793,-122.423 48.8044,-122.45 48.8124,-122.481 48.8304,-122.517 48.8718,-122.521 48.8813,-122.523 48.901,-122.527 48.9105,-122.543 48.919,-122.551 48.9305,-122.561 48.9411,-122.585 48.9471,-122.612 48.9669,-122.638 48.9849,-122.661 49.0022)
+LINESTRING(-122.191 47.9758,-122.204 47.9372,-122.221 47.9019,-122.242 47.8674,-122.266 47.8312)
+LINESTRING(-122.176 47.5801,-122.182 47.5932,-122.185 47.6067,-122.187 47.6202,-122.187 47.6338,-122.187 47.6691,-122.182 47.7052,-122.181 47.7412,-122.192 47.776,-122.2 47.7864,-122.212 47.7945,-122.223 47.8027,-122.232 47.8132,-122.241 47.8168,-122.25 47.821,-122.259 47.8258,-122.266 47.8312)
+LINESTRING(-122.193 47.5075,-122.192 47.5108,-122.192 47.5147,-122.192 47.5184,-122.192 47.5224,-122.192 47.5265,-122.192 47.5307,-122.192 47.5327,-122.191 47.5348,-122.19 47.5395,-122.189 47.5443,-122.188 47.549,-122.187 47.5538,-122.185 47.5584,-122.183 47.5609,-122.182 47.563,-122.18 47.5667,-122.179 47.5676,-122.178 47.5711,-122.177 47.5726,-122.177 47.5742,-122.177 47.5762,-122.176 47.5781,-122.176 47.5801)
+LINESTRING(-122.193 47.5025,-122.193 47.5075)
+LINESTRING(-122.193 47.5025,-122.195 47.504,-122.193 47.5075)
+LINESTRING(-122.272 47.4615,-122.273 47.4725,-122.273 47.4841,-122.272 47.4874,-122.271 47.4906,-122.27 47.4938,-122.269 47.4971,-122.279 47.5069,-122.287 47.5167,-122.292 47.5272,-122.295 47.5391,-122.303 47.543,-122.309 47.5475,-122.315 47.5523,-122.321 47.5571,-122.321 47.5682,-122.32 47.5794,-122.32 47.5904,-122.324 47.6012,-122.324 47.6105,-122.324 47.6197,-122.324 47.6289,-122.324 47.6381,-122.324 47.6491,-122.324 47.66,-122.323 47.6709,-122.32 47.6818,-122.326 47.6884,-122.33 47.6965,-122.332 47.705,-122.33 47.7125,-122.326 47.716,-122.322 47.7195,-122.322 47.7272,-122.323 47.7352,-122.326 47.7433,-122.329 47.7508,-122.324 47.7628,-122.318 47.7798,-122.312 47.7957,-122.308 47.8044,-122.298 47.8114,-122.287 47.8175,-122.276 47.8237,-122.266 47.8312)
+LINESTRING(-122.272 47.4615,-122.217 47.4637,-122.202 47.4689,-122.201 47.4723,-122.2 47.4757,-122.198 47.4791,-122.197 47.4825,-122.195 47.4866,-122.195 47.4892,-122.194 47.4902,-122.194 47.4941,-122.194 47.498,-122.193 47.4995,-122.193 47.501,-122.193 47.5025)
+LINESTRING(-67.83 46.1421,-67.868 46.1397,-67.9165 46.1393,-67.9648 46.1407,-68.0025 46.1439,-68.0191 46.1465,-68.0342 46.1489,-68.0496 46.1507,-68.0667 46.1512,-68.1027 46.1344,-68.1427 46.1199,-68.1803 46.1063,-68.2092 46.0922,-68.2261 46.0797,-68.243 46.0654,-68.2589 46.0513,-68.2747 46.0371,-68.2875 46.0205,-68.2944 46.0023,-68.3008 45.9838,-68.3122 45.9664,-68.3374 45.9435,-68.3696 45.9156,-68.3975 45.8871,-68.41 45.8621,-68.4104 45.8527,-68.4108 45.8433,-68.4112 45.8339,-68.4116 45.8245,-68.4158 45.8021,-68.4248 45.7858,-68.4367 45.7703,-68.4494 45.7506,-68.4601 45.7285,-68.4695 45.7061,-68.479 45.6836,-68.4899 45.6616,-68.5018 45.6423,-68.5151 45.6234,-68.5282 45.6045,-68.54 45.5854,-68.5603 45.5441,-68.5848 45.4878,-68.607 45.4306,-68.62 45.3866,-68.6368 45.3571,-68.6665 45.3216,-68.6933 45.2801,-68.7015 45.2323)
+LINESTRING(-122.555 47.2721,-122.556 47.2726,-122.562 47.2824,-122.568 47.2906,-122.575 47.3043,-122.586 47.3152,-122.606 47.3388,-122.618 47.3657,-122.613 47.3768,-122.613 47.3929,-122.615 47.3966,-122.622 47.4098,-122.622 47.4162,-122.626 47.481,-122.634 47.4892,-122.648 47.5041,-122.656 47.5114,-122.66 47.5214,-122.671 47.5272,-122.695 47.5223,-122.702 47.5249,-122.697 47.5328,-122.682 47.5404,-122.665 47.5554,-122.67 47.5654,-122.685 47.5693,-122.689 47.5729,-122.699 47.5815,-122.699 47.5894,-122.703 47.5948,-122.711 47.6002,-122.711 47.6067,-122.71 47.615,-122.711 47.6232,-122.709 47.6297,-122.706 47.6371,-122.705 47.6422,-122.706 47.6463,-122.706 47.6537,-122.687 47.6613,-122.683 47.6623,-122.676 47.6735,-122.673 47.6777,-122.671 47.6846,-122.665 47.6898,-122.66 47.6935,-122.66 47.7018,-122.66 47.7147,-122.665 47.7275,-122.652 47.7553)
+LINESTRING(-122.544 47.2628,-122.555 47.2721)
+LINESTRING(-122.46 47.2256,-122.463 47.2276,-122.466 47.2296,-122.469 47.2316,-122.472 47.2337,-122.478 47.2336,-122.484 47.2335,-122.49 47.2334,-122.496 47.2333,-122.508 47.2406,-122.52 47.2479,-122.532 47.2552,-122.544 47.2625,-122.544 47.2628)
+LINESTRING(-122.46 47.2256,-122.405 47.234,-122.364 47.2366,-122.333 47.2501,-122.309 47.2911,-122.298 47.3117,-122.292 47.3402,-122.289 47.3691,-122.289 47.3911,-122.292 47.4016,-122.291 47.4125,-122.286 47.4223,-122.274 47.4294,-122.271 47.4408,-122.272 47.4566,-122.272 47.4615)
+LINESTRING(-122.479 47.1637,-122.468 47.1764,-122.462 47.1929,-122.46 47.2103,-122.46 47.2256)
+LINESTRING(-122.479 47.1637,-122.478 47.1629,-122.476 47.1622,-122.475 47.1614,-122.474 47.1606,-122.433 47.1581,-122.389 47.1573,-122.346 47.1581,-122.306 47.1601,-122.304 47.1611,-122.302 47.162,-122.3 47.163,-122.298 47.1639,-122.298 47.1667,-122.298 47.1694,-122.298 47.1722,-122.299 47.1749,-122.295 47.1782,-122.291 47.181,-122.287 47.1838,-122.284 47.1871,-122.284 47.1897,-122.284 47.1923,-122.284 47.195,-122.284 47.1976,-122.28 47.2011,-122.274 47.2007,-122.265 47.2,-122.257 47.2021,-122.242 47.1954,-122.233 47.1939,-122.224 47.1958,-122.209 47.199,-122.202 47.1955,-122.2 47.1845,-122.18 47.1718)
+LINESTRING(-122.479 47.1637,-122.586 47.1047,-122.726 47.06,-122.853 47.0274,-122.92 47.0048)
+LINESTRING(-123.032 47.0497,-123.013 47.0387,-122.979 47.0249,-122.943 47.0123,-122.92 47.0048)
+LINESTRING(-111.958 49.0001,-111.951 48.9695,-111.938 48.9331,-111.92 48.8985,-111.9 48.8733,-111.891 48.8663,-111.88 48.8578,-111.87 48.849,-111.866 48.8409,-111.864 48.7653,-111.863 48.6898,-111.862 48.6143,-111.863 48.5388,-111.864 48.5314,-111.867 48.5243,-111.872 48.5175,-111.877 48.5109,-111.879 48.5085)
+LINESTRING(-68.7774 44.8296,-68.7576 44.8372,-68.7428 44.8595,-68.7344 44.8858,-68.7339 44.9055,-68.7415 44.9322,-68.745 44.9534,-68.7442 44.9749,-68.7393 45.0023,-68.7377 45.0041,-68.7361 45.0059,-68.7249 45.0394,-68.7164 45.0689,-68.712 45.0984,-68.7128 45.1316,-68.7127 45.1507,-68.7094 45.1683,-68.7049 45.1859,-68.7011 45.2047,-68.7012 45.2111,-68.702 45.2195,-68.7025 45.2274,-68.7015 45.2323)
+LINESTRING(-117.442 47.6383,-117.461 47.6406,-117.47 47.6371)
+LINESTRING(-117.42 47.6351,-117.429 47.6368,-117.442 47.6383)
+LINESTRING(-116.796 47.7226,-116.821 47.7326,-116.856 47.7386,-116.894 47.7385,-116.934 47.734,-116.995 47.7161,-117.041 47.6892,-117.041 47.6892)
+LINESTRING(-117.041 47.6892,-117.088 47.6623,-117.148 47.6443,-117.18 47.6431,-117.209 47.6465,-117.238 47.6499,-117.27 47.6487,-117.289 47.6445,-117.306 47.6393,-117.322 47.6341,-117.342 47.6299,-117.373 47.6284,-117.401 47.6317,-117.42 47.6351)
+LINESTRING(-122.874 46.5507,-122.883 46.5734,-122.903 46.5972,-122.928 46.6195,-122.952 46.6378,-122.953 46.6392,-122.954 46.6404,-122.954 46.6418,-122.954 46.6436,-122.948 46.6851,-122.946 46.7187,-122.948 46.7486,-122.952 46.7786,-122.96 46.7925,-122.973 46.8078,-122.983 46.8235,-122.984 46.8387,-122.969 46.8755,-122.953 46.9164,-122.937 46.9599,-122.92 47.0048)
+LINESTRING(-122.176 47.5801,-122.168 47.5804,-122.158 47.5804,-122.15 47.5798,-122.14 47.5787,-122.13 47.5763,-122.118 47.5721,-122.106 47.5676,-122.097 47.5636,-122.08 47.5557,-122.07 47.5515,-122.06 47.5469,-122.051 47.5429,-122.039 47.5385,-122.025 47.5328,-122.014 47.5289,-122.003 47.526,-121.993 47.5247,-121.983 47.5248,-121.974 47.525,-121.965 47.5242,-121.954 47.5225,-121.945 47.5204,-121.933 47.5158,-121.923 47.5118,-121.913 47.5098,-121.903 47.5089,-121.892 47.5085,-121.883 47.5083,-121.848 47.4895,-121.771 47.4688,-121.737 47.4524,-121.696 47.445,-121.652 47.4405,-121.634 47.4391,-121.613 47.4301,-121.6 47.4249,-121.582 47.4182,-121.571 47.414,-121.467 47.4125,-121.364 47.4119,-121.339 47.3851,-121.301 47.3409,-121.244 47.3038,-121.174 47.2725,-121.113 47.2568,-121.048 47.2281,-121.017 47.2092,-120.982 47.2076,-120.969 47.2077,-120.958 47.208,-120.942 47.2053,-120.93 47.2027,-120.913 47.1944,-120.889 47.1756,-120.87 47.161,-120.853 47.1472,-120.787 47.0988,-120.727 47.0706,-120.705 47.055,-120.666 47.03,-120.647 47.0166,-120.631 47.0012,-120.602 46.9797,-120.574 46.9701,-120.547 46.9704,-120.51 46.9701)
+LINESTRING(-117.47 47.6371,-117.523 47.6166,-117.57 47.5883,-117.613 47.5563,-117.663 47.5213,-117.705 47.4973,-117.745 47.4785,-117.785 47.4597,-117.827 47.4357,-117.853 47.4165,-117.872 47.3981,-117.893 47.3802,-117.92 47.3628,-117.95 47.3503,-117.98 47.342,-118.01 47.3329,-118.037 47.3183,-118.115 47.2558,-118.183 47.1981,-118.261 47.1512,-118.366 47.1211,-118.375 47.1197,-118.384 47.1183,-118.393 47.1169,-118.402 47.1155)
+LINESTRING(-116.796 47.7226,-116.787 47.7188,-116.763 47.7075,-116.742 47.6991,-116.72 47.6912,-116.696 47.6816,-116.681 47.6742,-116.669 47.667,-116.655 47.6607,-116.639 47.6559,-116.604 47.6513,-116.572 47.6503,-116.54 47.6484,-116.506 47.6411,-116.464 47.6245,-116.431 47.6067,-116.397 47.5883,-116.357 47.5702,-116.273 47.5522,-116.191 47.5512,-116.111 47.5486,-116.032 47.5259,-115.985 47.5034,-115.941 47.4858,-115.894 47.4729,-115.838 47.4646,-115.812 47.4644,-115.789 47.4671,-115.766 47.4695,-115.74 47.4683,-115.672 47.455,-115.667 47.4536)
+LINESTRING(-118.402 47.1155,-118.432 47.1112,-118.461 47.1081,-118.492 47.1062,-118.527 47.1057,-118.532 47.1048,-118.539 47.1032,-118.544 47.1032,-118.549 47.1036,-118.556 47.1031,-118.604 47.0963,-118.647 47.0921,-118.692 47.09,-118.741 47.0895,-118.805 47.0876,-118.86 47.0828,-118.916 47.0777,-118.98 47.075,-119.035 47.0732,-119.099 47.0704,-119.165 47.0682,-119.228 47.0685,-119.331 47.0789,-119.427 47.0962,-119.515 47.1114,-119.59 47.1154,-119.642 47.1125,-119.684 47.1106,-119.725 47.1073,-119.776 47.1001,-119.848 47.0877,-119.891 47.0697,-119.912 47.0397,-119.925 47.0031,-119.945 46.9655,-119.952 46.9539,-119.958 46.9429,-119.967 46.934,-119.982 46.9285,-120.029 46.9265,-120.071 46.9333,-120.114 46.9416,-120.163 46.9438,-120.201 46.9434,-120.248 46.9495,-120.299 46.9588,-120.347 46.9683,-120.389 46.9751,-120.427 46.9778,-120.465 46.9763,-120.51 46.9701,-120.499 46.9403,-120.49 46.9282,-120.475 46.9202,-120.458 46.9131,-120.441 46.904,-120.409 46.8811,-120.384 46.8591,-120.364 46.835,-120.35 46.8057,-120.346 46.7755,-120.354 46.7435,-120.371 46.7125,-120.395 46.6854,-120.424 46.6624,-120.458 46.6449,-120.496 46.6319,-120.538 46.6222,-120.54 46.6219,-120.542 46.6215,-120.545 46.6209)
+LINESTRING(-120.545 46.6209,-120.573 46.621,-120.592 46.6307,-120.609 46.6462,-120.629 46.6639,-120.646 46.6797,-120.658 46.6941,-120.671 46.7075,-120.691 46.722)
+LINESTRING(-69.8176 44.2194,-69.8106 44.2468,-69.8134 44.2765,-69.817 44.3065,-69.8126 44.3347,-69.8001 44.3513,-69.7792 44.3705,-69.7563 44.3898,-69.738 44.4068,-69.7105 44.4489,-69.6945 44.4934,-69.6815 44.5342,-69.6628 44.5649,-69.6537 44.5726,-69.6429 44.5801,-69.6318 44.5875,-69.6214 44.5948,-69.6179 44.5976,-69.6139 44.6007,-69.6093 44.6033,-69.6042 44.6044,-69.573 44.6206,-69.53 44.6458,-69.4896 44.672,-69.4663 44.6912,-69.4392 44.7349,-69.4193 44.7695,-69.386 44.7982,-69.3186 44.8244,-69.2836 44.8242,-69.2395 44.8132,-69.1946 44.799,-69.1576 44.7891,-69.1303 44.7857,-69.1024 44.7838,-69.0744 44.7826,-69.0466 44.7807,-68.9958 44.7735,-68.9431 44.7661,-68.8913 44.7663,-68.8432 44.7818,-68.8321 44.7921,-68.827 44.8037,-68.8217 44.8155,-68.8096 44.826,-68.8017 44.8273,-68.7936 44.8282,-68.7855 44.8289,-68.7774 44.8296)
+LINESTRING(-120.294 46.4397,-120.33 46.464,-120.363 46.4857,-120.374 46.4926,-120.392 46.5017,-120.411 46.5106,-120.423 46.5172,-120.437 46.5251,-120.449 46.5316,-120.461 46.5384,-120.474 46.547,-120.486 46.5566,-120.497 46.5652,-120.507 46.5743,-120.517 46.5852,-120.529 46.5988,-120.537 46.6091,-120.545 46.6209)
+LINESTRING(-111.879 48.5085,-111.881 48.5059,-111.881 48.5012,-111.881 48.4965,-111.88 48.4915,-111.897 48.4171,-111.918 48.3851,-111.933 48.3423,-111.932 48.2354,-111.929 48.2038,-111.925 48.1774,-111.915 48.1511,-111.897 48.12,-111.88 48.0949,-111.862 48.0692,-111.844 48.0439,-111.824 48.0198,-111.797 47.9946,-111.766 47.9711,-111.737 47.9465,-111.715 47.9181,-111.71 47.9025,-111.709 47.8861,-111.708 47.8695,-111.704 47.8532,-111.697 47.8438,-111.686 47.835,-111.674 47.8264,-111.667 47.8172,-111.665 47.8022,-111.666 47.7864,-111.668 47.7707,-111.669 47.7555,-111.662 47.7205,-111.643 47.6926,-111.617 47.6665,-111.588 47.637,-111.573 47.6174,-111.562 47.5977,-111.548 47.5783,-111.529 47.5592)
+LINESTRING(-111.529 47.5592,-111.491 47.5583,-111.454 47.5526,-111.419 47.5434,-111.383 47.5322,-111.366 47.527,-111.335 47.5178)
+LINESTRING(-97.0955 47.9343,-97.0945 47.9494,-97.0936 47.9654,-97.0936 47.9813,-97.0956 47.9961,-97.1145 48.012,-97.1412 48.0417,-97.1641 48.0716,-97.1713 48.0883,-97.1758 48.0926,-97.1808 48.0967,-97.1863 48.1005,-97.1921 48.104,-97.1958 48.2072,-97.1962 48.3109,-97.1945 48.4144,-97.192 48.5171,-97.1877 48.5218,-97.1834 48.5265,-97.179 48.5313,-97.1747 48.536,-97.1751 48.5391,-97.1754 48.5421,-97.1758 48.5451,-97.1761 48.5481,-97.1791 48.5497,-97.1821 48.5512,-97.1851 48.5528,-97.1881 48.5544,-97.1877 48.559,-97.1874 48.5636,-97.1872 48.5682,-97.1871 48.5728,-97.1877 48.6062,-97.1877 48.64,-97.1886 48.6738,-97.1918 48.7069,-97.1997 48.7317,-97.2129 48.756,-97.2271 48.78,-97.2381 48.8042,-97.24 48.8226,-97.2374 48.8422,-97.2347 48.8615,-97.2363 48.8791,-97.2464 48.9003,-97.2576 48.919,-97.2644 48.939,-97.2876 48.9782,-97.2784 48.986,-97.2706 48.9956,-97.2675 49.001)
+LINESTRING(-122.645 45.7164,-122.668 45.7741,-122.719 45.9049,-122.769 46.0453,-122.79 46.1318,-122.804 46.1967,-122.836 46.2833,-122.865 46.3654,-122.867 46.4168,-122.872 46.4494,-122.875 46.4837,-122.876 46.518,-122.874 46.5507)
+LINESTRING(-70.0103 43.9228,-69.9821 43.9414,-69.9641 43.9539,-69.951 43.9698,-69.9374 43.9984,-69.9348 44.0059,-69.9322 44.0134,-69.929 44.0222,-69.9266 44.0273,-69.8988 44.0663,-69.8635 44.122,-69.8324 44.1784,-69.8176 44.2194)
+LINESTRING(-72.0897 45.0036,-72.0897 45.0036,-72.099 44.9925,-72.1189 44.9767,-72.1404 44.9612,-72.1545 44.9508,-72.1731 44.9293,-72.1769 44.9115,-72.1753 44.8948,-72.1781 44.8769,-72.1857 44.8572,-72.1898 44.8473,-72.1944 44.8377,-72.2047 44.8217,-72.2144 44.8073,-72.2201 44.7919,-72.2185 44.7725,-72.2134 44.7652,-72.205 44.7584,-72.1969 44.7527,-72.1928 44.7487,-72.1903 44.7378,-72.1876 44.7267,-72.1822 44.7164,-72.1718 44.7076,-72.162 44.7053,-72.1532 44.7017,-72.1465 44.6966,-72.143 44.6897,-72.1385 44.663,-72.1322 44.6375,-72.1186 44.6147,-72.0922 44.5956,-72.082 44.5913,-72.0681 44.5858,-72.0547 44.5802,-72.0462 44.5754,-72.0403 44.5686,-72.0365 44.5619,-72.0324 44.5553,-72.0252 44.5486,-72.0183 44.5438,-72.0093 44.5375,-72.0014 44.5305,-71.9972 44.5242,-72.0035 44.5158,-72.0167 44.5048,-72.031 44.4942,-72.0405 44.4873,-72.0446 44.4779,-72.046 44.4594,-72.041 44.4364,-72.0282 44.4175)
+LINESTRING(-72.0255 44.4136,-72.0282 44.4175)
+LINESTRING(-122.645 45.7164,-122.651 45.7027,-122.657 45.6899,-122.662 45.677,-122.665 45.6621,-122.665 45.6533,-122.663 45.6453,-122.662 45.6374,-122.663 45.6287,-122.664 45.6223,-122.667 45.6176)
+LINESTRING(-115.667 47.4536,-115.614 47.439,-115.557 47.4221,-115.49 47.4059,-115.443 47.3988,-115.399 47.3951,-115.356 47.3903,-115.31 47.3797,-115.272 47.3637,-115.243 47.3449,-115.215 47.3255,-115.179 47.3079,-115.15 47.3012,-115.122 47.3,-115.094 47.2997,-115.063 47.2959,-115.016 47.2791,-114.978 47.263,-114.941 47.2473,-114.896 47.2316,-114.838 47.2115,-114.79 47.1875,-114.754 47.157,-114.734 47.1173,-114.731 47.1091,-114.726 47.0954,-114.724 47.0872,-114.719 47.0765,-114.711 47.0679,-114.701 47.0596,-114.691 47.0501,-114.684 47.0421,-114.678 47.0351,-114.671 47.0285,-114.663 47.0215,-114.65 47.012,-114.639 47.0033,-114.629 46.9946,-114.615 46.9853,-114.604 46.9774,-114.592 46.9708,-114.579 46.9668,-114.564 46.9666,-114.53 46.9708,-114.52 46.9732,-114.512 46.9772,-114.505 46.982,-114.476 46.9999,-114.459 47.0131,-114.443 47.0267,-114.424 47.0412,-114.413 47.0497,-114.403 47.0565,-114.392 47.0616,-114.376 47.0652,-114.361 47.0679,-114.346 47.0707,-114.332 47.0733,-114.316 47.0756,-114.264 47.0743,-114.216 47.0592,-114.176 47.0334,-114.143 47.0003,-114.134 46.9899,-114.127 46.9853)
+LINESTRING(-119.016 46.4527,-119.033 46.4282,-119.048 46.4069,-119.063 46.3857,-119.079 46.3612,-119.086 46.3444,-119.089 46.3202,-119.084 46.2883,-119.061 46.2476)
+LINESTRING(-119.061 46.2476,-119.135 46.2834,-119.204 46.2996,-119.273 46.2992,-119.348 46.2825,-119.403 46.2648,-119.456 46.2485,-119.509 46.234,-119.568 46.2219,-119.587 46.2188,-119.605 46.2156,-119.624 46.2124,-119.642 46.2092,-119.68 46.2068,-119.713 46.2113,-119.746 46.2193,-119.784 46.2275,-119.842 46.2388,-119.893 46.2521,-119.94 46.27,-119.988 46.2955,-120.014 46.3101,-120.042 46.3226,-120.071 46.3333,-120.101 46.3427,-120.15 46.3599,-120.199 46.3835,-120.247 46.4109,-120.294 46.4397)
+LINESTRING(-71.8992 44.3365,-71.8999 44.3409,-71.9027 44.3565,-71.9087 44.368,-71.9155 44.3791,-71.9208 44.3898,-71.9234 44.4002,-71.9247 44.408,-71.9287 44.4153,-71.9397 44.4241,-71.9504 44.4231,-71.9616 44.4186,-71.9726 44.4138,-71.9826 44.4122,-71.9934 44.4126,-72.0041 44.4129,-72.0148 44.4133,-72.0255 44.4136)
+LINESTRING(-122.645 45.7164,-122.622 45.6988,-122.585 45.6698,-122.572 45.6508,-122.559 45.6107,-122.557 45.591)
+LINESTRING(-114.127 46.9853,-114.123 46.9823,-114.112 46.9766,-114.098 46.9714,-114.058 46.9552,-114.023 46.9416,-113.992 46.9303,-113.986 46.9284,-113.982 46.9263)
+LINESTRING(-122.667 45.6176,-122.667 45.6166,-122.67 45.611,-122.671 45.6047,-122.673 45.5928,-122.672 45.582,-122.671 45.5713,-122.67 45.5594,-122.669 45.5493,-122.67 45.5405,-122.672 45.5317,-122.675 45.5218,-122.676 45.5164)
+LINESTRING(-123.067 45.6154,-123.013 45.5954,-122.987 45.5858,-122.953 45.5728,-122.939 45.5666,-122.883 45.5461,-122.846 45.533,-122.786 45.5094,-122.764 45.506,-122.751 45.5097,-122.746 45.5108,-122.73 45.5127,-122.7 45.5125,-122.683 45.5143,-122.676 45.5164)
+LINESTRING(-122.557 45.591,-122.556 45.5744,-122.557 45.5356)
+LINESTRING(-122.557 45.5356,-122.557 45.5306)
+LINESTRING(-122.676 45.5164,-122.669 45.5183,-122.657 45.523,-122.644 45.5277,-122.63 45.5316,-122.62 45.533,-122.611 45.533,-122.602 45.5319,-122.593 45.5299,-122.588 45.5284,-122.584 45.5267,-122.579 45.5256,-122.574 45.5258,-122.569 45.5271,-122.565 45.5285,-122.561 45.5298,-122.557 45.5306)
+LINESTRING(-122.676 45.5164,-122.677 45.5108,-122.679 45.5009,-122.682 45.4913,-122.688 45.4812,-122.706 45.4661,-122.728 45.4546,-122.746 45.4424,-122.75 45.429,-122.745 45.4127,-122.744 45.398,-122.745 45.3831,-122.746 45.3733)
+LINESTRING(-73.1873 44.454,-73.1586 44.4943,-73.1614 44.5402,-73.1552 44.5512,-73.1659 44.6078,-73.1411 44.6371,-73.0859 44.7081,-73.0415 44.8398,-73.0665 44.9029,-73.0887 44.9437,-73.0588 45.0157)
+LINESTRING(-118.865 46.0558,-118.871 46.0683,-118.896 46.0979,-118.925 46.1261,-118.954 46.1526,-118.981 46.1775,-119.006 46.1996,-119.032 46.2206,-119.061 46.2476)
+LINESTRING(-122.557 45.5306,-122.558 45.4962,-122.558 45.4714,-122.557 45.4494,-122.559 45.4276,-122.564 45.4031,-122.567 45.3931,-122.571 45.3843,-122.577 45.3757,-122.584 45.3664,-122.589 45.3595,-122.594 45.3532,-122.601 45.3481,-122.611 45.3447,-122.618 45.3446,-122.625 45.3469,-122.631 45.3502,-122.638 45.3535,-122.65 45.3579,-122.662 45.3614,-122.674 45.364,-122.688 45.3659,-122.705 45.3675,-122.721 45.3689,-122.737 45.3711,-122.746 45.3733)
+LINESTRING(-118.859 46.0042,-118.856 46.0073,-118.855 46.0376,-118.865 46.0558)
+LINESTRING(-119.061 46.2476,-119.09 46.2258,-119.114 46.2197,-119.138 46.2117,-119.159 46.2007,-119.176 46.189,-119.189 46.1754,-119.2 46.1587,-119.208 46.1443,-119.215 46.1311,-119.221 46.1175,-119.223 46.102,-119.221 46.0804,-119.217 46.0606,-119.218 46.0418,-119.228 46.0233,-119.242 46.0125,-119.258 46.0045,-119.275 45.9975,-119.293 45.9898,-119.319 45.9762,-119.339 45.9606,-119.35 45.9426,-119.349 45.922,-119.349 45.9188)
+LINESTRING(-119.349 45.9188,-119.346 45.9181)
+LINESTRING(-119.349 45.9188,-119.348 45.9177)
+LINESTRING(-69.8176 44.2194,-69.9019 44.1546,-69.9658 44.1316,-70.0139 44.1275,-70.0508 44.1198,-70.0758 44.1054,-70.1015 44.0901,-70.1284 44.0765,-70.1575 44.0669,-70.1647 44.0682,-70.1718 44.0696,-70.179 44.0709,-70.1862 44.0722,-70.1968 44.0704,-70.2089 44.0641,-70.2208 44.0564,-70.231 44.0506,-70.2433 44.0464,-70.2582 44.0423,-70.2723 44.0381,-70.2822 44.0339,-70.31 44.0075,-70.3259 43.9745,-70.3338 43.9394,-70.3374 43.9066,-70.3384 43.9022,-70.3401 43.8962,-70.3417 43.8904,-70.3423 43.8866,-70.34 43.8774,-70.3366 43.868,-70.3328 43.8585,-70.3297 43.8492,-70.3177 43.8012,-70.3112 43.7544,-70.3143 43.7083,-70.3309 43.6618,-70.3347 43.6546,-70.3385 43.6473,-70.3423 43.6401,-70.3462 43.6329)
+LINESTRING(-70.3462 43.6329,-70.3414 43.6314,-70.3366 43.6298,-70.3318 43.6283,-70.3271 43.6268,-70.3244 43.6295,-70.3218 43.6323,-70.3192 43.635,-70.3165 43.6378,-70.312 43.6381,-70.3074 43.6383,-70.3028 43.6386,-70.2982 43.6389,-70.2756 43.6597,-70.2622 43.6787,-70.2551 43.6989,-70.2512 43.7236,-70.2113 43.7785,-70.156 43.8325,-70.1017 43.8749,-70.0651 43.8955,-70.0566 43.9066,-70.0437 43.9143,-70.0277 43.9195,-70.0103 43.9228)
+LINESTRING(-121.123 45.5856,-121.131 45.5844,-121.139 45.5831,-121.147 45.5818,-121.155 45.5805,-121.16 45.5797,-121.164 45.579,-121.172 45.5828,-121.18 45.5865,-121.188 45.5903,-121.197 45.5941,-121.2 45.6005,-121.203 45.6069,-121.206 45.6133,-121.209 45.6197,-121.214 45.6257,-121.218 45.6317,-121.223 45.6377,-121.228 45.6437,-121.233 45.6464,-121.239 45.6491,-121.245 45.6517,-121.25 45.6543,-121.259 45.6572,-121.268 45.6601,-121.277 45.6631,-121.286 45.666,-121.291 45.6672,-121.297 45.6684,-121.302 45.6696,-121.307 45.6708,-121.312 45.671,-121.318 45.6713,-121.323 45.6716,-121.329 45.6718,-121.339 45.6719,-121.349 45.6719,-121.359 45.6719,-121.369 45.6719,-121.379 45.6712,-121.389 45.6705,-121.399 45.6698,-121.409 45.6691,-121.418 45.6699,-121.428 45.6708,-121.438 45.6716,-121.448 45.6724,-121.458 45.6749,-121.467 45.6773,-121.476 45.6798,-121.486 45.6823,-121.494 45.6856,-121.503 45.689,-121.512 45.6924,-121.52 45.6957,-121.525 45.6968,-121.53 45.6978,-121.536 45.696,-121.543 45.6941,-121.55 45.6923,-121.556 45.6904,-121.561 45.6892,-121.565 45.6881,-121.569 45.6869,-121.573 45.6857,-121.579 45.6857,-121.585 45.6857,-121.591 45.6857,-121.597 45.6857,-121.607 45.6839,-121.616 45.6821,-121.625 45.6803,-121.635 45.6785,-121.644 45.6771,-121.654 45.6756,-121.663 45.6742,-121.673 45.6728,-121.683 45.6716,-121.693 45.6704,-121.704 45.6692,-121.714 45.668,-121.724 45.6688,-121.734 45.6696,-121.743 45.6704,-121.753 45.6712,-121.763 45.672,-121.773 45.6728,-121.783 45.6736,-121.793 45.6744,-121.802 45.6726,-121.812 45.6708,-121.821 45.669,-121.83 45.6672,-121.835 45.6612,-121.84 45.6553,-121.845 45.6493,-121.85 45.6433,-121.857 45.6385,-121.864 45.6337,-121.871 45.6288,-121.878 45.624,-121.887 45.6218,-121.897 45.6196,-121.906 45.6175,-121.915 45.6153,-121.925 45.613,-121.935 45.6107,-121.944 45.6085,-121.954 45.6062,-121.964 45.6039,-121.974 45.6016,-121.983 45.5993,-121.993 45.597,-122.002 45.5949,-122.012 45.5927,-122.021 45.5905,-122.03 45.5883,-122.04 45.586,-122.05 45.5837,-122.059 45.5814,-122.069 45.5791,-122.078 45.5762,-122.087 45.5733,-122.096 45.5704,-122.105 45.5675,-122.114 45.5646,-122.123 45.5617,-122.132 45.5588,-122.141 45.5559,-122.149 45.5519,-122.157 45.5479,-122.166 45.5439,-122.174 45.54,-122.184 45.5385,-122.193 45.537,-122.203 45.5355,-122.212 45.534,-122.222 45.5336,-122.232 45.5332,-122.242 45.5328,-122.252 45.5324,-122.262 45.5327,-122.273 45.533,-122.283 45.5332,-122.293 45.5335,-122.303 45.5339,-122.313 45.5343,-122.322 45.5347,-122.332 45.5351,-122.342 45.5366,-122.352 45.538,-122.363 45.5395,-122.373 45.541,-122.38 45.5428,-122.384 45.5421,-122.388 45.5411,-122.393 45.5401,-122.398 45.5387,-122.406 45.5374,-122.414 45.5362,-122.422 45.5349,-122.43 45.5337,-122.434 45.5341,-122.438 45.5345,-122.444 45.5346,-122.449 45.5348,-122.453 45.5347,-122.458 45.5346,-122.462 45.5346,-122.466 45.5345,-122.47 45.5348,-122.474 45.5351,-122.478 45.5354,-122.482 45.5357,-122.486 45.5359,-122.49 45.5362,-122.494 45.5365,-122.497 45.5368,-122.504 45.5372,-122.511 45.5375,-122.515 45.5378,-122.518 45.5381,-122.522 45.5384,-122.526 45.5387,-122.532 45.5402,-122.539 45.5417,-122.544 45.5414,-122.548 45.5411,-122.551 45.5397,-122.554 45.5382,-122.557 45.5356)
+LINESTRING(-121.123 45.5856,-121.117 45.5903,-121.111 45.5949,-121.105 45.5994,-121.099 45.604,-121.096 45.6063,-121.093 45.6086,-121.091 45.6109,-121.088 45.6132,-121.083 45.616,-121.078 45.6188,-121.073 45.6216,-121.068 45.6244,-121.059 45.6257,-121.051 45.627,-121.042 45.6284,-121.034 45.6297,-121.032 45.63,-121.03 45.6303,-121.02 45.6302,-121.01 45.6301,-121 45.6299,-120.99 45.6298,-120.981 45.6293,-120.973 45.6288,-120.965 45.6283,-120.957 45.6278,-120.956 45.6277,-120.954 45.6276,-120.952 45.6274,-120.95 45.6273,-120.943 45.6266,-120.935 45.6259,-120.927 45.6251,-120.92 45.6244,-120.918 45.6235,-120.917 45.6227,-120.915 45.6218,-120.914 45.6209,-120.911 45.6199,-120.908 45.6189,-120.905 45.6179,-120.902 45.6168,-120.899 45.6171,-120.896 45.6173,-120.893 45.6176,-120.89 45.6178,-120.889 45.6184,-120.887 45.6189,-120.885 45.6195,-120.883 45.6201,-120.879 45.6225,-120.875 45.6249,-120.871 45.6273,-120.867 45.6297,-120.866 45.631,-120.864 45.6323,-120.863 45.6335,-120.862 45.6348,-120.861 45.6356,-120.86 45.6364,-120.858 45.6372,-120.857 45.638,-120.855 45.6394,-120.853 45.6408,-120.852 45.6421,-120.85 45.6435,-120.848 45.6441,-120.847 45.6447,-120.846 45.6452,-120.845 45.6458,-120.843 45.6464,-120.841 45.647,-120.84 45.6475,-120.838 45.6481,-120.835 45.6483,-120.833 45.6485,-120.831 45.6486,-120.828 45.6488,-120.824 45.6496,-120.82 45.6504,-120.816 45.6512,-120.812 45.6521)
+LINESTRING(-119.346 45.9181,-119.327 45.9129,-119.306 45.9083,-119.286 45.9038,-119.265 45.898,-119.225 45.8846,-119.185 45.8718,-119.145 45.864,-119.103 45.8653,-119.056 45.8765,-119.018 45.8922,-118.984 45.9122,-118.948 45.9363,-118.911 45.9595,-118.877 45.9822,-118.859 46.0042)
+LINESTRING(-119.348 45.9177,-119.346 45.8878,-119.356 45.8575,-119.372 45.8271,-119.386 45.7925)
+LINESTRING(-120.812 45.6521,-120.806 45.6525,-120.8 45.653,-120.794 45.6535,-120.788 45.654,-120.782 45.6557,-120.776 45.6574,-120.769 45.6591,-120.763 45.6608,-120.755 45.6634,-120.747 45.666,-120.739 45.6686,-120.731 45.6712,-120.724 45.673,-120.717 45.6747,-120.709 45.6765,-120.702 45.6782,-120.7 45.6792,-120.697 45.6801,-120.695 45.681,-120.692 45.6819,-120.688 45.6832,-120.683 45.6845,-120.679 45.6858,-120.674 45.6871,-120.67 45.6894,-120.666 45.6918,-120.661 45.6941,-120.657 45.6964,-120.653 45.699,-120.649 45.7016,-120.645 45.7042,-120.642 45.7068,-120.639 45.7086,-120.636 45.7104,-120.633 45.7122,-120.63 45.7139,-120.628 45.7146,-120.622 45.7156,-120.617 45.7165,-120.612 45.7175,-120.606 45.7185,-120.603 45.7191,-120.599 45.7181,-120.596 45.7171,-120.592 45.7161,-120.589 45.7151,-120.586 45.7141,-120.583 45.713,-120.581 45.712,-120.578 45.711,-120.574 45.7094,-120.57 45.7078,-120.566 45.7061,-120.562 45.7045,-120.558 45.703,-120.555 45.7015,-120.547 45.6975,-120.539 45.6934,-120.531 45.6894,-120.523 45.6854,-120.514 45.6826,-120.505 45.6799,-120.496 45.6771,-120.487 45.6743,-120.483 45.6728,-120.476 45.6713,-120.468 45.6698,-120.461 45.6683,-120.453 45.6668,-120.45 45.6675,-120.448 45.6681,-120.445 45.6687,-120.442 45.6694,-120.43 45.669,-120.418 45.6686,-120.406 45.6681,-120.394 45.6677,-120.381 45.6707,-120.368 45.6737,-120.355 45.6767,-120.342 45.6797,-120.336 45.681,-120.329 45.6823,-120.323 45.6836,-120.316 45.6849,-120.311 45.6848,-120.305 45.6847,-120.3 45.6846,-120.294 45.6845,-120.291 45.6862,-120.287 45.6879,-120.284 45.6896,-120.281 45.6913,-120.278 45.6923,-120.275 45.6933,-120.272 45.6934,-120.268 45.6934,-120.265 45.6935,-120.262 45.6935,-120.259 45.6927,-120.256 45.692,-120.252 45.6912,-120.249 45.6905,-120.241 45.692,-120.232 45.6935,-120.223 45.695,-120.215 45.6965,-120.21 45.6973,-120.206 45.6981,-120.202 45.6989,-120.197 45.6997,-120.192 45.7011,-120.186 45.7026,-120.181 45.7041,-120.175 45.7055,-120.172 45.7092,-120.169 45.7128,-120.166 45.7165,-120.162 45.7201,-120.16 45.7222,-120.158 45.7242,-120.155 45.7262,-120.153 45.7283,-120.149 45.7308,-120.146 45.7333,-120.142 45.7359,-120.138 45.7384,-120.136 45.7398,-120.133 45.7413,-120.131 45.7427,-120.129 45.7441,-120.125 45.7448,-120.121 45.7454,-120.117 45.7461,-120.113 45.7467,-120.109 45.7474,-120.106 45.7481,-120.102 45.7488,-120.099 45.7495,-120.095 45.7503,-120.091 45.7511,-120.087 45.7519,-120.083 45.7527,-120.081 45.7531,-120.078 45.7535,-120.076 45.7539,-120.074 45.7543,-120.07 45.7548,-120.066 45.7553,-120.062 45.7559,-120.058 45.7564,-120.049 45.7595,-120.04 45.7626,-120.031 45.7658,-120.022 45.7689,-120.017 45.771,-120.012 45.7732,-120.007 45.7754,-120.002 45.7775,-119.997 45.7798,-119.992 45.7822,-119.986 45.7845,-119.981 45.7868,-119.969 45.7888,-119.958 45.7909,-119.947 45.7929,-119.935 45.795,-119.922 45.7971,-119.908 45.7993,-119.894 45.8014,-119.881 45.8036,-119.85 45.8068,-119.819 45.8101,-119.788 45.8134,-119.757 45.8166,-119.749 45.817,-119.742 45.8175,-119.735 45.8179,-119.728 45.8184,-119.723 45.8195,-119.717 45.8205,-119.711 45.8216,-119.705 45.8227,-119.701 45.8234,-119.696 45.8242,-119.692 45.8249,-119.687 45.8257,-119.684 45.8256,-119.68 45.8256,-119.677 45.8256,-119.674 45.8256,-119.671 45.8251,-119.668 45.8246,-119.665 45.8241,-119.663 45.8237,-119.657 45.8239,-119.651 45.8241,-119.645 45.8243,-119.639 45.8244,-119.619 45.8242,-119.599 45.824,-119.578 45.8238,-119.558 45.8236,-119.53 45.8187,-119.502 45.8138,-119.474 45.8089,-119.446 45.804,-119.431 45.8011,-119.416 45.7983,-119.401 45.7954,-119.386 45.7925)
+LINESTRING(-84.3438 46.5045,-84.3427 46.4867,-84.3562 46.457,-84.3677 46.4241,-84.3773 46.3909,-84.385 46.3603)
+LINESTRING(-112.71 46.5344,-112.721 46.5396,-112.728 46.5429,-112.767 46.5596,-112.805 46.58,-112.836 46.6003,-112.869 46.6185,-112.911 46.6325,-112.937 46.6382,-112.959 46.6429,-112.98 46.6481,-113.005 46.6557,-113.018 46.6626,-113.052 46.6795,-113.102 46.7006,-113.163 46.72,-113.232 46.7342,-113.294 46.7418,-113.357 46.747,-113.429 46.7538,-113.486 46.7583,-113.538 46.7615,-113.587 46.7682,-113.638 46.7831,-113.653 46.7905,-113.665 46.7992,-113.677 46.8074,-113.693 46.8136,-113.741 46.8302,-113.774 46.8515,-113.804 46.8767,-113.842 46.9048,-113.851 46.9129,-113.863 46.9188,-113.876 46.9219,-113.891 46.9218,-113.902 46.9188,-113.91 46.914,-113.918 46.9092,-113.929 46.9062,-113.944 46.9069,-113.957 46.9118,-113.969 46.9189,-113.982 46.9263)
+LINESTRING(-111.997 46.5914,-112.005 46.6226,-112.018 46.6873,-112.029 46.7535,-112.03 46.7892,-112.009 46.8006,-112.004 46.8185,-112.01 46.8382,-112.023 46.8549,-112.042 46.861,-112.066 46.8647,-112.09 46.8681,-112.111 46.8732,-112.119 46.8858,-112.131 46.9028,-112.142 46.9183,-112.147 46.926,-112.142 46.9399,-112.13 46.9491,-112.114 46.9572,-112.102 46.9679,-112.097 46.9784,-112.094 46.9897,-112.09 47.0008,-112.082 47.0103,-112.057 47.0247,-112.029 47.0374,-112 47.0521,-111.973 47.0726,-111.935 47.1038,-111.905 47.1135,-111.869 47.1146,-111.811 47.1199,-111.806 47.1268,-111.798 47.1319,-111.791 47.1364,-111.75 47.2145,-111.728 47.2648,-111.716 47.2935,-111.71 47.3021,-111.627 47.3706,-111.56 47.4122,-111.483 47.4404,-111.365 47.4688,-111.352 47.4754,-111.344 47.4858,-111.342 47.4977,-111.335 47.5178)
+LINESTRING(-119.386 45.7925,-119.233 45.7694,-119.087 45.7403,-118.945 45.7048,-118.805 45.663)
+LINESTRING(-104.801 47.1034,-104.799 47.1074,-104.79 47.1159,-104.776 47.123,-104.764 47.1263,-104.754 47.1299,-104.743 47.1329,-104.731 47.1344,-104.705 47.1355,-104.679 47.1338,-104.658 47.1281,-104.637 47.1205,-104.581 47.1072,-104.562 47.1032,-104.505 47.085,-104.447 47.0674,-104.39 47.0488,-104.336 47.0272,-104.327 47.0219,-104.317 47.0153,-104.308 47.0094,-104.297 47.006,-104.264 47.0023,-104.232 46.9998,-104.198 46.997,-104.165 46.9921,-104.141 46.9842,-104.123 46.9729,-104.105 46.9607,-104.086 46.9502,-104.076 46.9479,-104.064 46.9469,-104.053 46.9462,-104.045 46.9445,-104.045 46.9445)
+LINESTRING(-72.3907 43.6448,-72.4119 43.6698,-72.4168 43.6838,-72.4136 43.6983,-72.4102 43.7249,-72.4143 43.737,-72.424 43.7584,-72.4346 43.7801,-72.4418 43.7928,-72.4483 43.7955,-72.4559 43.7972,-72.4639 43.7979,-72.4752 43.7943,-72.4824 43.787,-72.4975 43.7871,-72.5106 43.7996,-72.5225 43.813,-72.5305 43.8192,-72.5377 43.815,-72.5504 43.8104,-72.5622 43.8124,-72.5689 43.8184,-72.5679 43.8249,-72.5816 43.8342,-72.5907 43.8387,-72.6011 43.8518,-72.607 43.8614,-72.6124 43.8711,-72.6162 43.8802,-72.6162 43.8868,-72.6151 43.8983,-72.6139 43.9108,-72.6137 43.9203,-72.617 43.9283,-72.6207 43.9358,-72.6243 43.96,-72.6253 43.9835,-72.6237 44.0069,-72.6196 44.031,-72.6141 44.0396,-72.6084 44.0462,-72.6052 44.0544,-72.6048 44.0641,-72.6046 44.0821,-72.605 44.1012,-72.6044 44.1201,-72.6013 44.138,-72.5961 44.1495,-72.5889 44.1599,-72.5822 44.1704,-72.5784 44.1823,-72.5784 44.1982,-72.5808 44.2144,-72.5842 44.2305,-72.5868 44.2465,-72.603 44.2579,-72.6343 44.2763,-72.6687 44.2967,-72.6942 44.3139,-72.709 44.3175,-72.718 44.3186,-72.7255 44.3211,-72.7377 44.3302,-72.7479 44.3401,-72.7588 44.3496,-72.7729 44.3575,-72.7807 44.3602,-72.7891 44.3623,-72.7977 44.3639,-72.8062 44.3652,-72.8157 44.3621,-72.8253 44.3606,-72.8481 44.3655,-72.8659 44.3721,-72.8826 44.3794,-72.902 44.3863,-72.9305 44.3911,-72.9618 44.395,-72.9878 44.4032,-73.0002 44.4211,-73.0339 44.4308,-73.0903 44.4345,-73.1485 44.4397,-73.1873 44.454)
+LINESTRING(-92.1598 46.8139,-92.1933 46.7818,-92.2085 46.768,-92.2276 46.7518)
+LINESTRING(-72.3311 43.626,-72.3351 43.6255,-72.3636 43.6279)
+LINESTRING(-72.3636 43.6279,-72.363 43.6302,-72.3623 43.6325,-72.3614 43.6345,-72.3603 43.6357,-72.3589 43.6393,-72.3575 43.6429,-72.3562 43.6466,-72.3552 43.6502,-72.3344 43.7103,-72.3075 43.7449,-72.2815 43.7662,-72.2633 43.7867,-72.254 43.8122,-72.2485 43.8388,-72.2429 43.8655,-72.2337 43.8914,-72.2245 43.9052,-72.2132 43.9166,-72.2016 43.9275,-72.1916 43.9396,-72.1829 43.954,-72.1745 43.9695,-72.1668 43.9852,-72.1602 44.0001,-72.1483 44.0345,-72.1397 44.0697,-72.1324 44.1053,-72.1242 44.1403,-72.1216 44.1608,-72.1217 44.1857,-72.1228 44.2107,-72.123 44.2316,-72.1119 44.2862,-72.0903 44.3261,-72.0682 44.352,-72.0555 44.3643,-72.0431 44.378,-72.0326 44.3898,-72.0257 44.4021,-72.0255 44.4136)
+LINESTRING(-72.3907 43.6448,-72.3839 43.6406,-72.3772 43.6363,-72.3704 43.6321,-72.3636 43.6279)
+LINESTRING(-92.1598 46.8139,-92.1636 46.7991,-92.1559 46.7779,-92.1438 46.7556,-92.1348 46.7374)
+LINESTRING(-92.1348 46.7374,-92.1347 46.7374,-92.1257 46.7205)
+LINESTRING(-123.06 44.6288,-123.059 44.6457,-123.056 44.6623,-123.051 44.6787,-123.046 44.6953,-123.052 44.7271,-123.043 44.7674,-123.025 44.8072,-123.006 44.8375,-123.001 44.8691,-122.997 44.9286,-122.994 44.9889,-122.991 45.0232,-122.964 45.0658,-122.906 45.1307,-122.843 45.1976,-122.799 45.2463,-122.777 45.2841,-122.773 45.3129,-122.773 45.3389,-122.746 45.3733)
+LINESTRING(-96.8473 46.8983,-96.8501 46.9115,-96.8658 46.9442,-96.8909 46.9676,-96.8969 46.9858,-96.9108 47.0094,-96.9282 47.0318,-96.9445 47.0466,-96.9553 47.0896,-96.9833 47.1706,-97.0147 47.2545,-97.0353 47.3063,-97.0397 47.3143,-97.0453 47.3222,-97.0507 47.3301,-97.055 47.3381,-97.0571 47.3471,-97.0576 47.3568,-97.0583 47.3667,-97.061 47.3764,-97.0651 47.3836,-97.0702 47.3911,-97.075 47.3986,-97.0782 47.4058,-97.0807 47.4239,-97.0805 47.4432,-97.0803 47.4628,-97.0829 47.4819,-97.0851 47.4858,-97.0888 47.4907,-97.0924 47.4955,-97.0941 47.4991,-97.0932 47.5175,-97.0896 47.5361,-97.0857 47.5545,-97.0842 47.5725,-97.0864 47.6461,-97.0885 47.7197,-97.0896 47.7933,-97.0889 47.8669,-97.0905 47.8716,-97.0941 47.8767,-97.0977 47.8818,-97.0994 47.8865,-97.0988 47.8983,-97.0978 47.9104,-97.0966 47.9224,-97.0955 47.9343)
+LINESTRING(-104.045 46.9445,-104.035 46.9399,-104.028 46.9367,-104.021 46.9349,-104.008 46.9344,-103.947 46.937,-103.887 46.9421,-103.827 46.9467,-103.767 46.9477,-103.759 46.9488,-103.749 46.9517,-103.739 46.9551,-103.732 46.9577,-103.704 46.9539,-103.675 46.951,-103.646 46.9491,-103.617 46.9484,-103.588 46.932,-103.575 46.931,-103.56 46.931,-103.546 46.9319,-103.532 46.9337,-103.498 46.9203,-103.456 46.9098,-103.42 46.901,-103.398 46.8926,-103.387 46.8928,-103.376 46.8923,-103.364 46.8909,-103.354 46.8884,-103.315 46.8953,-103.274 46.8976,-103.232 46.8975,-103.191 46.8972)
+LINESTRING(-92.2276 46.7518,-92.2444 46.7376,-92.2629 46.7248,-92.2837 46.7142,-92.3079 46.7069,-92.332 46.7046,-92.354 46.7063,-92.3762 46.7088,-92.4007 46.709,-92.4236 46.7046,-92.4419 46.6955,-92.457 46.683,-92.4707 46.6685)
+LINESTRING(-70.7622 43.0946,-70.7446 43.1066,-70.7183 43.1232,-70.6931 43.1397,-70.6783 43.1513,-70.6645 43.1725,-70.6457 43.2068,-70.6288 43.2416,-70.6207 43.2644,-70.6209 43.2742,-70.6224 43.2845,-70.6229 43.2948,-70.6204 43.3044,-70.617 43.3092,-70.6125 43.3138,-70.608 43.3185,-70.6045 43.3233,-70.5953 43.3411,-70.587 43.3592,-70.5788 43.3773,-70.5696 43.3951,-70.5528 43.417,-70.519 43.4588,-70.4831 43.5014,-70.4602 43.5261,-70.43 43.5506,-70.3981 43.5769,-70.3687 43.6045,-70.3462 43.6329)
+LINESTRING(-96.8424 46.8469,-96.8427 46.8767,-96.8473 46.8983)
+LINESTRING(-96.8424 46.8469,-96.8244 46.846,-96.8062 46.8456,-96.7881 46.8455,-96.77 46.8454,-96.7596 46.8454)
+LINESTRING(-98.7127 46.8835,-98.7028 46.887,-98.693 46.8896,-98.6829 46.8912,-98.672 46.8917,-98.5927 46.8915,-98.5133 46.8913,-98.434 46.8911,-98.3547 46.8908,-98.3366 46.8926,-98.3234 46.8967,-98.3111 46.9008,-98.2959 46.9027,-98.2447 46.9013,-98.1861 46.8996,-98.1295 46.9019,-98.0843 46.9124,-98.0677 46.9129,-98.0513 46.9116,-98.035 46.9098,-98.0187 46.909,-97.9987 46.9108,-97.9769 46.9148,-97.9548 46.9189,-97.9339 46.9212,-97.8709 46.9225,-97.8074 46.9225,-97.7439 46.9219,-97.6808 46.9213,-97.6637 46.9105,-97.6438 46.8951,-97.6248 46.8812,-97.6104 46.8753,-97.4461 46.877,-97.2816 46.8785,-97.1172 46.879,-96.9529 46.8778,-96.9297 46.8585,-96.9066 46.8499,-96.879 46.8475,-96.8424 46.8469)
+LINESTRING(-92.1257 46.7205,-92.1245 46.7181,-92.1094 46.7013,-92.0909 46.6854,-92.0701 46.6692,-92.039 46.6513,-92.0003 46.6363,-91.9598 46.6229,-91.9031 46.6023)
+LINESTRING(-84.385 46.3603,-84.4033 46.3269,-84.4225 46.2997,-84.4482 46.2766,-84.4859 46.2552,-84.4979 46.2503,-84.5108 46.2457,-84.5234 46.2409,-84.5345 46.2353,-84.5391 46.2313,-84.5421 46.2269,-84.5448 46.2224,-84.5488 46.2181,-84.549 46.2104,-84.5534 46.2046,-84.5588 46.1989,-84.5619 46.1912,-84.5732 46.1552,-84.5962 46.1434,-84.6297 46.1357,-84.6728 46.112,-84.7022 46.0829,-84.7367 46.0419,-84.7669 46.0001,-84.7834 45.9692,-84.782 45.9391,-84.7655 45.9127,-84.7454 45.8881,-84.7385 45.8745)
+LINESTRING(-84.7385 45.8745,-84.7329 45.8635,-84.7334 45.846)
+LINESTRING(-100.289 46.8362,-100.283 46.8366,-100.277 46.8369,-100.271 46.8372,-100.265 46.8376,-100.175 46.8653,-100.057 46.8658,-99.9458 46.8608,-99.879 46.8721,-99.8652 46.873,-99.8514 46.8731,-99.8377 46.873,-99.8239 46.8733,-99.7404 46.877,-99.657 46.8806,-99.5735 46.8841,-99.4899 46.8873,-99.47 46.8857,-99.4538 46.8813,-99.4391 46.8765,-99.4237 46.8739,-99.3542 46.8748,-99.2838 46.8797,-99.2132 46.885,-99.1434 46.887,-99.1368 46.8863,-99.1299 46.8846,-99.1229 46.883,-99.1163 46.8822,-99.1016 46.8835,-99.0861 46.8868,-99.0705 46.8903,-99.0557 46.8926,-99.0368 46.8934,-99.0167 46.8934,-98.9965 46.893,-98.9773 46.8927,-98.9184 46.8923,-98.8595 46.892,-98.8006 46.8916,-98.7417 46.8912,-98.7348 46.8879,-98.728 46.8857,-98.7208 46.8843,-98.7127 46.8835)
+LINESTRING(-100.773 46.8311,-100.754 46.8309,-100.737 46.8326,-100.72 46.8351,-100.703 46.8376,-100.68 46.8391,-100.655 46.8389,-100.629 46.8379,-100.605 46.8373,-100.528 46.8375,-100.447 46.8384,-100.366 46.8385,-100.289 46.8362)
+LINESTRING(-75.9866 44.3056,-75.982 44.2993)
+LINESTRING(-100.773 46.8311,-100.792 46.8307,-100.807 46.8296,-100.822 46.8265,-100.838 46.8202,-100.856 46.827,-100.894 46.8417,-100.922 46.8524,-100.949 46.8632,-100.996 46.8621,-101.043 46.8628,-101.09 46.8638,-101.136 46.8638,-101.32 46.8614,-101.503 46.8607,-101.686 46.8607,-101.869 46.8603,-101.872 46.8602,-101.875 46.8601,-101.877 46.8602,-101.88 46.8602,-101.897 46.8624,-101.916 46.8649,-101.935 46.867,-101.953 46.8677,-101.967 46.8669,-101.982 46.8654,-101.997 46.8639,-102.011 46.8629,-102.05 46.8631,-102.091 46.8645,-102.132 46.8652,-102.169 46.8634,-102.179 46.8612,-102.19 46.8576,-102.201 46.854,-102.213 46.8519,-102.244 46.8535,-102.275 46.8603,-102.305 46.8684,-102.336 46.8738,-102.39 46.8756,-102.444 46.8735,-102.496 46.8711,-102.543 46.8717,-102.588 46.8762,-102.633 46.8811,-102.679 46.8842,-102.726 46.8831,-102.754 46.8926,-102.787 46.8936,-102.82 46.8906,-102.845 46.8884,-102.916 46.8883,-103.022 46.8891,-103.126 46.8917,-103.191 46.8972)
+LINESTRING(-84.7334 45.846,-84.7334 45.8433,-84.734 45.8232,-84.7345 45.8031,-84.7349 45.7867)
+LINESTRING(-71.5367 43.1704,-71.5365 43.1762,-71.5341 43.1817,-71.5246 43.1931,-71.5157 43.2097,-71.5096 43.2264,-71.5086 43.2379,-71.5243 43.2661,-71.5485 43.2971,-71.5721 43.3256,-71.5854 43.3462,-71.5906 43.382,-71.5851 43.4124,-71.5762 43.4352,-71.5714 43.448,-71.5823 43.4636,-71.6013 43.4757,-71.6225 43.4869,-71.6401 43.4997,-71.6426 43.5073,-71.6411 43.5173,-71.6382 43.5275,-71.6364 43.5357,-71.6381 43.5497,-71.6425 43.5623,-71.6456 43.5755,-71.6438 43.5908,-71.6559 43.6002,-71.6624 43.6059,-71.6727 43.6339,-71.6744 43.6587,-71.6757 43.6835,-71.6808 43.7068,-71.6925 43.7303,-71.7059 43.7534,-71.7155 43.7773,-71.716 43.8028,-71.7109 43.8128,-71.7015 43.8242,-71.6913 43.8356,-71.6838 43.8457,-71.686 43.8536,-71.6957 43.8597,-71.7066 43.8648,-71.7311 43.9108,-71.7284 43.936,-71.7147 43.96,-71.7062 44.0024,-71.7056 44.0209,-71.7048 44.0399,-71.7042 44.0585,-71.7043 44.0759,-71.7016 44.0914,-71.6956 44.1207,-71.691 44.1417,-71.6864 44.1627,-71.6903 44.1783,-71.6918 44.1887,-71.6971 44.1965,-71.7058 44.1977,-71.7145 44.1988,-71.724 44.2003,-71.7316 44.2019,-71.7405 44.212,-71.7545 44.2247,-71.7675 44.2357,-71.7732 44.2403,-71.7655 44.2518,-71.7567 44.2652,-71.7508 44.2786,-71.752 44.2906,-71.7589 44.2933,-71.7664 44.2948,-71.7788 44.3005,-71.7872 44.3015,-71.7954 44.3031,-71.8015 44.3165,-71.8055 44.3235,-71.8166 44.3278,-71.8323 44.3239,-71.8388 44.3192,-71.8445 44.3129,-71.8553 44.3123,-71.8662 44.3118,-71.8781 44.3189,-71.8873 44.3238,-71.8985 44.3318,-71.8992 44.3365)
+LINESTRING(-84.7349 45.7867,-84.735 45.783,-84.7345 45.7726,-84.7343 45.7625,-84.7336 45.7525,-84.7315 45.7422)
+LINESTRING(-71.5367 43.1704,-71.546 43.1693,-71.5551 43.1743,-71.5673 43.1797,-71.5802 43.184,-71.5914 43.1855,-71.5973 43.1833,-71.6031 43.1811,-71.609 43.1789,-71.6148 43.1767,-71.6335 43.179,-71.652 43.1806,-71.6705 43.1808,-71.6891 43.1787,-71.7042 43.1959,-71.7213 43.2116,-71.7382 43.2269,-71.7528 43.2427,-71.7563 43.2483,-71.7593 43.2544,-71.7624 43.2604,-71.7663 43.2657,-71.7718 43.2696,-71.7805 43.2738,-71.7899 43.2772,-71.7978 43.2788,-71.8074 43.2764,-71.817 43.274,-71.8274 43.2764,-71.8403 43.2809,-71.8529 43.2861,-71.8623 43.2903,-71.8656 43.2967,-71.8663 43.3029,-71.8666 43.3089,-71.8688 43.3149,-71.8796 43.3176,-71.8914 43.3195,-71.9023 43.3223,-71.9106 43.3277,-71.9123 43.3334,-71.914 43.3391,-71.9157 43.3448,-71.9174 43.3505,-71.9335 43.3695,-71.9615 43.3822,-71.9904 43.3913,-72.0095 43.3991,-72.0201 43.4083,-72.0293 43.4181,-72.0381 43.4279,-72.0477 43.4371,-72.0558 43.4411,-72.0658 43.4427,-72.0764 43.4437,-72.0861 43.4456,-72.0966 43.4593,-72.1013 43.4719,-72.104 43.4828,-72.1086 43.4911,-72.1222 43.4953,-72.1341 43.5042,-72.1429 43.5151,-72.1468 43.5253,-72.1429 43.5322,-72.1396 43.5393,-72.1368 43.5466,-72.1345 43.5538,-72.1378 43.5601,-72.1434 43.5658,-72.1499 43.5712,-72.1556 43.5766,-72.1597 43.5828,-72.1627 43.5898,-72.166 43.5967,-72.1706 43.6024,-72.1835 43.613,-72.1964 43.623,-72.2086 43.6335,-72.2194 43.6454,-72.2298 43.6488,-72.2388 43.6506,-72.2478 43.6511,-72.2583 43.6508,-72.2809 43.6379,-72.307 43.6291,-72.3311 43.626)
+LINESTRING(-112.65 46.0082,-112.726 46.0286,-112.795 46.0514,-112.847 46.0829,-112.875 46.1298,-112.872 46.2123,-112.839 46.2802,-112.8 46.3264,-112.79 46.3365,-112.771 46.3455,-112.735 46.3572,-112.701 46.3703,-112.672 46.3918,-112.659 46.4134,-112.651 46.4341,-112.648 46.4554,-112.651 46.4787,-112.666 46.5064,-112.693 46.5265,-112.71 46.5344)
+LINESTRING(-70.8935 42.8831,-70.8815 42.9071,-70.8668 42.9334,-70.8583 42.9591)
+LINESTRING(-111.997 46.5914,-111.979 46.58,-111.962 46.5668,-111.948 46.5528,-111.934 46.5385,-111.951 46.4912,-111.989 46.4419,-112.026 46.3926,-112.045 46.3457,-112.064 46.3214,-112.096 46.2849,-112.131 46.2508,-112.156 46.234,-112.161 46.2405,-112.168 46.248,-112.177 46.2547,-112.186 46.2588,-112.196 46.2595,-112.214 46.2639,-112.239 46.2691,-112.264 46.272,-112.283 46.2723,-112.302 46.2717,-112.32 46.27,-112.338 46.2669,-112.347 46.2572,-112.345 46.2502,-112.339 46.2445,-112.339 46.2333,-112.344 46.2238,-112.336 46.212,-112.34 46.2023,-112.337 46.1961,-112.335 46.1894,-112.335 46.1825,-112.337 46.1762,-112.357 46.1555,-112.382 46.1354,-112.408 46.1041,-112.433 46.0499,-112.443 46.044,-112.453 46.0382,-112.459 46.0231,-112.468 46.0081,-112.476 45.9939,-112.481 45.9814)
+LINESTRING(-112.65 46.0082,-112.646 46.0086,-112.643 46.0085,-112.636 46.0082,-112.628 46.0079,-112.621 46.0074,-112.614 46.0064,-112.606 46.0047,-112.594 46.0021,-112.583 45.9993,-112.579 45.9984,-112.575 45.9977,-112.567 45.9963,-112.556 45.9935,-112.547 45.9908,-112.537 45.9883,-112.526 45.986,-112.516 45.9841,-112.505 45.9823,-112.499 45.9816,-112.493 45.9812,-112.487 45.9811,-112.481 45.9814)
+LINESTRING(-70.8961 42.8601,-70.8941 42.882,-70.8935 42.8831)
+LINESTRING(-70.8583 42.9591,-70.8744 42.9648,-70.8897 42.9695,-70.9045 42.9751,-70.9194 42.9832,-70.9262 42.9888,-70.9347 42.9962,-70.9439 43.003,-70.9527 43.0066,-70.9623 43.008,-70.9719 43.0093,-70.9816 43.0103,-70.9913 43.0105,-70.994 43.0094,-70.9966 43.0084,-71.0074 43.0108,-71.0183 43.0135,-71.0292 43.0159,-71.0401 43.0175,-71.0778 43.0369,-71.1074 43.0405,-71.1361 43.0381,-71.1711 43.0394,-71.1736 43.0413,-71.1761 43.0432,-71.1802 43.0436,-71.1847 43.0433,-71.189 43.0425,-71.1926 43.041,-71.1949 43.0413,-71.1971 43.0415,-71.1994 43.0418,-71.2016 43.0421,-71.2079 43.0466,-71.2142 43.0512,-71.2208 43.0567,-71.2242 43.0611,-71.2303 43.0618,-71.2365 43.0626,-71.2427 43.0632,-71.2488 43.0637,-71.2511 43.0623,-71.2533 43.061,-71.2555 43.0596,-71.2577 43.0583,-71.2659 43.0582,-71.2739 43.059,-71.2819 43.0598,-71.29 43.0595,-71.2946 43.0556,-71.2992 43.0516,-71.3038 43.0477,-71.3084 43.0438,-71.3348 43.0391,-71.3615 43.0277,-71.3874 43.0142,-71.4114 43.0032,-71.4144 42.9984,-71.4175 42.9935,-71.4206 42.9887,-71.4236 42.9839)
+LINESTRING(-71.4236 42.9839,-71.4347 43.0016,-71.4464 43.0189,-71.4605 43.035,-71.4787 43.0492,-71.4768 43.0576,-71.4766 43.066,-71.4777 43.0746,-71.4791 43.083,-71.4933 43.1249,-71.5121 43.1495,-71.5289 43.1628,-71.5367 43.1704)
+LINESTRING(-104.801 47.1034,-104.804 47.0976,-104.808 47.0863,-104.813 47.0731,-104.817 47.0615,-104.823 47.0503,-104.832 47.0383,-104.841 47.0292,-104.85 47.0215,-104.859 47.014,-104.869 47.0052,-104.874 46.9996,-104.886 46.9904,-104.894 46.986,-104.903 46.9799,-104.91 46.974,-104.919 46.9686,-104.93 46.9643,-104.967 46.938,-105.004 46.9179,-105.044 46.901,-105.091 46.8846,-105.112 46.8697,-105.12 46.8479,-105.126 46.8245,-105.142 46.8049,-105.156 46.7931,-105.166 46.781,-105.177 46.7695,-105.193 46.7589,-105.218 46.7479,-105.243 46.7405,-105.269 46.7337,-105.297 46.7245,-105.328 46.7089,-105.35 46.6913,-105.37 46.6714,-105.391 46.6487,-105.399 46.6395,-105.404 46.6307,-105.41 46.6218,-105.416 46.6118,-105.436 46.5843,-105.457 46.5608,-105.48 46.5383,-105.507 46.5141,-105.521 46.5022,-105.535 46.4918,-105.55 46.4828,-105.57 46.4754,-105.601 46.469,-105.63 46.4662,-105.658 46.4621,-105.686 46.4519,-105.698 46.4427,-105.705 46.432)
+LINESTRING(-70.8961 42.8601,-70.9156 42.8644,-70.9329 42.8611,-70.9503 42.8556,-70.9698 42.8512,-70.9894 42.8501,-71.0076 42.8501,-71.0244 42.8481,-71.0396 42.8409,-71.0462 42.8339,-71.0502 42.8265,-71.0546 42.8196,-71.0622 42.8137,-71.0633 42.8133)
+LINESTRING(-71.0633 42.8133,-71.0766 42.8085)
+LINESTRING(-71.2314 42.746,-71.2354 42.7525,-71.2388 42.7564,-71.2424 42.7602,-71.2457 42.764,-71.2481 42.7682,-71.2495 42.7719,-71.2509 42.7755,-71.2523 42.7792,-71.2537 42.7829,-71.2574 42.784,-71.2611 42.785,-71.2648 42.7861,-71.2684 42.7871,-71.2724 42.7909,-71.2733 42.8017,-71.2759 42.8101,-71.2823 42.8165,-71.2946 42.8218,-71.2999 42.8345,-71.3115 42.8458,-71.326 42.8558,-71.3397 42.8644,-71.3515 42.8837,-71.363 42.9046,-71.3749 42.925,-71.3878 42.9426,-71.3938 42.9477,-71.4011 42.9528,-71.408 42.9579,-71.4128 42.9634,-71.4155 42.9686,-71.4182 42.9737,-71.4209 42.9788,-71.4236 42.9839)
+LINESTRING(-73.4559 45.0081,-73.4559 45.008,-73.4644 44.9844,-73.4542 44.9363,-73.46 44.8944,-73.4472 44.8485,-73.4522 44.813,-73.4476 44.7429,-73.531 44.691,-73.5231 44.6293,-73.5416 44.5666,-73.5437 44.4946,-73.5381 44.4001,-73.5713 44.3554,-73.5717 44.277,-73.5628 44.1889,-73.583 44.1741,-73.5864 44.1445,-73.6928 44.0424,-73.7668 43.9128,-73.7793 43.6689,-73.7329 43.604,-73.7446 43.4685,-73.7076 43.3638)
+LINESTRING(-71.0766 42.8085,-71.0911 42.8032,-71.119 42.7952,-71.1428 42.7848,-71.1591 42.7671,-71.1613 42.7438,-71.1407 42.7008,-71.1429 42.6776,-71.1501 42.6705,-71.1612 42.6672,-71.1744 42.667,-71.194 42.667)
+LINESTRING(-71.194 42.667,-71.205 42.6885,-71.2135 42.7102,-71.2225 42.7317,-71.2314 42.746)
+LINESTRING(-70.9999 42.5128,-70.9943 42.5144,-70.9887 42.5159,-70.9831 42.5175,-70.9775 42.5191,-70.9787 42.5248,-70.9799 42.5304,-70.9811 42.5361,-70.9823 42.5418,-70.9615 42.5782,-70.9646 42.6004,-70.9755 42.6243,-70.9776 42.6659,-70.9646 42.7079,-70.9432 42.7483,-70.9226 42.7861,-70.9121 42.8202,-70.9105 42.8312,-70.9075 42.8409,-70.9028 42.8502,-70.8961 42.8601)
+LINESTRING(-71.1169 42.5018,-71.101 42.5031,-71.0932 42.5083,-71.0875 42.5158,-71.0782 42.524,-71.0648 42.5229,-71.0462 42.5179,-71.0241 42.5132,-70.9999 42.5128)
+LINESTRING(-71.1169 42.5018,-71.1182 42.5042,-71.1194 42.5065,-71.1206 42.5089,-71.1219 42.5112,-71.1268 42.5187,-71.133 42.5259,-71.1391 42.533,-71.1441 42.5405,-71.1489 42.5516,-71.1527 42.5631,-71.1568 42.5745,-71.1626 42.5856,-71.167 42.59,-71.1728 42.5937,-71.1784 42.5975,-71.1824 42.602,-71.1864 42.6156,-71.1883 42.6327,-71.1902 42.6507,-71.194 42.667)
+LINESTRING(-71.194 42.667,-71.2314 42.6476,-71.2649 42.63,-71.3016 42.616,-71.3487 42.6077,-71.3949 42.5947,-71.4425 42.5718,-71.4848 42.5435,-71.5156 42.5142)
+LINESTRING(-105.705 46.432,-105.708 46.4287,-105.71 46.4253,-105.713 46.4219,-105.717 46.4186,-105.736 46.4024,-105.754 46.3862,-105.771 46.3699,-105.791 46.3534,-105.804 46.3438,-105.818 46.329,-105.832 46.3142,-105.845 46.3046,-105.871 46.2915,-105.898 46.2777,-105.924 46.2642,-105.951 46.2518,-106.001 46.2355,-106.088 46.2121,-106.179 46.1924,-106.244 46.187,-106.26 46.1903,-106.28 46.1953,-106.299 46.1998,-106.315 46.2016,-106.391 46.2004,-106.466 46.1997,-106.541 46.1995,-106.617 46.2,-106.626 46.2,-106.634 46.2,-106.646 46.1952,-106.662 46.1897,-106.679 46.1851,-106.692 46.1833,-106.704 46.184,-106.716 46.1854,-106.729 46.1869,-106.741 46.1879,-106.772 46.1899,-106.808 46.1933,-106.846 46.1976,-106.883 46.2023,-106.897 46.2032,-106.91 46.2027,-106.923 46.2017,-106.938 46.2011,-106.983 46.2038,-107.069 46.2091,-107.155 46.2124,-107.2 46.2091,-107.208 46.1844,-107.222 46.1578,-107.245 46.1352,-107.278 46.1227,-107.293 46.1198,-107.31 46.1161,-107.326 46.1121,-107.342 46.1087,-107.353 46.1064,-107.364 46.1041,-107.375 46.1018,-107.385 46.1,-107.399 46.0967,-107.413 46.0922,-107.427 46.0878,-107.441 46.0852,-107.463 46.0838,-107.482 46.0829,-107.501 46.0807,-107.524 46.0751,-107.539 46.069,-107.551 46.0613,-107.563 46.0532,-107.576 46.046,-107.586 46.0425,-107.598 46.0399,-107.61 46.0371,-107.621 46.0328,-107.628 46.0284,-107.635 46.0236,-107.643 46.0188,-107.65 46.0146,-107.685 46.0009,-107.727 45.987,-107.764 45.9763,-107.779 45.972,-107.831 45.9555,-107.868 45.9456,-107.904 45.9393,-107.958 45.9338,-108.063 45.9133,-108.192 45.8958,-108.312 45.8714,-108.39 45.8303)
+LINESTRING(-112.481 45.9814,-112.475 45.9667,-112.468 45.9512,-112.459 45.9368,-112.445 45.9252,-112.36 45.9117,-112.275 45.9003,-112.189 45.8895,-112.102 45.878,-112.062 45.8769,-111.984 45.8762,-111.907 45.8758,-111.87 45.8759,-111.843 45.8838,-111.818 45.8954,-111.794 45.907,-111.77 45.9149,-111.725 45.9185,-111.653 45.9201,-111.582 45.9174,-111.543 45.9081,-111.536 45.9009,-111.527 45.8945,-111.447 45.8792,-111.341 45.8487,-111.246 45.8096,-111.199 45.7685,-111.159 45.7567,-111.123 45.7402,-111.092 45.7205,-111.063 45.6987,-111.053 45.6983,-111.043 45.6965,-111.033 45.6937,-111.025 45.6902,-111.012 45.6733,-110.987 45.6631,-110.958 45.6536,-110.934 45.6388,-110.908 45.6457,-110.873 45.6553,-110.84 45.6641,-110.816 45.6689,-110.807 45.6658,-110.798 45.6623,-110.789 45.6584,-110.78 45.6543,-110.756 45.6552,-110.73 45.6573,-110.705 45.6598,-110.679 45.6623,-110.67 45.6617,-110.661 45.6611,-110.652 45.6606,-110.643 45.66,-110.628 45.6549,-110.608 45.6484,-110.588 45.6434,-110.572 45.6427,-110.56 45.6391,-110.549 45.6354,-110.538 45.6318,-110.527 45.6281)
+LINESTRING(-108.479 45.7969,-108.462 45.8024,-108.432 45.8139,-108.411 45.8221,-108.39 45.8303)
+LINESTRING(-71.5156 42.5142,-71.5329 42.517,-71.5512 42.5183,-71.5683 42.52,-71.5822 42.5242,-71.6076 42.5198,-71.6429 42.519,-71.6803 42.519,-71.7122 42.5168)
+LINESTRING(-72.3636 43.6279,-72.3681 43.6255,-72.3726 43.6243,-72.3767 43.6226,-72.3799 43.6188,-72.3845 43.6151,-72.3917 43.6137,-72.3999 43.6131,-72.4073 43.6112,-72.4236 43.6017,-72.435 43.591,-72.4435 43.5787,-72.451 43.5643,-72.4549 43.552,-72.4555 43.5404,-72.4554 43.5288,-72.457 43.5162,-72.4595 43.5079,-72.4622 43.5003,-72.464 43.4928,-72.4636 43.4847,-72.4588 43.475,-72.4515 43.4672,-72.4443 43.4593,-72.4395 43.4496,-72.437 43.4222,-72.4412 43.3976,-72.4478 43.3729,-72.4524 43.3453,-72.4509 43.3318,-72.4471 43.3197,-72.4447 43.3078,-72.4476 43.2949,-72.4522 43.2855,-72.4568 43.276,-72.4614 43.2666,-72.466 43.2571,-72.4755 43.2431,-72.4871 43.2317,-72.4987 43.2203,-72.5082 43.2063,-72.5131 43.1909,-72.514 43.1767,-72.5141 43.1624,-72.5168 43.1464,-72.5243 43.1238,-72.5309 43.1039,-72.5357 43.0838,-72.5377 43.0607,-72.54 43.0549,-72.5422 43.0492,-72.5448 43.0435,-72.5473 43.0378,-72.5623 43.0218,-72.5833 43.0116,-72.6044 43.0014,-72.6193 42.9854,-72.6239 42.976,-72.6284 42.9665,-72.6329 42.9571,-72.6374 42.9476,-72.6435 42.9295,-72.6453 42.9116,-72.6447 42.8934,-72.6436 42.8747,-72.6428 42.854,-72.6415 42.8378,-72.6383 42.8217,-72.632 42.8014,-72.6196 42.784,-72.6004 42.7687,-72.5828 42.7579,-72.5751 42.7538,-72.5595 42.7364,-72.558 42.7299)
+LINESTRING(-71.2699 42.3314,-71.2727 42.3358,-71.2749 42.3408,-71.2763 42.346,-71.2766 42.3509,-71.2728 42.3687,-71.2656 42.3871,-71.2585 42.4057,-71.2553 42.424,-71.2559 42.4353,-71.2565 42.4468,-71.2552 42.4582,-71.2502 42.469,-71.2448 42.4719,-71.2355 42.4743,-71.2254 42.4763,-71.2178 42.478,-71.1907 42.4883,-71.1708 42.4944,-71.1492 42.4983,-71.1169 42.5018)
+LINESTRING(-108.812 45.6861,-108.777 45.691,-108.745 45.698,-108.714 45.7055,-108.682 45.712,-108.654 45.7219,-108.63 45.7294,-108.605 45.7365,-108.578 45.745,-108.551 45.7551,-108.525 45.7669,-108.501 45.7807,-108.479 45.7969)
+LINESTRING(-110.527 45.6281,-110.505 45.6341,-110.487 45.6444,-110.47 45.6546,-110.448 45.6606,-110.43 45.6595,-110.414 45.6541,-110.399 45.6466,-110.381 45.6394,-110.353 45.6321,-110.327 45.6285,-110.299 45.6281,-110.269 45.63,-110.225 45.6404,-110.191 45.6596,-110.158 45.6828,-110.122 45.7054,-110.1 45.7134,-110.076 45.7189,-110.053 45.7244,-110.031 45.7327,-110.007 45.7466,-109.986 45.759,-109.964 45.7687,-109.935 45.7742,-109.921 45.7724,-109.906 45.7663,-109.892 45.7586,-109.88 45.7516,-109.87 45.7435,-109.862 45.7343,-109.854 45.7248,-109.846 45.7156,-109.817 45.6945,-109.782 45.6796,-109.743 45.6701,-109.703 45.6655,-109.663 45.6607,-109.627 45.659,-109.591 45.6598,-109.55 45.6627,-109.519 45.6663,-109.492 45.6709,-109.465 45.6755,-109.434 45.6791,-109.406 45.6812,-109.381 45.6829,-109.357 45.6846,-109.329 45.6867,-109.312 45.6888,-109.297 45.6915,-109.281 45.6942,-109.264 45.6963,-109.217 45.6908,-109.178 45.6737,-109.139 45.6566,-109.093 45.6511,-109.055 45.6551,-109.019 45.6603,-108.984 45.6662,-108.946 45.6723,-108.937 45.6741,-108.927 45.676,-108.918 45.6775,-108.908 45.6787,-108.884 45.6805,-108.86 45.6824,-108.836 45.6842,-108.812 45.6861)
+LINESTRING(-70.9999 42.5128,-71.0202 42.4814,-71.0191 42.4449,-71.0248 42.4035,-71.0656 42.3576,-71.0528 42.334,-71.0462 42.2992,-71.0379 42.2612,-71.0199 42.228)
+LINESTRING(-72.558 42.7299,-72.5551 42.7169,-72.5587 42.6964,-72.5671 42.6758,-72.5735 42.6634,-72.58 42.6518,-72.5866 42.6402,-72.593 42.6278)
+LINESTRING(-71.7122 42.5168,-71.7304 42.5246,-71.7454 42.5358,-71.7584 42.5461,-71.7708 42.5507,-71.7955 42.5507,-71.8216 42.5493,-71.8473 42.5466,-71.871 42.5428,-71.8741 42.5428,-71.9049 42.5448,-71.9373 42.5496,-71.9695 42.5552,-71.9999 42.5596,-72.0094 42.5593,-72.019 42.5576,-72.0294 42.5562,-72.0416 42.5567,-72.0519 42.5587,-72.0621 42.5612,-72.0721 42.5639,-72.0821 42.5665,-72.1005 42.5691,-72.1137 42.5687,-72.1273 42.5711,-72.147 42.5817,-72.1847 42.5786,-72.2245 42.566,-72.2621 42.555,-72.2931 42.5568,-72.302 42.5619,-72.3097 42.5677,-72.317 42.5737,-72.3251 42.5793,-72.3331 42.5835,-72.3414 42.5874,-72.3495 42.5916,-72.3564 42.5968,-72.36 42.6012,-72.3627 42.6059,-72.3654 42.6106,-72.3691 42.6149,-72.4003 42.6215,-72.4252 42.6165,-72.4472 42.6057,-72.4698 42.5947,-72.4727 42.5949,-72.4757 42.5952,-72.4789 42.5952,-72.4816 42.5946,-72.499 42.6062,-72.5304 42.6149,-72.5653 42.6218,-72.593 42.6278)
+LINESTRING(-96.8424 46.8469,-96.8423 46.8224,-96.8429 46.7977,-96.8432 46.773,-96.8419 46.7486,-96.8402 46.7414,-96.8374 46.734,-96.8346 46.7267,-96.833 46.7195,-96.8329 46.6969,-96.8348 46.6739,-96.8362 46.651,-96.8347 46.6286,-96.832 46.6167,-96.829 46.6058,-96.8264 46.5943,-96.8252 46.5807,-96.8266 46.5578,-96.8299 46.5358,-96.8332 46.5138,-96.8344 46.491,-96.8331 46.3812,-96.8339 46.2715,-96.8358 46.1618,-96.8377 46.052,-96.8372 46.0204,-96.8366 45.9867,-96.8389 45.9534,-96.8434 45.936)
+LINESTRING(-71.1303 42.202,-71.1129 42.2035,-71.0943 42.2032,-71.0759 42.2032,-71.0591 42.2059,-71.0482 42.2109,-71.039 42.2174,-71.0301 42.2236,-71.0199 42.228)
+LINESTRING(-71.1303 42.202,-71.1914 42.2171,-71.2108 42.233,-71.2128 42.2535,-71.2217 42.2822,-71.2319 42.2945,-71.2452 42.306,-71.2587 42.3179,-71.2699 42.3314)
+LINESTRING(-71.2699 42.3314,-71.2938 42.3293,-71.3159 42.323,-71.3373 42.3157,-71.3593 42.3106,-71.3777 42.3094,-71.397 42.3097,-71.4162 42.3098,-71.4343 42.3084,-71.4473 42.3049,-71.4584 42.2995,-71.4685 42.2931,-71.4784 42.2866,-71.4964 42.2785,-71.518 42.2726,-71.5403 42.2668,-71.5608 42.2593)
+LINESTRING(-71.5156 42.5142,-71.5453 42.4872,-71.5783 42.4498,-71.6028 42.4103,-71.6068 42.3774,-71.6005 42.3644,-71.5925 42.352,-71.5847 42.3395,-71.5788 42.3265,-71.5744 42.3097,-71.5708 42.2928,-71.5668 42.2759,-71.5608 42.2593)
+LINESTRING(-96.7596 46.8454,-96.7446 46.8455,-96.7192 46.8456,-96.6938 46.8456,-96.6684 46.8455,-96.6284 46.8409,-96.6166 46.8298,-96.6138 46.8136,-96.601 46.7938,-96.5789 46.7759,-96.5549 46.7585,-96.5304 46.7414,-96.5067 46.7244,-96.4772 46.7063,-96.444 46.6896,-96.4137 46.6741,-96.3928 46.6593,-96.3271 46.5796,-96.2703 46.4977,-96.2093 46.4177,-96.1307 46.3436,-96.1241 46.3302,-96.1227 46.3107,-96.1229 46.2925,-96.1211 46.2828,-96.0682 46.2439,-96.015 46.2056,-95.9631 46.1666,-95.914 46.1254,-95.9041 46.1148,-95.898 46.1056,-95.893 46.0964,-95.8864 46.086,-95.8796 46.0792,-95.871 46.0727,-95.8621 46.0664,-95.8546 46.06,-95.8498 46.0541,-95.8455 46.0479,-95.8406 46.0418,-95.8341 46.0361,-95.8149 46.0254,-95.7943 46.0182,-95.7725 46.0126,-95.7499 46.0073,-95.7354 46.0021,-95.7212 45.9949,-95.7074 45.9873,-95.694 45.9807,-95.6518 45.9638,-95.6174 45.9499,-95.5844 45.9339,-95.546 45.9104,-95.5349 45.9031,-95.5215 45.895,-95.5075 45.8874,-95.4946 45.8818,-95.4836 45.8791,-95.4717 45.8775,-95.46 45.876,-95.4492 45.8737,-95.4282 45.865,-95.4044 45.8532,-95.3804 45.8422,-95.3586 45.8361,-95.3063 45.8339,-95.2513 45.836,-95.1966 45.8373,-95.1455 45.8329,-95.104 45.8029,-95.0558 45.7712,-95.0042 45.7429,-94.9524 45.7235)
+LINESTRING(-107.436 45.5783,-107.46 45.6401,-107.492 45.6747,-107.533 45.7027,-107.584 45.7449,-107.635 45.749,-107.711 45.7464,-107.79 45.7442,-107.849 45.7494,-107.917 45.7788,-108.028 45.7878,-108.145 45.7881,-108.232 45.7916,-108.238 45.7937,-108.244 45.7958,-108.25 45.7978,-108.256 45.7999,-108.289 45.8095,-108.323 45.8162,-108.357 45.8224,-108.39 45.8303)
+LINESTRING(-73.8409 42.6969,-73.7669 42.7619,-73.7827 42.8808,-73.8124 42.9185,-73.8053 43.0066,-73.7491 43.07,-73.7578 43.101,-73.7117 43.185,-73.6791 43.2979,-73.7076 43.3638)
+LINESTRING(-73.8409 42.6969,-73.8424 42.6978,-73.844 42.6986,-73.8455 42.6994,-73.8471 42.7002,-73.8671 42.7142,-73.889 42.729,-73.9117 42.7431,-73.9344 42.7549,-73.9549 42.763,-73.9759 42.7701,-73.9965 42.7776,-74.0161 42.7872,-74.0164 42.7885,-74.0167 42.7898,-74.017 42.791,-74.0173 42.7923)
+LINESTRING(-71.5608 42.2593,-71.6 42.2393,-71.6313 42.2275,-71.6658 42.2215,-71.7144 42.2186,-71.7206 42.2186,-71.7274 42.2188,-71.734 42.2187,-71.7398 42.2178,-71.766 42.2095,-71.7932 42.2007,-71.8208 42.1928,-71.848 42.1871)
+LINESTRING(-71.7122 42.5168,-71.7157 42.5062,-71.7164 42.4949,-71.7176 42.4829,-71.7226 42.4704,-71.7342 42.4596,-71.7501 42.4516,-71.7674 42.4443,-71.7828 42.4353,-71.8107 42.4,-71.8143 42.3634,-71.8025 42.3263,-71.7847 42.2894,-71.788 42.2794,-71.7886 42.2696,-71.7896 42.2597,-71.7944 42.2494,-71.8099 42.2363,-71.8272 42.2267,-71.8415 42.2128,-71.848 42.1871)
+LINESTRING(-71.2839 42.0211,-71.2758 42.027,-71.2686 42.0331,-71.2617 42.0394,-71.2547 42.0456,-71.2346 42.0695,-71.2255 42.0921,-71.2169 42.1148,-71.1981 42.1391,-71.1778 42.1541,-71.1585 42.1656,-71.142 42.1797,-71.1303 42.202)
+LINESTRING(-71.5608 42.2593,-71.5523 42.2362,-71.5442 42.2145,-71.5352 42.1932,-71.5236 42.1712,-71.5133 42.1663,-71.5013 42.1603,-71.4905 42.1534,-71.484 42.1458,-71.481 42.1384,-71.4781 42.131,-71.4746 42.1236,-71.4704 42.1167,-71.4636 42.1099,-71.4547 42.1036,-71.4452 42.0976,-71.437 42.0912,-71.4312 42.0845,-71.4266 42.0774,-71.4217 42.0703,-71.4148 42.0635,-71.4035 42.0555,-71.3902 42.0472,-71.3761 42.0397,-71.3623 42.034,-71.3439 42.0297,-71.3239 42.0274,-71.3035 42.0252,-71.2839 42.0211)
+LINESTRING(-94.9524 45.7235,-94.9185 45.7034,-94.8716 45.6838,-94.8217 45.6684,-94.7784 45.6606,-94.7602 45.6603,-94.7414 45.6611,-94.7229 45.6612,-94.7054 45.6591,-94.6808 45.6515,-94.6574 45.6417,-94.6337 45.6319,-94.6084 45.6243,-94.5825 45.6198,-94.5558 45.6166,-94.529 45.6138,-94.5026 45.6105,-94.4806 45.6051,-94.4684 45.6004,-94.4509 45.5997,-94.4127 45.6061,-94.3817 45.5976,-94.345 45.5711,-94.3111 45.5403,-94.2887 45.5191)
+LINESTRING(-71.2839 42.0211,-71.2599 42.0164,-71.2366 42.01,-71.2144 42.002,-71.1939 41.9921,-71.1721 41.9799,-71.1497 41.968,-71.1258 41.9584,-71.0996 41.9529,-71.0885 41.9518,-71.0774 41.9505,-71.0664 41.9487,-71.0558 41.9461,-71.0396 41.9388,-71.0114 41.9248,-70.9881 41.913,-70.9648 41.9012,-70.9621 41.8996,-70.9593 41.898,-70.9565 41.8964,-70.9538 41.8948,-70.9471 41.8895,-70.9414 41.8836,-70.9354 41.8778,-70.9281 41.8729,-70.9106 41.866,-70.8913 41.8605,-70.8718 41.8548,-70.8537 41.8476,-70.8447 41.8425,-70.8362 41.8369,-70.8276 41.8313,-70.8188 41.8261,-70.7962 41.8154,-70.7739 41.806,-70.752 41.796,-70.7306 41.7833)
+LINESTRING(-70.5858 41.7429,-70.6007 41.7714,-70.625 41.7761,-70.6518 41.7701,-70.6741 41.7662,-70.6887 41.7689,-70.7026 41.7736,-70.7164 41.7789,-70.7306 41.7833)
+LINESTRING(-69.9924 41.7832,-70.0022 41.7634,-70.0154 41.7453,-70.03 41.7278,-70.0444 41.7098,-70.0598 41.7041,-70.0861 41.7033,-70.1135 41.7048,-70.1318 41.7062,-70.1642 41.7034,-70.1933 41.694,-70.2213 41.6828,-70.2505 41.6741,-70.2683 41.6729,-70.29 41.6737,-70.3126 41.6749,-70.3329 41.6749,-70.3394 41.6741,-70.3486 41.6727,-70.3573 41.6714,-70.3624 41.6711,-70.3826 41.6807,-70.4017 41.6975,-70.4214 41.715,-70.4433 41.7264,-70.4576 41.7303,-70.4751 41.735,-70.4927 41.7389,-70.5071 41.7405,-70.5175 41.7477,-70.5264 41.7553,-70.5346 41.7633,-70.543 41.7716,-70.5779 41.8094,-70.597 41.8414,-70.6059 41.8666,-70.6099 41.8834,-70.6174 41.903,-70.6285 41.9142,-70.6464 41.9206,-70.6745 41.9261,-70.6834 41.9318,-70.6986 41.9438,-70.7141 41.9566,-70.724 41.9646,-70.7326 41.9791,-70.7376 42.0016,-70.7394 42.0244,-70.7386 42.0397,-70.7447 42.075,-70.7719 42.1057,-70.8097 42.1316,-70.8478 42.1523,-70.8573 42.1561,-70.868 42.1589,-70.879 42.1615,-70.8892 42.1643,-70.914 42.1744,-70.9355 42.1851,-70.9584 42.1954,-70.9879 42.2042,-70.9943 42.2096,-70.9977 42.2182,-71.0042 42.2258,-71.0199 42.228)
+LINESTRING(-72.0711 42.1322,-72.0295 42.1359,-71.9612 42.154,-71.892 42.175,-71.848 42.1871)
+LINESTRING(-74.0173 42.7923,-74.0225 42.7988,-74.0276 42.7982,-74.0278 42.8046,-74.0631 42.8357,-74.1067 42.8562,-74.1557 42.871,-74.2068 42.8851,-74.2186 42.889,-74.2315 42.8933,-74.2445 42.8972,-74.2566 42.8997,-74.2727 42.9,-74.2899 42.8983,-74.3068 42.8966,-74.3223 42.8971,-74.3322 42.8994,-74.3417 42.9027,-74.3513 42.9061,-74.3609 42.9088,-74.3653 42.9095,-74.3699 42.91,-74.3743 42.9107,-74.3784 42.9122,-74.4146 42.9012,-74.4437 42.8786,-74.478 42.8594,-74.5299 42.8588,-74.5375 42.8609,-74.5451 42.8636,-74.5527 42.8663,-74.5604 42.8686,-74.5767 42.871,-74.5934 42.872,-74.61 42.8737,-74.6259 42.8781,-74.639 42.8959,-74.6547 42.918,-74.6725 42.9383,-74.692 42.9504,-74.7061 42.9511,-74.7201 42.9518,-74.7342 42.9522,-74.7483 42.9525,-74.7808 42.968,-74.8066 42.9771,-74.8348 42.9796,-74.8746 42.9755,-74.8816 42.9737,-74.887 42.9715,-74.8939 42.9701,-74.9053 42.9702,-74.9357 42.9731,-74.9721 42.9773,-75.0089 42.9823,-75.0404 42.9875,-75.0442 42.991,-75.0472 42.9946,-75.05 42.9981,-75.0529 43.0017,-75.0648 43.0129,-75.0773 43.0219,-75.0904 43.0302,-75.104 43.0396,-75.1126 43.041,-75.1222 43.044,-75.1317 43.0476,-75.1397 43.0511,-75.1775 43.0657,-75.2152 43.0778,-75.2528 43.0894,-75.2906 43.1023,-75.2989 43.0997,-75.3076 43.0962,-75.3161 43.0931,-75.3239 43.0914,-75.3323 43.092,-75.3386 43.0941,-75.3448 43.0965,-75.3533 43.0979,-75.3656 43.0967,-75.3778 43.0937,-75.3902 43.0913,-75.403 43.0917,-75.4276 43.0975,-75.4506 43.103,-75.4742 43.1072,-75.5008 43.109,-75.5629 43.1056,-75.6265 43.0971,-75.6898 43.0876,-75.7507 43.0811,-75.781 43.0816,-75.8101 43.0852,-75.8391 43.0897,-75.8692 43.0927,-75.9426 43.0943,-76.0161 43.0937,-76.0896 43.0932,-76.1631 43.095)
+LINESTRING(-75.982 44.2993,-75.9737 44.2878,-75.8757 44.1568,-75.9131 44.0852,-75.9158 44.0059,-75.9449 43.989,-75.965 43.9425,-76.0191 43.8808,-76.0471 43.8035,-76.0767 43.7376,-76.075 43.6565,-76.1242 43.5056,-76.1155 43.3769,-76.1326 43.2557,-76.109 43.1399,-76.1631 43.095)
+LINESTRING(-84.7315 45.7422,-84.7205 45.7113,-84.6962 45.6916,-84.6678 45.6768,-84.6444 45.6605,-84.6369 45.6459,-84.6308 45.6246,-84.6264 45.6033,-84.6236 45.5889,-84.6178 45.5585,-84.6144 45.533,-84.6123 45.5074,-84.6104 45.4769,-84.6067 45.4661,-84.5985 45.4464,-84.5897 45.4251,-84.5839 45.4096,-84.5831 45.3927,-84.5882 45.3762,-84.595 45.3597,-84.5994 45.3431,-84.598 45.3279,-84.5923 45.3123,-84.5853 45.2967,-84.5798 45.2816,-84.6022 45.2505,-84.6213 45.2256,-84.6423 45.2024,-84.6701 45.1768,-84.6729 45.1596,-84.6775 45.1431,-84.6832 45.1266,-84.6894 45.1095,-84.6911 45.1062,-84.6935 45.1029,-84.6959 45.0996,-84.6975 45.0964,-84.7 45.0774,-84.7009 45.0447,-84.6969 45.0131,-84.6847 44.9971,-84.6718 44.9774,-84.6733 44.9557,-84.6815 44.9336,-84.6882 44.9122,-84.6879 44.9006,-84.6851 44.8885,-84.6826 44.8762,-84.6831 44.8642,-84.6896 44.8534,-84.6995 44.8445,-84.7091 44.8315,-84.7148 44.8081,-84.7148 44.7906,-84.7127 44.7729,-84.7096 44.7552,-84.7064 44.7378,-84.7008 44.7141,-84.6953 44.6906,-84.6955 44.6674,-84.707 44.6446,-84.706 44.6295,-84.7064 44.6143,-84.7071 44.5991,-84.7073 44.5839)
+LINESTRING(-73.821 42.53,-73.8229 42.551,-73.8265 42.5678,-73.8282 42.5838,-73.8241 42.6018,-73.8223 42.6091,-73.8231 42.6159,-73.8254 42.6227,-73.8286 42.6304,-73.8271 42.6353,-73.8262 42.6475,-73.8315 42.6627,-73.8482 42.677,-73.8478 42.6819,-73.8459 42.6872,-73.8434 42.6925,-73.8409 42.6969)
+LINESTRING(-71.8681 42.025,-71.8695 42.0303,-71.868 42.0481,-71.8632 42.0657,-71.858 42.0834,-71.8556 42.1012,-71.8574 42.116,-71.8607 42.1314,-71.863 42.1467,-71.8615 42.1612,-71.8581 42.1676,-71.8548 42.1741,-71.8514 42.1806,-71.848 42.1871)
+LINESTRING(-71.3774 41.8922,-71.3712 41.8967,-71.3576 41.9034,-71.3422 41.9117,-71.3304 41.9213,-71.3173 41.9443,-71.3061 41.9727,-71.2954 42.0004,-71.2839 42.0211)
+LINESTRING(-123.365 43.1586,-123.371 43.1635,-123.377 43.1684,-123.384 43.1733,-123.39 43.1782,-123.392 43.1986,-123.39 43.2317,-123.387 43.2656,-123.383 43.2884,-123.379 43.304,-123.372 43.3194,-123.365 43.3346,-123.36 43.3497,-123.357 43.363,-123.356 43.3763,-123.355 43.3898,-123.35 43.4032,-123.345 43.4131,-123.339 43.4228,-123.333 43.4327,-123.327 43.4426,-123.331 43.4487,-123.327 43.4562,-123.321 43.4639,-123.317 43.4705,-123.326 43.4876,-123.321 43.5053,-123.308 43.522,-123.293 43.5361,-123.284 43.5605,-123.266 43.5769,-123.243 43.5917,-123.221 43.611,-123.22 43.6187,-123.22 43.6272,-123.221 43.6355,-123.219 43.6429,-123.212 43.6563,-123.206 43.6672,-123.202 43.6789,-123.201 43.6947,-123.202 43.7001,-123.2 43.7159,-123.191 43.7309,-123.179 43.7443,-123.164 43.7533,-123.149 43.7532,-123.133 43.749,-123.114 43.7468,-123.092 43.7525,-123.045 43.7979,-123.017 43.8675,-123.004 43.9406,-123.005 43.996,-123.013 44.0005,-123.023 44.0177,-123.035 44.0269,-123.045 44.0401,-123.047 44.0695,-123.045 44.0854,-123.043 44.1011,-123.043 44.1169,-123.046 44.1329,-123.05 44.1426,-123.056 44.1533,-123.061 44.1638,-123.063 44.1732,-123.061 44.2871,-123.06 44.401,-123.059 44.515,-123.06 44.6288)
+LINESTRING(-73.821 42.53,-73.7878 42.522,-73.7431 42.5067,-73.7018 42.4924,-73.6786 42.487,-73.6769 42.486,-73.6753 42.4849,-73.6736 42.4839,-73.6719 42.4828,-73.6442 42.4838,-73.6107 42.4735,-73.5786 42.4578,-73.5555 42.443,-73.5544 42.4379,-73.5533 42.4328,-73.5518 42.4278,-73.5498 42.4229)
+LINESTRING(-72.0711 42.1322,-72.0734 42.129,-72.0753 42.1237,-72.079 42.1097,-72.0835 42.0971,-72.0893 42.085,-72.096 42.0753,-72.1115 42.0599,-72.1285 42.0442,-72.1423 42.0307)
+LINESTRING(-72.0711 42.1322,-72.0744 42.1338,-72.0779 42.1352,-72.0816 42.1363,-72.0854 42.1372,-72.1279 42.1372,-72.1581 42.1516,-72.1827 42.1697,-72.2089 42.1806,-72.2319 42.18,-72.2506 42.1743,-72.2651 42.1678,-72.2756 42.1648,-72.2868 42.1658,-72.298 42.1676,-72.3093 42.1694,-72.3209 42.17,-72.3325 42.1708,-72.3419 42.1734,-72.3509 42.1768,-72.3616 42.1796,-72.3998 42.1866,-72.4306 42.1895,-72.4678 42.1878,-72.5251 42.1807,-72.5452 42.1823,-72.5593 42.1881,-72.5735 42.1894,-72.5938 42.1774,-72.6019 42.1718,-72.6168 42.1622,-72.6326 42.1535,-72.643 42.1503)
+LINESTRING(-72.643 42.1503,-72.6424 42.1626,-72.6441 42.1879,-72.6459 42.2153,-72.6457 42.2338,-72.6433 42.2466,-72.641 42.2594,-72.6377 42.2739,-72.6347 42.2825,-72.6266 42.2901,-72.6173 42.2961,-72.6096 42.3025,-72.606 42.3119,-72.6073 42.3137,-72.609 42.3153,-72.6108 42.3169,-72.6123 42.3186,-72.6464 42.344,-72.6489 42.3803,-72.6375 42.4207,-72.6301 42.4584,-72.635 42.5111,-72.639 42.5491,-72.6293 42.5842,-72.593 42.6278)
+LINESTRING(-71.3736 41.8166,-71.3567 41.8123,-71.3427 41.8074)
+LINESTRING(-73.4183 42.3379,-73.469 42.3677,-73.5224 42.4002,-73.5498 42.4229)
+LINESTRING(-71.4151 41.816,-71.4081 41.8176)
+LINESTRING(-71.4151 41.816,-71.4177 41.8191,-71.4193 41.8215,-71.4196 41.8241,-71.4188 41.8278,-71.4142 41.8388,-71.4097 41.8497,-71.4038 41.8632,-71.4008 41.8695,-71.396 41.8719,-71.3901 41.8725,-71.3841 41.8728,-71.3792 41.8745,-71.3788 41.879,-71.3783 41.8834,-71.3778 41.8878,-71.3774 41.8922,-71.3774 41.8922)
+LINESTRING(-73.291 42.3121,-73.3052 42.3129,-73.3194 42.3137,-73.3335 42.3144,-73.3477 42.3152,-73.3553 42.3158,-73.3689 42.3158,-73.3824 42.3161,-73.3891 42.3177,-73.4158 42.3364,-73.4183 42.3379)
+LINESTRING(-92.4707 46.6685,-92.4929 46.6526,-92.5167 46.638,-92.5371 46.6218,-92.5491 46.6012,-92.5534 46.5997,-92.5981 46.5678,-92.6453 46.5305,-92.6906 46.4923,-92.7279 46.4584,-92.7379 46.4466,-92.7462 46.4335,-92.754 46.4201,-92.7621 46.4077,-92.7739 46.3944,-92.7874 46.3814,-92.8007 46.368,-92.8114 46.3539,-92.8244 46.3107,-92.8246 46.2663,-92.8288 46.2222,-92.8539 46.18,-92.8607 46.1741,-92.868 46.1685,-92.8753 46.1626,-92.8824 46.1559,-92.8882 46.1438,-92.8897 46.1284,-92.8897 46.1128,-92.8908 46.0996,-92.892 46.0967,-92.8932 46.0937,-92.8945 46.0907,-92.8957 46.0877,-92.905 46.0689,-92.9156 46.0498,-92.9249 46.0305,-92.9302 46.011,-92.9308 46.0065,-92.9316 46.002,-92.9331 45.9975,-92.9356 45.9932,-92.9392 45.9896,-92.9449 45.985,-92.9511 45.9808,-92.9561 45.9781,-92.967 45.9251,-92.9764 45.873,-92.9831 45.8206,-92.9858 45.7669,-92.9878 45.6465,-92.9915 45.5263,-92.9962 45.4061,-93.0012 45.286)
+LINESTRING(-72.643 42.1503,-72.6543 42.15,-72.6656 42.1491,-72.6767 42.1482,-72.6876 42.148,-72.6972 42.149,-72.7073 42.1507,-72.7175 42.1524,-72.7273 42.1536,-72.7498 42.1541,-72.7741 42.154,-72.7981 42.1542,-72.8195 42.1558,-72.84 42.1599,-72.8631 42.166,-72.8866 42.1725,-72.9085 42.1776,-72.9297 42.1886,-72.9493 42.2072,-72.9694 42.2253,-72.9927 42.2348,-73.0666 42.2478,-73.1088 42.2653,-73.1385 42.283,-73.1751 42.2967,-73.2022 42.3024,-73.2321 42.3077,-73.2625 42.3113,-73.291 42.3121)
+LINESTRING(-71.3427 41.8074,-71.3412 41.8068,-71.3276 41.8005,-71.3142 41.7935,-71.3008 41.7867,-71.2871 41.7809,-71.2726 41.7767,-71.2601 41.7738,-71.2479 41.7699,-71.2348 41.7627,-71.2065 41.7396,-71.1877 41.7226)
+LINESTRING(-71.1877 41.7226,-71.1738 41.7101,-71.1643 41.7023)
+LINESTRING(-72.643 42.1503,-72.6285 42.1427,-72.6126 42.136,-72.5965 42.13,-72.5781 42.123,-72.5677 42.1202,-72.5545 42.1173,-72.5416 42.1141,-72.5323 42.11,-72.5233 42.1013,-72.5187 42.092,-72.517 42.0818,-72.5168 42.0706,-72.5167 42.0626,-72.5164 42.055,-72.516 42.0475,-72.516 42.0395,-72.5161 42.0348)
+LINESTRING(-89.6954 45.1986,-89.711 45.1825,-89.7182 45.1669,-89.7194 45.1504,-89.7168 45.1315,-89.7035 45.1303,-89.6903 45.1291,-89.677 45.1279,-89.6637 45.1267,-89.6651 45.119,-89.6666 45.1113,-89.668 45.1035,-89.6694 45.0958,-89.672 45.0916,-89.6767 45.0886,-89.682 45.0857,-89.6861 45.0819,-89.6891 45.0762,-89.6909 45.0708,-89.692 45.0652,-89.6931 45.0591,-89.6953 45.047,-89.6975 45.035,-89.6996 45.023,-89.7018 45.011,-89.7035 45.0016,-89.7043 44.9929,-89.7034 44.9845,-89.7002 44.9758,-89.6941 44.9633,-89.6909 44.9554)
+LINESTRING(-96.8434 45.936,-96.8468 45.9227,-96.8501 45.9162,-96.8542 45.9096,-96.8581 45.9029,-96.8606 45.8965,-96.8635 45.8751,-96.8639 45.8529,-96.8649 45.8309,-96.8693 45.8097,-96.8821 45.7869,-96.9038 45.7572,-96.9273 45.728,-96.9454 45.7069,-96.9566 45.6961,-96.9694 45.6853,-96.9814 45.6742,-96.9901 45.6623,-96.9909 45.6541,-96.9908 45.6391,-96.9904 45.6269,-96.99 45.6147,-96.9901 45.6124,-96.9881 45.5733,-96.9854 45.5276,-96.9853 45.4824,-96.9912 45.4446,-97.0001 45.4326,-97.0192 45.4101,-97.04 45.3867,-97.054 45.3721,-97.0532 45.3591,-97.0524 45.346,-97.0517 45.333,-97.0509 45.3202)
+LINESTRING(-89.6064 44.827,-89.5999 44.8343,-89.5935 44.8417,-89.5853 44.8515,-89.5761 44.8632,-89.5685 44.8709,-89.564 44.8789,-89.5595 44.8869,-89.5519 44.8949,-89.5442 44.8991,-89.5355 44.9009,-89.526 44.901,-89.5157 44.9002,-89.5115 44.8998,-89.5073 44.8995,-89.5031 44.8991,-89.4989 44.8987,-89.4946 44.8985,-89.4908 44.8986,-89.487 44.8986,-89.4828 44.8984,-89.4727 44.8975,-89.4626 44.8966,-89.4526 44.8956,-89.4434 44.8948)
+LINESTRING(-89.6909 44.9554,-89.6899 44.9529,-89.6856 44.9425,-89.6796 44.93,-89.6643 44.901,-89.6499 44.8754,-89.632 44.8514,-89.6064 44.827)
+LINESTRING(-118.805 45.663,-118.789 45.6592,-118.767 45.6627,-118.751 45.6634,-118.734 45.6621,-118.712 45.6595,-118.688 45.644,-118.664 45.6224,-118.64 45.6033,-118.617 45.5951,-118.602 45.5875,-118.591 45.5819,-118.555 45.5843,-118.515 45.5937,-118.476 45.5959,-118.453 45.58,-118.453 45.5709,-118.457 45.5623,-118.461 45.5537,-118.461 45.5444,-118.445 45.5285,-118.416 45.4976,-118.389 45.4672,-118.377 45.453,-118.378 45.4462,-118.367 45.4356,-118.357 45.4246,-118.347 45.4136,-118.337 45.403,-118.325 45.3935,-118.313 45.3843,-118.301 45.375,-118.29 45.3648,-118.262 45.3665,-118.23 45.3746,-118.2 45.3839,-118.176 45.3889,-118.167 45.3884,-118.145 45.3866,-118.118 45.3831,-118.093 45.3776,-118.057 45.3561,-118.039 45.3255,-118.029 45.2901,-118.017 45.2545,-118.016 45.2463,-118.017 45.2346,-118.02 45.2231,-118.024 45.2158,-118.023 45.2094,-118.019 45.2027,-118.014 45.1969,-118 45.1909,-117.986 45.1848,-117.973 45.1773,-117.964 45.1708,-117.961 45.1602,-117.962 45.1488,-117.964 45.1387,-117.965 45.132,-117.945 45.0591,-117.922 45.0149,-117.884 44.9748,-117.816 44.914,-117.812 44.8865,-117.81 44.8492,-117.81 44.8106,-117.809 44.7792,-117.809 44.7734,-117.81 44.7677,-117.81 44.7618,-117.809 44.7563,-117.804 44.7501,-117.793 44.7399,-117.782 44.7298,-117.775 44.7242,-117.764 44.7186,-117.752 44.7141,-117.723 44.7027,-117.692 44.6898,-117.661 44.6777,-117.631 44.6687,-117.609 44.6639,-117.575 44.6566,-117.542 44.649,-117.523 44.6435,-117.502 44.6286,-117.47 44.6027,-117.439 44.5765,-117.422 44.5609,-117.418 44.5546,-117.415 44.5484,-117.411 44.5422,-117.405 44.5363,-117.397 44.5309,-117.387 44.5266,-117.378 44.5227,-117.367 44.5119,-117.364 44.5044,-117.362 44.4967,-117.358 44.4896,-117.346 44.4852,-117.332 44.4658,-117.322 44.4487,-117.309 44.4261,-117.304 44.4148,-117.298 44.3779,-117.29 44.3464,-117.269 44.3193,-117.224 44.2957,-117.219 44.2862,-117.206 44.2738,-117.19 44.2624,-117.178 44.2562,-117.178 44.242,-117.172 44.2322,-117.162 44.2237,-117.15 44.2136,-117.142 44.2001,-117.137 44.1849,-117.129 44.1673,-117.112 44.1465,-117.102 44.1386,-117.091 44.1315,-117.079 44.1247,-117.068 44.1175,-117.039 44.0956,-117.007 44.0711,-116.977 44.046,-116.952 44.0249)
+LINESTRING(-116.952 44.0249,-116.955 44.0225)
+LINESTRING(-87.6632 45.1145,-87.6726 45.1072,-87.6849 45.0913,-87.6987 45.0742,-87.7132 45.0633,-87.7438 45.0576,-87.7774 45.0561,-87.808 45.0521,-87.8294 45.0387,-87.8324 45.0315,-87.8356 45.0242,-87.8469 45.0074,-87.8547 44.9917,-87.8592 44.9802,-87.8638 44.9709,-87.8667 44.9602,-87.8691 44.9475,-87.8706 44.937,-87.8785 44.9076,-87.8919 44.879,-87.9075 44.851,-87.9217 44.823,-87.9586 44.811,-87.9956 44.8049,-88.0281 44.7991,-88.0518 44.788,-88.0527 44.7551,-88.0518 44.7212,-88.0505 44.6872,-88.0505 44.6542)
+LINESTRING(-77.648 43.0482,-77.6247 43.0529,-77.5993 43.0542,-77.5742 43.0539,-77.5463 43.05,-77.5103 43.0401,-77.4499 43.0165,-77.4139 43.0066,-77.1672 42.9558,-77.1157 42.9446,-77.0915 42.9399,-77.0634 42.9355,-77.0365 42.9329,-77.007 42.9316,-76.9775 42.9319,-76.9507 42.9341,-76.8965 42.9402,-76.8521 42.9451,-76.8085 42.9521,-76.7568 42.9647,-76.7253 42.9742,-76.6989 42.9831,-76.672 42.9911,-76.6394 42.9984,-76.6267 43.0006,-76.6146 43.0032,-76.6028 43.0064,-76.5909 43.0105,-76.571 43.0152,-76.5488 43.0174,-76.5255 43.0199,-76.5022 43.026,-76.4756 43.0403,-76.4485 43.049,-76.4193 43.055,-76.3863 43.0613,-76.3717 43.0673,-76.3606 43.076,-76.3497 43.0845,-76.3356 43.0903,-76.2961 43.0996,-76.2604 43.107,-76.2242 43.1106,-76.1631 43.095)
+LINESTRING(-116.955 44.0225,-116.944 44.0107,-116.942 44.0081)
+LINESTRING(-91.7307 45.4148,-91.7149 45.3894,-91.6902 45.3664,-91.6645 45.3446,-91.6453 45.3225,-91.6299 45.2974,-91.6101 45.2669,-91.5926 45.2404,-91.5751 45.214,-91.573 45.2092,-91.5721 45.2047,-91.5704 45.2,-91.5654 45.1945,-91.5523 45.1852,-91.5397 45.1773,-91.5292 45.1681,-91.5221 45.1549,-91.5219 45.1452,-91.5239 45.1334,-91.5248 45.1216,-91.5215 45.112,-91.5144 45.1052,-91.5058 45.099,-91.4968 45.093,-91.4884 45.0869,-91.4763 45.0742,-91.4715 45.0636,-91.4687 45.0534,-91.4626 45.0421,-91.4582 45.0377,-91.4529 45.0333,-91.4481 45.0287,-91.4453 45.0236,-91.4435 45.013,-91.4431 45.0016,-91.4432 44.9905,-91.4433 44.9794,-91.4316 44.9669,-91.4283 44.9539,-91.4294 44.9404,-91.4308 44.9261)
+LINESTRING(-116.942 44.0081,-116.934 43.9989,-116.923 43.9871,-116.912 43.9754)
+LINESTRING(-107.436 45.5783,-107.424 45.5539,-107.407 45.5318,-107.391 45.5096,-107.38 45.4846,-107.358 45.3708,-107.343 45.2657,-107.325 45.1611,-107.294 45.0486,-107.267 45.0099,-107.251 45.0008)
+LINESTRING(-112.65 46.0082,-112.664 45.9713,-112.674 45.9381,-112.683 45.905,-112.696 45.8681,-112.704 45.8406,-112.706 45.8166,-112.703 45.7924,-112.697 45.7645,-112.688 45.747,-112.673 45.7322,-112.659 45.7174,-112.649 45.6999,-112.63 45.6687,-112.614 45.6392,-112.606 45.6127,-112.609 45.5903,-112.626 45.5629,-112.673 45.5377,-112.722 45.5194,-112.744 45.5122,-112.752 45.4934,-112.754 45.4736,-112.753 45.4545,-112.755 45.438,-112.762 45.419,-112.771 45.4017,-112.776 45.382,-112.773 45.3559,-112.76 45.3279,-112.736 45.2981,-112.713 45.2682,-112.699 45.2402,-112.705 45.2011,-112.732 45.1678,-112.772 45.1378,-112.811 45.1084,-112.819 45.1041,-112.834 45.0924,-112.848 45.075,-112.852 45.0538,-112.837 45.0283,-112.812 44.998,-112.79 44.968,-112.787 44.943,-112.809 44.9061,-112.828 44.8795,-112.838 44.8515,-112.835 44.8105,-112.832 44.7966,-112.828 44.7842,-112.824 44.7726,-112.82 44.7612,-112.807 44.7345,-112.789 44.7071,-112.766 44.6809,-112.734 44.6568,-112.676 44.6338,-112.614 44.624,-112.549 44.6173,-112.484 44.6035,-112.363 44.5552,-112.34 44.5396)
+LINESTRING(-93.0012 45.286,-93.0018 45.2764,-93.0066 45.2692,-93.0139 45.2627,-93.0221 45.2551,-93.0229 45.2317,-93.0253 45.1981,-93.0286 45.1657,-93.032 45.1459,-93.0361 45.1392,-93.0422 45.1331,-93.0481 45.127,-93.0515 45.12,-93.0522 45.112,-93.0516 45.1038,-93.0508 45.0956,-93.0505 45.0875,-93.0519 45.0747,-93.0548 45.0621,-93.0581 45.0496,-93.0611 45.0369,-93.0672 45.0374,-93.0735 45.0375,-93.0798 45.0371,-93.0857 45.0361,-93.0852 45.0156,-93.0866 44.9952,-93.0878 44.9747,-93.0862 44.9539,-93.0806 44.9565,-93.0755 44.9597,-93.0706 44.9631,-93.0661 44.9666,-93.061 44.9628,-93.0558 44.959,-93.0507 44.9553,-93.0456 44.9515,-92.9966 44.9522,-92.9468 44.9509,-92.897 44.9489,-92.8477 44.9475,-92.8244 44.9497,-92.8027 44.9552,-92.7816 44.9612,-92.7599 44.9648,-92.7527 44.9653)
+LINESTRING(-88.0505 44.6542,-88.0536 44.6394,-88.0567 44.6246,-88.0597 44.6099,-88.0628 44.5951,-88.0658 44.5852,-88.0707 44.5767,-88.0776 44.5691,-88.0868 44.5619,-88.0919 44.5568,-88.0986 44.5481,-88.1057 44.5375,-88.1124 44.5264)
+LINESTRING(-72.5161 42.0348,-72.5164 42.0194,-72.5176 42.0021,-72.5211 41.985,-72.5285 41.9659,-72.5358 41.9555,-72.5469 41.9469,-72.5604 41.9404,-72.5753 41.9365,-72.5924 41.9328,-72.6069 41.9277,-72.6202 41.9209,-72.6338 41.9124,-72.6421 41.9052,-72.6471 41.8976,-72.6509 41.8894,-72.6555 41.8802,-72.6616 41.8707,-72.6671 41.8624,-72.6722 41.854,-72.6772 41.8442,-72.678 41.8273,-72.6694 41.8118,-72.6609 41.7962,-72.6617 41.7793,-72.6622 41.7744,-72.6618 41.768,-72.6621 41.7623,-72.6647 41.7591)
+LINESTRING(-84.7073 44.5839,-84.6977 44.5514,-84.6715 44.52,-84.6378 44.4912,-84.6061 44.4662,-84.5998 44.4607,-84.5979 44.442,-84.5964 44.422,-84.5938 44.4021,-84.5885 44.3839,-84.53 44.3327,-84.4358 44.3156,-84.329 44.299,-84.233 44.2497,-84.2099 44.2244,-84.1917 44.1983,-84.1748 44.1717,-84.1556 44.1449,-84.1371 44.1219,-84.1187 44.0989,-84.1002 44.0759,-84.0818 44.0529,-84.0755 44.0498,-84.0693 44.0467,-84.0637 44.0242,-84.0569 44.0127,-84.0447 44.0035,-84.0231 43.988)
+LINESTRING(-93.2984 44.8918,-93.2785 44.8959,-93.2516 44.8981,-93.2245 44.8988,-93.2037 44.8981,-93.1998 44.896,-93.1959 44.894,-93.1918 44.8921,-93.0862 44.9539)
+LINESTRING(-94.2887 45.5191,-94.2763 45.5089,-94.2689 45.5031,-94.2399 45.4953,-94.2142 45.4871,-94.1901 45.4776,-94.1708 45.4686,-94.1576 45.4529,-94.1465 45.4368,-94.1341 45.421,-94.117 45.4063,-94.0972 45.3945,-94.0613 45.3738,-94.036 45.3594,-94.0107 45.345,-93.9776 45.3347,-93.9435 45.326,-93.9095 45.3169,-93.8769 45.3053,-93.8632 45.2984,-93.8502 45.2908,-93.8374 45.283,-93.8243 45.2757,-93.8093 45.2702,-93.7921 45.2665,-93.7744 45.2631,-93.7579 45.2588,-93.74 45.2513,-93.7233 45.2424,-93.7071 45.2329,-93.6907 45.2239,-93.673 45.2167,-93.6546 45.2113,-93.6365 45.2062,-93.6195 45.1998,-93.5967 45.1906,-93.5723 45.1825,-93.5481 45.174,-93.5257 45.164,-93.5135 45.1399,-93.4962 45.1237,-93.4742 45.1099,-93.4477 45.0928,-93.4312 45.0896,-93.4154 45.0858,-93.3997 45.082,-93.3838 45.0787,-93.3707 45.077,-93.3607 45.0769,-93.351 45.0769,-93.3385 45.0755,-93.3304 45.0624,-93.3203 45.0326,-93.3067 44.9961,-93.2882 44.9632,-93.2841 44.9484,-93.2849 44.9328,-93.2899 44.9145,-93.2984 44.8918)
+LINESTRING(-92.7527 44.9653,-92.736 44.9663,-92.7095 44.9675,-92.6831 44.968,-92.6595 44.9672,-92.636 44.9658,-92.6092 44.9641,-92.5829 44.9615,-92.561 44.9571,-92.5509 44.9535,-92.5403 44.9492,-92.5294 44.9454,-92.5185 44.9435,-92.5037 44.9434,-92.4886 44.9441,-92.4734 44.945,-92.4586 44.9453,-92.4472 44.9443,-92.4359 44.9424,-92.4248 44.9404,-92.4138 44.939,-92.3548 44.9362,-92.2955 44.9355,-92.2361 44.9355,-92.177 44.9348,-92.1523 44.9322,-92.1288 44.9271,-92.1061 44.9219,-92.0835 44.9188,-92.071 44.9193,-92.0521 44.9209,-92.0343 44.9225,-92.025 44.9231,-92.0039 44.9185,-91.9849 44.9129,-91.9654 44.9088,-91.9426 44.9086,-91.9383 44.9087,-91.9339 44.9082,-91.9295 44.9075,-91.9252 44.9071,-91.89 44.9071,-91.8529 44.9075,-91.816 44.9069,-91.7814 44.9042,-91.7745 44.9025,-91.7669 44.8998,-91.7598 44.8968,-91.7527 44.8939,-91.7356 44.8866,-91.719 44.8788,-91.7024 44.871,-91.6853 44.8638,-91.6585 44.855,-91.6318 44.8477,-91.6056 44.8396,-91.5806 44.8285,-91.564 44.8151,-91.5525 44.7998,-91.5396 44.7845,-91.519 44.7715,-91.4973 44.7665,-91.4711 44.7657,-91.4441 44.7666,-91.4199 44.767)
+LINESTRING(-72.1099 41.547,-72.0762 41.5767,-72.0376 41.5845,-71.998 41.5872,-71.9616 41.6018,-71.9483 41.6239,-71.9324 41.6471,-71.9179 41.669,-71.9093 41.6869,-71.9048 41.6998,-71.8981 41.7151,-71.8897 41.7301,-71.8805 41.7417,-71.8804 41.7543,-71.8753 41.7661,-71.8725 41.7785,-71.8788 41.793,-71.8737 41.8053,-71.8749 41.82,-71.8795 41.8349,-71.8845 41.8476,-71.8899 41.8605,-71.8951 41.8738,-71.8992 41.8873,-71.9007 41.9008,-71.9003 41.9026,-71.8959 41.9151,-71.8899 41.9267,-71.8843 41.9386,-71.8805 41.9518,-71.88 41.9544,-71.8795 41.957,-71.8786 41.9595,-71.8773 41.9619,-71.8717 41.9697,-71.8657 41.9771,-71.8606 41.9848,-71.8579 41.9936,-71.8591 42.0027,-71.8629 42.0121,-71.8671 42.0214,-71.8681 42.025)
+LINESTRING(-71.7967 41.4462,-71.7293 41.4881,-71.6948 41.5105,-71.6878 41.5187,-71.6821 41.527,-71.6774 41.5357,-71.6737 41.5449,-71.6658 41.5714,-71.6548 41.6037,-71.6374 41.6332,-71.6106 41.6512,-71.6038 41.6515,-71.5971 41.6505,-71.5905 41.6497,-71.5837 41.6503,-71.5623 41.657,-71.5427 41.664,-71.5227 41.6694,-71.4999 41.6713,-71.4907 41.6781,-71.4865 41.6895,-71.4843 41.7021,-71.4811 41.7126,-71.4775 41.7182,-71.4733 41.7235,-71.4651 41.7319,-71.4467 41.7482,-71.4385 41.7567,-71.4339 41.7637,-71.4266 41.7786,-71.4219 41.7856,-71.4189 41.7925,-71.4168 41.8028,-71.4151 41.816)
+LINESTRING(-72.1423 42.0307,-72.1449 42.0281,-72.1585 42.0116,-72.1668 41.9991,-72.1751 41.9865,-72.1841 41.9743,-72.1946 41.9626,-72.211 41.9506,-72.2424 41.9291,-72.2742 41.9079,-72.2917 41.897,-72.3148 41.8866,-72.3379 41.8763,-72.3609 41.8659,-72.3836 41.8549,-72.3972 41.8545,-72.4108 41.8541,-72.4264 41.853,-72.436 41.8508,-72.4704 41.835,-72.511 41.8193,-72.5478 41.8016,-72.5708 41.78,-72.5872 41.7737,-72.6107 41.7688,-72.6353 41.766,-72.6551 41.7658,-72.6533 41.7649,-72.6349 41.7424,-72.6099 41.7249,-72.5817 41.7097,-72.5535 41.6946,-72.5442 41.6879,-72.5366 41.6805,-72.5295 41.6729,-72.5216 41.6656,-72.5077 41.6568,-72.4908 41.6488,-72.4733 41.6409,-72.4577 41.6325,-72.4442 41.6229,-72.4333 41.6134,-72.4232 41.6033,-72.4123 41.592,-72.3994 41.5888,-72.3862 41.5864,-72.373 41.584,-72.3601 41.5811,-72.3515 41.5772,-72.3404 41.571,-72.3292 41.5655,-72.3203 41.5633,-72.3137 41.5653,-72.3065 41.567,-72.2996 41.5687,-72.2938 41.571,-72.2506 41.5675,-72.2184 41.5691,-72.1909 41.5687,-72.1619 41.5594,-72.1559 41.5596,-72.1497 41.5604,-72.1437 41.5616,-72.138 41.563,-72.1357 41.5625,-72.1334 41.562,-72.1311 41.5616,-72.1288 41.5611,-72.1257 41.5568,-72.121 41.5529,-72.1155 41.5495,-72.1099 41.547)
+LINESTRING(-72.6647 41.7591,-72.6751 41.7412,-72.6809 41.7324,-72.6847 41.7236,-72.6845 41.7137,-72.6806 41.7069,-72.6748 41.7009,-72.6705 41.6948,-72.6706 41.6879,-72.6776 41.6699,-72.6841 41.6431,-72.6904 41.6249)
+LINESTRING(-93.538 44.8112,-93.5185 44.8391,-93.4951 44.8455,-93.4715 44.8437,-93.4514 44.8471,-93.4471 44.8481,-93.4358 44.8532,-93.4203 44.8649,-93.4033 44.8861,-93.3866 44.8948,-93.359 44.8954,-93.3274 44.8927,-93.2984 44.8918)
+LINESTRING(-88.1124 44.5264,-88.1214 44.5051,-88.1343 44.4822,-88.149 44.4599,-88.1632 44.4402,-88.1789 44.4213,-88.208 44.3899,-88.2406 44.3593,-88.2673 44.3431)
+LINESTRING(-97.0484 44.8899,-97.0469 44.9978,-97.0453 45.1054,-97.0458 45.2127,-97.0509 45.3202)
+LINESTRING(-77.648 43.0482,-77.6786 43.0474,-77.7104 43.0481,-77.7422 43.0487,-77.7734 43.0479,-77.7991 43.0444,-77.8243 43.0387,-77.8494 43.0329,-77.8749 43.0292,-77.9088 43.0289,-77.9442 43.0311,-77.9795 43.0331,-78.0129 43.0321,-78.0313 43.0309,-78.0503 43.0308,-78.0692 43.031,-78.0875 43.0308,-78.1079 43.0316,-78.1273 43.034,-78.1468 43.0361,-78.1673 43.036,-78.2246 43.0329,-78.2827 43.0321,-78.3407 43.0303,-78.3976 43.0247,-78.4119 43.0206,-78.4247 43.0142,-78.4373 43.0073,-78.4514 43.002,-78.504 42.9888,-78.5788 42.9715,-78.6535 42.9566,-78.7058 42.951,-78.7441 42.9458,-78.7824 42.9405,-78.8207 42.9352,-78.8589 42.9299)
+LINESTRING(-79.011 43.2536,-79.0119 43.2433,-79.0098 43.2342,-79.0064 43.2251,-79.0033 43.2149,-79.0026 43.2052,-79.0041 43.1967,-79.0063 43.1882,-79.0077 43.1785,-79.0076 43.1675,-79.0069 43.1577,-79.007 43.1481,-79.0095 43.1374,-79.0192 43.1105,-79.0194 43.1029,-79.0152 43.0963,-79.0079 43.0905,-78.999 43.0853,-78.9875 43.078,-78.9789 43.0702,-78.972 43.0614,-78.9659 43.051,-78.9626 43.0429,-78.9608 43.0355,-78.9589 43.0281,-78.9552 43.0201,-78.9503 43.0178,-78.9467 43.0152,-78.9434 43.0123,-78.9396 43.0094,-78.9264 43.0016,-78.9134 42.9954,-78.9011 42.9887,-78.8899 42.9796,-78.8788 42.9669,-78.8702 42.9546,-78.8638 42.9423,-78.8589 42.9299)
+LINESTRING(-78.8589 42.9299,-78.9102 42.9187)
+LINESTRING(-123.282 42.4642,-123.301 42.4725,-123.317 42.484,-123.334 42.4972,-123.356 42.5106,-123.38 42.5284,-123.388 42.546,-123.391 42.5654,-123.392 42.5867,-123.394 42.6015,-123.395 42.6149,-123.393 42.6277,-123.385 42.6409,-123.379 42.6468,-123.368 42.6623,-123.364 42.6745,-123.363 42.6872,-123.363 42.7014,-123.365 42.7117,-123.369 42.7207,-123.372 42.7296,-123.372 42.7399,-123.352 42.7605,-123.315 42.7683,-123.274 42.7765,-123.245 42.7981,-123.247 42.8099,-123.245 42.8243,-123.244 42.8403,-123.246 42.8572,-123.246 42.8654,-123.245 42.883,-123.244 42.8953,-123.245 42.9069,-123.248 42.9196,-123.257 42.9351,-123.269 42.9473,-123.284 42.9586,-123.3 42.9714,-123.307 42.9773,-123.314 42.9831,-123.32 42.9884,-123.328 42.9942,-123.336 43.0005,-123.343 43.0062,-123.35 43.0123,-123.357 43.0194,-123.363 43.0241,-123.367 43.0395,-123.363 43.0511,-123.357 43.0627,-123.351 43.0758,-123.348 43.0854,-123.346 43.0939,-123.345 43.1026,-123.343 43.1124,-123.339 43.1231,-123.34 43.1337,-123.345 43.1408,-123.352 43.1463,-123.359 43.1517,-123.365 43.1586)
+LINESTRING(-84.7073 44.5839,-84.7317 44.5648,-84.7696 44.5494,-84.8064 44.5341,-84.8277 44.5152,-84.8288 44.5015,-84.8283 44.4777,-84.8276 44.4529,-84.828 44.4358,-84.8329 44.4195,-84.841 44.4038,-84.8489 44.3884,-84.8532 44.3727,-84.8499 44.3523,-84.8401 44.3313,-84.8293 44.3103,-84.8227 44.2901,-84.8188 44.2727,-84.813 44.2543,-84.8076 44.2358,-84.8049 44.2181,-84.7954 44.0899,-84.792 44.0799,-84.785 44.069,-84.7781 44.0571,-84.7749 44.0446,-84.7745 44.0306,-84.7736 44.0171,-84.7712 43.9898,-84.7726 43.9796,-84.7767 43.9691,-84.7814 43.9587,-84.7844 43.9486,-84.7848 43.9278,-84.7826 43.9066,-84.7808 43.8854,-84.7851 43.8652)
+LINESTRING(-72.194 41.3761,-72.1696 41.3718,-72.1438 41.3706,-72.1202 41.3692,-72.1023 41.364,-72.0911 41.364,-72.0803 41.364,-72.0462 41.3657,-71.9979 41.368,-71.9508 41.3708,-71.9205 41.3742,-71.8789 41.3965,-71.803 41.4423,-71.7967 41.4462)
+LINESTRING(-72.194 41.3761,-72.1565 41.4054,-72.1333 41.419,-72.1207 41.4391,-72.1151 41.488,-72.1149 41.5032,-72.1149 41.5173,-72.1137 41.5314,-72.1099 41.547)
+LINESTRING(-84.9046 43.8648,-84.8954 43.8644,-84.8849 43.8649,-84.8666 43.8662,-84.8455 43.8674,-84.8263 43.8673,-84.8071 43.8665,-84.7851 43.8652)
+LINESTRING(-88.2673 44.3431,-88.3089 44.3389,-88.3514 44.3388,-88.3938 44.3343,-88.4356 44.3165,-88.443 44.3022,-88.4522 44.2905,-88.4625 44.2792,-88.4685 44.2723)
+LINESTRING(-84.7851 43.8652,-84.7719 43.8556,-84.7624 43.8457,-84.7531 43.8357,-84.7417 43.8271)
+LINESTRING(-78.8589 42.9299,-78.8559 42.9199,-78.8532 42.9093,-78.8506 42.8977,-78.8479 42.8862,-78.8414 42.8662,-78.8324 42.8491,-78.8214 42.8324,-78.8094 42.8135)
+LINESTRING(-85.418 44.2077,-85.4502 44.1648,-85.4678 44.1292,-85.4784 44.0906,-85.4894 44.0392,-85.4961 44.0207,-85.508 43.9956,-85.521 43.9707,-85.5313 43.9529,-85.5478 43.8901)
+LINESTRING(-72.194 41.3761,-72.2086 41.3709,-72.2225 41.3674,-72.2356 41.363,-72.2489 41.3561,-72.2651 41.3506,-72.2902 41.3458,-72.3166 41.3418,-72.3365 41.3387,-72.3479 41.3376,-72.3585 41.3383,-72.3691 41.3397,-72.3792 41.3416)
+LINESTRING(-72.6904 41.6249,-72.6906 41.607,-72.6871 41.5986,-72.6832 41.5901,-72.6801 41.5804,-72.6638 41.5441,-72.6354 41.5185,-72.5995 41.494,-72.5605 41.4613,-72.5168 41.4253,-72.4602 41.3877,-72.4084 41.3569,-72.3792 41.3416)
+LINESTRING(-88.1124 44.5264,-88.0941 44.5162,-88.0698 44.503,-88.0451 44.4894,-88.0255 44.4781,-88.0138 44.4717,-87.9998 44.4651,-87.9857 44.4587,-87.9738 44.4532,-87.9395 44.432,-87.9088 44.4059,-87.8816 44.3776,-87.8579 44.3501,-87.8542 44.3455,-87.8393 44.3285,-87.8245 44.3115,-87.8099 44.2941,-87.7965 44.2769,-87.787 44.2478,-87.7821 44.2049,-87.779 44.1625,-87.7752 44.1353)
+LINESTRING(-116.34 43.6015,-116.376 43.6021,-116.452 43.6056,-116.531 43.6099,-116.576 43.6132,-116.595 43.6257,-116.613 43.6397,-116.631 43.6543,-116.648 43.6689,-116.66 43.678,-116.678 43.6983,-116.696 43.7222,-116.708 43.742,-116.719 43.7584,-116.732 43.7747,-116.746 43.7907,-116.756 43.8064,-116.762 43.8245,-116.768 43.8424,-116.775 43.86,-116.786 43.8774,-116.815 43.9048,-116.852 43.9277,-116.887 43.9499,-116.912 43.9754)
+LINESTRING(-75.9032 42.1347,-75.885 42.1387,-75.8543 42.1472,-75.8335 42.1534,-75.8126 42.1596,-75.7789 42.1647,-75.764 42.17,-75.7536 42.1756,-75.7335 42.1816,-75.7201 42.1841,-75.7068 42.1864,-75.6937 42.189,-75.6813 42.1926,-75.6757 42.1929,-75.6645 42.1981,-75.6405 42.1927,-75.6166 42.1873,-75.5926 42.1818,-75.5687 42.1764,-75.5496 42.1742,-75.5323 42.176,-75.5158 42.181,-75.499 42.1884,-75.4879 42.1927,-75.4774 42.1962,-75.4677 42.2005,-75.4593 42.2071,-75.4515 42.2178,-75.4474 42.2282,-75.4439 42.239,-75.4379 42.2508,-75.4299 42.2625,-75.4211 42.2725,-75.4099 42.2803,-75.3947 42.2855,-75.3853 42.2862,-75.3766 42.285,-75.3676 42.2831,-75.3578 42.2817,-75.3346 42.281,-75.3137 42.2829,-75.2945 42.2882,-75.2765 42.2978,-75.2701 42.3035,-75.2658 42.3095,-75.2613 42.3153,-75.2542 42.3205,-75.2313 42.3335,-75.2126 42.347,-75.1964 42.3621,-75.1809 42.3801,-75.1685 42.3987,-75.159 42.4162,-75.1484 42.4331,-75.1321 42.4499,-75.11 42.4639,-75.0863 42.4731,-75.0611 42.4807,-75.0344 42.4905,-75.0256 42.4928,-75.0194 42.4978,-75.0128 42.5052,-75.0065 42.5122,-74.9913 42.5185,-74.98 42.5203,-74.9689 42.5222,-74.9588 42.5249,-74.95 42.5302,-74.9407 42.5357,-74.9092 42.5485,-74.8779 42.5628,-74.8474 42.5779,-74.8181 42.5933,-74.7723 42.6131,-74.7318 42.6247,-74.6913 42.6377,-74.6459 42.6614,-74.625 42.6609,-74.6027 42.6616,-74.5805 42.6616,-74.5599 42.659,-74.5206 42.6689,-74.479 42.6801,-74.4373 42.691,-74.3974 42.7002,-74.3886 42.7011,-74.3787 42.7011,-74.3691 42.7013,-74.3359 42.7106,-74.3122 42.7171,-74.2876 42.7225,-74.2594 42.7272,-74.2045 42.7358,-74.177 42.7421,-74.1543 42.7504,-74.1134 42.7651,-74.0898 42.7728,-74.066 42.7799,-74.0419 42.7864,-74.0173 42.7923)
+LINESTRING(-75.9032 42.1347,-75.9008 42.1607,-75.901 42.1902,-75.9065 42.2189,-75.9202 42.2424,-75.9197 42.2493,-75.9206 42.2578,-75.9234 42.2659,-75.9284 42.2719,-75.9275 42.277,-75.9269 42.2835,-75.9273 42.2901,-75.9439 42.3041,-75.9636 42.3154,-75.9788 42.3275,-75.9803 42.339,-75.9871 42.3643,-75.9925 42.392,-75.9999 42.419,-76.0127 42.442,-76.0234 42.4528,-76.0356 42.4633,-76.0478 42.4739,-76.0584 42.485,-76.0663 42.4995,-76.0702 42.5151,-76.0741 42.5307,-76.0819 42.5453,-76.0925 42.5562,-76.1047 42.5667,-76.1175 42.5782,-76.1297 42.5923,-76.1418 42.5972,-76.1527 42.6006,-76.1625 42.6054,-76.1716 42.6144,-76.175 42.6221,-76.1764 42.6317,-76.1766 42.6414,-76.1763 42.6498,-76.1687 42.6686,-76.1611 42.6874,-76.1535 42.7062,-76.1459 42.725,-76.1399 42.7427,-76.1343 42.7615,-76.1293 42.7804,-76.1253 42.7983,-76.124 42.8099,-76.1238 42.8216,-76.1234 42.8333,-76.1211 42.8454,-76.1179 42.8547,-76.1129 42.8687,-76.1091 42.8825,-76.1093 42.8911,-76.1167 42.9008,-76.1248 42.9111,-76.132 42.9215,-76.1372 42.9319,-76.1385 42.9375,-76.1385 42.9428,-76.1376 42.9481,-76.1361 42.9536,-76.1326 42.9784,-76.1344 43.0028,-76.1381 43.0271,-76.1401 43.0519,-76.1509 43.0569,-76.1564 43.0633,-76.1618 43.0691,-76.1677 43.0745,-76.1749 43.08,-76.1697 43.0876,-76.1631 43.095)
+LINESTRING(-75.9032 42.1347,-75.8799 42.13,-75.8452 42.1247,-75.8074 42.1163,-75.7752 42.1033)
+LINESTRING(-84.0231 43.988,-84.0201 43.9583,-84.0229 43.8993,-84.0277 43.8397,-84.0309 43.8077,-84.0289 43.8062,-84.0269 43.8047,-84.0249 43.8032,-84.0228 43.8017,-84.0218 43.7704,-84.0199 43.7392,-84.0184 43.7079,-84.0185 43.6768,-84.0052 43.662,-83.9884 43.6467,-83.9703 43.632,-83.9529 43.6191,-83.9533 43.6126,-83.9522 43.6059,-83.9503 43.5994,-83.9482 43.593)
+LINESTRING(-84.7417 43.8271,-84.7058 43.8127,-84.6695 43.7965,-84.6328 43.781,-84.5963 43.7679,-84.5919 43.7673,-84.5858 43.7672,-84.5796 43.7671,-84.5748 43.7667,-84.5603 43.7622,-84.548 43.7563,-84.5364 43.7499,-84.5241 43.7436,-84.5151 43.7408,-84.5007 43.737,-84.487 43.7331,-84.4795 43.7302,-84.4717 43.7261,-84.4587 43.7213,-84.4455 43.7166,-84.4372 43.713,-84.415 43.7046,-84.3928 43.7042,-84.37 43.7049,-84.3462 43.7001,-84.3322 43.6935,-84.32 43.6871,-84.3067 43.6818,-84.2893 43.6782,-84.2675 43.6739,-84.2467 43.6667,-84.2265 43.658,-84.2062 43.6487,-84.1842 43.6377,-84.1616 43.6243,-84.1399 43.6099,-84.1208 43.596,-84.076 43.5957,-84.0345 43.5951,-83.993 43.5943,-83.9482 43.593)
+LINESTRING(-77.648 43.0482,-77.6548 43.033,-77.6632 43.0196,-77.6723 43.0068,-77.6813 42.9935,-77.6847 42.9836,-77.6907 42.9634,-77.6968 42.942,-77.6999 42.9286,-77.6994 42.9229,-77.6973 42.9175,-77.6952 42.9121,-77.6949 42.9064,-77.7001 42.8903,-77.708 42.8792,-77.7169 42.8695,-77.7252 42.8577,-77.7336 42.8385,-77.7404 42.82,-77.7492 42.8022,-77.7635 42.7847,-77.7759 42.778,-77.793 42.7739,-77.8118 42.7703,-77.829 42.7654,-77.8339 42.7503,-77.8366 42.7347,-77.8356 42.719,-77.8294 42.704,-77.821 42.7,-77.8129 42.6959,-77.8058 42.6912,-77.8001 42.6849,-77.8018 42.681,-77.8046 42.6774,-77.8082 42.6741,-77.8121 42.6711,-77.7961 42.6421,-77.7561 42.5988,-77.7101 42.5579,-77.6763 42.5361,-77.6501 42.5388,-77.642 42.5413,-77.6343 42.5429,-77.6264 42.5434,-77.6177 42.5423,-77.5968 42.5365,-77.5797 42.5286,-77.5654 42.518,-77.553 42.5045,-77.5436 42.4916,-77.5345 42.4799,-77.5229 42.4704,-77.5062 42.4643,-77.4905 42.4617,-77.4763 42.4606,-77.4458 42.4599,-77.4189 42.4535,-77.3927 42.4464,-77.3739 42.4367,-77.3652 42.4228,-77.3326 42.3837)
+LINESTRING(-123.282 42.4642,-123.274 42.4603,-123.252 42.4531,-123.23 42.4461,-123.219 42.4428,-123.21 42.4422,-123.2 42.4415,-123.192 42.4415,-123.184 42.4424,-123.177 42.4415,-123.169 42.4373,-123.156 42.4304,-123.15 42.4202,-123.144 42.4095,-123.133 42.4011,-123.112 42.397,-123.09 42.3968,-123.073 42.3984,-123.065 42.3994,-123.035 42.4047,-122.997 42.408,-122.962 42.4071,-122.937 42.4,-122.924 42.3906,-122.911 42.3812,-122.897 42.3719,-122.884 42.3629,-122.88 42.3536,-122.876 42.3429,-122.871 42.3325,-122.865 42.3241)
+LINESTRING(-75.7752 42.1033,-75.7705 42.0978,-75.7593 42.0817,-75.7507 42.067,-75.7437 42.0521,-75.7368 42.0349,-75.7294 42.0203,-75.721 42.0076,-75.7163 41.9989)
+LINESTRING(-72.3792 41.3416,-72.4014 41.3397,-72.4224 41.3381,-72.4433 41.3369,-72.4654 41.3361,-72.4893 41.3337,-72.5106 41.3293,-72.532 41.3247,-72.5559 41.3214,-72.5777 41.3202,-72.5969 41.3207,-72.6151 41.3229,-72.634 41.3271,-72.6545 41.3292,-72.6724 41.3332,-72.6903 41.3371,-72.711 41.3386,-72.7396 41.3369,-72.7646 41.3334,-72.7897 41.3296,-72.8183 41.3269,-72.8359 41.3279,-72.8513 41.3311,-72.8666 41.335,-72.8843 41.3376,-72.9103 41.3373,-72.9332 41.3323,-72.9543 41.3234,-72.9753 41.3113,-72.9855 41.3057,-72.9954 41.3012,-73.0054 41.2966,-73.0157 41.2907,-73.0253 41.2843,-73.0348 41.278,-73.0436 41.2723,-73.0524 41.2671)
+LINESTRING(-72.6904 41.6249,-72.7036 41.6054,-72.7167 41.5854,-72.7306 41.5659,-72.7462 41.5478,-72.7695 41.5315,-72.7955 41.5202,-72.8192 41.5079,-72.8357 41.4887,-72.8529 41.4508,-72.8599 41.4413,-72.8694 41.4342,-72.8798 41.4276,-72.8898 41.4195,-72.8954 41.4121,-72.8995 41.4051,-72.9039 41.3983,-72.9108 41.3918,-72.9168 41.3892,-72.9234 41.3884,-72.93 41.3879,-72.9361 41.3859,-72.968 41.3701,-72.9956 41.3549,-73.018 41.3368,-73.0343 41.3124,-73.0524 41.2671)
+LINESTRING(-107.251 45.0008,-107.225 44.986,-107.183 44.9736,-107.153 44.9697,-107.088 44.9595,-107.041 44.9341,-107.006 44.8942,-106.977 44.8404,-106.968 44.836,-106.96 44.8316,-106.951 44.8272,-106.943 44.8228,-106.938 44.8061,-106.931 44.7713,-106.923 44.7335,-106.915 44.708,-106.909 44.6977,-106.901 44.6894,-106.893 44.6814,-106.884 44.6722,-106.874 44.6584,-106.864 44.6425,-106.855 44.6264,-106.848 44.6121,-106.848 44.6056,-106.847 44.5993,-106.84 44.5892,-106.832 44.5797,-106.824 44.5699,-106.818 44.5589,-106.814 44.543,-106.812 44.5256,-106.81 44.5087,-106.806 44.4941,-106.786 44.4693,-106.753 44.4351,-106.718 44.4011,-106.694 44.3767,-106.687 44.3721)
+LINESTRING(-72.6647 41.7591,-72.6878 41.7586,-72.7085 41.7565,-72.7234 41.7543,-72.7351 41.7511,-72.7507 41.7449,-72.7968 41.7296,-72.8074 41.7168,-72.8095 41.6983,-72.8239 41.6679,-72.8359 41.6613,-72.8592 41.6452,-72.8837 41.6269,-72.8992 41.6132,-72.9019 41.6034,-72.9016 41.5946,-72.9008 41.5865,-72.9021 41.5787,-72.9062 41.5721,-72.9128 41.5648,-72.9204 41.5581,-72.9275 41.5534,-72.9594 41.5393,-72.9742 41.5392,-72.9885 41.5424,-73.019 41.5379,-73.0322 41.5458,-73.0485 41.5514,-73.066 41.5534,-73.0829 41.5508,-73.0909 41.5295,-73.099 41.5213,-73.1124 41.5174,-73.1365 41.5088,-73.1485 41.5027,-73.1598 41.4961,-73.1712 41.4896,-73.1835 41.484,-73.1925 41.4813,-73.2017 41.479,-73.2105 41.4762,-73.2183 41.472,-73.2317 41.46,-73.242 41.4469,-73.2513 41.4333,-73.2621 41.4199,-73.2691 41.4148,-73.2836 41.4144,-73.2936 41.4192,-73.3031 41.4243,-73.3128 41.4265,-73.3413 41.4237,-73.3699 41.4188,-73.3983 41.4157,-73.426 41.4181,-73.4411 41.4125,-73.4533 41.4069,-73.4644 41.4006,-73.4765 41.3927,-73.4765 41.3863,-73.4834 41.3815,-73.5014 41.3821,-73.5125 41.3851,-73.5231 41.3877,-73.5328 41.3891,-73.5439 41.3882)
+LINESTRING(-104.055 44.5426,-104.032 44.5438,-104.002 44.5441,-103.975 44.541,-103.954 44.5324,-103.933 44.5204,-103.906 44.5087,-103.862 44.501)
+LINESTRING(-73.7719 41.5394,-73.8018 41.5336,-73.8353 41.5284,-73.8692 41.5249,-73.9004 41.5248,-73.9116 41.5267,-73.9231 41.5298,-73.9346 41.5317,-73.9457 41.5303,-73.949 41.5275,-73.9536 41.5244,-73.9585 41.5216,-73.9631 41.5201,-73.983 41.5181,-74.0168 41.5158,-74.0515 41.514,-74.0736 41.5136)
+LINESTRING(-74.0736 41.5136,-74.0821 41.5819,-74.0842 41.6158,-74.0819 41.6504,-74.0727 41.6913,-74.0607 41.7336,-74.0522 41.7758,-74.0533 41.8162,-74.0593 41.8555,-74.0578 41.8795,-74.052 41.9008,-74.0447 41.9324,-74.0335 41.943,-74.0252 41.9519,-74.0186 41.9616,-74.0124 41.9743,-74.0034 41.9985,-73.9964 42.0229,-73.9892 42.0473,-73.98 42.0715,-73.9742 42.0821,-73.9676 42.0922,-73.9612 42.1025,-73.9562 42.1135,-73.9532 42.1246,-73.9509 42.1358,-73.9482 42.1469,-73.9441 42.1579,-73.9385 42.1675,-73.9317 42.1771,-73.9252 42.1867,-73.9203 42.1962,-73.918 42.2035,-73.9161 42.211,-73.9138 42.2184,-73.9104 42.2256,-73.9033 42.234,-73.8942 42.2422,-73.8859 42.25,-73.8811 42.2575,-73.878 42.2746,-73.8762 42.2919,-73.8739 42.3092,-73.869 42.3264,-73.8617 42.3491,-73.8571 42.3703,-73.8524 42.3912,-73.8448 42.413,-73.8392 42.4325,-73.8373 42.4528,-73.8356 42.4733,-73.831 42.4937,-73.8285 42.5013,-73.8254 42.5118,-73.8227 42.5224,-73.821 42.53)
+LINESTRING(-77.3326 42.3837,-77.3193 42.3783,-77.3099 42.3684,-77.3006 42.3585,-77.2878 42.3495,-77.2668 42.3418,-77.2459 42.3377,-77.226 42.3327,-77.208 42.3225,-77.1962 42.3068,-77.1925 42.2904,-77.1902 42.2734,-77.1827 42.256,-77.1697 42.2393,-77.1553 42.2255,-77.1379 42.2137,-77.1158 42.2031,-77.1136 42.2022)
+LINESTRING(-73.5439 41.3882,-73.5486 41.3879,-73.562 41.3845,-73.5768 41.3833,-73.5968 41.3881)
+LINESTRING(-73.5968 41.3881,-73.6008 41.3926,-73.6041 41.3972,-73.6067 41.4021,-73.6085 41.4073,-73.6144 41.4106,-73.6209 41.4143,-73.6266 41.4185,-73.6302 41.423,-73.6335 41.4335,-73.636 41.444,-73.6394 41.4542,-73.6456 41.4641,-73.6526 41.4712,-73.661 41.4788,-73.6687 41.4865,-73.6737 41.494,-73.6766 41.5087,-73.6782 41.5226,-73.6855 41.5345,-73.7055 41.5435,-73.7243 41.5454,-73.7406 41.5431,-73.7559 41.54,-73.7719 41.5394)
+LINESTRING(-103.862 44.501,-103.846 44.4963,-103.833 44.4881,-103.821 44.4801,-103.809 44.4763,-103.79 44.4756,-103.772 44.4749,-103.753 44.4742,-103.734 44.4736)
+LINESTRING(-88.4685 44.2723,-88.4711 44.2694,-88.4733 44.2632,-88.4792 44.2561,-88.4858 44.2491,-88.4915 44.2404,-88.4962 44.2331,-88.5015 44.2265,-88.5062 44.2196,-88.5085 44.2114,-88.5108 44.2012,-88.5154 44.1903,-88.5209 44.1795,-88.5263 44.17,-88.5392 44.1464,-88.5516 44.1207,-88.5627 44.0921,-88.5718 44.0599,-88.5764 44.0309,-88.5789 44.0025,-88.5822 43.9746,-88.5892 43.947)
+LINESTRING(-76.4444 41.9996,-76.4422 42.0018,-76.4367 42.0063,-76.4301 42.0093,-76.4218 42.0106,-76.4115 42.0101,-76.4025 42.0082,-76.3934 42.0059,-76.383 42.0042,-76.3745 42.0039,-76.367 42.0047,-76.3597 42.0061,-76.3517 42.0077,-76.3418 42.0096,-76.3331 42.0118,-76.3253 42.015,-76.3183 42.02,-76.3093 42.0274,-76.3007 42.0334,-76.2918 42.0392,-76.2822 42.0463,-76.2742 42.053,-76.2669 42.0589,-76.2586 42.0639,-76.2479 42.0678,-76.2352 42.07,-76.2234 42.0698,-76.2114 42.068,-76.1983 42.0651,-76.1841 42.061,-76.1722 42.0562,-76.1602 42.0515,-76.1461 42.0474,-76.1281 42.0453,-76.1117 42.0471,-76.096 42.0518,-76.0798 42.0586,-76.0646 42.0647,-76.0506 42.0696,-76.037 42.0749,-76.0231 42.0823,-76.008 42.0926,-75.9951 42.1023,-75.9817 42.1114,-75.9649 42.1202,-75.9493 42.1264,-75.9345 42.1307,-75.9195 42.1333,-75.9032 42.1347)
+LINESTRING(-112.34 44.5396,-112.278 44.498,-112.222 44.4253,-112.189 44.3307,-112.196 44.2822,-112.223 44.2252,-112.25 44.1677,-112.256 44.1175,-112.252 44.0713,-112.252 44.0155,-112.252 43.9597,-112.247 43.9135,-112.24 43.8703,-112.235 43.8383)
+LINESTRING(-111.578 43.997,-111.604 43.9847,-111.626 43.9774,-111.651 43.9739,-111.68 43.9733,-111.688 43.9594,-111.705 43.935,-111.724 43.9104,-111.735 43.896,-111.744 43.8921,-111.753 43.8859,-111.761 43.879,-111.768 43.8733,-111.798 43.8524)
+LINESTRING(-77.1136 42.2022,-77.1107 42.2011,-77.091 42.1942,-77.0724 42.189,-77.0535 42.1838,-77.0329 42.1774,-77.0162 42.1707,-77.0019 42.1635,-76.9873 42.1569,-76.9696 42.1517,-76.9493 42.1502,-76.9311 42.1536,-76.9132 42.1597,-76.8937 42.1661,-76.8734 42.1702,-76.8546 42.1713,-76.8352 42.171,-76.8133 42.1709,-76.8043 42.1638,-76.7983 42.1562,-76.7935 42.1479,-76.7884 42.1387,-76.7828 42.1294,-76.7786 42.1209,-76.7764 42.1121,-76.7769 42.1021,-76.78 42.0877,-76.7831 42.075,-76.7854 42.0624,-76.7865 42.048,-76.7829 42.0295,-76.772 42.0138,-76.7554 42.0022)
+LINESTRING(-76.7554 42.0022,-76.7546 42.0016,-76.7314 41.9937,-76.7186 41.9911,-76.7072 41.9892,-76.6957 41.9876,-76.6824 41.9862,-76.6754 41.9862,-76.6692 41.9869,-76.6631 41.9877,-76.6562 41.9878,-76.6382 41.9862,-76.6224 41.9837,-76.6068 41.9808,-76.589 41.9774,-76.5481 41.9716,-76.5094 41.9706,-76.475 41.9778,-76.4473 41.9965,-76.4444 41.9996)
+LINESTRING(-74.0736 41.5136,-74.0811 41.514,-74.0902 41.516,-74.1005 41.5179,-74.111 41.5181,-74.1718 41.5122,-74.2147 41.5075,-74.2572 41.4968,-74.3166 41.473,-74.3308 41.4669,-74.3444 41.461,-74.3573 41.4543,-74.3691 41.4458)
+LINESTRING(-75.7752 42.1033,-75.7252 42.0971,-75.6729 42.0857,-75.6234 42.0749,-75.5816 42.0705,-75.5689 42.0621,-75.5554 42.053,-75.5412 42.0487,-75.5266 42.0546,-75.5159 42.057,-75.4947 42.0578,-75.4707 42.0545,-75.4512 42.045,-75.4394 42.0435,-75.4269 42.0422,-75.4146 42.0421,-75.403 42.0441,-75.3742 42.0363,-75.3391 42.0309,-75.3095 42.023,-75.2971 42.0076,-75.2616 41.9895,-75.2219 41.986,-75.1816 41.9897,-75.1438 41.9932,-75.098 41.9895,-75.0527 41.9783,-75.0085 41.9641,-74.9657 41.9513,-74.9586 41.9517,-74.9516 41.9526,-74.9446 41.9538,-74.9379 41.9553,-74.9254 41.9504,-74.9148 41.943,-74.9045 41.935,-74.8931 41.9283,-74.782 41.8932,-74.742 41.8233,-74.7365 41.7452,-74.7286 41.6854,-74.7201 41.6772,-74.7062 41.6701,-74.6908 41.6647,-74.6778 41.661,-74.6479 41.6406,-74.6028 41.6234,-74.5539 41.6077,-74.5129 41.5922,-74.5033 41.5834,-74.5022 41.5736,-74.5019 41.5643,-74.495 41.5571,-74.4789 41.554,-74.4665 41.5577,-74.4555 41.5631,-74.4433 41.5649,-74.4349 41.5624,-74.4272 41.5576,-74.423 41.5515,-74.4252 41.5452,-74.4117 41.5196,-74.3973 41.4951,-74.3828 41.4707,-74.3691 41.4458)
+LINESTRING(-91.4199 44.767,-91.4115 44.7676,-91.3713 44.7408,-91.3416 44.7094,-91.3187 44.6747,-91.2987 44.6382,-91.2797 44.628,-91.2599 44.621,-91.2403 44.6134,-91.2221 44.6013,-91.1965 44.5775,-91.1718 44.5531,-91.1482 44.5282,-91.126 44.5026,-91.112 44.4838,-91.0985 44.4642,-91.0839 44.4452,-91.0667 44.4281,-91.0542 44.4205,-91.0382 44.4126,-91.024 44.4042,-91.0167 44.3954,-90.9674 44.373,-90.9196 44.3498,-90.873 44.3254,-90.8275 44.2998,-90.7812 44.2726,-90.7343 44.2451,-90.6868 44.2183,-90.6386 44.1931,-90.6164 44.1834,-90.5926 44.1739,-90.5697 44.1638,-90.55 44.1519,-90.5414 44.1445,-90.5351 44.1361,-90.5251 44.1081,-90.5201 44.0789,-90.5146 44.0495,-90.5034 44.021,-90.4891 44.0079,-90.4685 43.9982,-90.4499 43.9916,-90.4413 43.9878)
+LINESTRING(-96.7888 44.327,-96.7854 44.3896,-96.7801 44.465,-96.7747 44.5392,-96.7708 44.598,-96.7873 44.6235,-96.8103 44.6551,-96.8343 44.6865,-96.8538 44.7112,-96.8953 44.7566,-96.9418 44.7976,-96.993 44.8359,-97.0486 44.873,-97.0486 44.8772,-97.0485 44.8815,-97.0485 44.8857,-97.0484 44.8899)
+LINESTRING(-77.1136 42.2022,-77.1311 42.1864,-77.1465 42.1718,-77.1593 42.1562,-77.1693 42.1369,-77.1759 42.1109,-77.175 42.087,-77.1664 42.0636,-77.1504 42.0391,-77.131 42.0167,-77.1159 42.0007)
+LINESTRING(-74.0736 41.5136,-74.0739 41.4993,-74.0719 41.4845,-74.068 41.47,-74.0619 41.4563,-74.0649 41.4452,-74.0674 41.4339,-74.0702 41.4227,-74.0745 41.412,-74.0817 41.4,-74.09 41.3879,-74.0975 41.3755,-74.1024 41.3628,-74.1041 41.3477,-74.1058 41.3322,-74.1122 41.3183,-74.128 41.3077)
+LINESTRING(-74.128 41.3077,-74.1285 41.3088,-74.1291 41.31,-74.1297 41.3111,-74.1303 41.3123,-74.1523 41.3202,-74.1739 41.3314,-74.191 41.3415,-74.1994 41.3461,-74.2193 41.3469,-74.2461 41.3471,-74.2712 41.349,-74.2861 41.3551,-74.2925 41.3667,-74.3103 41.381,-74.3314 41.3941,-74.3478 41.4024,-74.35 41.4132,-74.3539 41.4254,-74.3601 41.437,-74.3691 41.4458)
+LINESTRING(-82.4117 42.9802,-82.4874 42.9738)
+LINESTRING(-106.687 44.3721,-106.648 44.3512,-106.619 44.3237,-106.596 44.2986,-106.578 44.2848,-106.517 44.2699,-106.459 44.2582,-106.404 44.2426,-106.35 44.2161,-106.341 44.2171,-106.333 44.2182,-106.325 44.2192,-106.317 44.2202,-106.304 44.2156,-106.291 44.2101,-106.278 44.204,-106.266 44.1977,-106.262 44.1978,-106.257 44.1978,-106.253 44.1979,-106.249 44.1979,-106.239 44.2029,-106.224 44.2101,-106.209 44.2167,-106.2 44.2201,-106.169 44.2224,-106.127 44.2229,-106.087 44.221,-106.058 44.2163,-106.049 44.2192,-106.04 44.2222,-106.031 44.2251,-106.023 44.228,-106.015 44.224,-106.007 44.2199,-105.994 44.2148,-105.98 44.2109,-105.966 44.2071,-105.954 44.2019,-105.947 44.1971,-105.941 44.1918,-105.935 44.1867,-105.927 44.1819,-105.92 44.1816,-105.914 44.1813,-105.907 44.1809,-105.901 44.1806,-105.882 44.1873,-105.867 44.1959,-105.852 44.2048,-105.836 44.2124,-105.825 44.2149,-105.816 44.2156,-105.807 44.2156,-105.797 44.2163,-105.759 44.2258,-105.741 44.2358,-105.716 44.2422,-105.655 44.2412,-105.636 44.2501,-105.621 44.2594,-105.608 44.2693,-105.591 44.2801,-105.564 44.2811,-105.543 44.2822,-105.524 44.2819,-105.502 44.2785,-105.487 44.2774,-105.479 44.2805,-105.473 44.2859,-105.466 44.2916,-105.429 44.2925,-105.393 44.2942,-105.357 44.2962,-105.32 44.2983,-105.295 44.2985,-105.274 44.297,-105.252 44.2946,-105.228 44.2923,-105.215 44.2921,-105.201 44.2931,-105.187 44.2942,-105.174 44.2948,-105.13 44.2937,-105.079 44.2911,-105.027 44.2875,-104.982 44.2833,-104.978 44.2804,-104.973 44.2777,-104.968 44.2751,-104.963 44.2728,-104.957 44.2731,-104.952 44.2712,-104.947 44.2697,-104.941 44.2659,-104.886 44.2707,-104.83 44.2747,-104.775 44.2784,-104.719 44.2821,-104.697 44.2847,-104.674 44.2885,-104.651 44.2923,-104.627 44.2948,-104.613 44.3074,-104.589 44.3205,-104.562 44.3299,-104.539 44.3313,-104.533 44.3274,-104.528 44.3224,-104.497 44.3293,-104.473 44.3457,-104.452 44.3649,-104.43 44.3805,-104.423 44.3835,-104.414 44.3863,-104.405 44.3889,-104.396 44.3914,-104.381 44.3968,-104.367 44.4026,-104.354 44.4093,-104.34 44.4159,-104.327 44.4219,-104.313 44.4281,-104.299 44.4346,-104.287 44.4413,-104.281 44.4457,-104.276 44.4509,-104.271 44.4563,-104.265 44.4613,-104.243 44.4756,-104.229 44.4874,-104.22 44.5012,-104.213 44.5214,-104.189 44.5296,-104.153 44.5364,-104.117 44.5407,-104.09 44.5419,-104.062 44.5423,-104.055 44.5426)
+LINESTRING(-122.865 42.3241,-122.844 42.3061,-122.807 42.2775,-122.769 42.2498,-122.746 42.2344,-122.728 42.2259,-122.706 42.2159,-122.685 42.2052,-122.669 42.1944,-122.66 42.182,-122.653 42.1681,-122.647 42.1537,-122.64 42.1403,-122.625 42.1177,-122.616 42.1065,-122.605 42.0993,-122.582 42.0886,-122.575 42.0754,-122.57 42.0622,-122.567 42.0494,-122.57 42.0377,-122.575 42.0315,-122.584 42.022,-122.593 42.0125,-122.598 42.006)
+LINESTRING(-84.7417 43.8271,-84.7467 43.8189,-84.7531 43.8092,-84.7582 43.7995,-84.7598 43.7902,-84.7583 43.7491,-84.7593 43.7085,-84.7611 43.668,-84.7621 43.6272,-84.7566 43.6227,-84.7507 43.6186,-84.7448 43.6144,-84.7391 43.61,-84.7394 43.5986,-84.7382 43.5872,-84.7366 43.5759,-84.7359 43.5645,-84.7213 43.5589,-84.7068 43.5534,-84.6922 43.5478,-84.6777 43.5423,-84.6747 43.5106,-84.6767 43.4783,-84.6786 43.4463,-84.6754 43.4152,-84.6571 43.4067,-84.6367 43.3966,-84.6175 43.3854,-84.6028 43.3737,-84.6029 43.3594,-84.603 43.345,-84.603 43.3307,-84.6031 43.3164,-84.601 43.3132,-84.5962 43.3084,-84.5911 43.3031,-84.5879 43.2984,-84.5868 43.2933,-84.5863 43.2878,-84.5856 43.2824,-84.5834 43.2774,-84.5735 43.2713,-84.5689 43.264,-84.5677 43.2558,-84.5679 43.2467)
+LINESTRING(-93.2461 44.0978,-93.2524 44.1379,-93.2716 44.1921,-93.2935 44.2474,-93.3079 44.2912,-93.3077 44.3076,-93.3024 44.3225,-93.2961 44.3372,-93.293 44.3531,-93.2941 44.3827,-93.2967 44.4123,-93.2992 44.4418,-93.3003 44.4712,-93.2994 44.482,-93.2975 44.4928,-93.2961 44.5037,-93.2964 44.5146,-93.3014 44.5492,-93.3055 44.5839,-93.308 44.6187,-93.3081 44.6537,-93.304 44.6752,-93.2957 44.6959,-93.2874 44.7169,-93.2828 44.7394,-93.2824 44.7575,-93.2822 44.786,-93.2826 44.8134,-93.2838 44.8284,-93.2912 44.8442,-93.2968 44.8532,-93.2995 44.8657,-93.2984 44.8918)
+LINESTRING(-74.6909 41.3553,-74.6808 41.3555,-74.6618 41.3563,-74.6367 41.3641,-74.608 41.3751,-74.5808 41.3858,-74.5597 41.3924,-74.5429 41.3956,-74.5264 41.3986,-74.51 41.4021,-74.4934 41.4069,-74.4872 41.4057,-74.4809 41.4045,-74.4747 41.4033,-74.4684 41.4021,-74.4405 41.4086,-74.4144 41.4185,-74.3905 41.4312,-74.3691 41.4458)
+LINESTRING(-74.6991 41.355,-74.6909 41.3553)
+LINESTRING(-73.7085 41.1108,-73.6972 41.1377,-73.6828 41.2301,-73.6592 41.3178,-73.6008 41.3772,-73.5998 41.3799,-73.5988 41.3826,-73.5978 41.3853,-73.5968 41.3881)
+LINESTRING(-93.2461 44.0978,-93.2474 44.088,-93.2487 44.0783,-93.25 44.0685,-93.2513 44.0587)
+LINESTRING(-115.628 43.1686,-115.658 43.1924,-115.71 43.2236,-115.766 43.2526,-115.827 43.2848,-115.889 43.3212,-115.942 43.3559,-115.989 43.3942,-116.036 43.4411,-116.061 43.4741,-116.082 43.504,-116.105 43.5326,-116.138 43.5615,-116.183 43.5859,-116.229 43.5971,-116.28 43.6005,-116.34 43.6015)
+LINESTRING(-73.7185 41.0868,-73.7085 41.1108)
+LINESTRING(-73.6909 41.0536,-73.6826 41.0607,-73.6722 41.0685,-73.6569 41.0749,-73.6382 41.0791,-73.6186 41.0827,-73.6008 41.087,-73.5809 41.0921,-73.5613 41.0963,-73.5433 41.1026,-73.528 41.1135,-73.5192 41.1156,-73.5102 41.117,-73.5012 41.1181,-73.4921 41.1196,-73.4704 41.1347,-73.453 41.147,-73.4339 41.1583,-73.4074 41.1702,-73.389 41.175,-73.371 41.1763,-73.3529 41.1765,-73.3342 41.1779,-73.3066 41.1871,-73.2842 41.2004,-73.2607 41.2116,-73.2296 41.214,-73.225 41.2161,-73.2207 41.2198,-73.2172 41.224,-73.2151 41.2277,-73.1925 41.2246,-73.1625 41.2362,-73.1294 41.2444,-73.0922 41.2524,-73.0805 41.2554,-73.0702 41.2589,-73.061 41.2628,-73.0524 41.2671)
+LINESTRING(-83.6783 43.0108,-83.6459 43.0136,-83.5963 43.014,-83.5446 43.0133,-83.5065 43.0129,-83.4617 43.0152,-83.4095 43.0212,-83.3588 43.0306,-83.3189 43.0431,-83.3144 43.0425,-83.3098 43.0419,-83.3053 43.0414,-83.3008 43.0408,-83.2664 43.0244,-83.2303 43.0197,-83.1913 43.021,-83.148 43.0224,-83.1221 43.0087,-83.0895 43.0038,-83.055 43.0031,-83.023 43.0019,-83.0103 42.9999,-82.9975 42.9974,-82.9848 42.9949,-82.9721 42.9932,-82.9313 42.9912,-82.9011 42.9891,-82.8727 42.98,-82.8373 42.9572,-82.7771 42.9649,-82.7173 42.9744,-82.6577 42.9848,-82.5983 42.9953,-82.5718 42.9954,-82.5407 42.9899,-82.5107 42.9817,-82.4874 42.9738)
+LINESTRING(-83.9482 43.593,-83.9501 43.5646,-83.9488 43.5359,-83.9419 43.5078,-83.9265 43.4815,-83.9184 43.4781,-83.9102 43.4763,-83.9021 43.4749,-83.894 43.4727,-83.8871 43.4577,-83.8867 43.4353,-83.8883 43.4118,-83.8876 43.3938,-83.8761 43.3827,-83.8685 43.3658,-83.8643 43.3479,-83.8628 43.3336,-83.8389 43.3153,-83.8157 43.2925,-83.793 43.2686,-83.7705 43.2471,-83.7678 43.2097,-83.7651 43.1724,-83.7626 43.135,-83.7607 43.0976,-83.7437 43.0982,-83.7261 43.0994,-83.7088 43.1003,-83.6922 43.0998,-83.6862 43.0924,-83.6835 43.0835,-83.6831 43.0741,-83.6836 43.0655,-83.6816 43.0573,-83.681 43.0416,-83.6805 43.0241,-83.6783 43.0108)
+LINESTRING(-91.3047 43.8547,-91.2825 43.8598,-91.2434 43.8688,-91.2151 43.8734,-91.2052 43.8735,-91.1949 43.8731,-91.1848 43.8728,-91.1752 43.8735,-91.1505 43.867,-91.1228 43.8699,-91.0954 43.8775,-91.0714 43.8848,-91.0675 43.8835,-91.0542 43.8836,-91.0292 43.881,-91.0016 43.8783,-90.9804 43.8781,-90.9289 43.8886,-90.8685 43.9058,-90.8088 43.925,-90.7595 43.9419,-90.7122 43.9476,-90.6513 43.9447,-90.5864 43.9418,-90.5271 43.9475,-90.5052 43.9548,-90.4827 43.9651,-90.4609 43.9767,-90.4413 43.9878)
+LINESTRING(-73.8191 41.3331,-73.8253 41.323,-73.825 41.3081,-73.8219 41.2925,-73.8192 41.2804,-73.8082 41.2517,-73.8072 41.2033,-73.8076 41.1513,-73.8012 41.1118,-73.8056 41.1006,-73.8132 41.0917,-73.8201 41.0804,-73.8225 41.0622)
+LINESTRING(-73.9923 41.1029,-73.9996 41.1205,-74.0126 41.1364,-74.0264 41.152,-74.0361 41.1683,-74.0386 41.1939,-74.038 41.2352,-74.035 41.308)
+LINESTRING(-73.8225 41.0622,-73.8253 41.0619,-73.8281 41.0613,-73.8307 41.0603,-73.833 41.0591)
+LINESTRING(-92.356 43.9501,-92.349 43.9533,-92.3409 43.9553,-92.3324 43.9565,-92.3242 43.9571,-92.2675 43.9588,-92.2016 43.9581,-92.1358 43.9552,-92.0797 43.9506,-92.0678 43.9487,-92.0563 43.9461,-92.045 43.9434,-92.0335 43.9415,-91.9941 43.9374,-91.9517 43.9345,-91.9093 43.9328,-91.8699 43.9327,-91.8456 43.9341,-91.8007 43.937,-91.7551 43.9405,-91.7292 43.9432,-91.7142 43.947,-91.7005 43.9508,-91.6865 43.9537,-91.6705 43.9547,-91.6425 43.9479,-91.6378 43.9341,-91.62 43.9215,-91.5531 43.918,-91.5298 43.9172,-91.5132 43.9149,-91.4971 43.9145,-91.4753 43.9191,-91.4487 43.9139,-91.4283 43.8992,-91.4118 43.8808,-91.397 43.8646,-91.3871 43.8585,-91.3731 43.8524,-91.3596 43.8478,-91.351 43.8461,-91.3218 43.8508,-91.3047 43.8547)
+LINESTRING(-73.9923 41.1029,-73.9643 41.1027,-73.9443 41.0992,-73.9285 41.09,-73.9131 41.0724,-73.8914 41.0715,-73.8682 41.0663,-73.8474 41.0609,-73.833 41.0591)
+LINESTRING(-73.7215 41.0234,-73.7125 41.034,-73.6977 41.0478,-73.6909 41.0536)
+LINESTRING(-73.7215 41.0234,-73.7233 41.0316,-73.7251 41.0399,-73.7273 41.0534,-73.728 41.0641,-73.7185 41.0868)
+LINESTRING(-73.7215 41.0234,-73.7402 41.0298,-73.7738 41.0424,-73.8066 41.0552,-73.8225 41.0622)
+LINESTRING(-73.9923 41.1029,-74.0044 41.1037,-74.0162 41.1034,-74.0278 41.1019,-74.0393 41.0989)
+LINESTRING(-83.6783 43.0108,-83.7301 42.986)
+LINESTRING(-74.0393 41.0989,-74.0673 41.1007,-74.0979 41.1084,-74.1296 41.1172,-74.1608 41.122)
+LINESTRING(-74.1608 41.122,-74.1611 41.1241,-74.1614 41.1263,-74.1616 41.1285,-74.1619 41.1306,-74.1661 41.1343,-74.1711 41.1376,-74.1758 41.1409,-74.1793 41.1449,-74.1761 41.1998,-74.1678 41.2313,-74.1524 41.2603,-74.128 41.3077)
+LINESTRING(-74.1608 41.122,-74.1613 41.12,-74.1622 41.1179,-74.1636 41.116,-74.1652 41.1144)
+LINESTRING(-103.734 44.4736,-103.711 44.4809,-103.683 44.4805,-103.658 44.4731,-103.639 44.4599,-103.632 44.4592,-103.625 44.4586,-103.618 44.458,-103.611 44.4573,-103.59 44.4403,-103.57 44.4293,-103.547 44.4214,-103.519 44.4138,-103.49 44.3861,-103.459 44.3605,-103.436 44.3319,-103.435 44.2953,-103.426 44.284,-103.421 44.2723,-103.418 44.2606,-103.412 44.2493,-103.383 44.2185,-103.348 44.193,-103.317 44.173,-103.297 44.1587,-103.288 44.1473,-103.28 44.1354,-103.271 44.1235,-103.261 44.1121,-103.253 44.1087,-103.243 44.107,-103.232 44.1067,-103.223 44.1074)
+LINESTRING(-111.798 43.8524,-111.813 43.8369,-111.817 43.8188,-111.817 43.7902,-111.825 43.7812,-111.834 43.7726,-111.843 43.7643,-111.851 43.7563,-111.868 43.7345,-111.884 43.7128,-111.901 43.691,-111.918 43.6692,-111.945 43.6309,-111.989 43.5714,-112.037 43.5149,-112.057 43.4994)
+LINESTRING(-83.7301 42.986,-83.7183 42.9525)
+LINESTRING(-74.0393 41.0989,-74.0526 41.0641)
+LINESTRING(-112.057 43.4994,-112.075 43.4853)
+LINESTRING(-112.235 43.8383,-112.234 43.8343,-112.227 43.7987,-112.212 43.7564,-112.199 43.7289,-112.187 43.7034,-112.176 43.6791,-112.166 43.6555,-112.147 43.6188,-112.124 43.579,-112.099 43.5348,-112.075 43.4853)
+LINESTRING(-75.7163 41.9989,-75.7141 41.9948,-75.7112 41.98,-75.7125 41.9624,-75.7153 41.9468,-75.7171 41.9311,-75.7145 41.8989,-75.714 41.8855,-75.7106 41.8729,-75.7004 41.8609,-75.6934 41.8572,-75.6857 41.8549,-75.6782 41.8524,-75.6717 41.8483,-75.6675 41.8407,-75.6678 41.8327,-75.67 41.8243,-75.671 41.8153,-75.6708 41.8007,-75.6713 41.7873,-75.6731 41.774,-75.6768 41.7593,-75.6746 41.7363,-75.6727 41.7296,-75.6713 41.7228,-75.6705 41.716,-75.6705 41.7091,-75.6734 41.7026,-75.6792 41.6964,-75.6849 41.6906,-75.6877 41.6853,-75.6846 41.6792,-75.681 41.6731,-75.6769 41.6671,-75.6724 41.6615,-75.6663 41.6591,-75.6634 41.6548,-75.6624 41.6504,-75.6618 41.6461,-75.66 41.6418,-75.6557 41.6366,-75.6509 41.6316,-75.647 41.6263,-75.6452 41.6202,-75.6469 41.6015,-75.6521 41.5816,-75.6579 41.5614,-75.6612 41.5415,-75.6613 41.5353,-75.6616 41.5318,-75.6688 41.5154,-75.6749 41.5044,-75.6787 41.4926,-75.6784 41.4768,-75.6745 41.4736,-75.6696 41.4715,-75.6643 41.4675,-75.6592 41.4588,-75.652 41.455,-75.6477 41.4537,-75.6406 41.4511,-75.6349 41.4469,-75.6306 41.4414,-75.6277 41.4345,-75.6225 41.429,-75.6181 41.4278,-75.6135 41.4266,-75.6093 41.425)
+LINESTRING(-77.3326 42.3837,-77.3834 42.3879,-77.4276 42.386,-77.4676 42.3819,-77.5056 42.3793,-77.5173 42.38,-77.5289 42.3817,-77.5405 42.3831,-77.5523 42.3831,-77.5664 42.3811,-77.5803 42.3783,-77.5944 42.3758,-77.6092 42.375,-77.6199 42.376,-77.631 42.3779,-77.6417 42.3796,-77.6515 42.3802,-77.6754 42.3737,-77.7025 42.359,-77.7251 42.341,-77.7355 42.3242,-77.7715 42.3182,-77.7993 42.3171,-77.8251 42.3175,-77.8549 42.3158,-77.8707 42.3128,-77.8874 42.3084,-77.904 42.3036,-77.9195 42.2996,-77.9394 42.2964,-77.9594 42.2948,-77.9796 42.2936,-77.9997 42.2917,-78.0112 42.2896,-78.022 42.2863,-78.0555 42.2654,-78.0845 42.2414,-78.1157 42.2188,-78.1559 42.2022,-78.1806 42.2038,-78.2144 42.2129,-78.2531 42.2216,-78.2923 42.2216,-78.3117 42.2128,-78.3277 42.1982,-78.3429 42.1839,-78.3599 42.1761,-78.3716 42.1744,-78.3828 42.1722,-78.3932 42.1687,-78.4027 42.1633,-78.4062 42.1557,-78.4087 42.1488,-78.4141 42.1385,-78.4203 42.1296,-78.4288 42.1223,-78.4411 42.117,-78.4641 42.1118,-78.4852 42.1082,-78.5051 42.1033,-78.5246 42.094,-78.5366 42.0869,-78.5482 42.0812,-78.5608 42.0769,-78.5756 42.0735,-78.5947 42.0698,-78.612 42.0667,-78.6293 42.0655)
+LINESTRING(-78.6293 42.0655,-78.6485 42.0675,-78.6702 42.0788,-78.6824 42.0965,-78.6947 42.1142,-78.7163 42.1254)
+LINESTRING(-73.006 40.782,-72.8925 40.807,-72.7405 40.8444,-72.5934 40.8781,-72.495 40.8921)
+LINESTRING(-77.1159 42.0007,-77.1127 41.9972,-77.0977 41.9771,-77.0882 41.9525,-77.0872 41.9398,-77.0885 41.9282,-77.09 41.9166,-77.0899 41.9039,-77.0859 41.8911,-77.0785 41.8805,-77.0699 41.8699,-77.0628 41.8573,-77.0567 41.8379,-77.0549 41.8201,-77.0571 41.8024,-77.0631 41.7829,-77.0686 41.7703,-77.0752 41.7596,-77.084 41.7497,-77.0962 41.74,-77.104 41.7351,-77.1117 41.7311,-77.1187 41.727,-77.1243 41.7218)
+LINESTRING(-75.6093 41.425,-75.5912 41.4055,-75.5832 41.3929,-75.5796 41.3844,-75.5751 41.3772,-75.5579 41.3862,-75.5407 41.3948,-75.5229 41.4026,-75.5038 41.4093,-75.4739 41.3966,-75.4444 41.3717,-75.4127 41.3532,-75.3766 41.3596,-75.3577 41.3577,-75.3419 41.3507,-75.3274 41.3433,-75.3124 41.3399,-75.292 41.3417,-75.2725 41.3457,-75.2531 41.3506,-75.2336 41.3549,-75.208 41.3585,-75.1806 41.361,-75.1532 41.3627,-75.1274 41.3638,-75.0952 41.3624,-75.0628 41.3578,-75.0303 41.3527,-74.9981 41.35,-74.9866 41.3507,-74.9755 41.3524,-74.9642 41.3535,-74.9521 41.3527,-74.9277 41.3481,-74.9006 41.3428,-74.8737 41.338,-74.85 41.3352,-74.8375 41.3367,-74.8231 41.341,-74.8085 41.346,-74.7956 41.3495,-74.7631 41.3527,-74.7198 41.3545,-74.6991 41.355)
+LINESTRING(-78.8094 42.8135,-78.8058 42.8048,-78.8043 42.7965,-78.8031 42.7882,-78.8002 42.7791,-78.7947 42.7669,-78.7905 42.7557,-78.7889 42.7444,-78.7913 42.732,-78.8021 42.7125,-78.8179 42.6975,-78.8376 42.6844,-78.8606 42.6706,-78.8814 42.6572,-78.8986 42.6446,-78.9142 42.6309,-78.9301 42.6142,-78.9377 42.6084,-78.9477 42.6014,-78.9567 42.5951,-78.9657 42.5889,-78.9839 42.5767,-79.0031 42.5648,-79.0226 42.5534,-79.0421 42.542,-79.0661 42.5274,-79.0909 42.5124,-79.1166 42.4984,-79.1434 42.4867,-79.1541 42.4843,-79.1661 42.4833,-79.1785 42.4824,-79.1902 42.4804,-79.217 42.4715,-79.2438 42.4601,-79.2695 42.4473,-79.2931 42.4346,-79.3071 42.4376,-79.3149 42.438,-79.3486 42.4348,-79.3631 42.4237,-79.3739 42.4089,-79.3901 42.3945,-79.4289 42.384,-79.4824 42.3628,-79.5363 42.3389,-79.5768 42.3205,-79.6155 42.3025,-79.6706 42.2756,-79.7229 42.2486,-79.7529 42.2304,-79.7632 42.2237)
+LINESTRING(-74.1652 41.1144,-74.1653 41.1144,-74.1647 41.1105,-74.1641 41.1066,-74.1635 41.1027,-74.1629 41.0987,-74.1686 41.0979,-74.1744 41.0961,-74.1796 41.0937,-74.1837 41.0906,-74.1874 41.0753,-74.1917 41.0544,-74.1959 41.0357,-74.1992 41.0267,-74.2042 41.025,-74.2093 41.0233,-74.2143 41.0216,-74.2193 41.0199)
+LINESTRING(-74.0526 41.0641,-74.0593 41.0466,-74.0705 40.9916,-74.0779 40.9461,-74.0865 40.922)
+LINESTRING(-74.2193 41.0199,-74.1826 40.9931,-74.156 40.9667,-74.1279 40.9425,-74.0865 40.922)
+LINESTRING(-79.7632 42.2237,-79.7665 42.2215,-79.774 42.2166,-79.7791 42.2121,-79.7997 42.1956,-79.8325 42.1775,-79.8672 42.1611,-79.8904 42.1509)
+LINESTRING(-78.7163 42.1254,-78.7335 42.1253,-78.7476 42.119,-78.7592 42.1086,-78.7686 42.0962,-78.7745 42.0908,-78.7925 42.0874,-78.8031 42.0877,-78.8165 42.0868,-78.8301 42.0853,-78.8447 42.0857,-78.8576 42.0877,-78.8706 42.0902,-78.8853 42.0922,-78.894 42.0935,-78.9022 42.0951,-78.9099 42.0965,-78.9172 42.097,-78.9267 42.0981,-78.936 42.0994,-78.9576 42.1088,-78.9721 42.123,-78.9867 42.1372,-79.0083 42.1465,-79.0321 42.1486,-79.0535 42.1458,-79.0743 42.1393,-79.096 42.1303,-79.1083 42.1294,-79.1159 42.1296,-79.1306 42.1319,-79.1492 42.1373,-79.1599 42.1433,-79.1705 42.1492,-79.1891 42.1546,-79.2046 42.1563,-79.219 42.1556,-79.2332 42.153,-79.2479 42.1491,-79.2629 42.148,-79.2795 42.1512,-79.2964 42.156,-79.3121 42.1601,-79.3255 42.1642,-79.3363 42.1698,-79.347 42.1753,-79.3604 42.1794,-79.3757 42.1807,-79.3917 42.1795,-79.4077 42.1773,-79.4232 42.1751,-79.444 42.1709,-79.468 42.1641,-79.4879 42.1578,-79.5202 42.1544,-79.5444 42.1534,-79.5686 42.1522,-79.5924 42.1512,-79.6055 42.1499,-79.6195 42.1475,-79.6334 42.1448,-79.6462 42.1425,-79.7181 42.1307,-79.7633 42.1268)
+LINESTRING(-75.6093 41.425,-75.6452 41.3948,-75.681 41.3646,-75.7169 41.3344,-75.7526 41.3041,-75.7607 41.3009)
+LINESTRING(-79.7633 42.1268,-79.7641 42.1268,-79.8123 42.1329,-79.8904 42.1509)
+LINESTRING(-89.4906 43.4584,-89.4791 43.4773,-89.4822 43.507,-89.4905 43.5376,-89.4944 43.5594,-89.4891 43.5721,-89.479 43.5828,-89.4683 43.5933,-89.4615 43.6054,-89.4611 43.6089,-89.4615 43.6128,-89.4622 43.6165,-89.463 43.6201,-89.4652 43.6388,-89.464 43.6534,-89.4617 43.6671,-89.4608 43.6828,-89.465 43.7,-89.4732 43.7167,-89.4813 43.7336,-89.4849 43.7516,-89.4841 43.7744,-89.4829 43.7974,-89.4821 43.8204,-89.4823 43.8431,-89.4823 43.9025,-89.4815 43.9375,-89.4896 43.9703,-89.5166 44.023,-89.516 44.0276,-89.5325 44.0513,-89.5408 44.0818,-89.5381 44.1124,-89.5217 44.1364,-89.526 44.1876,-89.5264 44.2773,-89.525 44.3695,-89.5244 44.4282,-89.5191 44.4608,-89.5125 44.5028,-89.5196 44.5377,-89.5555 44.5488,-89.574 44.575,-89.5817 44.6134,-89.5865 44.6514,-89.5967 44.6769,-89.5952 44.6826,-89.5942 44.6885,-89.5938 44.6944,-89.5941 44.7002,-89.6044 44.71,-89.6147 44.7198,-89.625 44.7296,-89.6353 44.7394,-89.631 44.7779,-89.6267 44.7991,-89.6196 44.8123,-89.6064 44.827)
+LINESTRING(-90.4413 43.9878,-90.3743 43.9638,-90.278 43.932,-90.1851 43.8987,-90.1282 43.8703,-90.1085 43.852,-90.0896 43.8326,-90.0704 43.8136,-90.0502 43.7964,-90.0256 43.7821,-89.9979 43.7711,-89.9694 43.761,-89.9421 43.7494,-89.9097 43.7264,-89.8816 43.6955,-89.8582 43.6621,-89.8396 43.6316,-89.8393 43.6113,-89.8379 43.5905,-89.8365 43.5698,-89.836 43.5496,-89.8301 43.5455,-89.8232 43.5416,-89.8161 43.5378,-89.8094 43.5338,-89.7981 43.5325,-89.7855 43.5294,-89.7726 43.526,-89.7608 43.5234,-89.6981 43.5167,-89.6091 43.5058,-89.5285 43.4875,-89.4906 43.4584)
+LINESTRING(-85.5478 43.8901,-85.5456 43.8391,-85.5488 43.7879,-85.552 43.7367,-85.5501 43.6857,-85.5345 43.62,-85.5126 43.557,-85.4955 43.4934,-85.4946 43.4259,-85.4981 43.4242,-85.5016 43.4225,-85.5051 43.4208,-85.5086 43.4192,-85.5143 43.3572,-85.5356 43.3202,-85.5625 43.2883,-85.5854 43.2413,-85.5907 43.207,-85.5916 43.1716,-85.5942 43.1364,-85.6041 43.1032,-85.6162 43.0875,-85.6325 43.0747,-85.6498 43.0624,-85.665 43.0481,-85.6668 43.0405,-85.6715 43.0319,-85.6766 43.0229,-85.6792 43.0145)
+LINESTRING(-86.413 43.9542,-86.4124 43.9454,-86.4118 43.9366,-86.4112 43.9279,-86.4105 43.9191,-86.4064 43.9159,-86.4023 43.9127,-86.4006 43.8934,-86.3989 43.8738,-86.3984 43.8541,-86.4005 43.8348,-86.3975 43.827,-86.3971 43.8227,-86.3967 43.8184,-86.3907 43.8143,-86.3847 43.8102,-86.3898 43.7493,-86.3925 43.6517,-86.3866 43.554,-86.3657 43.4929,-86.3436 43.4809,-86.3379 43.474,-86.3381 43.4654,-86.3336 43.4483,-86.3287 43.4403,-86.3215 43.4317,-86.3137 43.4231,-86.3072 43.4155,-86.2743 43.3816,-86.2365 43.3488,-86.2046 43.3144,-86.1893 43.2758,-86.1867 43.2499,-86.184 43.2213,-86.1834 43.1928,-86.1868 43.1673,-86.174 43.1536,-86.1611 43.1399,-86.1483 43.1262,-86.1355 43.1126,-86.1248 43.1026,-86.1135 43.0911,-86.1011 43.0806,-86.0874 43.0738,-86.0659 43.0699,-86.0427 43.0687,-86.0192 43.068,-85.9972 43.0657,-85.9841 43.0622,-85.9711 43.0573,-85.9577 43.0526,-85.9434 43.0496,-85.9113 43.0463,-85.88 43.0429,-85.8488 43.0385,-85.8173 43.0323,-85.8044 43.0283,-85.7923 43.0236,-85.7798 43.0195,-85.7657 43.0173,-85.7437 43.0171,-85.7224 43.0177,-85.701 43.0174,-85.6792 43.0145)
+LINESTRING(-73.833 41.0591,-73.8357 41.0258,-73.8408 40.9938,-73.8475 40.9627,-73.8554 40.9319,-73.8634 40.9104,-73.8768 40.8889,-73.8975 40.8672,-73.9273 40.8448,-73.9457 40.8325,-73.9642 40.8202,-73.9692 40.8168)
+LINESTRING(-112.075 43.4853,-112.083 43.4738,-112.101 43.4547,-112.122 43.4352,-112.136 43.4224,-112.196 43.372,-112.263 43.3206,-112.333 43.2713,-112.4 43.2271,-112.401 43.2217)
+LINESTRING(-88.5892 43.947,-88.5852 43.8728,-88.57 43.8421,-88.5431 43.826,-88.5041 43.7953,-88.498 43.7852,-88.4955 43.7741,-88.4934 43.7629,-88.4884 43.7526,-88.4794 43.7473,-88.4675 43.7458,-88.455 43.7438,-88.4445 43.7369,-88.4093 43.6699,-88.401 43.6134,-88.3887 43.5657,-88.3415 43.5256,-88.3384 43.517,-88.3342 43.5087,-88.3306 43.5002,-88.3288 43.4909,-88.3292 43.4858,-88.3298 43.4806,-88.3295 43.4754,-88.3273 43.4704,-88.3095 43.4434,-88.2886 43.4093,-88.2678 43.3772,-88.2504 43.3562,-88.2324 43.3378,-88.218 43.3183,-88.204 43.2984,-88.1873 43.2789)
+LINESTRING(-92.9376 43.6742,-92.8982 43.6717,-92.8393 43.6707,-92.7819 43.672,-92.7466 43.6765,-92.7335 43.6829,-92.7215 43.6912,-92.7103 43.7004,-92.7 43.709,-92.6974 43.7126,-92.6656 43.7394,-92.6337 43.7662,-92.6022 43.7932,-92.5713 43.8205,-92.5563 43.8345,-92.5411 43.8495,-92.5255 43.8642,-92.5096 43.8775,-92.4905 43.8857,-92.4578 43.8964,-92.4234 43.9071,-92.3998 43.9154,-92.3869 43.9229,-92.3764 43.9318,-92.3667 43.9411,-92.356 43.9501)
+LINESTRING(-85.6792 43.0145,-85.6802 43.006,-85.6826 42.9982,-85.6833 42.991,-85.6823 42.9846,-85.6804 42.9782,-85.6785 42.9709)
+LINESTRING(-84.5448 42.8168,-84.5248 42.816)
+LINESTRING(-100.3 43.9101,-100.378 43.9093,-100.457 43.9085,-100.535 43.9075,-100.614 43.9066,-100.634 43.8977,-100.659 43.8904,-100.685 43.8851,-100.709 43.8823)
+LINESTRING(-93.2513 44.0587,-93.2522 44.0376,-93.2529 44.0167,-93.2543 43.9958,-93.2573 43.9749,-93.2616 43.9602,-93.2674 43.9454,-93.2726 43.9306,-93.2753 43.9161,-93.2749 43.9035,-93.2737 43.89,-93.2733 43.8766,-93.2755 43.8642,-93.2806 43.853,-93.2862 43.8427,-93.29 43.8321,-93.2896 43.8201,-93.3066 43.7927,-93.3147 43.7554,-93.3175 43.7164,-93.3191 43.6844)
+LINESTRING(-84.5248 42.816,-84.4864 42.8068,-84.4598 42.7967,-84.438 42.7864,-84.4216 42.7832,-84.3835 42.7933,-84.3473 42.8059,-84.3117 42.8195,-84.2757 42.8327,-84.2568 42.8373,-84.2382 42.8396,-84.2196 42.8413,-84.2009 42.8445,-84.1863 42.8491,-84.1635 42.8571,-84.1412 42.8654,-84.1281 42.871,-84.122 42.8752,-84.116 42.8801,-84.1101 42.8849,-84.1037 42.8887,-84.0823 42.8974,-84.0592 42.9049,-84.0362 42.9126,-84.015 42.9216,-83.9948 42.9364,-83.9787 42.9523,-83.9597 42.9651,-83.9305 42.9701,-83.8713 42.9683,-83.8247 42.9675,-83.7808 42.972,-83.7301 42.986)
+LINESTRING(-93.3191 43.6844,-93.2704 43.6718,-93.2174 43.6651,-93.1636 43.6623,-93.1123 43.6617,-93.0964 43.6612,-93.0715 43.6603,-93.0472 43.6598,-93.0333 43.6605,-93.016 43.668,-93.0035 43.6764,-92.9888 43.6826,-92.9648 43.6834,-92.9571 43.6817,-92.9511 43.6789,-92.9451 43.676,-92.9376 43.6742)
+LINESTRING(-74.2193 41.0199,-74.224 41.0234,-74.2296 41.0265,-74.2357 41.029,-74.2418 41.0309,-74.2575 41.0292,-74.2742 41.0264,-74.2886 41.0209,-74.2973 41.011,-74.3399 40.9405,-74.3851 40.9051,-74.4169 40.886,-74.4192 40.8642)
+LINESTRING(-100.709 43.8823,-100.745 43.8827,-100.795 43.8837,-100.842 43.8852,-100.873 43.887,-100.881 43.8894,-100.892 43.8939,-100.904 43.8985,-100.912 43.901,-100.948 43.905,-100.988 43.9079,-101.027 43.9095,-101.064 43.9095,-101.121 43.8986,-101.173 43.8763,-101.226 43.854,-101.285 43.8433,-101.306 43.8449,-101.325 43.8491,-101.343 43.8536,-101.362 43.856,-101.4 43.8573,-101.447 43.8572,-101.493 43.8528,-101.527 43.8412,-101.666 43.8467,-101.755 43.8469,-101.809 43.8453,-101.845 43.8452,-101.879 43.8493,-101.925 43.86,-101.996 43.8799,-102.108 43.9114,-102.146 43.9246,-102.175 43.9413,-102.196 43.9637,-102.207 43.9936,-102.256 43.9991,-102.299 44.0137,-102.335 44.0368,-102.364 44.0676,-102.394 44.0714,-102.421 44.0687,-102.448 44.0676,-102.475 44.0764,-102.49 44.0844,-102.504 44.0924,-102.518 44.1004,-102.532 44.1084,-102.622 44.107,-102.713 44.1055,-102.803 44.104,-102.894 44.1023,-102.899 44.1045,-102.904 44.1067,-102.909 44.1089,-102.914 44.1111,-102.969 44.113,-103.024 44.1148,-103.09 44.1165,-103.124 44.1162,-103.13 44.1125,-103.136 44.1087,-103.157 44.109,-103.179 44.1084,-103.201 44.1076,-103.223 44.1074)
+LINESTRING(-72.739 40.904,-72.7749 40.8829,-72.815 40.8659,-72.8575 40.8519,-72.9006 40.8402,-73.005 40.8244,-73.1224 40.8182,-73.2342 40.8135,-73.3216 40.8028,-73.3754 40.7893,-73.4042 40.7842,-73.4324 40.7877,-73.4845 40.7995,-73.4957 40.7984,-73.5088 40.793,-73.5219 40.7867,-73.5329 40.7831,-73.559 40.7818,-73.5869 40.7831,-73.615 40.785,-73.6415 40.7856,-73.6826 40.7786,-73.7229 40.7643,-73.7643 40.7495,-73.8087 40.7411,-73.8161 40.7407,-73.8236 40.7407,-73.8309 40.7415,-73.8379 40.7434,-73.8663 40.7315,-73.9027 40.7318,-73.9401 40.7381,-73.948 40.7396)
+LINESTRING(-73.948 40.7396,-73.9714 40.7442)
+LINESTRING(-85.6785 42.9709,-85.6601 42.9759,-85.632 42.9807,-85.603 42.9844,-85.5824 42.9861,-85.5643 42.9741,-85.5499 42.9555,-85.53 42.9338,-85.4952 42.9125,-85.4835 42.9088,-85.4708 42.9058,-85.4589 42.9018,-85.4498 42.8949,-85.4184 42.8921,-85.3894 42.8854,-85.3605 42.8785,-85.3294 42.8754,-85.2661 42.876,-85.2029 42.8775,-85.1397 42.8799,-85.0766 42.8829,-85.0555 42.8834,-85.0318 42.8828,-85.0083 42.8814,-84.9879 42.8792,-84.9823 42.8776,-84.9744 42.8744,-84.9662 42.8711,-84.96 42.8689,-84.9389 42.8657,-84.9149 42.8642,-84.8912 42.8619,-84.8715 42.8564,-84.8573 42.8483,-84.8442 42.8388,-84.8309 42.8293,-84.8161 42.8212,-84.7809 42.8114,-84.7451 42.8088,-84.7086 42.808,-84.6717 42.8033,-84.6479 42.8072,-84.5995 42.8125,-84.5504 42.8171,-84.5448 42.8168)
+LINESTRING(-79.8904 42.1509,-79.8934 42.1496,-79.9047 42.1385,-79.9182 42.1311,-79.9331 42.1249,-79.9486 42.1172,-79.9589 42.1104,-79.9675 42.1039,-79.9765 42.0977,-79.9875 42.0919,-80.0134 42.081,-80.0367 42.0715,-80.0597 42.0615,-80.0849 42.049,-80.0955 42.0438,-80.1051 42.0394,-80.1142 42.0353,-80.1234 42.0311)
+LINESTRING(-73.9982 40.7168,-74.0015 40.7203,-74.0085 40.7227)
+LINESTRING(-84.5248 42.816,-84.5211 42.7939,-84.5189 42.7837,-84.5153 42.7725,-84.5103 42.7605,-84.5063 42.7504,-84.5037 42.7401,-84.5032 42.7277)
+LINESTRING(-73.9692 40.8168,-73.984 40.8071,-74.0042 40.7946,-74.0158 40.7892,-74.0305 40.7845,-74.0452 40.7812,-74.057 40.7799,-74.0968 40.7731,-74.1378 40.7599,-74.1771 40.7508,-74.2119 40.7563)
+LINESTRING(-74.0865 40.922,-74.0934 40.9137,-74.1027 40.907,-74.1129 40.9008,-74.1226 40.894,-74.1567 40.8783,-74.1836 40.8382,-74.2022 40.7916,-74.2119 40.7563)
+LINESTRING(-74.4192 40.8642,-74.3982 40.8592,-74.3769 40.8542,-74.3568 40.8478,-74.3391 40.8387,-74.3243 40.8221,-74.3027 40.8089,-74.2777 40.7989,-74.2524 40.7918,-74.2491 40.7801,-74.2392 40.7703,-74.2258 40.7624,-74.2119 40.7563)
+LINESTRING(-73.1759 40.7462,-73.1912 40.756,-73.221 40.7554,-73.2536 40.7504,-73.2772 40.7471,-73.2811 40.7415,-73.2849 40.7359,-73.3131 40.7303,-73.3433 40.7275,-73.3744 40.7243,-73.4049 40.7179,-73.4078 40.7139,-73.4106 40.7099,-73.4304 40.7074,-73.4703 40.7036,-73.5096 40.7003,-73.5279 40.699,-73.5412 40.6951,-73.5565 40.6915,-73.5721 40.69,-73.5857 40.6922,-73.6096 40.6899,-73.6542 40.6881,-73.6996 40.6871,-73.7259 40.6874,-73.7268 40.6812,-73.7307 40.6755,-73.736 40.6701,-73.741 40.665,-73.7812 40.6654,-73.8202 40.6672,-73.8545 40.6608,-73.8723 40.6441)
+LINESTRING(-75.0847 40.9297,-75.0766 40.9255,-75.0588 40.9276,-75.0412 40.9316,-75.0238 40.9346,-75.0067 40.9335,-74.9575 40.9278,-74.8693 40.9207,-74.7818 40.9148,-74.7348 40.913,-74.7238 40.9066,-74.7174 40.8989,-74.7098 40.892,-74.6958 40.8881,-74.6596 40.8986,-74.6015 40.9063,-74.5425 40.9095,-74.5037 40.9068,-74.4886 40.8992,-74.4769 40.8887,-74.4575 40.8766,-74.4192 40.8642)
+LINESTRING(-75.6944 41.0667,-75.622 41.0751,-75.5059 41.0764,-75.3914 41.0709,-75.3241 41.0587,-75.3153 41.047,-75.3095 41.03,-75.2931 41.011,-75.2528 40.9936,-75.2067 40.9885,-75.1716 40.9932,-75.1477 40.9948,-75.1352 40.9809,-75.1176 40.9676,-75.1032 40.949,-75.0901 40.9326,-75.0847 40.9297)
+LINESTRING(-75.7607 41.3009,-75.7638 41.2949,-75.7663 41.283,-75.7679 41.2711,-75.7714 41.2588,-75.775 41.2517,-75.7794 41.2447,-75.784 41.2382,-75.7886 41.2317,-75.7914 41.2267,-75.7934 41.2215,-75.796 41.2167,-75.8007 41.2124,-75.8031 41.2068,-75.8035 41.2044,-75.8009 41.2028,-75.7942 41.1997,-75.7934 41.1903,-75.7891 41.1823,-75.7834 41.1747,-75.7786 41.1664,-75.7773 41.158,-75.7784 41.1486,-75.7798 41.1387,-75.7795 41.1292,-75.7668 41.118,-75.7553 41.1063,-75.7439 41.0946,-75.7318 41.0836,-75.7231 41.0789,-75.7128 41.0758,-75.7027 41.0724,-75.6944 41.0667)
+LINESTRING(-84.5032 42.7277,-84.4986 42.7172,-84.4964 42.7037,-84.4948 42.6897,-84.4921 42.6775)
+LINESTRING(-95.0011 43.6403,-94.9891 43.6415,-94.9692 43.6455,-94.9495 43.6499,-94.93 43.6531,-94.8817 43.6573,-94.8329 43.6603,-94.784 43.6629,-94.7355 43.666,-94.731 43.6665,-94.6735 43.6736,-94.6194 43.6773,-94.5653 43.6782,-94.5079 43.677,-94.4927 43.6773,-94.477 43.6785,-94.4613 43.6794,-94.4459 43.6789,-94.4363 43.6771,-94.4268 43.6745,-94.4173 43.6718,-94.4078 43.67,-94.3847 43.6688,-94.36 43.6696,-94.3351 43.671,-94.3117 43.672,-94.2579 43.6717,-94.2037 43.6699,-94.1496 43.6671,-94.0959 43.6641,-94.0185 43.661,-93.9375 43.6598,-93.8564 43.6604,-93.779 43.6628,-93.7475 43.6646,-93.7054 43.6671,-93.6633 43.6689,-93.6323 43.669,-93.6153 43.6678,-93.598 43.6664,-93.5806 43.6652,-93.5633 43.6645,-93.5463 43.6662,-93.5295 43.6706,-93.5126 43.6755,-93.4956 43.6786,-93.4772 43.6798,-93.4521 43.6815,-93.4277 43.6848,-93.4115 43.6904,-93.3883 43.6901,-93.3652 43.6884,-93.3421 43.6863,-93.3191 43.6844)
+LINESTRING(-73.8723 40.6441,-73.8804 40.6364,-73.8849 40.6296,-73.8874 40.6257)
+LINESTRING(-74.2119 40.7563,-74.2175 40.7433,-74.2266 40.7307,-74.2375 40.7189,-74.2484 40.7079)
+LINESTRING(-74.0085 40.7227,-74.0179 40.7259,-74.0365 40.7292,-74.0512 40.7304,-74.0697 40.7309,-74.0853 40.7304,-74.1004 40.7286,-74.1172 40.7251,-74.1292 40.7214,-74.1391 40.717,-74.1491 40.7127,-74.1611 40.709,-74.188 40.7049,-74.2157 40.7035,-74.238 40.7046,-74.2484 40.7079)
+LINESTRING(-95.5792 43.6386,-95.4369 43.6367,-95.294 43.6362,-95.1511 43.6371,-95.0088 43.6395,-95.0011 43.6403)
+LINESTRING(-122.598 42.006,-122.598 42.0059,-122.602 41.9736,-122.59 41.9422,-122.572 41.9112,-122.556 41.8801,-122.561 41.8716,-122.567 41.8618,-122.572 41.8532,-122.574 41.8483,-122.571 41.839,-122.569 41.8302,-122.568 41.8216,-122.571 41.8125,-122.572 41.8061,-122.573 41.7964,-122.575 41.7868,-122.577 41.7805,-122.6 41.7588,-122.627 41.7394,-122.641 41.7138,-122.625 41.6736,-122.599 41.6653,-122.573 41.6593,-122.548 41.652,-122.525 41.6396,-122.52 41.6233,-122.515 41.6071,-122.509 41.5909,-122.504 41.5747,-122.497 41.5611,-122.489 41.5477,-122.48 41.5344,-122.474 41.5209,-122.473 41.5169,-122.473 41.5123,-122.474 41.5076,-122.473 41.5037,-122.464 41.4852,-122.454 41.4661,-122.442 41.447,-122.431 41.4288,-122.42 41.4263)
+LINESTRING(-83.7183 42.9525,-83.721 42.9427,-83.7226 42.9329,-83.724 42.9232,-83.7261 42.9136,-83.7297 42.9041,-83.7346 42.895,-83.7394 42.8855,-83.7431 42.8753,-83.7437 42.8728,-83.7443 42.8703,-83.7449 42.8678,-83.7455 42.8653,-83.7434 42.8485,-83.7392 42.833,-83.7363 42.8174,-83.7381 42.8001,-83.7485 42.7782,-83.76 42.764,-83.7683 42.7472,-83.7689 42.7171,-83.7668 42.6988,-83.7647 42.6806,-83.7627 42.6624,-83.7606 42.6441,-83.7569 42.6306,-83.75 42.611,-83.7436 42.5926,-83.7412 42.5828,-83.7449 42.5683,-83.7487 42.5538,-83.7526 42.5394,-83.7565 42.5249)
+LINESTRING(-84.4921 42.6775,-84.4513 42.676,-84.411 42.6733,-84.3708 42.6702,-84.3303 42.6672,-84.301 42.6661,-84.2712 42.6659,-84.2415 42.6651,-84.2126 42.6624,-84.1936 42.6588,-84.1761 42.6544,-84.1581 42.6504,-84.1376 42.6479,-84.1167 42.6474,-84.0903 42.6471,-84.0647 42.6462,-84.0461 42.6435,-84.0176 42.6318,-83.9909 42.617,-83.9644 42.6021,-83.9365 42.59,-83.9056 42.5828,-83.8903 42.5834,-83.8683 42.5794,-83.8171 42.5579,-83.8013 42.5507,-83.785 42.5432,-83.7696 42.5347,-83.7565 42.5249)
+LINESTRING(-100.3 43.9101,-100.271 43.9102,-100.24 43.9106,-100.209 43.9104,-100.18 43.9085,-100.172 43.9059,-100.161 43.9008,-100.149 43.8956,-100.141 43.8929,-100.098 43.8899,-100.053 43.8895,-100.006 43.8899,-99.9625 43.8896,-99.9578 43.8896,-99.953 43.8896,-99.9482 43.8898,-99.9435 43.89,-99.923 43.8909,-99.9014 43.8921,-99.8799 43.8928,-99.8597 43.8923,-99.8209 43.8871,-99.7818 43.8784,-99.7427 43.8694,-99.7039 43.8628,-99.6796 43.8619,-99.6542 43.863,-99.6286 43.8637,-99.6043 43.8617,-99.5938 43.8588,-99.5831 43.8546,-99.5725 43.8505,-99.562 43.8477,-99.5494 43.8469,-99.5361 43.8472,-99.5227 43.8476,-99.51 43.8469,-99.4779 43.8379,-99.4482 43.8237,-99.4188 43.8097,-99.3877 43.8008,-99.3813 43.8024,-99.375 43.8039,-99.3686 43.8055,-99.3623 43.807,-99.3347 43.7979,-99.3033 43.781,-99.2728 43.7625,-99.248 43.7481,-99.1945 43.748,-99.1407 43.7483,-99.087 43.748,-99.0339 43.7459,-99.0189 43.7435,-99.0039 43.7395,-98.9885 43.7357,-98.9721 43.7343,-98.9199 43.736,-98.8653 43.7374,-98.811 43.7365,-98.7594 43.7312,-98.7374 43.7259,-98.715 43.7185,-98.6927 43.7114,-98.6708 43.7068,-98.6139 43.7043,-98.5566 43.7063,-98.4992 43.7066,-98.4418 43.6989)
+LINESTRING(-74.0268 40.6161,-74.0312 40.6111)
+LINESTRING(-93.3493 43.5035,-93.3509 43.5228,-93.3532 43.5418,-93.3541 43.561,-93.3516 43.5807,-93.3441 43.5994,-93.3337 43.6175,-93.324 43.6355,-93.319 43.6539,-93.3187 43.6575,-93.319 43.6611,-93.3202 43.6645,-93.3229 43.6676,-93.322 43.6718,-93.321 43.676,-93.32 43.6802,-93.3191 43.6844)
+LINESTRING(-74.021 40.6058,-74.0312 40.6111)
+LINESTRING(-74.047 40.6089,-74.0312 40.6111)
+LINESTRING(-96.8027 43.6348,-96.8095 43.6868,-96.8152 43.7407,-96.817 43.7946,-96.8122 43.8469,-96.8077 43.8596,-96.801 43.871,-96.7949 43.883,-96.7923 43.8978,-96.7918 44.007,-96.7905 44.1124,-96.7893 44.2179,-96.7888 44.327)
+LINESTRING(-95.5792 43.6386,-95.6824 43.6405,-95.9 43.6419,-96.1226 43.6412,-96.2408 43.6379,-96.2991 43.6284,-96.3368 43.6243,-96.3784 43.6235,-96.4485 43.6241,-96.4536 43.6241)
+LINESTRING(-96.4536 43.6241,-96.5335 43.6241,-96.6266 43.6242,-96.7192 43.627,-96.8027 43.6348)
+LINESTRING(-75.6944 41.0667,-75.7249 41.0605,-75.7734 41.0561,-75.8224 41.0541,-75.855 41.0548,-75.87 41.0575,-75.8822 41.0604,-75.8952 41.062,-75.9127 41.061,-75.9367 41.0576,-75.9607 41.0541,-75.9847 41.0506,-76.0087 41.0472,-76.0115 41.0462,-76.0142 41.045)
+LINESTRING(-75.7607 41.3009,-75.782 41.2933,-75.8051 41.2827,-75.8218 41.2712,-75.8249 41.2666,-75.8271 41.2617,-75.8298 41.2569,-75.8344 41.2528,-75.8454 41.2477,-75.8583 41.2431,-75.8707 41.2385,-75.8801 41.2334,-75.9005 41.2183,-75.9257 41.2003,-75.9487 41.1835,-75.9626 41.1723,-75.9679 41.154,-75.9659 41.1274,-75.9626 41.1006,-75.9641 41.082,-75.9727 41.0763,-75.9893 41.0678,-76.0057 41.0571,-76.0142 41.045)
+LINESTRING(-98.4418 43.6989,-98.2966 43.6976,-98.1514 43.6961,-98.0062 43.6945,-97.8609 43.6926,-97.8466 43.688,-97.8257 43.6781,-97.8035 43.6682,-97.7855 43.6638,-97.6208 43.6652,-97.456 43.6654,-97.2912 43.6656,-97.1265 43.6668,-97.0663 43.6345,-96.9797 43.6271,-96.8857 43.6315,-96.8027 43.6348)
+LINESTRING(-88.1873 43.2789,-88.1684 43.2396,-88.1487 43.2177,-88.1192 43.2003,-88.0712 43.1749,-88.0662 43.1714,-88.0615 43.1676,-88.0563 43.1641,-88.0501 43.1619,-88.0456 43.1393,-88.0415 43.0949,-88.0395 43.0506,-88.0417 43.0281)
+LINESTRING(-82.4874 42.9738,-82.4887 42.9688,-82.4901 42.9639,-82.4915 42.9589,-82.4929 42.9539,-82.5006 42.9501,-82.5084 42.9462,-82.5078 42.9351,-82.5072 42.9241,-82.5072 42.909,-82.5091 42.9007,-82.5572 42.861,-82.6052 42.8211,-82.6556 42.7832,-82.7109 42.7493,-82.7586 42.7291,-82.8097 42.7094,-82.8536 42.6834,-82.8794 42.6448,-82.8806 42.6343,-82.8796 42.6235,-82.8786 42.6129,-82.8797 42.6034,-82.8842 42.5997,-82.8908 42.5961,-82.8932 42.5928,-82.8848 42.5903,-82.9107 42.5603,-82.9261 42.5228,-82.9324 42.4831,-82.9311 42.4464,-82.9446 42.4235,-82.981 42.4023,-83.0246 42.3837,-83.0596 42.3688)
+LINESTRING(-83.7183 42.9525,-83.6929 42.9342,-83.6792 42.9219,-83.6615 42.9094,-83.6244 42.8904,-83.6011 42.8727,-83.5888 42.8509,-83.5788 42.8277,-83.5623 42.8058,-83.5442 42.7885,-83.5246 42.7699,-83.5027 42.7531,-83.4776 42.7411,-83.461 42.7443,-83.441 42.7471,-83.421 42.7484,-83.4043 42.7471,-83.3824 42.7384,-83.3616 42.7249,-83.3409 42.7115,-83.3195 42.7032,-83.3016 42.7024,-83.2864 42.7041,-83.2707 42.703,-83.2513 42.6938,-83.2408 42.6577,-83.2401 42.6306,-83.2251 42.612,-83.1715 42.6013,-83.1611 42.5891,-83.159 42.5803,-83.1588 42.5718,-83.1542 42.5604,-83.1472 42.5584,-83.14 42.5575,-83.1325 42.5571,-83.1251 42.5565,-83.1173 42.5423,-83.1171 42.5159,-83.1134 42.4828,-83.0955 42.4484,-83.0901 42.4316,-83.0803 42.4089,-83.0691 42.3861,-83.0596 42.3688)
+LINESTRING(-83.7565 42.5249,-83.7427 42.5245,-83.7289 42.5241,-83.7151 42.5237,-83.7012 42.5233,-83.6909 42.5218,-83.6801 42.5189,-83.6696 42.5162,-83.6599 42.5151,-83.6501 42.5194,-83.6404 42.5215,-83.6302 42.5216,-83.6192 42.5197,-83.5868 42.5116,-83.5541 42.5032,-83.5214 42.4952,-83.4886 42.4881,-83.4529 42.4836,-83.4302 42.4857,-83.4101 42.4909,-83.3825 42.4956,-83.3584 42.4955,-83.3198 42.4933,-83.2824 42.4896,-83.2617 42.4849,-83.251 42.4774,-83.2403 42.4698,-83.2296 42.4623,-83.2189 42.4547,-83.2075 42.4453,-83.197 42.4349,-83.1865 42.4246,-83.1748 42.4154,-83.1466 42.3983,-83.126 42.3893,-83.101 42.3818,-83.0596 42.3688)
+LINESTRING(-82.9946 42.3364,-83.0596 42.3688)
+LINESTRING(-80.1234 42.0311,-80.141 42.0234,-80.1612 42.0171,-80.1816 42.0117,-80.1998 42.0066,-80.2443 41.9897,-80.283 41.9716,-80.3209 41.9542,-80.3628 41.9395,-80.3838 41.9341,-80.4046 41.9301,-80.4257 41.9277,-80.4475 41.9269,-80.4588 41.9272,-80.4712 41.9277,-80.4836 41.9277,-80.4944 41.9267,-80.5191 41.9124)
+LINESTRING(-87.7752 44.1353,-87.7756 44.1105,-87.7738 44.0844,-87.7696 44.062,-87.7627 44.0481,-87.7702 44.0209,-87.7869 43.9874,-87.8055 43.9531,-87.8185 43.9235,-87.8221 43.9079,-87.8259 43.8848,-87.8284 43.862,-87.828 43.8471,-87.8253 43.8399,-87.8216 43.8327,-87.8178 43.8255,-87.8148 43.8183,-87.8126 43.796,-87.8118 43.7582,-87.8121 43.7203,-87.8133 43.698,-87.8293 43.6411,-87.8528 43.5851,-87.8743 43.5293,-87.8844 43.4729,-87.8864 43.4615,-87.8921 43.4485,-87.9021 43.4375,-87.9169 43.4321,-87.9323 43.431,-87.9476 43.4302,-87.963 43.429,-87.9782 43.4273,-87.9768 43.4123,-87.9743 43.3972,-87.9721 43.3821,-87.9713 43.3672,-87.972 43.3354,-87.9727 43.3037,-87.9734 43.272,-87.9741 43.2402,-87.9697 43.2155,-87.9592 43.1898,-87.9488 43.1636,-87.9444 43.1377,-87.9436 43.1137,-87.9411 43.0895,-87.938 43.0649,-87.9355 43.0401,-87.935 43.0363,-87.9343 43.033,-87.9337 43.0297,-87.9334 43.026,-87.9338 43.0148,-87.9347 43.0051,-87.9354 42.9954,-87.9348 42.9844,-87.9338 42.9794,-87.9323 42.9751,-87.9311 42.9708,-87.9307 42.9659)
+LINESTRING(-89.2847 43.0992,-89.2458 43.1061,-89.1835 43.1092,-89.1194 43.1103,-89.0753 43.1106,-89.0438 43.1115,-89.0108 43.1125,-88.978 43.1116,-88.9473 43.1069,-88.93 43.1016,-88.9123 43.0952,-88.8945 43.0894,-88.8772 43.0857,-88.8229 43.0835,-88.7623 43.086,-88.7005 43.0894,-88.6426 43.0898,-88.6119 43.0851,-88.5876 43.0766,-88.5638 43.0676,-88.5344 43.0618,-88.5159 43.0616,-88.4972 43.0632,-88.4785 43.0649,-88.4602 43.0647,-88.4519 43.0631,-88.4449 43.0605,-88.4383 43.0576,-88.4311 43.0551,-88.4084 43.0507,-88.3817 43.048,-88.3546 43.0466,-88.3309 43.046,-88.3039 43.047,-88.2755 43.0495,-88.2475 43.0515,-88.2217 43.0509,-88.1794 43.0415,-88.1422 43.0291,-88.0998 43.0219,-88.0417 43.0281)
+LINESTRING(-89.4906 43.4584,-89.4837 43.4436,-89.4761 43.429,-89.469 43.4143,-89.4635 43.3992,-89.4605 43.3819,-89.4589 43.3618,-89.4571 43.3424,-89.4535 43.3273,-89.4423 43.3117,-89.4241 43.2938,-89.4044 43.276,-89.3887 43.2609,-89.379 43.248,-89.3707 43.2341,-89.3629 43.2198,-89.3543 43.2063,-89.3447 43.1947,-89.3338 43.1834,-89.3228 43.1719,-89.3129 43.1598,-89.3042 43.1452,-89.2976 43.13,-89.2917 43.1147,-89.2847 43.0992)
+LINESTRING(-88.0378 42.972,-88.0367 42.9797,-88.0368 42.9862,-88.0379 42.9926,-88.0397 43.0003,-88.0398 43.0021,-88.0392 43.0054,-88.0394 43.0071,-88.0405 43.0096,-88.0418 43.0119,-88.0427 43.0142,-88.0427 43.0168,-88.0427 43.0195,-88.0441 43.0233,-88.0417 43.0281)
+LINESTRING(-87.9307 42.9659,-87.9472 42.9657,-87.9612 42.9651,-87.9752 42.9651,-87.9914 42.9662,-88.0016 42.9678,-88.0105 42.9698,-88.0194 42.9718,-88.0297 42.9734,-88.0319 42.9734,-88.0339 42.973,-88.0358 42.9725,-88.0378 42.972)
+LINESTRING(-112.401 43.2217,-112.41 43.183,-112.422 43.1449,-112.43 43.1074,-112.428 43.0646,-112.427 43.0498,-112.429 43.0302,-112.43 43.0132,-112.431 43.0059,-112.432 42.9819,-112.432 42.9579,-112.433 42.9339,-112.434 42.9099)
+LINESTRING(-114.442 42.6609,-114.473 42.6804,-114.509 42.7039,-114.547 42.7243,-114.591 42.7387,-114.661 42.7573,-114.721 42.7798,-114.77 42.8081,-114.812 42.8437,-114.845 42.8839,-114.874 42.919,-114.912 42.9452,-114.973 42.9585,-115.054 42.9592,-115.131 42.9536,-115.209 42.9484,-115.29 42.9504,-115.337 42.958,-115.382 42.9706,-115.424 42.9875,-115.463 43.0078,-115.508 43.0395,-115.538 43.0733,-115.567 43.1107,-115.608 43.1533,-115.628 43.1686)
+LINESTRING(-74.6491 40.6414,-74.6315 40.6408,-74.6125 40.6425,-74.5935 40.6449,-74.5758 40.6464,-74.5462 40.6467,-74.5161 40.6467,-74.4862 40.6479,-74.457 40.6519,-74.4054 40.6713,-74.3601 40.6963,-74.3111 40.7131,-74.2484 40.7079)
+LINESTRING(-74.4192 40.8642,-74.4484 40.8139,-74.4814 40.7821,-74.5097 40.7634,-74.5249 40.7521,-74.5333 40.7398,-74.547 40.7209,-74.5608 40.7028,-74.5698 40.6932,-74.586 40.6853,-74.6041 40.679,-74.6217 40.6728,-74.6362 40.6653,-74.6419 40.6604,-74.6465 40.6546,-74.6492 40.6481,-74.6491 40.6414)
+LINESTRING(-124.094 40.9198,-124.092 40.9291,-124.089 40.9384,-124.087 40.9477,-124.085 40.957,-124.084 40.9643,-124.082 40.9716,-124.081 40.9789,-124.08 40.9863,-124.077 40.9942,-124.075 41.0021,-124.072 41.01,-124.069 41.018,-124.07 41.0256,-124.072 41.0332,-124.073 41.0408,-124.074 41.0485,-124.077 41.0534,-124.08 41.0584,-124.083 41.0634,-124.085 41.0684,-124.089 41.0711,-124.093 41.0737,-124.097 41.0764,-124.101 41.0791,-124.104 41.0812,-124.108 41.0834,-124.111 41.0855,-124.114 41.0877,-124.116 41.0911,-124.117 41.0946,-124.118 41.098,-124.12 41.1015,-124.119 41.1056,-124.119 41.1097,-124.118 41.1138,-124.117 41.1179,-124.113 41.1218,-124.108 41.1257,-124.104 41.1296,-124.1 41.1335,-124.094 41.1373,-124.088 41.141,-124.083 41.1448,-124.077 41.1486,-124.078 41.154,-124.079 41.1595,-124.079 41.1649,-124.08 41.1704,-124.081 41.1767,-124.081 41.1831,-124.082 41.1894,-124.082 41.1958,-124.079 41.2005,-124.076 41.2053,-124.072 41.2101,-124.069 41.2149)
+LINESTRING(-83.0596 42.3688,-83.0729 42.3649,-83.083 42.3596,-83.0863 42.3495,-83.0979 42.3434,-83.1104 42.3388,-83.1219 42.3351,-83.1324 42.3307,-83.1419 42.324,-83.1495 42.3151,-83.155 42.3061,-83.161 42.2976,-83.1706 42.2901)
+LINESTRING(-74.3047 40.5207,-74.2844 40.5221,-74.2641 40.5236,-74.2488 40.5247)
+LINESTRING(-74.3047 40.5207,-74.3256 40.5656,-74.3297 40.5853,-74.3178 40.6039,-74.2905 40.6454,-74.2818 40.6649,-74.2774 40.6789,-74.269 40.6918,-74.2484 40.7079)
+LINESTRING(-74.3452 40.5271,-74.3351 40.5255,-74.325 40.5239,-74.3149 40.5223,-74.3047 40.5207)
+LINESTRING(-74.3047 40.5207,-74.3039 40.513,-74.3049 40.5062,-74.3054 40.504)
+LINESTRING(-89.2847 43.0992,-89.2893 43.0988,-89.303 43.0989,-89.3163 43.0972,-89.329 43.0922,-89.3379 43.0813,-89.338 43.0684,-89.3372 43.0549,-89.3436 43.0423,-89.3682 43.0318,-89.3984 43.0319,-89.4287 43.0345,-89.4508 43.0316)
+LINESTRING(-74.3452 40.5271,-74.3675 40.5306,-74.4 40.5403,-74.4367 40.5509,-74.4716 40.5571,-74.4846 40.5536,-74.4981 40.5457,-74.5138 40.5397,-74.5333 40.5421,-74.5549 40.5612,-74.558 40.5716,-74.5681 40.5786,-74.6108 40.587,-74.6225 40.5965,-74.6345 40.6119,-74.6443 40.6284,-74.6491 40.6414)
+LINESTRING(-80.5191 41.9124,-80.5359 41.9028,-80.568 41.8905,-80.5971 41.8812,-80.6299 41.866,-80.6578 41.8508,-80.6868 41.8382,-80.7193 41.8289,-80.7581 41.8236)
+LINESTRING(-74.3054 40.504,-74.3065 40.4996,-74.3078 40.4926,-74.3041 40.4752,-74.2919 40.4649,-74.2918 40.4648)
+LINESTRING(-77.0787 41.298,-77.0674 41.2774,-77.0605 41.2697,-77.0497 41.2651,-77.0341 41.264,-77.0201 41.2667,-77.0061 41.271,-76.9906 41.2748,-76.9641 41.2795,-76.9397 41.2827,-76.9153 41.2831,-76.8884 41.2794,-76.8281 41.2663,-76.7978 41.2547,-76.7764 41.2361,-76.7659 41.213,-76.7683 41.1881,-76.7782 41.1717,-76.8043 41.1455,-76.8141 41.1291,-76.822 41.109,-76.829 41.0913,-76.8354 41.0735,-76.8409 41.051)
+LINESTRING(-75.2104 40.6668,-75.1983 40.6721,-75.1867 40.6723,-75.1788 40.6686,-75.1718 40.6643,-75.1629 40.6629,-75.1561 40.6653,-75.1497 40.6673,-75.1429 40.6687,-75.1351 40.6694,-75.1202 40.6605,-75.0972 40.6582,-75.073 40.6597,-75.0544 40.662,-75.0404 40.6582,-75.0143 40.6487,-74.9875 40.6387,-74.9712 40.6329,-74.954 40.6339,-74.9376 40.633,-74.9217 40.632,-74.9058 40.6327,-74.8702 40.6401,-74.8509 40.647,-74.822 40.651,-74.7575 40.6498,-74.7304 40.6477,-74.7036 40.6447,-74.6766 40.6423,-74.6491 40.6414)
+LINESTRING(-83.7565 42.5249,-83.7575 42.5218,-83.7585 42.5186,-83.7594 42.5155,-83.7604 42.5123,-83.7613 42.5091,-83.7623 42.5059,-83.762 42.5026,-83.7617 42.4993,-83.7601 42.4863,-83.7579 42.4732,-83.756 42.46,-83.7553 42.4472,-83.7567 42.4352,-83.7596 42.4239,-83.7622 42.4123,-83.7627 42.4001,-83.7582 42.3787,-83.7507 42.3573,-83.7438 42.3358,-83.7413 42.3142,-83.7413 42.3098,-83.7419 42.3058,-83.7441 42.3025,-83.7493 42.2998,-83.7567 42.3016,-83.764 42.3037,-83.7711 42.306,-83.7781 42.3086,-83.7798 42.3084,-83.7815 42.3082,-83.7833 42.308,-83.785 42.3078,-83.7912 42.3031,-83.7967 42.2983,-83.8019 42.2933,-83.8068 42.2878)
+LINESTRING(-76.0142 41.045,-76.0489 41.0373,-76.0843 41.0266,-76.1177 41.0162,-76.1465 41.0092,-76.1569 41.0097,-76.1696 41.0126,-76.183 41.0159,-76.1957 41.0175,-76.21 41.016,-76.2213 41.0123,-76.2313 41.0083,-76.2422 41.0057,-76.2628 41.0078,-76.2897 41.0152,-76.316 41.0248,-76.3343 41.0338,-76.3537 41.0385,-76.3776 41.0357,-76.4023 41.03,-76.4239 41.026,-76.4288 41.0264,-76.451 41.0268,-76.4657 41.0241,-76.4789 41.0199,-76.4966 41.0157,-76.5151 41.0132,-76.5337 41.0118,-76.5524 41.0107,-76.5709 41.0094,-76.5876 41.0072,-76.6045 41.0039,-76.6214 41.0003,-76.638 40.9972,-76.6846 40.9906,-76.7198 40.99,-76.7517 40.9986,-76.7882 41.0194,-76.7993 41.0295,-76.8081 41.0394,-76.8201 41.0472,-76.8409 41.051)
+LINESTRING(-83.6852 42.227,-83.6769 42.2267,-83.6688 42.226,-83.6606 42.2253,-83.6525 42.2245,-83.6372 42.2254,-83.6215 42.2285,-83.6059 42.2318,-83.5908 42.2331,-83.5842 42.2325,-83.5777 42.2312,-83.5714 42.2296,-83.5649 42.2285,-83.5213 42.2248,-83.4721 42.2244,-83.4231 42.2272,-83.38 42.2337,-83.3549 42.2409,-83.3308 42.25,-83.3069 42.2588,-83.2824 42.2654,-83.2651 42.2667,-83.2468 42.2661,-83.229 42.2665,-83.2134 42.2705,-83.2018 42.2749,-83.19 42.2786,-83.1791 42.2832,-83.1706 42.2901)
+LINESTRING(-83.8068 42.2878,-83.8041 42.2784,-83.8013 42.269,-83.7985 42.2596,-83.7958 42.2502,-83.7876 42.246,-83.7739 42.2422,-83.7597 42.2389,-83.75 42.2357,-83.7343 42.2352,-83.7163 42.2343,-83.699 42.2319,-83.6852 42.227)
+LINESTRING(-84.4342 42.277,-84.4068 42.2771,-84.3793 42.2771,-84.3519 42.2771,-84.3245 42.2771,-84.3041 42.2793,-84.2831 42.284,-84.2618 42.2892,-84.2402 42.2924,-84.2306 42.2924,-84.2212 42.2915,-84.212 42.2906,-84.2031 42.2904,-84.1795 42.2929,-84.1556 42.2962,-84.1317 42.2986,-84.1079 42.2983,-84.0996 42.297,-84.0909 42.2954,-84.0823 42.2939,-84.074 42.2931,-84.0624 42.2934,-84.0505 42.2946,-84.0384 42.2961,-84.0267 42.2972,-83.9913 42.2985,-83.9422 42.2997,-83.8945 42.3003,-83.8635 42.2999,-83.8524 42.298,-83.8371 42.2944,-83.8208 42.2905,-83.8068 42.2878)
+LINESTRING(-84.4921 42.6775,-84.4895 42.6754,-84.4869 42.6733,-84.4844 42.6712,-84.4818 42.6691,-84.4788 42.6555,-84.4779 42.6419,-84.4773 42.6282,-84.4753 42.6145,-84.4698 42.5987,-84.4625 42.5834,-84.455 42.5683,-84.4491 42.5527,-84.4452 42.5258,-84.4449 42.4921,-84.4467 42.4585,-84.4489 42.4318,-84.4457 42.4297,-84.4425 42.4276,-84.4393 42.4255,-84.4361 42.4234,-84.4303 42.3962,-84.4306 42.3533,-84.4333 42.3089,-84.4342 42.277)
+LINESTRING(-112.434 42.9099,-112.457 42.9131,-112.475 42.9127,-112.492 42.9119,-112.509 42.9109,-112.564 42.8995,-112.61 42.8882,-112.659 42.867,-112.724 42.8258,-112.729 42.8212,-112.74 42.8153,-112.751 42.8094,-112.756 42.8047,-112.763 42.799,-112.772 42.7939,-112.781 42.789,-112.789 42.7838,-112.807 42.7701,-112.826 42.7554,-112.861 42.7261,-112.899 42.695,-112.944 42.659,-112.992 42.6256,-113.038 42.6023,-113.125 42.585,-113.265 42.5669,-113.405 42.5518,-113.492 42.5377)
+LINESTRING(-113.492 42.5377,-113.555 42.5452,-113.654 42.562,-113.751 42.5795,-113.805 42.5892,-113.816 42.5895,-113.836 42.5896,-113.851 42.5896,-113.866 42.5896,-113.918 42.5878,-113.967 42.5838,-114.016 42.5797,-114.069 42.5775,-114.122 42.581,-114.172 42.5896,-114.222 42.5992,-114.275 42.6055,-114.316 42.6218,-114.349 42.6325,-114.385 42.6425,-114.436 42.6568,-114.442 42.6609)
+LINESTRING(-84.5032 42.7277,-84.544 42.7298,-84.5861 42.7284,-84.6283 42.7259,-84.6692 42.7251,-84.6693 42.7178,-84.6693 42.7105,-84.6693 42.7033,-84.6694 42.696,-84.6711 42.6862,-84.6752 42.6798,-84.6805 42.6741,-84.6858 42.6662,-84.7069 42.6353,-84.7363 42.6107,-84.7733 42.5917,-84.817 42.578,-84.8208 42.5753,-84.8197 42.5439,-84.8237 42.5257,-84.8371 42.5111,-84.8647 42.4904,-84.8732 42.4837,-84.8821 42.4764,-84.8913 42.4694,-84.9006 42.4636,-84.9125 42.4611,-84.9208 42.4644,-84.9288 42.4659,-84.9398 42.4581,-84.9474 42.4459,-84.9473 42.4365,-84.9441 42.4277,-84.9426 42.4177,-84.9456 42.4077,-84.9514 42.3977,-84.9576 42.3878,-84.9615 42.3779,-84.9641 42.3621,-84.966 42.3462,-84.9678 42.3303,-84.9704 42.3144)
+LINESTRING(-75.6944 41.0667,-75.6846 41.0583,-75.6748 41.0499,-75.6649 41.0415,-75.6551 41.033,-75.6385 41.013,-75.631 40.9909,-75.6307 40.9679,-75.6361 40.9452,-75.6394 40.9382,-75.644 40.9313,-75.6483 40.9244,-75.6512 40.9177,-75.6517 40.9095,-75.6506 40.9018,-75.6502 40.8943,-75.6528 40.8869,-75.6608 40.8737,-75.6632 40.8652,-75.6628 40.8564,-75.6619 40.8421,-75.677 40.8216,-75.6768 40.8033,-75.6661 40.7845,-75.65 40.7625,-75.6437 40.7521,-75.6389 40.7417,-75.6345 40.7313,-75.6292 40.7209,-75.6221 40.712,-75.6134 40.7041,-75.6049 40.6957,-75.598 40.6855,-75.5877 40.6607,-75.5773 40.6325,-75.5671 40.6044,-75.5573 40.5797)
+LINESTRING(-84.9704 42.3144,-84.9449 42.3108,-84.9235 42.305,-84.9019 42.2997,-84.876 42.2974,-84.8588 42.2972,-84.8406 42.2963,-84.8226 42.2951,-84.8057 42.2938,-84.7835 42.2881,-84.766 42.2789,-84.7434 42.2707,-84.7061 42.2679,-84.648 42.2697,-84.59 42.2715,-84.532 42.2732,-84.474 42.2749,-84.4639 42.275,-84.454 42.275,-84.4442 42.2755,-84.4342 42.277)
+LINESTRING(-75.5573 40.5797,-75.555 40.5765)
+LINESTRING(-75.5573 40.5797,-75.5517 40.5775,-75.5455 40.5739,-75.5389 40.5702,-75.5316 40.5675,-75.5094 40.5641,-75.4858 40.5625,-75.4617 40.561,-75.4381 40.5578,-75.4273 40.5585,-75.415 40.5626,-75.4025 40.5677,-75.3911 40.5711,-75.3758 40.5842,-75.3556 40.5911,-75.3342 40.596,-75.3156 40.603,-75.2908 40.619,-75.2571 40.6408,-75.2234 40.661,-75.2104 40.6668)
+LINESTRING(-112.201 42.6298,-112.209 42.6546,-112.217 42.6874,-112.225 42.7202,-112.229 42.7453,-112.23 42.7623,-112.229 42.7735,-112.232 42.784,-112.246 42.7988,-112.288 42.8047,-112.339 42.8068,-112.385 42.8157,-112.412 42.842,-112.418 42.8591,-112.423 42.8761,-112.429 42.893,-112.434 42.9099)
+LINESTRING(-74.2918 40.4648,-74.2769 40.4554,-74.2651 40.4403,-74.204 40.4073,-74.1419 40.3671,-74.0952 40.3193,-74.0801 40.2634,-74.0863 40.2407,-74.0959 40.2196,-74.103 40.1971,-74.1017 40.1701)
+LINESTRING(-76.8409 41.051,-76.851 41.052,-76.8612 41.0526,-76.8715 41.053,-76.8817 41.0535,-76.8911 41.0592,-76.9005 41.0649,-76.9099 41.0706,-76.9193 41.0764,-76.9468 41.0804,-76.9908 41.0777,-77.0365 41.0721,-77.0686 41.0674,-77.0809 41.0615,-77.1003 41.0507,-77.1214 41.0423,-77.1388 41.0436,-77.1545 41.0509,-77.181 41.0577,-77.2079 41.0625,-77.2246 41.0638,-77.2438 41.0615,-77.263 41.0593,-77.2822 41.0571,-77.3014 41.0548,-77.3097 41.0541,-77.3181 41.0535,-77.3266 41.0529,-77.335 41.0522,-77.3418 41.0526,-77.3485 41.0547,-77.3548 41.0577,-77.3605 41.0604,-77.3674 41.0615,-77.3763 41.0612,-77.3855 41.0606,-77.3934 41.0608,-77.3985 41.0626,-77.4025 41.0653,-77.4064 41.0683,-77.4111 41.0707,-77.4219 41.0698,-77.4336 41.0631,-77.4448 41.0543,-77.4538 41.0473,-77.4811 41.0385,-77.5133 41.0325,-77.546 41.0262,-77.575 41.0169,-77.5928 41.0063,-77.6095 40.9931,-77.6258 40.9795,-77.6424 40.9673,-77.6611 40.9638,-77.6786 40.9578,-77.6958 40.9509,-77.7136 40.945,-77.7289 40.9483,-77.7435 40.9519,-77.7582 40.9546,-77.7738 40.9549)
+LINESTRING(-85.6376 42.2366,-85.6218 42.237,-85.606 42.2375,-85.5902 42.238,-85.5743 42.2384,-85.5313 42.2409,-85.5022 42.2422,-85.4737 42.244,-85.4322 42.2483,-85.4119 42.2525,-85.3939 42.2584,-85.3755 42.2631,-85.3546 42.264,-85.3173 42.2623,-85.2795 42.2628,-85.2415 42.2645,-85.2033 42.2666,-85.1748 42.2715,-85.1461 42.2809,-85.117 42.2905,-85.0874 42.2963,-85.0584 42.3001,-85.0201 42.3064,-84.9862 42.3121,-84.9704 42.3144)
+LINESTRING(-85.6785 42.9709,-85.6785 42.9584,-85.6809 42.9471,-85.6838 42.9359,-85.6853 42.9241,-85.6854 42.9068,-85.6852 42.8888,-85.6844 42.8709,-85.683 42.8536,-85.6797 42.836,-85.6751 42.8173,-85.6715 42.7987,-85.6714 42.7812,-85.674 42.7688,-85.6772 42.7559,-85.6792 42.7429,-85.6782 42.7304,-85.6762 42.7256,-85.6731 42.7208,-85.67 42.716,-85.6678 42.7112,-85.6624 42.6735,-85.6614 42.6283,-85.6625 42.5821,-85.663 42.5416,-85.6627 42.5394,-85.6625 42.5371,-85.6575 42.4983,-85.6596 42.4732,-85.6636 42.4514,-85.6645 42.4226,-85.6628 42.4111,-85.6602 42.3996,-85.6576 42.388,-85.6563 42.3766,-85.6584 42.3562,-85.6633 42.3362,-85.6671 42.316,-85.666 42.2954,-85.6607 42.2798,-85.6534 42.2654,-85.6453 42.2513,-85.6376 42.2366)
+LINESTRING(-74.3452 40.5271,-74.4324 40.4431,-74.4661 40.3633,-74.5045 40.2817,-74.6054 40.1925)
+LINESTRING(-74.1017 40.1701,-74.1494 40.1709,-74.2354 40.1637,-74.3298 40.1571,-74.4026 40.1598,-74.4059 40.1589,-74.4092 40.158,-74.4125 40.1571,-74.4158 40.1562,-74.4383 40.1624,-74.4648 40.1729,-74.4967 40.1797,-74.5356 40.1744,-74.5532 40.1774,-74.5714 40.1813,-74.5892 40.1863,-74.6054 40.1925)
+LINESTRING(-78.4271 41.0497,-78.4144 41.0435,-78.4025 41.0406,-78.3899 41.0385,-78.3788 41.0349,-78.3716 41.0271,-78.3467 41.0196,-78.319 41.0191,-78.2917 41.0148,-78.2677 40.9964,-78.2597 40.9933,-78.2468 40.9936,-78.2325 40.995,-78.2208 40.9949,-78.2133 40.993,-78.2061 40.9906,-78.1988 40.9881,-78.1915 40.986,-78.1763 40.9838,-78.1607 40.9833,-78.1445 40.9825,-78.1275 40.9795,-78.1217 40.976,-78.1167 40.9707,-78.1116 40.9654,-78.1055 40.9624,-78.0998 40.9628,-78.0925 40.9649,-78.0853 40.9676,-78.08 40.9697,-78.0652 40.9735,-78.0529 40.9752,-78.0416 40.9788,-78.0302 40.9881,-78.0063 40.9936,-77.9903 40.9978,-77.9776 41.005,-77.9635 41.0192,-77.9584 41.0214,-77.9015 41.0201,-77.8729 41.0109,-77.858 41.0003,-77.844 40.9942,-77.8191 40.9899,-77.8008 40.9827,-77.7866 40.9714,-77.7738 40.9549)
+LINESTRING(-87.9435 42.497,-87.9525 42.5393,-87.9561 42.6065,-87.9551 42.6745,-87.9524 42.7306,-87.9525 42.7562,-87.9538 42.7824,-87.9543 42.8086,-87.952 42.8338,-87.9486 42.8421,-87.9429 42.8504,-87.9373 42.8587,-87.9344 42.8672,-87.9332 42.8921,-87.9335 42.9166,-87.9333 42.9412,-87.9307 42.9659)
+LINESTRING(-88.0378 42.972,-88.053 42.9662,-88.0671 42.9646,-88.0827 42.9647,-88.1025 42.9637,-88.1536 42.9357,-88.2102 42.9116,-88.2668 42.8872,-88.3185 42.8581,-88.3333 42.8472,-88.3491 42.8344,-88.3638 42.8209,-88.3755 42.8081,-88.3827 42.7923,-88.385 42.7792,-88.3945 42.7685,-88.4232 42.7599,-88.444 42.7365,-88.4681 42.7137,-88.4932 42.6913,-88.5168 42.6688,-88.5411 42.6525,-88.5778 42.6361,-88.6167 42.6233,-88.6478 42.6179,-88.6602 42.6186,-88.6738 42.6204,-88.6872 42.6216,-88.6988 42.621,-88.7087 42.6174,-88.7174 42.6122,-88.726 42.6067,-88.7358 42.6025,-88.7747 42.5937,-88.8143 42.5869,-88.853 42.5795,-88.8893 42.5684,-88.9099 42.56,-88.9306 42.5517,-88.9512 42.5434,-88.9718 42.5351)
+LINESTRING(-89.2847 43.0992,-89.2578 43.0262,-89.2081 42.999,-89.1551 42.9933,-89.118 42.9843,-89.1065 42.9719,-89.0981 42.9576,-89.0916 42.9427,-89.0858 42.9283,-89.0765 42.9094,-89.0666 42.8938,-89.0556 42.8788,-89.043 42.8617,-89.0284 42.8363,-89.0172 42.8081,-89.0088 42.7795,-89.0026 42.7529,-88.9963 42.7351,-88.9891 42.724,-88.983 42.7096,-88.98 42.6824,-88.9816 42.647,-88.9844 42.6078,-88.9829 42.569,-88.9718 42.5351)
+LINESTRING(-85.6376 42.2366,-85.6401 42.2147,-85.6429 42.1927,-85.6463 42.1708,-85.6504 42.1493)
+LINESTRING(-88.9718 42.5351,-88.9862 42.4991,-88.9862 42.4988)
+LINESTRING(-74.7333 40.0957,-74.702 40.121,-74.673 40.1465,-74.6423 40.1708,-74.6054 40.1925)
+LINESTRING(-74.8261 40.1154,-74.8122 40.1108,-74.789 40.103,-74.7647 40.0976,-74.7333 40.0957)
+LINESTRING(-106.336 42.8475,-106.337 42.8514,-106.339 42.8568,-106.341 42.8622,-106.342 42.8661,-106.34 42.902,-106.336 42.9381,-106.332 42.9742,-106.332 43.0103,-106.337 43.0679,-106.338 43.116,-106.332 43.1638,-106.313 43.2202,-106.313 43.2234,-106.314 43.2266,-106.314 43.2297,-106.314 43.2329,-106.34 43.2848,-106.364 43.3401,-106.381 43.3965,-106.387 43.4518,-106.39 43.4528,-106.394 43.4537,-106.403 43.4677,-106.414 43.4747,-106.427 43.4794,-106.442 43.4866,-106.451 43.4986,-106.465 43.5217,-106.48 43.5466,-106.494 43.5641,-106.506 43.5754,-106.52 43.586,-106.533 43.5964,-106.546 43.6071,-106.55 43.6107,-106.554 43.6158,-106.559 43.6207,-106.562 43.6236,-106.584 43.6345,-106.606 43.644,-106.626 43.6548,-106.644 43.67,-106.645 43.6796,-106.646 43.6946,-106.644 43.7087,-106.64 43.716,-106.633 43.7406,-106.626 43.7653,-106.62 43.7899,-106.613 43.8145,-106.618 43.8467,-106.629 43.882,-106.641 43.9198,-106.649 43.9593,-106.648 44.0011,-106.642 44.0425,-106.636 44.084,-106.636 44.1259,-106.643 44.1498,-106.657 44.177,-106.672 44.205,-106.682 44.2317,-106.683 44.2559,-106.684 44.2948,-106.685 44.3372,-106.687 44.3721)
+LINESTRING(-86.3219 42.1628,-86.3157 42.1694,-86.3057 42.1762,-86.2915 42.1771,-86.277 42.1773,-86.2624 42.1777,-86.2481 42.1792,-86.2085 42.1859,-86.1695 42.1914,-86.1302 42.1954,-86.0895 42.1975,-86.065 42.1965,-86.0414 42.1935,-86.0183 42.1904,-85.9954 42.1889,-85.9885 42.1901,-85.9817 42.1927,-85.9752 42.1956,-85.9687 42.1975,-85.9475 42.1999,-85.9268 42.2014,-85.9061 42.2033,-85.8848 42.2067,-85.8786 42.2085,-85.8729 42.2107,-85.8673 42.213,-85.8615 42.2152,-85.8376 42.219,-85.8003 42.2225,-85.7633 42.2252,-85.7399 42.2268,-85.7362 42.2289,-85.7324 42.231,-85.7287 42.2332,-85.725 42.2353,-85.7031 42.2353,-85.6812 42.2354,-85.6594 42.2357,-85.6376 42.2366)
+LINESTRING(-85.6785 42.9709,-85.6862 42.9712,-85.6951 42.9696,-85.7035 42.9668,-85.7099 42.9638,-85.7087 42.9594,-85.7078 42.9535,-85.7079 42.9478,-85.7095 42.9438,-85.7277 42.9342,-85.746 42.9246,-85.7639 42.9146,-85.7819 42.9046,-85.7812 42.9001,-85.7806 42.8956,-85.7804 42.891,-85.7802 42.8864,-85.8433 42.856,-85.9141 42.8325,-85.9857 42.8071,-86.0511 42.7713,-86.0499 42.7674,-86.0487 42.7635,-86.0609 42.7444,-86.0796 42.7321,-86.102 42.7252,-86.1252 42.7227,-86.1375 42.7115,-86.1448 42.6949,-86.1463 42.6763,-86.1413 42.659,-86.144 42.6532,-86.1483 42.6453,-86.1525 42.6373,-86.1544 42.6315,-86.1583 42.6242,-86.1593 42.6156,-86.1599 42.6067,-86.1622 42.5988,-86.1631 42.5685,-86.1655 42.53,-86.1695 42.4938,-86.1751 42.4702,-86.1818 42.4573,-86.1897 42.4444,-86.1979 42.4315,-86.2057 42.4189,-86.2062 42.4177,-86.2063 42.4162,-86.2063 42.4148,-86.2064 42.4135,-86.2076 42.4019,-86.2093 42.3906,-86.2117 42.3793,-86.2153 42.368,-86.2214 42.3577,-86.2297 42.3489,-86.2385 42.3405,-86.2458 42.3313,-86.2486 42.3253,-86.2506 42.3191,-86.2523 42.3129,-86.2546 42.3068,-86.2565 42.2964,-86.2552 42.286,-86.2539 42.2757,-86.2562 42.2655,-86.259 42.2595,-86.2619 42.2535,-86.2653 42.2465,-86.2674 42.2427,-86.2745 42.236,-86.2817 42.2303,-86.2884 42.2242,-86.2942 42.2164,-86.311 42.187,-86.3198 42.1699,-86.3219 42.1628)
+LINESTRING(-80.1591 41.1998,-80.1411 41.1973,-80.1227 41.1977,-80.1044 41.1997,-80.0865 41.2022,-80.0451 41.2017,-80.0037 41.2013,-79.9624 41.2009,-79.921 41.2004,-79.9099 41.1964,-79.8994 41.1907,-79.8877 41.1856,-79.8734 41.1836,-79.8641 41.1862,-79.8535 41.1911,-79.8402 41.1949,-79.8224 41.1941,-79.7999 41.1882,-79.7663 41.1789,-79.7342 41.1705,-79.7166 41.1674,-79.7101 41.1695,-79.7048 41.1728,-79.6997 41.1764,-79.6937 41.1791,-79.6802 41.1826,-79.6666 41.1859,-79.6529 41.1892,-79.6392 41.1932,-79.6343 41.1929,-79.6273 41.1909,-79.6203 41.1884,-79.6152 41.1868,-79.6064 41.1865,-79.5965 41.1882,-79.5868 41.19,-79.5787 41.1901,-79.5714 41.1882,-79.5639 41.1858,-79.5562 41.1836,-79.5485 41.1824,-79.5256 41.1854,-79.5056 41.1929,-79.4743 41.1966,-79.4174 41.1882,-79.4129 41.1876,-79.4067 41.1872,-79.4008 41.1867,-79.3972 41.1861,-79.3925 41.184,-79.3877 41.1819,-79.3829 41.1799,-79.3781 41.1778,-79.3495 41.1785,-79.3249 41.1752,-79.3031 41.1711,-79.2827 41.1696,-79.2677 41.1728,-79.2517 41.179,-79.2374 41.1851,-79.2276 41.1881,-79.2219 41.1878,-79.2164 41.1867,-79.211 41.1853,-79.2055 41.1843,-79.1936 41.1836,-79.1814 41.1839,-79.1693 41.184,-79.1579 41.1826,-79.1437 41.179,-79.1287 41.175,-79.1138 41.1714,-79.0995 41.1688,-79.0789 41.1672,-79.0594 41.1665,-79.0397 41.1651,-79.0188 41.1612,-79.0133 41.1547,-79.0061 41.1474,-78.998 41.1408,-78.9896 41.1366,-78.98 41.1366,-78.9674 41.1356,-78.9547 41.1338,-78.945 41.1317,-78.925 41.1365,-78.8835 41.1428,-78.8402 41.1483,-78.8154 41.1503,-78.7987 41.149,-78.7819 41.1477,-78.7624 41.1459,-78.7512 41.1446,-78.733 41.1394,-78.7157 41.1328,-78.6982 41.1263,-78.6795 41.1212,-78.641 41.1197,-78.6015 41.1232,-78.5641 41.1218,-78.5323 41.1057,-78.5216 41.0965,-78.5104 41.0881,-78.4985 41.0801,-78.4861 41.0721,-78.4824 41.0709,-78.4767 41.07,-78.4707 41.0693,-78.4665 41.0686,-78.4521 41.0634,-78.4393 41.0567,-78.4271 41.0497)
+LINESTRING(-80.1234 42.0311,-80.1295 42.0197,-80.1398 42.0109,-80.1521 42.003,-80.1641 41.9948,-80.1659 41.9831,-80.1709 41.9627,-80.1755 41.9454,-80.18 41.9282,-80.1871 41.9018,-80.194 41.8754,-80.1997 41.8485,-80.2033 41.821,-80.2091 41.797,-80.2193 41.7734,-80.2297 41.7503,-80.2357 41.7281,-80.2365 41.714,-80.2365 41.6992,-80.2362 41.6846,-80.2359 41.6699,-80.2278 41.6418,-80.2128 41.6275,-80.2046 41.6106,-80.2168 41.575,-80.2168 41.5659,-80.2167 41.5568,-80.2167 41.5477,-80.2166 41.5386,-80.2129 41.5346,-80.2098 41.5308,-80.2074 41.5268,-80.2062 41.5221,-80.2016 41.4976,-80.1958 41.4748,-80.1927 41.4521,-80.1964 41.4278,-80.1971 41.422,-80.196 41.416,-80.1942 41.41,-80.1925 41.4043,-80.1839 41.3556,-80.1778 41.3027,-80.1706 41.2495,-80.1591 41.1998)
+LINESTRING(-80.7581 41.8236,-80.7762 41.8184,-80.7918 41.8111,-80.8067 41.8027,-80.8229 41.7945,-80.8664 41.7777,-80.9189 41.7627,-80.973 41.7528,-81.0215 41.7512,-81.057 41.7356,-81.0922 41.7195,-81.1267 41.7027,-81.16 41.6846,-81.1764 41.6748,-81.1932 41.665,-81.2106 41.6558,-81.2289 41.648,-81.2646 41.641,-81.3046 41.6392,-81.341 41.6378,-81.3656 41.6321,-81.3823 41.6221,-81.3988 41.612,-81.4148 41.6015,-81.4301 41.5904,-81.4318 41.5708,-81.4334 41.5512,-81.4348 41.5315,-81.4356 41.5119,-81.4433 41.5037,-81.4542 41.4971,-81.4649 41.4913,-81.4721 41.4854,-81.4815 41.4705,-81.4916 41.4521,-81.5011 41.433,-81.5086 41.4162)
+LINESTRING(-86.3527 42.1306,-86.3429 42.14,-86.3293 42.1551,-86.3219 42.1628)
+LINESTRING(-83.1706 42.2901,-83.2553 42.1924,-83.2459 42.1265,-83.3644 42.0053,-83.3767 41.9346,-83.4959 41.797,-83.5111 41.7667,-83.5093 41.7321)
+LINESTRING(-75.555 40.5765,-75.5707 40.5743,-75.5885 40.576,-75.6067 40.5783,-75.6239 40.578,-75.6504 40.5755,-75.6771 40.5764,-75.7037 40.5787,-75.7304 40.5809,-75.7486 40.5805,-75.7659 40.5784,-75.7829 40.5762,-75.8001 40.5755,-75.8122 40.5766,-75.8239 40.5787,-75.8354 40.5808,-75.8472 40.582,-75.8698 40.5822,-75.8926 40.5815,-75.9153 40.5805,-75.938 40.5795,-75.947 40.5781,-75.9565 40.575,-75.9656 40.5714,-75.9738 40.568,-76.0247 40.549,-76.0762 40.5318,-76.1282 40.5156,-76.181 40.4997,-76.2082 40.4927,-76.2369 40.487,-76.2658 40.4819,-76.2938 40.4768,-76.3149 40.4719,-76.3355 40.466,-76.3558 40.4596,-76.3764 40.4535,-76.4122 40.4502,-76.4414 40.4454,-76.4692 40.4385,-76.5006 40.4292,-76.5094 40.4267,-76.5181 40.4243)
+LINESTRING(-76.0142 41.045,-76.014 41.0351,-76.0118 41.0253,-76.0083 41.0157,-76.0041 41.0063,-76.008 41.0019,-76.0156 40.9971,-76.0239 40.9928,-76.03 40.9898,-76.0327 40.9757,-76.0277 40.9581,-76.0193 40.9404,-76.0119 40.9261,-76.0144 40.9204,-76.0202 40.913,-76.0257 40.9069,-76.0312 40.9009,-76.0306 40.8966,-76.0284 40.8927,-76.0243 40.8906,-76.0203 40.8885,-76.0162 40.8864,-76.0121 40.8843,-76.0437 40.8593,-76.0731 40.8326,-76.1048 40.808,-76.1434 40.7892,-76.1781 40.7815,-76.2178 40.7761,-76.2554 40.7696,-76.2836 40.7584,-76.2911 40.7523,-76.2982 40.7458,-76.3055 40.7393,-76.3137 40.7337,-76.324 40.7287,-76.3349 40.724,-76.3456 40.7191,-76.3551 40.7134,-76.3592 40.7104,-76.3633 40.7074,-76.3843 40.6798,-76.3886 40.6673,-76.3999 40.6575,-76.4419 40.6378,-76.4439 40.6356,-76.4449 40.632,-76.4453 40.6282,-76.4451 40.6256,-76.4394 40.6193,-76.4318 40.6126,-76.425 40.6061,-76.4219 40.6004,-76.4143 40.5955,-76.4089 40.5876,-76.4073 40.5791,-76.4108 40.5722,-76.4265 40.5618,-76.4302 40.5495,-76.4312 40.5357,-76.4382 40.5207,-76.4493 40.5166,-76.4702 40.5114,-76.4945 40.5012,-76.5161 40.4819,-76.5227 40.4666,-76.5219 40.4528,-76.5187 40.4392,-76.5181 40.4243)
+LINESTRING(-83.6835 41.7259,-83.6847 41.7341,-83.69 41.7583,-83.6915 41.7811,-83.6884 41.8038,-83.6797 41.8276,-83.6747 41.8358,-83.6682 41.8452,-83.6626 41.8547,-83.6604 41.8635,-83.6619 41.8836,-83.6638 41.9045,-83.665 41.9252,-83.6639 41.9453,-83.6706 41.9528,-83.6756 41.9606,-83.6788 41.9689,-83.6798 41.9779,-83.6786 42.0046,-83.6766 42.0311,-83.6753 42.0575,-83.6762 42.0842,-83.6806 42.1187,-83.6859 42.1559,-83.6886 42.193,-83.6852 42.227)
+LINESTRING(-75.2771 40.111,-75.2662 40.1159,-75.2553 40.1203,-75.244 40.1242,-75.2321 40.1275,-75.1864 40.1429,-75.1451 40.1598,-75.1022 40.1705,-75.0515 40.1672,-75.0297 40.1601,-75.0115 40.1511,-74.9941 40.1415,-74.975 40.133,-74.9511 40.1296,-74.9171 40.1289,-74.8786 40.1271,-74.8407 40.1203,-74.8261 40.1154)
+LINESTRING(-75.555 40.5765,-75.5431 40.5597,-75.5273 40.5374,-75.5102 40.5158,-75.4918 40.4979,-75.4667 40.4879,-75.4495 40.4725,-75.4365 40.4538,-75.4241 40.4338,-75.4196 40.4235,-75.4175 40.4127,-75.4157 40.4018,-75.4121 40.3914,-75.3902 40.3477,-75.3706 40.3037,-75.3519 40.2594,-75.3329 40.215,-75.3187 40.189,-75.3021 40.1636,-75.287 40.1379,-75.2771 40.111)
+LINESTRING(-80.5185 41.1786,-80.4787 41.1797,-80.4385 41.1833,-80.3983 41.1875,-80.3585 41.1905,-80.3453 41.1898,-80.3326 41.1877,-80.3197 41.1857,-80.3063 41.1853,-80.289 41.1872,-80.2723 41.1901,-80.2558 41.1932,-80.239 41.1958,-80.2191 41.197,-80.1989 41.1972,-80.1787 41.1976,-80.1591 41.1998)
+LINESTRING(-122.275 40.6294,-122.297 40.6243,-122.319 40.6193,-122.34 40.6143,-122.362 40.6093)
+LINESTRING(-122.362 40.6093,-122.363 40.6162,-122.364 40.6231,-122.365 40.63,-122.367 40.6369,-122.363 40.6439,-122.36 40.6508,-122.357 40.6578,-122.354 40.6648,-122.351 40.6714,-122.348 40.678,-122.345 40.6846,-122.342 40.6912,-122.343 40.6964,-122.342 40.7045,-122.341 40.7127,-122.339 40.7208,-122.338 40.729,-122.336 40.738,-122.335 40.7469,-122.334 40.7559,-122.332 40.7648,-122.332 40.7713,-122.331 40.7777,-122.331 40.7841,-122.33 40.7905,-122.328 40.7957,-122.325 40.801,-122.323 40.8062,-122.321 40.8114,-122.318 40.8177,-122.315 40.8241,-122.313 40.8304,-122.31 40.8368,-122.308 40.84,-122.307 40.8432,-122.305 40.8465,-122.303 40.8497,-122.303 40.8551,-122.302 40.8605,-122.302 40.8658,-122.301 40.8712,-122.304 40.8778,-122.308 40.8845,-122.311 40.8911,-122.315 40.8977,-122.32 40.9019,-122.325 40.9061,-122.33 40.9103,-122.335 40.9145,-122.339 40.9149,-122.344 40.9153,-122.348 40.9157,-122.353 40.9161,-122.357 40.9158,-122.361 40.9154,-122.365 40.9151,-122.369 40.9147,-122.378 40.9131,-122.387 40.9115,-122.396 40.9098,-122.405 40.9082,-122.409 40.9074,-122.416 40.9091,-122.423 40.9108,-122.427 40.911,-122.432 40.9111,-122.436 40.9117,-122.441 40.9124,-122.445 40.914,-122.45 40.9156,-122.454 40.9185,-122.458 40.9213,-122.461 40.9238,-122.464 40.9263,-122.465 40.9296,-122.466 40.9328,-122.467 40.9361,-122.467 40.9393,-122.465 40.9428,-122.462 40.9462,-122.459 40.9497,-122.457 40.9531,-122.452 40.9558,-122.448 40.9585,-122.443 40.9611,-122.439 40.9638,-122.435 40.9664,-122.43 40.969,-122.426 40.9716,-122.422 40.9741,-122.407 40.9817,-122.392 40.9892,-122.378 40.9968,-122.363 41.0043,-122.345 41.0185,-122.328 41.0327,-122.31 41.0469,-122.293 41.061,-122.28 41.0805,-122.268 41.0999,-122.255 41.1193,-122.242 41.1387,-122.235 41.152,-122.227 41.1652,-122.219 41.1784,-122.212 41.1917,-122.211 41.2026,-122.21 41.2136,-122.209 41.2246,-122.208 41.2356,-122.211 41.2457,-122.214 41.2559,-122.217 41.266,-122.221 41.2762,-122.227 41.2812,-122.234 41.2863,-122.241 41.2913,-122.248 41.2964,-122.257 41.2987,-122.266 41.301,-122.275 41.3034,-122.284 41.3057,-122.293 41.3072,-122.303 41.3087,-122.312 41.3102,-122.322 41.3117,-122.324 41.3165,-122.326 41.3213,-122.328 41.3247,-122.33 41.328,-122.331 41.3314,-122.333 41.3348,-122.336 41.3376,-122.339 41.3403,-122.342 41.3431,-122.345 41.3459,-122.348 41.3493,-122.352 41.3527,-122.356 41.3562,-122.36 41.3596,-122.367 41.3631,-122.37 41.3664,-122.373 41.3698,-122.376 41.3731,-122.379 41.3764,-122.379 41.3819,-122.379 41.3873,-122.383 41.392,-122.386 41.3967,-122.387 41.4019,-122.387 41.4071,-122.388 41.4119,-122.389 41.4166,-122.399 41.4185,-122.409 41.4223,-122.42 41.4263)
+LINESTRING(-83.5093 41.7321,-83.5082 41.7124,-83.574 41.6847,-83.577 41.6788)
+LINESTRING(-83.577 41.6788,-83.6062 41.6833,-83.6354 41.6866,-83.6648 41.689,-83.6946 41.6904,-83.6904 41.7021,-83.6851 41.7085,-83.6821 41.7169,-83.6835 41.7259)
+LINESTRING(-80.6763 41.1547,-80.6639 41.1576,-80.6509 41.1595,-80.6382 41.1615,-80.6266 41.1644,-80.5949 41.1742,-80.574 41.1779,-80.5525 41.1783,-80.5186 41.1786,-80.5185 41.1786)
+LINESTRING(-80.7581 41.8236,-80.7566 41.8178,-80.7562 41.812,-80.7558 41.8063,-80.7543 41.8008,-80.7477 41.7918,-80.7378 41.7839,-80.7271 41.7763,-80.7182 41.7681,-80.7026 41.7328,-80.7001 41.6904,-80.7046 41.6474,-80.71 41.61,-80.7103 41.5895,-80.7083 41.5688,-80.706 41.5482,-80.7059 41.5277,-80.7104 41.4837,-80.7128 41.4335,-80.706 41.3847,-80.683 41.3449,-80.6862 41.3151,-80.6963 41.287,-80.7077 41.2593,-80.7147 41.231,-80.7101 41.2105,-80.6971 41.1924,-80.6833 41.1745,-80.6763 41.1547)
+LINESTRING(-81.8083 41.3323,-81.811 41.3531,-81.8136 41.379,-81.8131 41.4034,-81.8063 41.4196,-81.786 41.4258,-81.7525 41.4278,-81.7181 41.4271,-81.6951 41.4254,-81.6816 41.422,-81.6687 41.4167,-81.6551 41.4118,-81.6397 41.4094,-81.6084 41.4125,-81.5779 41.4193,-81.5456 41.4229,-81.5086 41.4162)
+LINESTRING(-81.5086 41.4162,-81.5107 41.3993,-81.5114 41.3821,-81.5101 41.3645,-81.506 41.3467,-81.502 41.325,-81.5009 41.3027,-81.4995 41.2804,-81.4943 41.2586)
+LINESTRING(-81.8083 41.3323,-81.7888 41.3257,-81.7692 41.3181,-81.7497 41.3107,-81.7303 41.3047,-81.7221 41.3034,-81.7133 41.303,-81.7043 41.3024,-81.6955 41.3008,-81.6669 41.2919,-81.6404 41.2821,-81.6147 41.2713,-81.5884 41.2593,-81.5863 41.2585,-81.5841 41.2576,-81.582 41.2568,-81.5799 41.256,-81.5586 41.2572,-81.5372 41.2581,-81.5157 41.2586,-81.4943 41.2586)
+LINESTRING(-88.9862 42.4988,-88.9925 42.4736,-88.9905 42.4472,-88.98 42.4084,-88.9762 42.3995,-88.9712 42.3898,-88.9667 42.3802,-88.9643 42.3717,-88.9635 42.3495,-88.963 42.3134,-88.9631 42.2769,-88.964 42.254,-88.9629 42.2531,-88.9618 42.2522,-88.9607 42.2513,-88.9597 42.2503)
+LINESTRING(-83.5818 41.5705,-83.5787 41.5693)
+LINESTRING(-80.6763 41.1547,-80.685 41.1546,-80.6938 41.1542,-80.7026 41.1535,-80.7112 41.1524,-80.738 41.1355,-80.768 41.1256,-80.8008 41.1193,-80.836 41.1133)
+LINESTRING(-81.4943 41.2586,-81.4731 41.2581,-81.4517 41.2567,-81.4303 41.2551,-81.4088 41.2542,-81.3919 41.2549,-81.376 41.2563,-81.3599 41.2575,-81.3428 41.2573,-81.2845 41.2535,-81.1665 41.2456,-81.0472 41.2367,-80.9847 41.2299,-80.9595 41.2124,-80.9121 41.1756,-80.8638 41.1367,-80.836 41.1133)
+LINESTRING(-83.5787 41.5693,-83.5692 41.5666,-83.5589 41.5615)
+LINESTRING(-83.5787 41.5693,-83.5692 41.5655,-83.5589 41.5615)
+LINESTRING(-83.577 41.6788,-83.5763 41.6771,-83.5751 41.6756,-83.5594 41.6606,-83.5414 41.6431,-83.5244 41.625,-83.5121 41.6086,-83.5151 41.5971,-83.5285 41.5821,-83.5443 41.5682,-83.5543 41.5597)
+LINESTRING(-83.5589 41.5615,-83.5543 41.5597)
+LINESTRING(-84.9704 42.3144,-84.9702 42.2741,-84.975 42.2281,-84.982 42.1822,-84.9888 42.1419,-84.9929 42.1292,-84.999 42.1164,-85.0043 42.1035,-85.006 42.0903,-84.9993 42.0746,-84.986 42.0602,-84.9722 42.0448,-84.9642 42.0262,-84.9609 42.0041,-84.958 41.98,-84.9568 41.956,-84.9588 41.934,-84.9637 41.9234,-84.972 41.9134,-84.9798 41.9037,-84.9837 41.8939,-84.9863 41.8734,-84.9898 41.8518,-84.9927 41.8303,-84.9929 41.8104,-84.9891 41.788,-84.9852 41.7696,-84.9852 41.7606)
+LINESTRING(-105.203 42.6576,-105.213 42.6658,-105.222 42.6739,-105.231 42.6821,-105.241 42.6902,-105.258 42.7004,-105.283 42.7092,-105.308 42.7169,-105.329 42.7235,-105.347 42.7329,-105.377 42.7483,-105.41 42.7626,-105.44 42.7684,-105.446 42.771,-105.456 42.773,-105.466 42.7751,-105.472 42.7779,-105.496 42.7774,-105.518 42.7763,-105.539 42.7779,-105.559 42.7858,-105.582 42.7859,-105.601 42.7872,-105.62 42.7897,-105.642 42.7938,-105.659 42.7957,-105.68 42.7967,-105.701 42.7975,-105.719 42.7986,-105.731 42.7992,-105.738 42.7991,-105.746 42.799,-105.757 42.8003,-105.783 42.8048,-105.809 42.8098,-105.835 42.8145,-105.861 42.818,-105.893 42.8195,-105.923 42.8189,-105.953 42.8178,-105.983 42.8176,-105.994 42.8186,-106.005 42.8205,-106.016 42.8225,-106.026 42.8237,-106.07 42.8247,-106.113 42.8238,-106.156 42.8232,-106.2 42.8249,-106.218 42.8276,-106.238 42.8317,-106.257 42.8349,-106.272 42.835,-106.284 42.8389,-106.303 42.8427,-106.322 42.8457,-106.336 42.8475)
+LINESTRING(-89.0156 42.2219,-89.0097 42.2223,-89.0039 42.2226,-88.998 42.2229,-88.9921 42.2232,-88.9825 42.2282,-88.9729 42.2351,-88.9648 42.2427,-88.9597 42.2503)
+LINESTRING(-75.2771 40.111,-75.2984 40.0953,-75.3196 40.0816,-75.3379 40.0668,-75.3505 40.0474,-75.3501 40.0353,-75.3408 40.0254,-75.3264 40.0167,-75.3105 40.0083,-75.298 40.001,-75.287 39.9944,-75.2758 39.988,-75.2626 39.9812,-75.2465 39.9745,-75.2318 39.9689,-75.2186 39.9623,-75.2073 39.9524,-75.1992 39.9397,-75.1931 39.9272,-75.185 39.9166,-75.1708 39.9098,-75.1403 39.9026,-75.1351 39.9018,-75.1323 39.9015)
+LINESTRING(-84.9852 41.7606,-84.9852 41.7513,-84.9907 41.7363)
+LINESTRING(-89.2018 42.2816,-89.1896 42.2758,-89.1762 42.2716,-89.163 42.2672,-89.1517 42.261,-89.1429 42.2522,-89.1354 42.2422,-89.1281 42.2321,-89.1197 42.2227,-89.1024 42.2206,-89.0711 42.2206,-89.0381 42.2215,-89.0156 42.2219)
+LINESTRING(-85.0008 41.7351,-84.9951 41.736,-84.9907 41.7363)
+LINESTRING(-112.834 41.9996,-112.875 42.0423,-112.917 42.0854,-112.96 42.1282,-113.002 42.1711,-113.014 42.1815,-113.029 42.1924,-113.041 42.2038,-113.048 42.2157,-113.058 42.2234,-113.069 42.2312,-113.079 42.2389,-113.089 42.2466,-113.167 42.2934,-113.267 42.3799,-113.354 42.4634,-113.392 42.5013,-113.414 42.5105,-113.441 42.5192,-113.469 42.528,-113.492 42.5377)
+LINESTRING(-75.1026 39.873,-75.0888 39.8718,-75.0753 39.8715,-75.0621 39.873,-75.0496 39.8771,-75.0262 39.8727,-75.0166 39.8759,-75.0002 39.8924,-74.9798 39.9092,-74.9625 39.9221,-74.9552 39.9273,-74.9113 39.9608,-74.8383 40.0149,-74.7681 40.0672,-74.7333 40.0957)
+LINESTRING(-75.1323 39.9015,-75.1304 39.9014,-75.126 39.9005,-75.1221 39.8983,-75.116 39.892,-75.1116 39.8859,-75.1077 39.8797,-75.1026 39.873)
+LINESTRING(-80.836 41.1133,-80.8151 41.0945,-80.7896 41.0704,-80.7629 41.0486,-80.7391 41.0366)
+LINESTRING(-75.1026 39.873,-75.1007 39.8626,-75.0997 39.8568)
+LINESTRING(-75.0997 39.8568,-75.0991 39.8533,-75.0965 39.8443,-75.0948 39.8365)
+LINESTRING(-91.3448 42.4615,-91.3552 42.4577,-91.3711 42.456,-91.3877 42.4555,-91.4003 42.4551,-91.4334 42.4517,-91.4652 42.4478,-91.4972 42.4445,-91.5312 42.443,-91.588 42.4437,-91.645 42.4449,-91.7021 42.4456,-91.7587 42.4445,-91.7921 42.4415,-91.8261 42.4367,-91.8597 42.4322,-91.892 42.4303,-91.9653 42.4303,-92.0387 42.4302,-92.112 42.4301,-92.1853 42.43,-92.1909 42.43,-92.1965 42.4301,-92.2021 42.4301,-92.2077 42.4302)
+LINESTRING(-92.3202 42.429,-92.292 42.4293,-92.2639 42.4296,-92.2358 42.4299,-92.2077 42.4302)
+LINESTRING(-92.56 42.4782,-92.5075 42.4656,-92.4375 42.4478,-92.3688 42.4328,-92.3202 42.429)
+LINESTRING(-83.5543 41.5597,-83.5422 41.5519,-83.5314 41.5452,-83.5151 41.5391,-83.4936 41.5342,-83.4711 41.5295,-83.4521 41.5239,-83.3928 41.5004,-83.333 41.4779,-83.2732 41.4557,-83.2136 41.433,-83.2079 41.4301,-83.202 41.4267,-83.1961 41.4233,-83.1903 41.4209,-83.1132 41.4007,-83.0279 41.3819,-82.9414 41.3651,-82.861 41.351,-82.8434 41.3489,-82.8253 41.348,-82.8072 41.3473,-82.7894 41.3461,-82.7515 41.3417,-82.7136 41.3364,-82.6759 41.3307,-82.6383 41.3251,-82.5872 41.3219,-82.5296 41.324,-82.4717 41.3285,-82.4199 41.3328,-82.4037 41.3339,-82.3875 41.3349,-82.3692 41.3361,-82.3606 41.3369,-82.347 41.3414,-82.3334 41.3453,-82.3198 41.349,-82.3061 41.3531,-82.2903 41.3597,-82.2769 41.3669,-82.263 41.3734,-82.2461 41.3775,-82.2065 41.3834,-82.1674 41.3891,-82.1281 41.3919,-82.0881 41.3894,-82.0761 41.3865,-82.064 41.3824,-82.0521 41.3783,-82.0404 41.3757,-82.0292 41.3755,-82.0185 41.3769,-82.008 41.3787,-81.9976 41.3796,-81.9689 41.3766,-81.9357 41.3696,-81.9025 41.3612,-81.8741 41.354,-81.8577 41.3495,-81.841 41.3438,-81.8245 41.3379,-81.8083 41.3323)
+LINESTRING(-84.8066 41.6294,-84.7978 41.6285,-84.7685 41.6281,-84.7387 41.6282,-84.7151 41.6279,-84.7004 41.6258,-84.6858 41.6222,-84.6713 41.6187,-84.6571 41.617,-84.6403 41.6173,-84.6234 41.618,-84.6064 41.6185,-84.5895 41.6182,-84.5546 41.6153,-84.52 41.612,-84.4854 41.6092,-84.4504 41.6081,-84.4357 41.6083,-84.4209 41.6085,-84.4041 41.6082,-84.3932 41.6067,-84.3633 41.5956,-84.3462 41.5912,-84.3283 41.591,-84.2958 41.5926,-84.2523 41.5935,-84.2077 41.5935,-84.1628 41.5934,-84.1184 41.5941,-84.0973 41.5953,-84.0757 41.5972,-84.0543 41.5991,-84.0338 41.6001,-83.9799 41.6017,-83.9254 41.6037,-83.871 41.6053,-83.8172 41.6052,-83.7928 41.6029,-83.7709 41.5986,-83.7437 41.5947,-83.7034 41.5936,-83.6866 41.5936,-83.6696 41.5928,-83.6526 41.5919,-83.6358 41.5911,-83.6223 41.5864,-83.596 41.5761,-83.5818 41.5705)
+LINESTRING(-84.9907 41.7363,-84.9882 41.7364,-84.9813 41.7361,-84.9756 41.7348,-84.9532 41.7176,-84.9087 41.6932,-84.8588 41.6635,-84.82 41.6307,-84.8066 41.6294)
+LINESTRING(-112.188 42.0018,-112.192 42.0148,-112.2 42.0291,-112.208 42.0436,-112.214 42.0574,-112.219 42.0772,-112.222 42.0987,-112.223 42.1204,-112.223 42.1407,-112.224 42.1506,-112.224 42.1622,-112.226 42.1735,-112.231 42.1822,-112.23 42.1927,-112.229 42.2033,-112.228 42.2138,-112.228 42.2244,-112.208 42.257,-112.207 42.2851,-112.214 42.3129,-112.217 42.3446,-112.21 42.3665,-112.194 42.3958,-112.178 42.4264,-112.166 42.4519,-112.162 42.4917,-112.171 42.5335,-112.185 42.5748,-112.198 42.6134,-112.199 42.6174,-112.2 42.6215,-112.201 42.6257,-112.201 42.6298)
+LINESTRING(-76.8793 40.2112,-76.8666 40.2099,-76.8507 40.205,-76.8342 40.199,-76.8199 40.1946,-76.814 40.1969,-76.8043 40.2026,-76.7946 40.2089,-76.7884 40.2134,-76.7568 40.2112,-76.7251 40.2081,-76.6938 40.2068,-76.6632 40.2099,-76.6329 40.2111,-76.5995 40.2082,-76.5637 40.2095,-76.5263 40.223,-76.5215 40.2248,-76.4832 40.2274,-76.4518 40.2266,-76.4268 40.2249,-76.4077 40.2248,-76.38 40.228,-76.3518 40.2317,-76.3237 40.235,-76.2961 40.2369,-76.242 40.2414,-76.1958 40.2458,-76.1498 40.2428,-76.0963 40.2253,-76.0735 40.2168,-76.0499 40.21,-76.0263 40.2029,-76.0036 40.1934,-75.9904 40.1777,-75.9694 40.1747,-75.946 40.177,-75.9257 40.1775,-75.9189 40.1748,-75.9062 40.1691,-75.8891 40.1624,-75.869 40.1568,-75.8566 40.1502,-75.8385 40.148,-75.8205 40.1469,-75.8079 40.1433,-75.7589 40.1079,-75.7143 40.0822,-75.6647 40.0662,-75.6002 40.0601,-75.5863 40.0629,-75.5738 40.0697,-75.5615 40.0769,-75.5485 40.0811,-75.53 40.0815,-75.511 40.0799,-75.492 40.0779,-75.4735 40.0776,-75.4552 40.0801,-75.4353 40.0848,-75.4158 40.0904,-75.3984 40.0959,-75.3893 40.0976,-75.3811 40.0972,-75.3729 40.0958,-75.3639 40.0945,-75.3558 40.0946,-75.3496 40.0963,-75.3441 40.0991,-75.3381 40.1026,-75.3263 40.106,-75.3089 40.1082,-75.2908 40.1098,-75.2771 40.111)
+LINESTRING(-85.0008 41.7351,-85.0063 41.7375,-85.0118 41.7398,-85.0173 41.7421,-85.0228 41.7445,-85.0764 41.7453,-85.14 41.7515,-85.2057 41.7562,-85.2657 41.7525,-85.2699 41.7494,-85.2741 41.7464,-85.2783 41.7434,-85.2825 41.7404,-85.3084 41.7403,-85.3424 41.7441,-85.3769 41.7491,-85.4041 41.7528,-85.4412 41.7535,-85.4742 41.7499,-85.504 41.7457,-85.5316 41.7447,-85.5403 41.7461,-85.5491 41.7484,-85.5579 41.7507,-85.5666 41.7523,-85.595 41.7537,-85.6248 41.7527,-85.6544 41.75,-85.6824 41.7462,-85.6927 41.7458,-85.703 41.7453,-85.7133 41.745,-85.7177 41.7449)
+LINESTRING(-87.8649 41.9977,-87.8654 42.0311,-87.8628 42.0661,-87.8661 42.0994,-87.8841 42.1278,-87.8844 42.1332,-87.8847 42.1386,-87.8842 42.1435,-87.8824 42.1492,-87.8783 42.1509,-87.8743 42.1527,-87.8738 42.1711,-87.8798 42.1908,-87.8905 42.2097,-87.9042 42.2257,-87.9039 42.2288,-87.9037 42.2319,-87.9035 42.2349,-87.9033 42.238,-87.9042 42.2509,-87.9069 42.2651,-87.9089 42.2737,-87.9109 42.2822,-87.9092 42.2923,-87.9074 42.3012,-87.9063 42.3104,-87.9065 42.3213,-87.9068 42.3242,-87.907 42.327,-87.9075 42.3298,-87.9079 42.3326,-87.9134 42.343,-87.9223 42.3518,-87.9318 42.3604,-87.9393 42.3702,-87.9439 42.387,-87.9508 42.4186,-87.957 42.4503,-87.9595 42.4672,-87.957 42.472,-87.9516 42.4764,-87.9456 42.4808,-87.9411 42.4857,-87.9435 42.497)
+LINESTRING(-87.8649 41.9977,-87.8834 42.0044,-87.9019 42.0094,-87.9204 42.0138,-87.9392 42.019,-87.9445 42.0215,-87.9491 42.0245,-87.9535 42.0276,-87.9581 42.0302,-88.0391 42.0575,-88.1117 42.0682,-88.1887 42.0695,-88.283 42.0686,-88.2928 42.0688,-88.3002 42.0696,-88.3073 42.0714,-88.3163 42.0748,-88.3459 42.0869,-88.3753 42.0992,-88.4045 42.1117,-88.4336 42.1244,-88.4588 42.1335,-88.4868 42.1411,-88.5152 42.148,-88.5416 42.1553,-88.5945 42.1723,-88.6471 42.1895,-88.6998 42.2067,-88.753 42.2234,-88.7911 42.2334,-88.8202 42.2367,-88.8513 42.2362,-88.8953 42.2346,-88.9067 42.237,-88.9182 42.2425,-88.9344 42.248,-88.9597 42.2503)
+LINESTRING(-80.7391 41.0366,-80.7339 41.0344,-80.7288 41.0322,-80.7237 41.03,-80.7186 41.0277,-80.7109 41.0166,-80.7015 41.0044,-80.6911 40.9927,-80.6807 40.9832,-80.6689 40.9766,-80.6452 40.9642,-80.6213 40.9521,-80.6087 40.9463,-80.5978 40.9449,-80.5871 40.9438,-80.5767 40.9422,-80.5665 40.939,-80.5505 40.9308,-80.5357 40.9214,-80.5213 40.9119,-80.5182 40.9103)
+LINESTRING(-76.5181 40.4243,-76.576 40.415,-76.6265 40.3966,-76.6742 40.3739,-76.7237 40.3514,-76.7381 40.345,-76.7541 40.3374,-76.7702 40.3305,-76.7849 40.3259,-76.8049 40.3192,-76.8222 40.3104,-76.8392 40.3021,-76.8587 40.2968,-76.8819 40.3015,-76.9091 40.312,-76.9404 40.3142,-76.9762 40.2937,-76.979 40.2901,-76.9807 40.2861,-76.9824 40.2821,-76.9848 40.2783,-76.9953 40.2766,-77.012 40.2761,-77.0297 40.2755,-77.0433 40.2731,-77.059 40.266,-77.0866 40.2528,-77.1134 40.2395,-77.1273 40.2321,-77.13 40.2283,-77.1339 40.2244)
+LINESTRING(-93.5746 42.4448,-93.5003 42.4425,-93.4284 42.4417,-93.3566 42.443,-92.56 42.4782)
+LINESTRING(-93.5746 42.4448,-93.5767 42.4565,-93.5777 42.4681,-93.5781 42.4798,-93.5784 42.4916,-93.5736 42.5438,-93.5542 42.574,-93.5221 42.6008,-93.4789 42.6429,-93.4582 42.6693,-93.4395 42.6967,-93.4214 42.7244,-93.4027 42.7515,-93.3912 42.7665,-93.3778 42.7848,-93.3666 42.8036,-93.362 42.8201,-93.3627 42.9018,-93.3638 42.9836,-93.3643 43.0654,-93.3632 43.1471,-93.3609 43.1816,-93.3569 43.2162,-93.3526 43.2508,-93.3497 43.2854,-93.3485 43.3227,-93.3484 43.3602,-93.3487 43.3977,-93.3488 43.4351,-93.3487 43.4521,-93.3487 43.4692,-93.349 43.4863,-93.3493 43.5035,-93.3493 43.5035)
+LINESTRING(-80.836 41.1133,-80.9104 41.1061,-80.982 41.1071,-81.0534 41.1112,-81.1274 41.1136,-81.1515 41.1132,-81.1754 41.1125,-81.1995 41.112,-81.2238 41.1123,-81.2501 41.1132,-81.2761 41.1137,-81.302 41.1132,-81.3281 41.111,-81.3797 41.0993,-81.4001 41.0859,-81.428 41.074,-81.5019 41.0667)
+LINESTRING(-81.4943 41.2586,-81.4937 41.2487,-81.4916 41.2383,-81.4899 41.2281,-81.4906 41.2191,-81.4945 41.2114,-81.5008 41.2015,-81.5067 41.1925,-81.5094 41.1874,-81.5072 41.1572,-81.5025 41.1258,-81.4994 41.0951,-81.5019 41.0667)
+LINESTRING(-77.1339 40.2244,-77.1321 40.2244,-77.1303 40.2243,-77.1285 40.2241,-77.1267 40.224,-77.0747 40.2088,-77.0382 40.1978,-77.0014 40.1933,-76.9481 40.1975,-76.9404 40.1975,-76.9322 40.1964,-76.9239 40.1952,-76.9156 40.195,-76.9067 40.1993,-76.8975 40.2031,-76.8882 40.2069,-76.8793 40.2112)
+LINESTRING(-93.9071 42.4451,-93.824 42.4449,-93.7409 42.4451,-93.6577 42.4453,-93.5746 42.4448)
+LINESTRING(-78.432 40.4387,-78.4268 40.4499,-78.4238 40.4585,-78.4178 40.4652,-78.4034 40.4707,-78.3991 40.4765,-78.3942 40.482,-78.3893 40.4875,-78.385 40.4931,-78.3682 40.5192,-78.3513 40.5461,-78.3337 40.5727,-78.3148 40.5978,-78.2865 40.627,-78.2529 40.6552,-78.2182 40.683,-78.1864 40.7111,-78.1861 40.7131,-78.1858 40.7152,-78.1855 40.7172,-78.1853 40.7193)
+LINESTRING(-85.7177 41.7449,-85.7236 41.7447,-85.7474 41.7342,-85.7725 41.7332,-85.7987 41.7365,-85.8258 41.7389,-85.8447 41.7381,-85.8642 41.7363,-85.8838 41.7344,-85.9034 41.7334,-85.9459 41.7328,-85.9887 41.732,-86.0314 41.7316,-86.0738 41.7318,-86.0852 41.7326,-86.0961 41.734,-86.1072 41.7351,-86.1193 41.7351,-86.1446 41.7305,-86.1606 41.7233,-86.1811 41.717,-86.2198 41.7148,-86.2271 41.7156,-86.235 41.7175,-86.2425 41.7203,-86.2485 41.7236,-86.2706 41.7219,-86.2932 41.7248,-86.316 41.7289,-86.3389 41.731)
+LINESTRING(-86.3219 42.1628,-86.3246 42.154,-86.3294 42.1282,-86.3411 42.12,-86.3529 42.1118,-86.3675 42.1011,-86.3753 42.0946,-86.3841 42.078,-86.3918 42.0585,-86.4022 42.041,-86.4189 42.0301,-86.4274 42.0281,-86.4357 42.0265,-86.4439 42.0247,-86.4523 42.022,-86.4639 42.0164,-86.4752 42.0098,-86.4863 42.0029,-86.4974 41.9966,-86.4995 41.9679,-86.499 41.9346,-86.4965 41.9036,-86.4928 41.8822,-86.504 41.8724,-86.521 41.865,-86.5387 41.8578,-86.5519 41.849,-86.5795 41.8301,-86.6081 41.8129,-86.6361 41.795,-86.662 41.774,-86.6768 41.7605)
+LINESTRING(-96.4485 42.4938,-96.4789 42.4947,-96.4882 42.5018,-96.4937 42.5112,-96.4953 42.5215,-96.493 42.5311,-96.5318 42.5726,-96.5794 42.6101,-96.6311 42.6447,-96.6824 42.6778,-96.7009 42.694,-96.736 42.7262,-96.7751 42.7614,-96.8051 42.7864,-96.8113 42.9388,-96.8236 43.1851,-96.8281 43.433,-96.8109 43.5899,-96.8023 43.5956,-96.8024 43.6054,-96.8025 43.6152,-96.8026 43.625,-96.8027 43.6348)
+LINESTRING(-87.8649 41.9977,-87.8428 41.9875,-87.8092 41.9811,-87.774 41.9726,-87.7474 41.9557,-87.7395 41.9516,-87.7315 41.9475,-87.7236 41.9435,-87.7157 41.9394,-87.6966 41.9284,-87.6804 41.9219,-87.6672 41.9129,-87.657 41.8945,-87.6451 41.8847,-87.6424 41.8732,-87.6427 41.8606,-87.6398 41.8475)
+LINESTRING(-87.9461 41.8447,-87.9302 41.8561,-87.9215 41.8668,-87.9179 41.8763,-87.9175 41.8843,-87.9194 41.8981,-87.9221 41.9137,-87.9231 41.9276,-87.9201 41.9361,-87.9128 41.9385,-87.9024 41.9391,-87.8917 41.9401,-87.8834 41.9434,-87.8771 41.9576,-87.8718 41.9701,-87.8677 41.9828,-87.8649 41.9977)
+LINESTRING(-96.3758 42.4416,-96.3835 42.4812,-96.402 42.4936,-96.4332 42.4933,-96.4485 42.4938)
+LINESTRING(-86.3389 41.731,-86.3385 41.7158,-86.3397 41.7006,-86.341 41.6855,-86.3409 41.6707,-86.3298 41.6555,-86.3052 41.6406,-86.2762 41.6289,-86.2519 41.6233)
+LINESTRING(-80.1591 41.1998,-80.1623 41.1735,-80.153 41.1372,-80.1385 41.1004,-80.1263 41.0729,-80.1241 41.0592,-80.1219 41.0455,-80.1198 41.0318,-80.1176 41.0181,-80.1214 41.0053,-80.1275 40.9906,-80.1326 40.9762,-80.1334 40.964,-80.1344 40.9623,-80.1353 40.9607,-80.1363 40.959,-80.1372 40.9574,-80.1347 40.9347,-80.1238 40.9074,-80.1118 40.8799,-80.1062 40.8568,-80.1092 40.8366,-80.1156 40.8127,-80.1213 40.7896,-80.1219 40.7721,-80.1166 40.7582,-80.1094 40.7447,-80.1019 40.7314,-80.0962 40.7182,-80.0937 40.7049,-80.093 40.6906,-80.093 40.6761,-80.0924 40.6624)
+LINESTRING(-80.5182 40.9103,-80.5063 40.9038,-80.4816 40.895,-80.4589 40.8893,-80.4365 40.8823,-80.4124 40.8697,-80.3814 40.8385,-80.3304 40.8159,-80.2787 40.799,-80.2456 40.7849,-80.2186 40.7565,-80.1773 40.7384,-80.1364 40.7193,-80.1103 40.6879,-80.1077 40.6818,-80.1033 40.674,-80.098 40.6669,-80.0924 40.6624)
+LINESTRING(-122.362 40.6093,-122.36 40.5871,-122.363 40.555,-122.364 40.523,-122.363 40.5009,-122.353 40.484,-122.338 40.4656,-122.324 40.4484,-122.316 40.4351,-122.313 40.4292,-122.307 40.4204,-122.302 40.411,-122.3 40.4034,-122.299 40.3729,-122.291 40.3452,-122.283 40.3175,-122.279 40.2872,-122.275 40.2838,-122.272 40.2798,-122.27 40.2756,-122.268 40.2715,-122.257 40.2435,-122.247 40.2241,-122.237 40.206,-122.223 40.1818)
+LINESTRING(-75.5082 39.6788,-75.4784 39.6841,-75.4449 39.6879,-75.4114 39.6924,-75.3776 39.7007,-75.3223 39.7246,-75.27 39.755,-75.2185 39.787,-75.1659 39.8153,-75.1579 39.8186,-75.1495 39.8218,-75.1413 39.8253,-75.1343 39.8295,-75.1262 39.8363,-75.1184 39.8433,-75.1102 39.85,-75.0997 39.8568)
+LINESTRING(-75.5359 39.6877,-75.5297 39.6853,-75.5116 39.6782,-75.5082 39.6788)
+LINESTRING(-89.0156 42.2219,-89.0158 42.2168,-89.0177 42.2118,-89.0211 42.2073,-89.0257 42.2034,-89.0267 42.1506,-89.0246 42.0507,-89.0205 41.9525,-89.016 41.9049)
+LINESTRING(-87.9461 41.8447,-87.9405 41.8442,-87.9348 41.843,-87.9294 41.8413,-87.9247 41.839,-87.9192 41.8287,-87.9131 41.8164,-87.9076 41.804,-87.9042 41.7933,-87.9032 41.7902,-87.9008 41.789,-87.8985 41.7853)
+LINESTRING(-75.6464 39.6877,-75.6347 39.6923,-75.6205 39.697,-75.6071 39.7018,-75.5975 39.7066,-75.5941 39.7051,-75.5906 39.7039,-75.5832 39.7021,-75.563 39.6974,-75.546 39.6917,-75.5359 39.6877)
+LINESTRING(-87.8566 41.756,-87.8482 41.7649,-87.8354 41.7781,-87.8221 41.7905,-87.8123 41.7972,-87.8094 41.7967,-87.8065 41.7962,-87.8036 41.7957,-87.8007 41.7952,-87.7689 41.8041,-87.7192 41.8189,-87.67 41.8348,-87.6398 41.8475)
+LINESTRING(-87.8566 41.756,-87.8681 41.7635,-87.8794 41.7712,-87.8898 41.7786,-87.8985 41.7853)
+LINESTRING(-74.5536 39.4109,-74.5533 39.4125,-74.553 39.4141,-74.5358 39.4488,-74.5267 39.4872,-74.51 39.5211,-74.4702 39.5424,-74.4518 39.5794,-74.4346 39.601,-74.4096 39.6182,-74.3674 39.6416,-74.3575 39.6466,-74.3469 39.6516,-74.3365 39.6568,-74.3274 39.6624,-74.2799 39.7109,-74.2448 39.773,-74.2225 39.8391,-74.2135 39.8993,-74.2115 39.9202,-74.209 39.9411,-74.2092 39.9618,-74.215 39.9822,-74.2141 39.9851,-74.2132 39.9879,-74.2122 39.9907,-74.2113 39.9936,-74.1913 40.0219,-74.1539 40.0818,-74.1178 40.1417,-74.1017 40.1701)
+LINESTRING(-75.0948 39.8365,-75.0846 39.8258,-75.0699 39.8187,-75.0556 39.8012,-75.0469 39.7597,-75.0305 39.7474,-75.0129 39.7333,-74.9946 39.7197,-74.9766 39.7092,-74.964 39.7051,-74.9486 39.7015,-74.934 39.698,-74.9239 39.694,-74.9099 39.6822,-74.8976 39.6686,-74.8856 39.6548,-74.8722 39.6429,-74.8194 39.6083,-74.7482 39.5629,-74.6808 39.5175,-74.6395 39.4829,-74.637 39.4775,-74.6329 39.4675,-74.6296 39.4591,-74.6263 39.4507,-74.6077 39.4431,-74.5893 39.4326,-74.5713 39.4213,-74.5536 39.4109)
+LINESTRING(-89.016 41.9049,-88.9548 41.9025,-88.8936 41.9016,-88.8324 41.9017,-88.7712 41.902,-88.7425 41.9028,-88.7074 41.9037,-88.6729 41.9023,-88.6461 41.8962,-88.6332 41.889,-88.6214 41.8811,-88.6086 41.874,-88.5922 41.869,-88.5743 41.8664,-88.557 41.864,-88.5399 41.8606,-88.5227 41.8549,-88.5116 41.848,-88.504 41.8399,-88.4972 41.8322,-88.4886 41.8265,-88.4414 41.8084,-88.4042 41.7987,-88.3647 41.7957,-88.3105 41.7977,-88.2422 41.8007,-88.1726 41.8028,-88.1033 41.8062,-88.0361 41.8131,-88.0223 41.8236,-88.0096 41.8324,-87.9945 41.8391,-87.9733 41.8437,-87.9666 41.844,-87.9598 41.8438,-87.953 41.8438,-87.9461 41.8447)
+LINESTRING(-74.5536 39.4109,-74.5302 39.404,-74.5227 39.4014,-74.501 39.3912,-74.4812 39.3797,-74.4607 39.3684,-74.437 39.3592)
+LINESTRING(-112.202 41.7096,-112.174 41.7669,-112.17 41.8541,-112.179 41.9421,-112.188 42.0016,-112.188 42.0018)
+LINESTRING(-112.202 41.7096,-112.242 41.7339,-112.264 41.7684,-112.293 41.8008,-112.357 41.8187,-112.37 41.8188,-112.384 41.8179,-112.398 41.8167,-112.412 41.8163,-112.44 41.8383,-112.453 41.8579,-112.472 41.8753,-112.518 41.8905,-112.531 41.893,-112.543 41.8947,-112.556 41.895,-112.569 41.8933,-112.575 41.9015,-112.615 41.917,-112.648 41.9366,-112.678 41.9538,-112.71 41.9621,-112.755 41.9638,-112.785 41.9669,-112.808 41.9769,-112.833 41.9992,-112.834 41.9996)
+LINESTRING(-81.5019 41.0667,-81.4966 41.0091,-81.4878 40.9879,-81.467 40.9701,-81.4255 40.9227,-81.4267 40.9141,-81.4312 40.903,-81.4359 40.891,-81.4377 40.8792,-81.4316 40.8689,-81.4183 40.8521,-81.4046 40.8301,-81.3969 40.804,-81.3957 40.8007,-81.393 40.796,-81.3901 40.7909,-81.3881 40.7867)
+LINESTRING(-75.6464 39.6877,-75.6558 39.6835,-75.664 39.6784,-75.6718 39.6731,-75.6799 39.668,-75.703 39.6579,-75.7312 39.6494,-75.7607 39.643,-75.7875 39.6393)
+LINESTRING(-87.6398 41.8475,-87.6373 41.8435,-87.6348 41.8394,-87.6323 41.8354,-87.6298 41.8314,-87.6326 41.8164,-87.638 41.8018,-87.6415 41.7879,-87.6385 41.7747,-87.6159 41.754,-87.5921 41.7309,-87.569 41.7088,-87.5484 41.6911,-87.5352 41.6696,-87.5243 41.6482)
+LINESTRING(-105.022 42.2308,-105.043 42.2716,-105.055 42.2995,-105.059 42.328,-105.06 42.3708,-105.06 42.385,-105.062 42.3965,-105.064 42.408,-105.063 42.4225,-105.063 42.4318,-105.065 42.4412,-105.067 42.4506,-105.067 42.4599,-105.067 42.4672,-105.065 42.4746,-105.063 42.4819,-105.062 42.4893,-105.071 42.5185,-105.094 42.5479,-105.123 42.575,-105.151 42.5973,-105.166 42.611,-105.18 42.6264,-105.192 42.6423,-105.203 42.6576)
+LINESTRING(-87.1864 41.5694,-87.1579 41.5703,-87.1294 41.5711,-87.1008 41.572,-87.0723 41.5728,-87.0109 41.5743,-86.9621 41.5759,-86.9139 41.5804,-86.8541 41.5908,-86.8087 41.6037,-86.7618 41.623,-86.7148 41.6463,-86.6691 41.6711,-86.5596 41.7236,-86.482 41.7428,-86.4155 41.7411,-86.3389 41.731)
+LINESTRING(-86.6768 41.7605,-86.6829 41.7549,-86.7044 41.7374,-86.7275 41.7212,-86.7535 41.7057,-86.7728 41.6952,-86.7995 41.6813,-86.8298 41.666,-86.8602 41.6515,-86.8933 41.6391,-86.9336 41.6266,-86.9706 41.6157,-86.994 41.608,-87.0106 41.6032,-87.0351 41.5981,-87.0594 41.5934,-87.0755 41.5899,-87.1026 41.5841,-87.1305 41.5802,-87.1586 41.5761,-87.1864 41.5694)
+LINESTRING(-87.1864 41.5694,-87.2157 41.5684,-87.2449 41.5673,-87.2741 41.5663,-87.3034 41.5652)
+LINESTRING(-87.5243 41.6482,-87.5216 41.6428,-87.504 41.6197,-87.4789 41.6089,-87.4569 41.6077,-87.4349 41.6065,-87.4129 41.6051,-87.391 41.6032,-87.3729 41.6006,-87.3508 41.595,-87.3314 41.5886,-87.321 41.584,-87.3166 41.5793,-87.3122 41.5746,-87.3078 41.5699,-87.3034 41.5652)
+LINESTRING(-74.6442 39.3058,-74.6411 39.3184,-74.6408 39.3222,-74.6398 39.3283,-74.6382 39.3344,-74.6364 39.3383,-74.6206 39.3523,-74.5929 39.3753,-74.5662 39.398,-74.5536 39.4109)
+LINESTRING(-74.6515 39.2871,-74.6476 39.2924,-74.6442 39.3058)
+LINESTRING(-83.6685 41.0503,-83.6683 41.0789,-83.6683 41.1075,-83.6669 41.136,-83.6643 41.1468,-83.6596 41.1569,-83.6546 41.1668,-83.6511 41.177,-83.6509 41.1919,-83.6544 41.206,-83.6584 41.2193,-83.6593 41.2323,-83.6556 41.2419,-83.6485 41.2534,-83.6409 41.2661,-83.6357 41.2793,-83.6269 41.317,-83.619 41.356,-83.6139 41.3951,-83.6136 41.4333,-83.615 41.4372,-83.6176 41.4413,-83.6201 41.4455,-83.6213 41.4496,-83.6214 41.4702,-83.6216 41.4909,-83.6218 41.5115,-83.622 41.5322,-83.6136 41.5411,-83.6024 41.5525,-83.5911 41.5632,-83.5818 41.5705)
+LINESTRING(-87.4701 41.5423,-87.4295 41.5431,-87.3874 41.5506,-87.3451 41.5596,-87.3034 41.5652)
+LINESTRING(-87.5254 41.5517,-87.513 41.549,-87.4701 41.5423)
+LINESTRING(-87.7429 41.5683,-87.7318 41.5723,-87.7202 41.5767,-87.7084 41.5804,-87.6965 41.5822,-87.6902 41.5806,-87.6839 41.5791,-87.6777 41.5773,-87.6715 41.5755,-87.6356 41.5741,-87.5754 41.5624,-87.5254 41.5517)
+LINESTRING(-87.7429 41.5683,-87.7323 41.5778,-87.7217 41.5874,-87.7032 41.6034,-87.6864 41.617,-87.6925 41.6227,-87.6964 41.6274,-87.7019 41.631,-87.713 41.6337,-87.7178 41.639,-87.7219 41.646,-87.726 41.6532,-87.7308 41.6594,-87.7443 41.6685,-87.757 41.6734,-87.7726 41.6834,-87.7948 41.7079,-87.8012 41.7149,-87.8119 41.7255,-87.8231 41.7358,-87.8309 41.7416,-87.8366 41.7444,-87.8428 41.7478,-87.8497 41.7519,-87.8566 41.756)
+LINESTRING(-76.6622 39.7213,-76.6673 39.736,-76.6701 39.7729,-76.6758 39.797,-76.6833 39.8198,-76.6913 39.8421,-76.6984 39.8647,-76.6985 39.8709,-76.6968 39.8774,-76.6949 39.8832,-76.6968 39.895,-76.7 39.9042,-76.7026 39.9132,-76.7031 39.92,-76.6926 39.9321,-76.683 39.9407,-76.6808 39.9527,-76.6923 39.9748,-76.7012 39.9777,-76.7088 39.9785,-76.7164 39.9787,-76.7253 39.98,-76.7446 40.0147,-76.7612 40.0437,-76.7805 40.0736,-76.8081 40.1109,-76.8231 40.131,-76.8334 40.1461,-76.8425 40.16,-76.8539 40.1766,-76.8603 40.1852,-76.8666 40.1939,-76.873 40.2025,-76.8793 40.2112)
+LINESTRING(-87.3243 41.4688,-87.3201 41.4803,-87.3179 41.4939,-87.3185 41.5076,-87.3225 41.5192,-87.3199 41.5222,-87.3173 41.5252,-87.3147 41.5281,-87.3122 41.5311,-87.3122 41.5396,-87.3105 41.5486,-87.3075 41.5573,-87.3034 41.5652)
+LINESTRING(-78.432 40.4387,-78.4334 40.4257,-78.4347 40.4126,-78.4361 40.3996,-78.438 40.3865,-78.4433 40.3544,-78.4486 40.3223,-78.4539 40.2902,-78.4592 40.258,-78.4639 40.2348,-78.471 40.2115,-78.4809 40.1889,-78.4941 40.168,-78.5105 40.1452,-78.5254 40.1194,-78.5329 40.0933,-78.5279 40.0712)
+LINESTRING(-81.8083 41.3323,-81.8064 41.2907,-81.7977 41.2424,-81.791 41.1964,-81.795 41.1616,-81.8051 41.1475,-81.8195 41.1341,-81.8346 41.121,-81.8471 41.1077,-81.8534 41.0983,-81.8591 41.0892,-81.8658 41.0804,-81.8749 41.072,-81.8909 41.0622,-81.9207 41.0455,-81.9511 41.0295,-81.9691 41.022,-81.988 41.0219,-82.0099 41.0224,-82.0312 41.0209,-82.0483 41.0146,-82.053 41.0088,-82.0571 41.0003,-82.0616 40.9912,-82.0674 40.9838,-82.0927 40.9628,-82.1192 40.9422,-82.1462 40.9223,-82.1731 40.9031,-82.1793 40.8991,-82.1855 40.895,-82.193 40.8904,-82.1988 40.8872,-82.21 40.8818,-82.2213 40.8763,-82.2318 40.8711,-82.243 40.8653,-82.2508 40.8605,-82.2581 40.8553,-82.2656 40.8501,-82.2735 40.8454,-82.3031 40.8325,-82.3345 40.8219,-82.3656 40.8108,-82.3944 40.797,-82.4011 40.7932,-82.4071 40.7895,-82.4121 40.7852,-82.4157 40.7793)
+LINESTRING(-78.2437 39.9874,-78.2367 39.9881,-78.1882 40.0217,-78.1669 40.0272,-78.1501 40.0227,-78.118 40.0253,-78.0884 40.04,-78.0531 40.0396,-78.0133 40.0372,-77.9704 40.0463,-77.9499 40.0548,-77.9281 40.0625,-77.9057 40.0693,-77.8834 40.0747,-77.8685 40.0858,-77.8536 40.0878,-77.8252 40.0894,-77.7965 40.1075,-77.7667 40.1226,-77.7371 40.138,-77.7094 40.1572,-77.6957 40.1611,-77.6783 40.158,-77.6615 40.1517,-77.6498 40.1464,-77.6432 40.1469,-77.6297 40.1527,-77.6161 40.1585,-77.6022 40.1638,-77.5879 40.1683,-77.5729 40.1713,-77.5579 40.1729,-77.5428 40.1739,-77.5277 40.1751,-77.5094 40.1778,-77.4908 40.1816,-77.4723 40.1858,-77.4543 40.1896,-77.4104 40.1965,-77.3616 40.2021,-77.3126 40.2059,-77.2683 40.2075,-77.247 40.2087,-77.2249 40.2116,-77.2031 40.2156,-77.1827 40.22,-77.166 40.2231,-77.1549 40.2238,-77.1456 40.2236,-77.1339 40.2244)
+LINESTRING(-82.4157 40.7793,-82.4606 40.7765,-82.5057 40.7772,-82.5502 40.7768,-82.5935 40.7707,-82.6146 40.7764,-82.6382 40.7797,-82.6624 40.7822,-82.6852 40.7855)
+LINESTRING(-80.0924 40.6624,-80.0828 40.6622,-80.0684 40.6597,-80.0537 40.6566,-80.0436 40.6543,-80.0412 40.6524,-80.0389 40.6504,-80.0366 40.6484,-80.0342 40.6464,-80.0098 40.6417,-79.9982 40.6416,-79.9912 40.6365,-79.9805 40.617,-79.978 40.6157,-79.9684 40.6154,-79.959 40.614,-79.9507 40.6108,-79.9443 40.6055,-79.9179 40.5963,-79.9019 40.5924,-79.8929 40.5915,-79.8876 40.5913,-79.8824 40.5893,-79.874 40.583,-79.8585 40.5698,-79.8322 40.5473,-79.8304 40.546,-79.8286 40.5447,-79.8267 40.5436,-79.8248 40.5424,-79.8233 40.5389,-79.8218 40.5354,-79.8204 40.5319,-79.8189 40.5284,-79.7954 40.5145,-79.7749 40.4906,-79.7592 40.4638,-79.7502 40.4412,-79.7501 40.4385,-79.7506 40.4358,-79.7426 40.4295,-79.7358 40.4217,-79.73 40.4146,-79.7251 40.4104,-79.6833 40.3866,-79.678 40.3702,-79.6872 40.3508,-79.689 40.3176,-79.6837 40.2955,-79.6784 40.285,-79.6697 40.2772,-79.6542 40.2633,-79.6498 40.2574,-79.6465 40.2511,-79.6428 40.2448,-79.6372 40.2391,-79.6293 40.2343,-79.6213 40.2307,-79.6134 40.2265,-79.6059 40.2201)
+LINESTRING(-78.2437 39.9874,-78.2603 39.9838,-78.276 39.9778,-78.2918 39.9718,-78.3083 39.9681,-78.353 39.9698,-78.4004 39.9816,-78.4433 40.0011,-78.4741 40.0259,-78.4841 40.0395,-78.4943 40.0529,-78.5073 40.0642,-78.5253 40.0712,-78.5279 40.0712)
+LINESTRING(-85.0008 41.7351,-85.0016 41.7185,-85.0024 41.7,-85.0045 41.6818,-85.0091 41.6662,-85.0197 41.6643,-85.0288 41.6598,-85.0365 41.6537,-85.0427 41.6471,-85.0416 41.6356,-85.0422 41.6239,-85.0436 41.6123,-85.0449 41.6008,-85.0469 41.5994,-85.0489 41.5981,-85.0509 41.5968,-85.0529 41.5954,-85.055 41.5544,-85.0534 41.5004,-85.0518 41.4513,-85.0534 41.4248,-85.063 41.4069,-85.0746 41.3865,-85.0847 41.3658,-85.0898 41.3475,-85.0894 41.324,-85.0862 41.2998,-85.0833 41.2758,-85.0838 41.2526,-85.0875 41.2463,-85.0954 41.2348,-85.1037 41.2227,-85.1084 41.2148,-85.1119 41.1909,-85.1151 41.1612,-85.1274 41.1364,-85.1583 41.1268)
+LINESTRING(-87.7429 41.5683,-87.7525 41.5633,-87.7678 41.5567,-87.7839 41.5512,-87.7956 41.549,-87.8234 41.5509,-87.854 41.5528,-87.8846 41.5534,-87.9121 41.551,-87.9188 41.5492,-87.9256 41.5465,-87.9324 41.5438,-87.9393 41.5418,-87.9679 41.534,-87.982 41.5267,-87.9897 41.5205,-87.9994 41.5162,-88.0228 41.514,-88.0602 41.5132,-88.0984 41.5133,-88.1245 41.5139,-88.1264 41.514,-88.1459 41.508,-88.163 41.4989,-88.1794 41.4906,-88.1968 41.487)
+LINESTRING(-88.1968 41.487,-88.197 41.4928,-88.1972 41.4986,-88.1974 41.5044,-88.1976 41.5102,-88.1814 41.5308,-88.1797 41.5478,-88.1823 41.5628,-88.1791 41.5776,-88.1749 41.5823,-88.1694 41.5868,-88.1647 41.5916,-88.1628 41.597,-88.1632 41.6072,-88.1637 41.6174,-88.1641 41.6276,-88.1645 41.6378,-88.1076 41.6864,-88.0277 41.7314,-87.9496 41.7664,-87.8985 41.7853)
+LINESTRING(-78.5279 40.0712,-78.5583 40.0708,-78.5826 40.0599,-78.6016 40.048,-78.619 40.0443,-78.6266 40.0443,-78.6355 40.0427,-78.6444 40.0411,-78.652 40.0411,-78.661 40.0409,-78.6721 40.0381,-78.6829 40.0338,-78.6908 40.0292,-78.6993 40.0266,-78.7112 40.0258,-78.7226 40.0249,-78.7297 40.0217,-78.7408 40.0115,-78.7531 40.0087,-78.7664 40.0102,-78.7805 40.0133,-78.8119 40.0129,-78.8374 40.0027,-78.8629 39.9906,-78.8945 39.9846,-78.9323 39.9861,-78.9701 39.9904,-79.0077 39.9966,-79.043 40.0034)
+LINESTRING(-79.043 40.0034,-79.0449 40.0137,-79.0511 40.0298,-79.0584 40.046,-79.0639 40.057,-79.0483 40.0842,-79.0156 40.1306,-78.9827 40.1781,-78.9667 40.2087,-78.9446 40.2165,-78.9252 40.2308,-78.9072 40.2475,-78.8895 40.2622,-78.8808 40.2663,-78.8708 40.2692,-78.8609 40.272,-78.8524 40.2758,-78.8483 40.2796,-78.845 40.2846,-78.8428 40.2901,-78.8419 40.2949,-78.8196 40.3121,-78.8131 40.3196,-78.811 40.325,-78.8022 40.3357,-78.7924 40.3398,-78.7868 40.341,-78.7709 40.3697,-78.7615 40.3985,-78.7591 40.4278,-78.7694 40.4558,-78.7562 40.4671,-78.7429 40.4733,-78.7272 40.477,-78.707 40.4809,-78.6877 40.473,-78.6679 40.4654,-78.6481 40.458,-78.6285 40.4503,-78.6186 40.4473,-78.6083 40.4454,-78.598 40.4434,-78.5879 40.4402,-78.5765 40.4434,-78.5662 40.4513,-78.5551 40.4605,-78.5412 40.4674,-78.5178 40.4675,-78.4894 40.46,-78.4615 40.4497,-78.4399 40.441,-78.432 40.4387)
+LINESTRING(-79.6059 40.2201,-79.5702 40.2052,-79.5371 40.1878,-79.5041 40.1699,-79.4692 40.1538,-79.4656 40.154,-79.462 40.1542,-79.4584 40.1543,-79.4548 40.1545,-79.453 40.1557,-79.4512 40.1568,-79.4481 40.1574,-79.4446 40.1578,-79.4411 40.1577,-79.438 40.157,-79.4236 40.1418,-79.4147 40.1313,-79.4035 40.1215,-79.382 40.1089,-79.3735 40.1096,-79.3653 40.1119,-79.3579 40.1154,-79.3516 40.1198,-79.3388 40.1222,-79.3254 40.1242,-79.3118 40.1262,-79.2983 40.1287,-79.2443 40.1056,-79.1732 40.0683,-79.1073 40.0339,-79.0691 40.0198,-79.0631 40.0148,-79.058 40.0095,-79.052 40.0053,-79.043 40.0034)
+LINESTRING(-75.0948 39.8365,-75.1029 39.8243,-75.1081 39.8082,-75.1122 39.7915,-75.117 39.7775,-75.1229 39.7674,-75.1294 39.7573,-75.1358 39.7472,-75.1412 39.737,-75.1416 39.6808,-75.11 39.6291,-75.0739 39.5859,-75.0603 39.5547,-75.0698 39.5205,-75.0746 39.4917,-75.0716 39.4633,-75.0575 39.4305,-75.05 39.4255,-75.0363 39.4196,-75.0224 39.4129,-75.0139 39.4058,-75.0118 39.3999,-75.0111 39.3936,-75.0113 39.3813,-75.0081 39.3656,-75.0009 39.3517,-74.9932 39.3369,-74.9883 39.3184,-74.9819 39.3129,-74.9764 39.3058,-74.9721 39.2983,-74.9696 39.2913,-74.9377 39.2466,-74.8746 39.183,-74.8561 39.1352,-74.8388 39.0792)
+LINESTRING(-77.1339 40.2244,-77.1452 40.2159,-77.1531 40.205,-77.1603 40.1944,-77.1696 40.1869,-77.184 40.1863,-77.199 40.1864,-77.2138 40.1863,-77.2274 40.1852,-77.2377 40.1819,-77.2521 40.1755,-77.2663 40.1686,-77.2758 40.1637,-77.3181 40.1437,-77.3799 40.1153,-77.4392 40.0874,-77.4736 40.0685,-77.4864 40.0568,-77.4975 40.0444,-77.5093 40.0322,-77.5241 40.0208,-77.5313 40.0169,-77.5379 40.0132,-77.5517 39.9978,-77.5634 39.9816,-77.5748 39.9655,-77.5876 39.9502,-77.5978 39.9476,-77.6093 39.9454,-77.62 39.9426,-77.6278 39.9383,-77.6603 39.8964,-77.696 39.8343,-77.7231 39.7724,-77.7297 39.7315,-77.7342 39.7262,-77.7398 39.7221)
+LINESTRING(-91.6305 41.6854,-91.6379 41.7056,-91.6409 41.7345,-91.6418 41.7645,-91.6432 41.7878,-91.6469 41.8032,-91.6523 41.8193,-91.6574 41.8354,-91.66 41.8512,-91.66 41.8734,-91.6588 41.8956,-91.6572 41.9179,-91.6565 41.9401,-91.6587 41.9516,-91.6637 41.9627,-91.6687 41.9733,-91.6707 41.9835,-91.6702 41.9904,-91.6693 41.998,-91.6689 42.0055,-91.6694 42.0121,-91.6832 42.0425,-91.7125 42.1002,-91.7437 42.1585,-91.7635 42.1911,-91.7889 42.2138,-91.8238 42.2372,-91.8618 42.2582,-91.897 42.274,-91.9151 42.2798,-91.9337 42.2841,-91.9523 42.2882,-91.9703 42.2936,-92.0224 42.3131,-92.0872 42.342,-92.1529 42.3808,-92.2077 42.4302)
+LINESTRING(-90.5632 41.5933,-90.5313 41.5946,-90.4698 41.5966,-90.4061 41.5959,-90.3674 41.5896,-90.3636 41.5813,-90.363 41.5808)
+LINESTRING(-90.5632 41.5933,-90.5649 41.6622,-90.5669 41.7312,-90.5683 41.8002,-90.5683 41.8691)
+LINESTRING(-91.6305 41.6854,-91.5683 41.6833,-91.5256 41.6798,-91.4825 41.6722,-91.4193 41.6577,-91.3859 41.6526,-91.35 41.6511,-91.3141 41.6518,-91.2805 41.6531,-91.2414 41.6523,-91.2053 41.6482,-91.1697 41.643,-91.1316 41.6386,-91.0761 41.6361,-91.0204 41.6359,-90.9649 41.6356,-90.91 41.633,-90.8843 41.6299,-90.8585 41.6254,-90.8328 41.6205,-90.8074 41.6159,-90.7467 41.6067,-90.686 41.5994,-90.625 41.5947,-90.5632 41.5933)
+LINESTRING(-80.0924 40.6624,-80.0933 40.6579,-80.0927 40.6534,-80.0915 40.6488,-80.0905 40.6443,-80.0905 40.6283,-80.0937 40.6145,-80.0975 40.6017,-80.0994 40.5888,-80.1033 40.5875,-80.1071 40.5861,-80.111 40.5848,-80.1149 40.5835,-80.1169 40.5802,-80.118 40.5768,-80.1185 40.5733,-80.1186 40.5698,-80.1205 40.5533,-80.1245 40.5374,-80.1305 40.5219,-80.1381 40.5063,-80.1359 40.5019,-80.1326 40.5003,-80.1292 40.4996,-80.1269 40.4979,-80.127 40.4959,-80.1286 40.4942,-80.13 40.4926,-80.1297 40.4906,-80.1169 40.4704,-80.1131 40.4551,-80.1115 40.4406,-80.1054 40.4231,-80.1041 40.4176,-80.1047 40.4117,-80.1055 40.4057,-80.1052 40.3999,-80.1033 40.395,-80.1011 40.3903,-80.0997 40.3855,-80.1002 40.3801,-80.1032 40.3769,-80.1073 40.3743,-80.112 40.3722,-80.1168 40.3707,-80.1184 40.3658,-80.1182 40.3593,-80.1178 40.3526,-80.1189 40.3475,-80.1305 40.3354,-80.1432 40.3274,-80.1556 40.3155,-80.1658 40.2921,-80.1631 40.2865,-80.1605 40.2809,-80.158 40.2753,-80.1559 40.2696,-80.1564 40.2681,-80.157 40.2666,-80.1575 40.2651,-80.1581 40.2636,-80.164 40.2595,-80.1704 40.2563,-80.1771 40.2537,-80.1841 40.2508,-80.2083 40.2347,-80.228 40.2137,-80.2413 40.1956,-80.2462 40.1878)
+LINESTRING(-84.0046 40.8108,-83.9991 40.814,-83.9935 40.8173,-83.988 40.8205,-83.9824 40.8238,-83.9784 40.8254,-83.9739 40.8266,-83.9694 40.8278,-83.965 40.8299,-83.9607 40.8336,-83.9574 40.8378,-83.9542 40.8419,-83.9501 40.8455,-83.9363 40.854,-83.9225 40.8626,-83.9087 40.8711,-83.8949 40.8796,-83.8813 40.8864,-83.8637 40.8935,-83.8454 40.9003,-83.8303 40.9062,-83.7909 40.9268,-83.739 40.9591,-83.6927 40.9938,-83.6705 41.0216,-83.6685 41.0503)
+LINESTRING(-80.2462 40.1878,-80.2447 40.1881,-80.2432 40.1883,-80.2296 40.1818,-80.2179 40.1734,-80.2065 40.1653,-80.1939 40.1599)
+LINESTRING(-79.6059 40.2201,-79.6305 40.214,-79.6472 40.2132,-79.6603 40.2133,-79.6737 40.2099,-79.6768 40.208,-79.6796 40.2055,-79.6819 40.2028,-79.6842 40.2002,-79.6928 40.1942,-79.7107 40.1825,-79.7291 40.1708,-79.7391 40.1647,-79.7526 40.1607,-79.7679 40.159,-79.7835 40.1582,-79.7978 40.1564,-79.814 40.1519,-79.8357 40.1446,-79.8574 40.1364,-79.8734 40.1296,-79.8809 40.1241,-79.8897 40.116,-79.8986 40.1086,-79.9062 40.105,-79.9094 40.1054,-79.9126 40.1063,-79.9157 40.1075,-79.9184 40.1088,-79.934 40.1085,-79.9443 40.114,-79.9519 40.122,-79.9594 40.1289,-79.9688 40.1328,-79.9775 40.1332,-79.9865 40.1325,-79.9968 40.1331,-80.0247 40.1427,-80.0603 40.1564,-80.0974 40.1637,-80.1299 40.154,-80.1501 40.1537,-80.1601 40.1569,-80.1664 40.1616,-80.1755 40.1657,-80.1795 40.1655,-80.1847 40.1637,-80.1893 40.1618,-80.1939 40.1599)
+LINESTRING(-90.3343 41.5354,-90.2985 41.5357,-90.2733 41.5402,-90.2518 41.5508,-90.2267 41.5693,-90.2185 41.5757,-90.2102 41.582,-90.2028 41.5886,-90.1963 41.5961,-90.1935 41.6036,-90.1924 41.6128,-90.1908 41.6216,-90.1867 41.6275,-90.1687 41.6409,-90.1508 41.656,-90.1326 41.6704,-90.1135 41.6819,-90.0599 41.7007,-90.0031 41.7136,-89.9463 41.7263,-89.8926 41.7445,-89.8413 41.7654,-89.8106 41.7679,-89.7859 41.7611,-89.7523 41.7539,-89.7005 41.7528,-89.6416 41.7584,-89.5851 41.7707,-89.5407 41.7896,-89.4723 41.82,-89.4126 41.826,-89.3514 41.8245,-89.2783 41.8321,-89.2487 41.8409,-89.2214 41.8525,-89.1946 41.8646,-89.1666 41.875,-89.1492 41.8795,-89.1309 41.8833,-89.1123 41.8869,-89.0944 41.8907,-89.0743 41.8958,-89.0612 41.8994,-89.045 41.9022,-89.016 41.9049)
+LINESTRING(-90.363 41.5808,-90.3551 41.5755,-90.3444 41.5709,-90.3341 41.5663,-90.3341 41.5585,-90.3342 41.5508,-90.3342 41.5431,-90.3343 41.5354)
+LINESTRING(-75.502 39.1638,-75.5085 39.1843,-75.5256 39.2015,-75.5459 39.2174,-75.5621 39.2337,-75.565 39.2424,-75.5703 39.2603,-75.5745 39.2748,-75.5787 39.2893,-75.5865 39.3077,-75.5967 39.3187,-75.6113 39.3264,-75.6316 39.3348)
+LINESTRING(-107.183 41.7887,-107.192 41.7851,-107.2 41.7814,-107.209 41.7777,-107.218 41.774,-107.227 41.775,-107.236 41.7763,-107.245 41.7777,-107.254 41.7792,-107.271 41.7801,-107.287 41.779,-107.303 41.7773,-107.321 41.7768,-107.337 41.779,-107.354 41.7835,-107.37 41.7884,-107.386 41.7921,-107.39 41.7922,-107.394 41.7922,-107.397 41.792,-107.401 41.7918,-107.444 41.7803,-107.493 41.7669,-107.542 41.7553,-107.586 41.7493,-107.616 41.7477,-107.645 41.7455,-107.674 41.7424,-107.704 41.7379,-107.737 41.7296,-107.771 41.7191,-107.806 41.7096,-107.84 41.7041,-107.86 41.7038,-107.88 41.7047,-107.9 41.7047,-107.921 41.7019,-107.94 41.6953,-107.958 41.6866,-107.975 41.6784,-107.995 41.6733,-108.03 41.6685,-108.065 41.6637,-108.101 41.659,-108.136 41.6542,-108.189 41.6467,-108.243 41.6396,-108.296 41.6342,-108.35 41.632,-108.423 41.634,-108.496 41.6391,-108.569 41.6446,-108.642 41.6481,-108.658 41.6481,-108.674 41.6479,-108.69 41.648,-108.706 41.6491,-108.751 41.6727,-108.799 41.687,-108.85 41.6937,-108.906 41.6942,-108.913 41.6907,-108.92 41.6856,-108.927 41.6798,-108.931 41.674,-108.966 41.6673,-108.987 41.6592,-109.007 41.6496,-109.036 41.6387,-109.045 41.6368,-109.055 41.6358,-109.064 41.6347,-109.073 41.633,-109.104 41.6234,-109.134 41.6133,-109.165 41.6032,-109.196 41.5937,-109.199 41.5958,-109.201 41.598,-109.203 41.6002,-109.205 41.6023,-109.222 41.6081,-109.238 41.6023,-109.249 41.5901,-109.256 41.5768,-109.279 41.5682,-109.295 41.5618,-109.311 41.556,-109.334 41.5495,-109.351 41.5468,-109.37 41.5452,-109.389 41.5433,-109.403 41.5397,-109.423 41.5468,-109.445 41.56,-109.475 41.5721,-109.514 41.5761,-109.536 41.5707,-109.572 41.5596,-109.607 41.5486,-109.625 41.5436,-109.686 41.5436,-109.746 41.5436,-109.807 41.5436,-109.868 41.5435,-109.879 41.544,-109.889 41.5452,-109.9 41.5464,-109.911 41.547)
+LINESTRING(-78.0977 39.7238,-78.1136 39.7254,-78.1345 39.7237)
+LINESTRING(-78.2437 39.9874,-78.2443 39.9861,-78.2397 39.9725,-78.2304 39.9645,-78.2226 39.9568,-78.2223 39.944,-78.2379 39.9166,-78.2633 39.8707,-78.278 39.8247,-78.2615 39.7969,-78.2509 39.795,-78.2399 39.7947,-78.2288 39.7944,-78.2183 39.7922,-78.2135 39.7865,-78.2111 39.7789,-78.2097 39.7709,-78.2079 39.7637,-78.2014 39.7593,-78.1956 39.7544,-78.1905 39.7491,-78.1862 39.7434,-78.1866 39.7354,-78.1865 39.7256,-78.1863 39.7236)
+LINESTRING(-75.7875 39.6393,-75.7876 39.6393,-75.8008 39.6397,-75.8154 39.642,-75.8303 39.6446,-75.8441 39.6457,-75.8569 39.6445,-75.8719 39.6418,-75.8878 39.6445,-75.8978 39.642,-75.9075 39.6417,-75.9172 39.6432,-75.9271 39.6463,-75.9739 39.6281,-76.0226 39.6117,-76.0717 39.5961,-76.1196 39.5797,-76.15 39.5638,-76.1742 39.5434,-76.196 39.5212,-76.2189 39.5001,-76.2263 39.4961,-76.2355 39.4932,-76.2451 39.4906,-76.2537 39.4877,-76.2692 39.4791,-76.2839 39.4691,-76.2987 39.4594,-76.3145 39.452,-76.3346 39.4469,-76.3543 39.4434,-76.3737 39.4391,-76.3928 39.4315,-76.4198 39.4131,-76.4439 39.3918,-76.4681 39.3715,-76.5017 39.3535)
+LINESTRING(-76.5017 39.3535,-76.5126 39.3651,-76.5287 39.3781,-76.5466 39.3895,-76.5631 39.3961,-76.5727 39.4072,-76.5788 39.4126,-76.5848 39.4158,-76.5931 39.4158,-76.6014 39.4157,-76.6096 39.4152,-76.6176 39.4138,-76.6245 39.4152,-76.6312 39.4171,-76.6379 39.4193,-76.6443 39.4216,-76.645 39.4312,-76.6435 39.4407,-76.6534 39.4531,-76.6601 39.4568,-76.6642 39.4645,-76.6662 39.4889,-76.6695 39.5247,-76.6749 39.5601,-76.6788 39.5955,-76.6777 39.6309,-76.6718 39.6426,-76.6617 39.6498,-76.6519 39.6606,-76.6466 39.6832,-76.6503 39.6959,-76.6589 39.7119,-76.6622 39.7213)
+LINESTRING(-78.1345 39.7237,-78.1405 39.7232,-78.1658 39.7165,-78.1828 39.7079)
+LINESTRING(-78.1863 39.7236,-78.1853 39.7158,-78.1828 39.7079)
+LINESTRING(-88.1968 41.487,-88.203 41.4875,-88.2094 41.4875,-88.2158 41.4871,-88.2219 41.4863,-88.2288 41.4809,-88.2356 41.4754,-88.2425 41.4699,-88.2493 41.4644,-88.2607 41.4629,-88.276 41.4622,-88.2914 41.462,-88.3033 41.4622,-88.3377 41.4422,-88.3832 41.4148,-88.4259 41.3905,-88.4516 41.3799,-88.5327 41.3788,-88.6138 41.3774,-88.6949 41.3764,-88.776 41.3763,-88.8002 41.3759,-88.8168 41.3745,-88.8321 41.3721,-88.8526 41.3685,-88.8932 41.366,-88.9505 41.3661,-89.0103 41.3667,-89.0582 41.3662)
+LINESTRING(-89.016 41.9049,-89.0079 41.8755,-89.0055 41.8224,-89.0057 41.7655,-89.0055 41.7246,-89.0183 41.7113,-89.0354 41.6935,-89.0505 41.675,-89.057 41.6599,-89.0575 41.6333,-89.058 41.6068,-89.0584 41.5802,-89.0583 41.5537,-89.057 41.5444,-89.0544 41.5348,-89.0517 41.5255,-89.0505 41.5169,-89.0505 41.5052,-89.0504 41.4935,-89.0503 41.4818,-89.0502 41.4701,-89.0511 41.463,-89.0533 41.4563,-89.0554 41.4497,-89.0565 41.4429,-89.057 41.4238,-89.0574 41.4046,-89.0578 41.3854,-89.0582 41.3662)
+LINESTRING(-77.7398 39.7221,-77.7398 39.7221,-77.7401 39.7172,-77.7412 39.7128,-77.7425 39.7086,-77.7434 39.704,-77.7429 39.6981,-77.7408 39.6922,-77.7386 39.6862,-77.7373 39.6805,-77.7417 39.6673,-77.7532 39.6563,-77.7672 39.6465,-77.779 39.6369,-77.7836 39.6304,-77.7873 39.6233,-77.7908 39.616,-77.795 39.6092)
+LINESTRING(-77.795 39.6092,-77.8028 39.6253,-77.814 39.6372,-77.8288 39.6463,-77.8477 39.6523,-77.8854 39.6563,-77.9497 39.6523,-77.9874 39.6562,-78.0176 39.6697,-78.0574 39.7093,-78.0876 39.7228,-78.0977 39.7238)
+LINESTRING(-77.795 39.6092,-77.7975 39.6072,-77.8001 39.6053,-77.8026 39.6034,-77.8051 39.6014,-77.8226 39.5974,-77.8368 39.5936)
+LINESTRING(-114.955 41.1003,-115.002 41.0899,-115.051 41.0787,-115.102 41.07,-115.154 41.0668,-115.191 41.0726,-115.226 41.084,-115.262 41.0939,-115.298 41.0953,-115.349 41.0853,-115.391 41.0712,-115.431 41.0529,-115.475 41.0304,-115.491 41.0208,-115.505 41.0118,-115.521 41.0042,-115.54 40.9994,-115.565 40.998,-115.609 41.0016,-115.634 41.0002,-115.679 40.9864,-115.712 40.9633,-115.741 40.935,-115.776 40.9056,-115.809 40.8846,-115.842 40.8685,-115.874 40.8529,-115.91 40.8335,-115.922 40.8231,-115.932 40.8121,-115.943 40.8028,-115.959 40.7972,-116.066 40.7814,-116.079 40.7758,-116.145 40.7553,-116.249 40.6934,-116.315 40.6728,-116.346 40.6692,-116.374 40.6685,-116.402 40.6715,-116.431 40.6787,-116.449 40.6846,-116.465 40.6897,-116.482 40.6925,-116.501 40.6916,-116.542 40.6801,-116.61 40.6473,-116.652 40.6357,-116.664 40.6344,-116.687 40.6334,-116.699 40.632,-116.729 40.621,-116.772 40.5859,-116.801 40.5749,-116.806 40.5743,-116.81 40.574,-116.813 40.5726,-116.845 40.5709,-116.873 40.5757,-116.9 40.5858,-116.927 40.6002,-116.979 40.6315,-117.003 40.646,-117.031 40.6621,-117.083 40.6944,-117.125 40.7263,-117.165 40.7595,-117.212 40.7962,-117.262 40.8283,-117.312 40.8508,-117.367 40.8678,-117.43 40.883,-117.49 40.9081,-117.539 40.9414,-117.589 40.9679,-117.65 40.9722,-117.679 40.966,-117.704 40.9569,-117.725 40.944,-117.743 40.9262)
+LINESTRING(-90.335 41.4423,-90.3356 41.4655,-90.3352 41.4888,-90.3345 41.5122,-90.3343 41.5354)
+LINESTRING(-89.0582 41.3662,-89.0637 41.366,-89.0688 41.3669,-89.0733 41.3688,-89.0772 41.3717,-89.0824 41.3724,-89.0878 41.3728,-89.0932 41.3727,-89.0986 41.3727,-89.1091 41.3682,-89.1247 41.366,-89.141 41.3653,-89.1537 41.3652,-89.1916 41.3655,-89.222 41.3685,-89.251 41.3754,-89.2846 41.3877,-89.2915 41.3908,-89.2988 41.3944,-89.3063 41.3977,-89.3133 41.4,-89.3397 41.4023,-89.3692 41.4007,-89.3986 41.3974,-89.4247 41.3947,-89.4402 41.3948,-89.4563 41.3965,-89.4729 41.3979,-89.4896 41.3974,-89.5021 41.3952,-89.5145 41.3921,-89.5268 41.3891,-89.5392 41.387,-89.5448 41.3874,-89.5497 41.3895,-89.5544 41.3919,-89.5594 41.3938,-89.5731 41.3954,-89.5883 41.3955,-89.6036 41.395,-89.6176 41.3946,-89.6443 41.3929,-89.6705 41.3893,-89.6969 41.3857,-89.7241 41.384,-89.7482 41.3838,-89.7769 41.3837,-89.805 41.3845,-89.8275 41.387,-89.8543 41.3937,-89.8866 41.4029,-89.9188 41.4114,-89.9452 41.4161,-89.957 41.4149,-89.9663 41.4107,-89.979 41.4065,-90.0009 41.405,-90.0047 41.4073,-90.0086 41.4096,-90.0124 41.4118,-90.0163 41.4141,-90.0437 41.4132,-90.0747 41.4121,-90.1055 41.412,-90.1326 41.414,-90.1495 41.4197,-90.1617 41.4281,-90.1806 41.4358,-90.218 41.4399,-90.2473 41.4405,-90.2765 41.4411,-90.3058 41.4417,-90.335 41.4423)
+LINESTRING(-80.5194 40.0915,-80.5116 40.0957,-80.4943 40.1028,-80.4753 40.1059,-80.456 40.1056,-80.4366 40.1043,-80.4174 40.1041,-80.4128 40.1049,-80.4086 40.1063,-80.4008 40.11,-80.3783 40.1194,-80.3545 40.1277,-80.3302 40.1354,-80.3064 40.1429,-80.295 40.1503,-80.2823 40.1625,-80.2674 40.176,-80.2462 40.1878)
+LINESTRING(-112.202 41.7096,-112.192 41.7023,-112.178 41.696,-112.164 41.6905,-112.152 41.6855,-112.14 41.6784,-112.13 41.6712,-112.12 41.6638,-112.109 41.656,-112.086 41.6411,-112.067 41.6262,-112.054 41.6092,-112.049 41.5957,-112.048 41.5938,-112.047 41.5911,-112.047 41.5899,-112.047 41.5879,-112.043 41.5681,-112.037 41.5402,-112.032 41.5124,-112.027 41.4846,-112.024 41.4385,-112.021 41.3924,-112.018 41.3462,-112.015 41.3001,-112.013 41.2924,-112.012 41.2848,-112.01 41.2771,-112.009 41.2694,-112.006 41.244,-112.006 41.2214,-112.009 41.1987,-112.013 41.1791)
+LINESTRING(-76.5017 39.3535,-76.529 39.3361,-76.5422 39.3206,-76.5478 39.3027,-76.5521 39.2777)
+LINESTRING(-93.5762 41.6436,-93.545 41.6462,-93.5155 41.654,-93.4868 41.6636,-93.4576 41.6718,-93.4185 41.681,-93.3783 41.6914,-93.3387 41.7012,-93.3012 41.7088,-93.2761 41.7143,-93.2474 41.7212,-93.2187 41.7269,-93.1934 41.7285,-93.1718 41.7243,-93.1535 41.7167,-93.14 41.7082,-93.1329 41.702,-93.0751 41.6935,-93.02 41.6886,-92.9647 41.6863,-92.9061 41.6858,-92.8825 41.6863,-92.8597 41.6873,-92.8366 41.6886,-92.8121 41.6895,-92.6992 41.6899,-92.5859 41.6877,-92.4726 41.6855,-92.3597 41.6862,-92.3079 41.6891,-92.2556 41.6934,-92.2033 41.6973,-92.1517 41.6988,-92.1201 41.6969,-92.0864 41.6929,-92.0527 41.688,-92.021 41.6837,-91.9431 41.6808,-91.8381 41.6827,-91.7269 41.6855,-91.6305 41.6854)
+LINESTRING(-93.5762 41.6436,-93.5717 41.7133,-93.5704 41.7835,-93.5713 41.8538,-93.5732 41.9236,-93.5753 41.9441,-93.5789 41.9651,-93.582 41.9858,-93.5828 42.0059,-93.5791 42.0748,-93.5754 42.1438,-93.5721 42.2127,-93.5695 42.2817,-93.5686 42.3226,-93.5689 42.3631,-93.5708 42.4037,-93.5746 42.4448)
+LINESTRING(-76.5521 39.2777,-76.5621 39.2702)
+LINESTRING(-109.911 41.547,-109.936 41.5357,-109.961 41.5244,-109.986 41.5131,-110.011 41.5018,-110.016 41.4973,-110.026 41.4883,-110.036 41.4787,-110.045 41.4723,-110.073 41.4551,-110.114 41.4311,-110.154 41.4078,-110.183 41.3928,-110.193 41.3905,-110.2 41.3894,-110.229 41.3823,-110.249 41.3782,-110.27 41.375,-110.294 41.3713,-110.306 41.3684,-110.317 41.3642,-110.328 41.3599,-110.339 41.3569,-110.365 41.3533,-110.383 41.3513,-110.4 41.3456,-110.428 41.3307,-110.456 41.3297,-110.489 41.3224,-110.521 41.3126,-110.547 41.3044,-110.589 41.2984,-110.644 41.2974,-110.696 41.3022,-110.728 41.3134)
+LINESTRING(-110.728 41.3134,-110.737 41.3124,-110.749 41.3103,-110.76 41.3071,-110.768 41.3029,-110.786 41.2925,-110.8 41.2808,-110.822 41.2727,-110.861 41.2732,-110.889 41.2682,-110.912 41.2681,-110.932 41.269,-110.949 41.2667,-110.974 41.2619,-110.994 41.2556,-111.009 41.2495,-111.023 41.2454,-111.037 41.2441,-111.045 41.2438)
+LINESTRING(-93.5909 41.5982,-93.5835 41.6086,-93.5793 41.62,-93.5773 41.6318,-93.5762 41.6436)
+LINESTRING(-80.754 40.062,-80.7336 40.0632,-80.723 40.0635)
+LINESTRING(-80.7391 41.0366,-80.736 41.0224,-80.7309 41.009,-80.7252 40.9959,-80.7209 40.9824,-80.7175 40.9548,-80.7178 40.9262,-80.721 40.8977,-80.7262 40.8704,-80.7288 40.867,-80.7312 40.8632,-80.7329 40.8456,-80.7346 40.8281,-80.7366 40.8066,-80.7371 40.7961,-80.7196 40.7549,-80.6997 40.7277,-80.6675 40.7096,-80.6128 40.6955,-80.6092 40.6927,-80.6012 40.6854,-80.5928 40.6755,-80.588 40.6649,-80.5972 40.6485,-80.6245 40.6419,-80.658 40.6383,-80.6857 40.6307,-80.7064 40.613,-80.7178 40.5912,-80.7202 40.5691,-80.7137 40.5501,-80.7067 40.5459,-80.6995 40.542,-80.6927 40.5378,-80.687 40.5325,-80.6656 40.4946,-80.653 40.4519,-80.645 40.4128,-80.6374 40.3855,-80.6346 40.3838,-80.6318 40.3821,-80.6289 40.3803,-80.6261 40.3786,-80.6293 40.3739,-80.631 40.3713,-80.632 40.3691,-80.6349 40.3573,-80.638 40.3361,-80.6408 40.3243,-80.6547 40.3001,-80.6944 40.2644,-80.7083 40.2402,-80.71 40.2324,-80.7116 40.2186,-80.7133 40.2109,-80.723 40.1937,-80.7511 40.1667,-80.7608 40.1495,-80.7621 40.1417,-80.7618 40.1347,-80.761 40.1276,-80.7609 40.1196,-80.762 40.1045,-80.7618 40.0912,-80.7593 40.0782,-80.754 40.062)
+LINESTRING(-76.5912 39.234,-76.5925 39.2342,-76.5972 39.2348,-76.602 39.2354,-76.6067 39.236,-76.6107 39.234,-76.6148 39.232,-76.6188 39.2299,-76.6228 39.2279)
+LINESTRING(-80.723 40.0635,-80.7209 40.0636,-80.7132 40.0629,-80.7018 40.0582,-80.6863 40.0518,-80.6704 40.0461,-80.6578 40.0433,-80.6417 40.0462,-80.6111 40.0533,-80.5801 40.0611,-80.5631 40.0664,-80.5471 40.0755,-80.5296 40.0859,-80.5194 40.0915)
+LINESTRING(-76.5521 39.2777,-76.5935 39.2842,-76.6349 39.2906,-76.6763 39.297,-76.7177 39.3034,-76.7664 39.3055,-76.8082 39.2997,-76.8483 39.2927,-76.8919 39.2912,-76.9304 39.2975,-76.9689 39.3087,-77.0068 39.3216,-77.0439 39.3326,-77.081 39.3405,-77.119 39.3468,-77.1572 39.3529,-77.1948 39.3603,-77.2269 39.3685,-77.2586 39.3774,-77.2905 39.3856,-77.3233 39.3918,-77.3516 39.3944,-77.3798 39.3954,-77.408 39.3964,-77.4364 39.3992)
+LINESTRING(-77.795 39.6092,-77.7897 39.6055,-77.7838 39.6021,-77.7777 39.5991,-77.7717 39.5961,-77.7448 39.5965,-77.7183 39.5981,-77.6918 39.5995,-77.6648 39.599,-77.6429 39.5856,-77.6218 39.5699,-77.6045 39.552,-77.5937 39.5324,-77.5926 39.5274,-77.5919 39.5222,-77.5909 39.517,-77.5889 39.512,-77.5865 39.5095,-77.5687 39.4944,-77.548 39.4805,-77.5283 39.4665,-77.5138 39.4513,-77.5066 39.4402,-77.4981 39.428,-77.4881 39.4167,-77.4762 39.4083,-77.468 39.4052,-77.4569 39.4024,-77.4455 39.4002,-77.4364 39.3992)
+LINESTRING(-93.7842 41.5811,-93.735 41.5803,-93.6874 41.5817,-93.6405 41.5864,-93.5934 41.5955,-93.5921 41.5968,-93.5909 41.5982)
+LINESTRING(-114.955 41.1003,-114.932 41.0995,-114.893 41.1038,-114.851 41.1093,-114.822 41.1121,-114.771 41.1084,-114.73 41.0981,-114.691 41.0849,-114.647 41.0724,-114.634 41.0708,-114.605 41.0701,-114.59 41.0684,-114.58 41.0759,-114.571 41.0773,-114.562 41.0762,-114.551 41.0757,-114.534 41.0652,-114.519 41.053,-114.504 41.0404,-114.488 41.0288,-114.447 41.0024,-114.407 40.9751,-114.368 40.9472,-114.33 40.9192,-114.312 40.9102,-114.287 40.9016,-114.26 40.8928,-114.237 40.8833,-114.216 40.8621,-114.173 40.8213,-114.153 40.8008,-114.129 40.7755,-114.108 40.7566,-114.081 40.745,-114.041 40.741,-114.04 40.7412)
+LINESTRING(-96.3758 42.4416,-96.3767 42.4375,-96.3777 42.4333,-96.3787 42.4285,-96.361 42.3833,-96.3356 42.3447,-96.3074 42.3071,-96.2812 42.2678,-96.269 42.2418,-96.2587 42.2138,-96.2476 42.1863,-96.233 42.1615,-96.208 42.1311,-96.1819 42.1003,-96.1583 42.0685,-96.1409 42.0353,-96.1313 42.0202,-96.1171 42.0032,-96.104 41.9862,-96.0978 41.9712,-96.0978 41.9279,-96.0984 41.8977,-96.0905 41.8698,-96.0649 41.8333,-96.0593 41.8264,-96.0535 41.8197,-96.0468 41.8134,-96.0387 41.8079,-96.0304 41.7756,-96.0325 41.7425,-96.0356 41.7105,-96.0305 41.6814,-96.005 41.6497,-95.9754 41.6277,-95.9543 41.5996,-95.9544 41.5497,-95.9551 41.545,-95.9563 41.5386)
+LINESTRING(-76.1576 38.9808,-76.1996 38.9641,-76.2008 38.9643)
+LINESTRING(-94.9612 41.4913,-94.899 41.4907,-94.7703 41.4898,-94.7527 41.4905,-94.7332 41.4917,-94.7139 41.4924,-94.6967 41.4914,-94.6856 41.4886,-94.6752 41.4843,-94.665 41.4802,-94.6548 41.4778,-94.636 41.4788,-94.6168 41.4836,-94.5974 41.4888,-94.5778 41.4911,-94.4976 41.4901,-94.4174 41.489,-94.3373 41.4876,-94.2571 41.4862,-94.2396 41.489,-94.2235 41.4965,-94.2094 41.5064,-94.1979 41.5165,-94.1715 41.5178,-94.1449 41.5179,-94.1183 41.5173,-94.0918 41.5165,-94.0831 41.518,-94.0711 41.5215,-94.0611 41.5249,-94.051 41.5282,-93.9935 41.5409,-93.9414 41.5465,-93.8938 41.5502,-93.8498 41.5574,-93.8338 41.5633,-93.8175 41.5712,-93.8009 41.5781,-93.7842 41.5811)
+LINESTRING(-76.2008 38.9643,-76.2332 38.9684,-76.2488 38.9724)
+LINESTRING(-78.1828 39.7079,-78.2058 39.6993,-78.2307 39.6966,-78.2535 39.6951,-78.2705 39.6901,-78.2827 39.6922,-78.2886 39.6945,-78.2998 39.6994,-78.3118 39.6974,-78.3209 39.6956,-78.3305 39.6974,-78.3459 39.6978,-78.356 39.698,-78.3661 39.6983,-78.3768 39.6977,-78.3798 39.6916,-78.384 39.686,-78.3893 39.6811,-78.3959 39.677,-78.4537 39.6642,-78.5015 39.6776,-78.5438 39.699,-78.5852 39.7095,-78.5957 39.7087,-78.6055 39.7043,-78.6126 39.7007,-78.6264 39.6945,-78.6433 39.6868,-78.6603 39.6799,-78.675 39.6761,-78.6869 39.6759,-78.6989 39.6759,-78.7144 39.6727,-78.7287 39.6676,-78.7431 39.6626,-78.7596 39.6599,-78.763 39.6526,-78.7708 39.6491,-78.7797 39.6466,-78.7888 39.644,-78.7974 39.64,-78.8265 39.6449,-78.8543 39.6454,-78.8823 39.6444,-78.9122 39.6451,-78.9326 39.6493,-78.9578 39.6575,-78.9829 39.667,-79.0031 39.6753,-79.02 39.6732,-79.0372 39.6713,-79.0546 39.6699,-79.0717 39.669,-79.0882 39.6707,-79.107 39.675,-79.1261 39.6799,-79.1437 39.6831,-79.1658 39.6848,-79.1875 39.6856,-79.2091 39.6854,-79.231 39.6842,-79.2573 39.6849,-79.2757 39.6882,-79.2963 39.6879,-79.3295 39.6781,-79.34 39.674,-79.3502 39.6695,-79.3595 39.6641,-79.3672 39.6573,-79.3804 39.6546,-79.3941 39.6513,-79.4079 39.6484,-79.4213 39.6469,-79.4351 39.6472,-79.4488 39.6481,-79.4626 39.6489,-79.4769 39.6488,-79.4779 39.6488)
+LINESTRING(-76.3452 38.9788,-76.3703 38.9847,-76.3958 38.9979,-76.4016 39.0064)
+LINESTRING(-76.2488 38.9724,-76.2663 38.977,-76.3069 38.9733,-76.3389 38.9773,-76.3452 38.9788)
+LINESTRING(-95.5802 41.492,-95.5372 41.4922,-95.4941 41.4924,-95.451 41.4926,-95.408 41.4928,-95.3955 41.4922,-95.3832 41.4906,-95.371 41.4889,-95.3588 41.4876,-95.3407 41.4878,-95.3222 41.4894,-95.3037 41.4913,-95.2853 41.4923,-95.1566 41.4927,-95.0278 41.4919,-94.9612 41.4913)
+LINESTRING(-81.5444 39.9966,-81.524 40.0019,-81.5079 40.0057,-81.4919 40.0102,-81.4721 40.0173,-81.4676 40.0191,-81.463 40.0204,-81.45 40.0218,-81.4365 40.0219,-81.4231 40.0221,-81.4101 40.0236,-81.381 40.0302,-81.3534 40.0364,-81.3255 40.0419,-81.295 40.0461,-81.2683 40.0472,-81.242 40.0463,-81.2157 40.0456,-81.1893 40.0474,-81.1788 40.0501,-81.1666 40.0542,-81.155 40.0579,-81.1464 40.0591,-81.1333 40.0563,-81.1206 40.0519,-81.1081 40.0474,-81.095 40.0445,-81.0669 40.0462,-81.0251 40.0529,-80.9845 40.0615,-80.9599 40.0688,-80.9593 40.072,-80.9553 40.0733,-80.9398 40.0705,-80.9283 40.0671,-80.9172 40.0632,-80.9049 40.059,-80.8958 40.0585,-80.8824 40.0598,-80.8685 40.0615,-80.8579 40.0625,-80.8348 40.0599,-80.8088 40.055,-80.7834 40.0536,-80.7618 40.0617,-80.7579 40.0619,-80.754 40.062)
+LINESTRING(-81.3881 40.7867,-81.3869 40.7826,-81.3868 40.7792,-81.3874 40.7757,-81.3883 40.7717,-81.3912 40.77,-81.3948 40.7674,-81.3981 40.7647,-81.4 40.7623,-81.4122 40.7318,-81.4243 40.7003,-81.438 40.6693,-81.4552 40.6403,-81.4692 40.6242,-81.4855 40.6088,-81.5011 40.5932,-81.513 40.5768,-81.5073 40.5591,-81.4934 40.526,-81.4782 40.4906,-81.4686 40.4663,-81.4761 40.4517,-81.4888 40.4375,-81.5034 40.424,-81.5165 40.4118,-81.5236 40.3968,-81.5306 40.3719,-81.5364 40.3464,-81.54 40.3294,-81.5431 40.3047,-81.54 40.2928,-81.5338 40.2826,-81.5276 40.2631,-81.5276 40.248,-81.5316 40.2338,-81.537 40.2198,-81.541 40.2052,-81.5425 40.1826,-81.5422 40.1608,-81.544 40.1391,-81.5522 40.1165,-81.5529 40.1153,-81.5535 40.1141,-81.5542 40.1129,-81.5549 40.1117,-81.5491 40.0885,-81.5435 40.0701,-81.5442 40.0492,-81.5573 40.0189,-81.5551 40.0131,-81.5525 40.0072,-81.549 40.0016,-81.5444 39.9966)
+LINESTRING(-111.045 41.2438,-111.052 41.2436,-111.066 41.2413,-111.078 41.2349,-111.09 41.222,-111.098 41.2107,-111.11 41.1995,-111.13 41.1867,-111.134 41.1788,-111.137 41.1709,-111.14 41.163,-111.143 41.155,-111.163 41.1407,-111.182 41.1247,-111.2 41.1092,-111.22 41.0961,-111.274 41.0647,-111.331 41.0301,-111.389 40.9967,-111.443 40.9693)
+LINESTRING(-111.443 40.9693,-111.467 40.9947,-111.492 41.0195,-111.519 41.0432,-111.547 41.0655,-111.565 41.0635,-111.585 41.0592,-111.602 41.0548,-111.611 41.053,-111.618 41.0538,-111.625 41.0547,-111.632 41.0549,-111.639 41.0535,-111.645 41.0515,-111.651 41.0492,-111.656 41.047,-111.663 41.0454,-111.705 41.069,-111.735 41.095,-111.764 41.1202,-111.801 41.1414,-111.823 41.14,-111.844 41.137,-111.864 41.1337,-111.885 41.1315,-111.902 41.1319,-111.918 41.1338,-111.934 41.1361,-111.951 41.1375,-111.968 41.1472,-111.986 41.1569,-112.002 41.1678,-112.013 41.1791)
+LINESTRING(-80.1939 40.1599,-80.1962 40.1568,-80.1992 40.1538,-80.2026 40.1511,-80.2062 40.1442,-80.207 40.1398,-80.2079 40.1354,-80.2085 40.131,-80.2053 40.1108,-80.1964 40.0895,-80.1865 40.0682,-80.1801 40.0477,-80.1792 40.0279,-80.1812 40.0156,-80.1799 39.9989,-80.1693 39.9658,-80.1691 39.9627,-80.1666 39.9293,-80.1592 39.9141,-80.1478 39.9028,-80.1337 39.8809,-80.1248 39.8616,-80.1161 39.843,-80.1067 39.8246,-80.0956 39.8059,-80.0914 39.7955,-80.0899 39.7847,-80.0884 39.7738,-80.0839 39.7631,-80.0784 39.7555,-80.0729 39.7484,-80.068 39.7411,-80.0643 39.7327,-80.0632 39.7273,-80.0621 39.7219)
+LINESTRING(-117.743 40.9262,-117.754 40.9243,-117.766 40.9224,-117.778 40.9204,-117.79 40.9185,-117.8 40.917,-117.811 40.9155,-117.818 40.9145,-117.825 40.9136,-117.839 40.9063,-117.856 40.8992,-117.869 40.8938,-117.923 40.862,-117.937 40.8324,-117.938 40.7995,-117.941 40.7605,-117.944 40.744,-117.945 40.7304,-117.946 40.7169,-117.951 40.7004,-117.959 40.6793,-117.97 40.6618,-117.986 40.6487,-118.011 40.6407,-118.038 40.6344,-118.063 40.626,-118.089 40.6177,-118.115 40.6113,-118.15 40.6028,-118.179 40.5889,-118.201 40.568,-118.214 40.5382,-118.223 40.5178,-118.236 40.4971,-118.249 40.476,-118.256 40.4547,-118.261 40.426,-118.266 40.3967,-118.273 40.3675,-118.28 40.3392,-118.29 40.3226,-118.309 40.2991,-118.329 40.275,-118.343 40.2569,-118.358 40.2432,-118.368 40.2333,-118.377 40.2263,-118.391 40.2174,-118.405 40.2097,-118.421 40.2023,-118.436 40.1943,-118.455 40.182,-118.473 40.1686,-118.491 40.155,-118.509 40.1419,-118.542 40.1245,-118.58 40.1076,-118.616 40.0904,-118.644 40.0723,-118.666 40.0416,-118.678 40.0054,-118.688 39.9728,-118.703 39.9529,-118.713 39.949,-118.723 39.9456,-118.734 39.9424,-118.744 39.9394)
+LINESTRING(-95.9342 41.4886,-95.9013 41.4912,-95.8813 41.4912,-95.8613 41.4905,-95.8414 41.4902,-95.8276 41.4908,-95.8138 41.492,-95.8001 41.4934,-95.7864 41.4944,-95.74 41.4953,-95.6932 41.4946,-95.6463 41.4933,-95.5999 41.4921,-95.5802 41.492)
+LINESTRING(-95.9563 41.5386,-95.9583 41.5301,-95.9602 41.5215,-95.9618 41.5138,-95.9626 41.508,-95.9521 41.4961,-95.9342 41.4886)
+LINESTRING(-77.8368 39.5936,-77.855 39.5887,-77.8864 39.5798,-77.9011 39.5754,-77.9355 39.5434,-77.9655 39.4995,-77.9919 39.4531,-78.0159 39.4136,-78.0258 39.4012,-78.0366 39.3893,-78.0473 39.3773,-78.0566 39.3648,-78.0643 39.3508,-78.0708 39.3361,-78.0766 39.3214,-78.0825 39.3067,-78.0856 39.2989)
+LINESTRING(-76.4016 39.0064,-76.4104 39.0196,-76.4349 39.0273,-76.4621 39.0258,-76.4884 39.0182,-76.51 39.0072,-76.5218 38.9991,-76.5352 38.99,-76.5495 38.9821,-76.5643 38.9778,-76.5733 38.9772,-76.5825 38.9774,-76.5918 38.9775,-76.601 38.9767)
+LINESTRING(-76.601 38.9767,-76.6043 38.9857,-76.6108 38.9954,-76.6193 39.004,-76.629 39.01,-76.6284 39.0151,-76.6277 39.0201,-76.6271 39.0252,-76.6264 39.0303,-76.6323 39.0371,-76.6383 39.0439,-76.644 39.0508,-76.6498 39.0577,-76.6474 39.0615,-76.6417 39.0692,-76.6357 39.0776,-76.6323 39.0834,-76.6304 39.1009,-76.6349 39.1182,-76.643 39.135,-76.6522 39.1511,-76.6523 39.1678,-76.6426 39.1889,-76.6303 39.2104,-76.6228 39.2279)
+LINESTRING(-120.038 39.7739,-120.039 39.7596,-120.039 39.7448,-120.037 39.73,-120.034 39.7159,-120.026 39.7048,-120.009 39.6844,-120.002 39.6757)
+LINESTRING(-82.4157 40.7793,-82.4251 40.767,-82.4336 40.7543,-82.4425 40.7418,-82.4533 40.7303,-82.4744 40.7153,-82.4974 40.7025,-82.52 40.6891,-82.54 40.6727,-82.5573 40.6509,-82.5714 40.6278,-82.5851 40.6047,-82.6011 40.5829,-82.6135 40.5743,-82.631 40.567,-82.6491 40.56,-82.6634 40.5524,-82.6773 40.5397,-82.6904 40.5246,-82.7029 40.509,-82.7152 40.4948,-82.7335 40.4806,-82.761 40.4637,-82.7899 40.4476,-82.8123 40.4356,-82.8159 40.432,-82.8195 40.4168,-82.8234 40.3959,-82.8281 40.3761,-82.8337 40.3643,-82.8544 40.3507,-82.8841 40.3335,-82.9111 40.316,-82.9238 40.3015,-82.9274 40.2728,-82.9298 40.2442,-82.9314 40.2156,-82.9328 40.1867,-82.9387 40.1776,-82.9513 40.1687,-82.9644 40.159,-82.9717 40.1476,-82.9734 40.138,-82.9751 40.1283,-82.9769 40.1187,-82.9786 40.109)
+LINESTRING(-77.4364 39.3992,-77.4233 39.3823,-77.393 39.3543,-77.3602 39.325,-77.3395 39.3044,-77.3344 39.2943,-77.3314 39.2833,-77.3285 39.2724,-77.3236 39.2626,-77.3136 39.2522,-77.3012 39.2425,-77.2884 39.233,-77.2774 39.2231,-77.2715 39.2159,-77.2665 39.2081,-77.2615 39.2002,-77.2561 39.1927,-77.2269 39.1575,-77.2002 39.1229,-77.177 39.087,-77.1584 39.0476,-77.1526 39.0379,-77.1484 39.0326,-77.0975 39.0016,-77.0609 38.9801)
+LINESTRING(-79.4779 39.6488,-79.5171 39.6481,-79.5784 39.6491,-79.638 39.6522,-79.6732 39.6578,-79.713 39.6465,-79.7692 39.6483,-79.8276 39.6526,-79.874 39.6491,-79.8937 39.6273,-79.9248 39.6103,-79.9552 39.5925,-79.9732 39.5685)
+LINESTRING(-80.0621 39.7219,-80.0621 39.7219,-80.0604 39.7177,-80.0576 39.7137,-80.0542 39.71,-80.0509 39.7063,-80.0326 39.6823,-80.0174 39.658,-80.0027 39.6335,-79.9863 39.6089,-79.9822 39.5994,-79.9806 39.5891,-79.9786 39.5786,-79.9732 39.5685)
+LINESTRING(-112.013 41.1791,-112.014 41.173,-112.013 41.1613,-112.015 41.1508,-112.015 41.1403,-112.013 41.1286,-112.005 41.107,-111.991 41.0896,-111.973 41.0737,-111.952 41.0564,-111.925 41.0319,-111.903 41.0089,-111.886 40.9839,-111.876 40.9536,-111.872 40.9222,-111.874 40.8941,-111.88 40.8664,-111.892 40.836,-111.9 40.8231,-111.908 40.8119,-111.913 40.8006,-111.914 40.7873,-111.912 40.7818,-111.908 40.7723,-111.906 40.7668)
+LINESTRING(-90.3327 40.9849,-90.3346 41.0523,-90.3364 41.1227,-90.3349 41.1927,-90.3268 41.259,-90.3264 41.2683,-90.3276 41.2787,-90.3294 41.2893,-90.3303 41.2989,-90.3303 41.329,-90.3297 41.3589,-90.3283 41.3887,-90.3262 41.4188,-90.3261 41.4228,-90.3264 41.4268,-90.327 41.4307,-90.3276 41.4347,-90.3295 41.4366,-90.3313 41.4385,-90.3332 41.4404,-90.335 41.4423)
+LINESTRING(-76.601 38.9767,-76.618 38.9736,-76.6329 38.9674,-76.6473 38.9605,-76.6628 38.9549,-76.6671 38.9541,-76.6716 38.9537,-76.6761 38.9535,-76.6806 38.9533,-76.6954 38.9533,-76.7102 38.9537,-76.725 38.954,-76.7397 38.9536,-76.7549 38.9519,-76.7699 38.9494,-76.785 38.9472,-76.8002 38.9462,-76.8178 38.9471,-76.8344 38.9494,-76.8507 38.9523,-76.8675 38.9547,-76.8734 38.9533,-76.8793 38.9517,-76.8849 38.9497,-76.8901 38.9471,-76.8974 38.9359,-76.9041 38.9269,-76.914 38.9205,-76.9311 38.917)
+LINESTRING(-76.6228 39.2279,-76.6277 39.2287,-76.6326 39.2294,-76.6375 39.2301,-76.6424 39.2308,-76.652 39.2181,-76.6684 39.2054,-76.6866 39.1934,-76.7017 39.1827,-76.7512 39.1388,-76.7905 39.0956,-76.8238 39.0492,-76.8553 38.9959,-76.8622 38.9895,-76.8724 38.9849,-76.8834 38.9807,-76.8928 38.9753,-76.9045 38.9623,-76.9137 38.9473,-76.9221 38.9317,-76.9311 38.917)
+LINESTRING(-120.002 39.6757,-119.992 39.6645,-119.982 39.6549,-119.976 39.6528,-119.969 39.6512,-119.963 39.6497,-119.956 39.6477,-119.95 39.6448,-119.944 39.6413,-119.938 39.6379,-119.932 39.6352,-119.894 39.628,-119.86 39.6181,-119.832 39.603,-119.812 39.58)
+LINESTRING(-76.9311 38.917,-76.9374 38.9173,-76.9424 38.9176)
+LINESTRING(-76.9424 38.9176,-76.9436 38.9177,-76.9498 38.9181,-76.956 38.9184)
+LINESTRING(-77.0609 38.9801,-77.0503 38.9739,-77.0031 38.9462,-76.956 38.9184)
+LINESTRING(-76.956 38.9184,-76.9683 38.9161,-76.9806 38.9138,-76.9928 38.9115,-77.0051 38.9091)
+LINESTRING(-114.04 40.7412,-114.033 40.7424,-114.023 40.7494,-114.012 40.7505,-113.996 40.7463,-113.988 40.7454,-113.98 40.7451,-113.695 40.7382,-113.411 40.7313,-113.336 40.7287,-113.233 40.7264,-113.13 40.7295,-113.056 40.743,-113.018 40.7606,-112.981 40.7806,-112.944 40.8018,-112.909 40.823,-112.898 40.8235,-112.875 40.8107,-112.838 40.7906,-112.804 40.772,-112.786 40.7635,-112.745 40.7402,-112.704 40.7151,-112.643 40.6981,-112.57 40.6852,-112.5 40.6827,-112.47 40.6773,-112.433 40.6737,-112.395 40.6723,-112.359 40.6732,-112.346 40.6742,-112.33 40.676,-112.315 40.6785,-112.303 40.6819,-112.285 40.6888,-112.27 40.6928,-112.255 40.6972,-112.24 40.7057,-112.215 40.7189,-112.169 40.7395,-112.121 40.7599,-112.092 40.7724,-112.069 40.7743,-112.042 40.7777,-112.014 40.7789,-111.985 40.7744,-111.971 40.7718,-111.948 40.7681,-111.925 40.7648,-111.906 40.7668)
+LINESTRING(-111.906 40.7668,-111.896 40.7564,-111.881 40.748,-111.867 40.7392,-111.859 40.7281,-111.859 40.7181)
+LINESTRING(-120.002 39.4965,-119.982 39.5062,-119.961 39.516,-119.936 39.5275,-119.927 39.5378,-119.919 39.5488,-119.911 39.5584,-119.898 39.564,-119.877 39.568,-119.855 39.572,-119.834 39.576,-119.812 39.58)
+LINESTRING(-77.0569 38.8945,-77.0512 38.8957,-77.0399 38.8979,-77.0279 38.9015,-77.0161 38.9055,-77.0051 38.9091)
+LINESTRING(-95.5802 41.492,-95.6174 41.4231,-95.678 41.3586,-95.7511 41.3062,-95.826 41.2735)
+LINESTRING(-95.9342 41.4886,-95.928 41.4859,-95.9038 41.4758,-95.8933 41.4639,-95.8947 41.4478,-95.8961 41.4317,-95.8975 41.4157,-95.8988 41.3996,-95.898 41.3894,-95.8943 41.3796,-95.8883 41.3704,-95.8805 41.362,-95.8573 41.344,-95.8369 41.3296,-95.8229 41.3137,-95.8187 41.2911,-95.8194 41.2867,-95.8209 41.2823,-95.8231 41.2779,-95.826 41.2735)
+LINESTRING(-111.443 40.9693,-111.44 40.9663,-111.437 40.9634,-111.435 40.9604,-111.432 40.9575,-111.429 40.9565,-111.426 40.9556,-111.423 40.9503,-111.419 40.9449,-111.416 40.9397,-111.411 40.9347,-111.412 40.9323,-111.413 40.9299,-111.414 40.9276,-111.415 40.9252,-111.402 40.9094,-111.397 40.891,-111.395 40.8716,-111.393 40.8529,-111.391 40.8515,-111.388 40.85,-111.386 40.8485,-111.383 40.847,-111.386 40.8355,-111.39 40.826,-111.396 40.8173,-111.406 40.8081,-111.43 40.8048,-111.442 40.7975,-111.451 40.7874,-111.465 40.7752,-111.468 40.768,-111.469 40.7606,-111.471 40.7532,-111.471 40.7458,-111.478 40.7423,-111.484 40.7388,-111.491 40.7353,-111.498 40.7318)
+LINESTRING(-77.0051 38.9091,-77.008 38.9032,-77.0111 38.8962,-77.0133 38.8891,-77.0136 38.8829,-77.018 38.8829,-77.0224 38.8829,-77.0269 38.8829,-77.0313 38.8829,-77.0346 38.8806,-77.0379 38.8783,-77.0414 38.8757,-77.0435 38.8735,-77.0465 38.8705)
+LINESTRING(-111.498 40.7318,-111.503 40.7297,-111.507 40.7276,-111.512 40.7254,-111.517 40.7233,-111.533 40.7256,-111.551 40.7311,-111.566 40.7396,-111.575 40.7507,-111.58 40.7517,-111.585 40.7528,-111.59 40.7538,-111.595 40.7549,-111.605 40.75,-111.615 40.7452,-111.625 40.7403,-111.635 40.7355,-111.642 40.736,-111.651 40.7364,-111.661 40.7364,-111.668 40.7356,-111.679 40.7394,-111.691 40.7441,-111.702 40.7495,-111.712 40.7552,-111.728 40.7466,-111.756 40.7317,-111.783 40.7176,-111.796 40.7113,-111.82 40.7162,-111.849 40.7181,-111.859 40.7181)
+LINESTRING(-104.837 41.2175,-104.84 41.2545,-104.849 41.2915,-104.86 41.3284,-104.869 41.3654,-104.871 41.3849,-104.872 41.4063,-104.874 41.4274,-104.878 41.4456,-104.885 41.4616,-104.895 41.4809,-104.902 41.5008,-104.901 41.5183,-104.884 41.5589,-104.862 41.6084,-104.842 41.6583,-104.829 41.6996,-104.828 41.7127,-104.828 41.7273,-104.829 41.7419,-104.829 41.7555,-104.824 41.7585,-104.821 41.7602,-104.818 41.7614,-104.814 41.7628,-104.807 41.7689,-104.8 41.775,-104.795 41.782,-104.796 41.7906,-104.822 41.8268,-104.858 41.8611,-104.899 41.8923,-104.942 41.919,-104.945 41.9302,-104.948 41.9414,-104.949 41.9526,-104.952 41.9638,-104.957 41.9937,-104.961 42.0294,-104.964 42.0605,-104.966 42.0768,-104.97 42.0825,-104.976 42.088,-104.982 42.0935,-104.986 42.0991,-104.99 42.1087,-104.993 42.1177,-104.996 42.1268,-105.001 42.1363,-104.997 42.1614,-105 42.1843,-105.009 42.2069,-105.022 42.2308)
+LINESTRING(-119.242 39.6027,-119.217 39.6119,-119.181 39.637,-119.13 39.674,-119.08 39.7109,-119.052 39.7355,-119.022 39.7746,-119.005 39.8004,-118.982 39.8218,-118.934 39.8471,-118.914 39.8556,-118.894 39.8641,-118.875 39.8729,-118.856 39.882,-118.835 39.8942,-118.802 39.9136,-118.768 39.9315,-118.744 39.9394)
+LINESTRING(-119.812 39.58,-119.791 39.584,-119.774 39.5862,-119.758 39.5863,-119.743 39.5845,-119.726 39.5812,-119.71 39.5771,-119.695 39.5732,-119.681 39.5711,-119.664 39.5722,-119.635 39.5822,-119.59 39.6109,-119.561 39.6209,-119.548 39.6226,-119.537 39.6231,-119.526 39.6233,-119.513 39.6237,-119.456 39.6338,-119.444 39.6352,-119.425 39.6366,-119.406 39.6374,-119.392 39.6375,-119.377 39.6364,-119.364 39.6348,-119.352 39.6329,-119.338 39.6308,-119.311 39.6256,-119.289 39.6188,-119.268 39.6109,-119.242 39.6027)
+LINESTRING(-95.826 41.2735,-95.8446 41.2567,-95.8709 41.2441,-95.874 41.2436)
+LINESTRING(-95.9049 41.2391,-95.9015 41.2386,-95.874 41.2436)
+LINESTRING(-82.9786 40.109,-82.9894 40.0867,-82.9906 40.0646,-82.9875 40.042,-82.9852 40.0179,-82.9858 40.0018,-82.9869 39.9848,-82.9867 39.9678,-82.9836 39.9517)
+LINESTRING(-82.927 39.9274,-82.8957 39.9345,-82.8591 39.9363,-82.8223 39.9352,-82.7903 39.9337,-82.7784 39.9354,-82.7675 39.9398,-82.7568 39.9442,-82.7454 39.946,-82.6927 39.9447,-82.6398 39.9431,-82.5869 39.942,-82.5342 39.9417,-82.5096 39.9426,-82.4848 39.9441,-82.4599 39.9453,-82.4353 39.9453,-82.3944 39.9429,-82.3539 39.9396,-82.3133 39.9367,-82.2721 39.9356,-82.2676 39.9359,-82.2631 39.9361,-82.2007 39.9403,-82.1381 39.9429,-82.0754 39.9452,-82.013 39.9485,-81.9767 39.9543,-81.9404 39.9641,-81.9045 39.9742,-81.8693 39.9805,-81.8566 39.9789,-81.8415 39.9739,-81.8265 39.968,-81.8137 39.9639,-81.8037 39.964,-81.7908 39.9664,-81.7777 39.9695,-81.7674 39.9718,-81.7468 39.9736,-81.7256 39.9736,-81.7045 39.9736,-81.6839 39.9754,-81.6732 39.979,-81.6629 39.9854,-81.6539 39.9931,-81.647 40.0005,-81.6287 40.0009,-81.5981 39.9997,-81.5713 39.9981,-81.5444 39.9966)
+LINESTRING(-82.927 39.9274,-82.9412 39.9335,-82.9553 39.9396,-82.9694 39.9456,-82.9836 39.9517)
+LINESTRING(-104.852 41.1153,-104.852 41.1214,-104.849 41.1268,-104.844 41.1322,-104.841 41.1377,-104.837 41.1559,-104.836 41.1765,-104.836 41.1973,-104.837 41.2157,-104.837 41.2175)
+LINESTRING(-82.9836 39.9517,-82.9872 39.939,-82.9947 39.9147,-82.9983 39.902,-83.0004 39.8975,-83.0038 39.894,-83.0079 39.8909,-83.0135 39.8865)
+LINESTRING(-107.183 41.7887,-107.169 41.7885,-107.155 41.7883,-107.142 41.7881,-107.128 41.7879,-107.117 41.7829,-107.109 41.7835,-107.102 41.7841,-107.068 41.7728,-107.01 41.76,-106.949 41.7494,-106.907 41.7445,-106.873 41.7441,-106.837 41.7446,-106.801 41.7446,-106.769 41.7428,-106.755 41.7401,-106.741 41.736,-106.728 41.7318,-106.714 41.7291,-106.704 41.7288,-106.694 41.7293,-106.671 41.7305,-106.648 41.7327,-106.625 41.7347,-106.602 41.735,-106.594 41.7344,-106.572 41.7382,-106.552 41.7437,-106.533 41.7494,-106.514 41.7542,-106.484 41.7338,-106.448 41.7201,-106.412 41.7077,-106.382 41.6913,-106.377 41.679,-106.373 41.6718,-106.346 41.6552,-106.309 41.6406,-106.271 41.6276,-106.244 41.6204,-106.238 41.6145,-106.232 41.6085,-106.227 41.6025,-106.221 41.5965,-106.21 41.5977,-106.192 41.589,-106.174 41.5787,-106.155 41.5691,-106.136 41.5622,-106.126 41.5608,-106.116 41.5605,-106.107 41.5588,-106.096 41.553,-106.087 41.5457,-106.078 41.5385,-106.069 41.5307,-106.061 41.5234,-106.05 41.5086,-106.047 41.4993,-106.038 41.4906,-106.01 41.4777,-106.009 41.4722,-106.008 41.4667,-105.985 41.4516,-105.949 41.4399,-105.911 41.4321,-105.881 41.4288,-105.806 41.3786,-105.771 41.3591,-105.728 41.3534,-105.627 41.3445,-105.618 41.3375,-105.618 41.3294,-105.616 41.319,-105.613 41.3089,-105.607 41.3019,-105.587 41.2974,-105.567 41.292,-105.547 41.2876,-105.525 41.2863,-105.511 41.2772,-105.491 41.2705,-105.469 41.2641,-105.45 41.2562,-105.447 41.2295,-105.436 41.2022,-105.419 41.1765,-105.399 41.1544,-105.388 41.1491,-105.366 41.1413,-105.343 41.133,-105.327 41.1261,-105.293 41.1241,-105.257 41.1139,-105.22 41.1016,-105.186 41.0931,-105.163 41.0923,-105.141 41.0947,-105.119 41.098,-105.098 41.1002,-105.082 41.1002,-105.067 41.0998,-105.052 41.1004,-105.036 41.1034,-105.025 41.1011,-105.015 41.0988,-105.008 41.1,-105 41.1023,-104.992 41.1055,-104.962 41.1117,-104.922 41.1145,-104.881 41.1163,-104.852 41.1153)
+LINESTRING(-104.052 41.1386,-104.047 41.1411,-104.026 41.152,-104.004 41.1606,-103.981 41.1665,-103.956 41.1692,-103.911 41.1698,-103.837 41.1682,-103.792 41.1688,-103.753 41.1735,-103.72 41.1832,-103.689 41.1954,-103.658 41.2077)
+LINESTRING(-78.0856 39.2989,-78.0889 39.2906,-78.0959 39.2745,-78.1048 39.259,-78.1171 39.2451,-78.1236 39.2406,-78.1313 39.2363,-78.138 39.2314,-78.1418 39.2254,-78.1399 39.2151,-78.1337 39.2035,-78.1284 39.1921,-78.1295 39.1827,-78.1444 39.1648,-78.1606 39.1473,-78.1764 39.1297,-78.1902 39.1117,-78.1945 39.1031,-78.1972 39.0943,-78.1995 39.0856,-78.2027 39.0769,-78.2045 39.0746,-78.2074 39.0718,-78.2101 39.0694,-78.2129 39.0671,-78.2267 39.0553,-78.2406 39.0435,-78.2544 39.0318,-78.2682 39.02,-78.2748 39.0171,-78.2831 39.0149,-78.2917 39.0132,-78.2991 39.0122)
+LINESTRING(-104.852 41.1153,-104.831 41.1165,-104.825 41.1156,-104.819 41.1148,-104.812 41.1147,-104.762 41.1169,-104.723 41.1243,-104.691 41.1383,-104.659 41.1529,-104.62 41.1617,-104.503 41.1521,-104.428 41.1552,-104.388 41.1523,-104.355 41.1421,-104.323 41.1281,-104.288 41.1134,-104.264 41.1092,-104.231 41.1071,-104.197 41.1066,-104.172 41.1071,-104.137 41.1098,-104.106 41.1158,-104.077 41.1259,-104.052 41.1386)
+LINESTRING(-78.2991 39.0122,-78.2902 39.0043,-78.2796 38.9962,-78.2684 38.9887,-78.2576 38.9828,-78.236 38.9739,-78.2134 38.9664,-78.1907 38.9588,-78.1688 38.9501,-78.1531 38.9422,-78.1379 38.9338,-78.1227 38.9254,-78.1069 38.9176,-78.0594 38.9164,-78.0109 38.9124,-77.9636 38.904,-77.9198 38.8896,-77.8992 38.8794,-77.8813 38.8698,-77.8621 38.8616,-77.8378 38.8559,-77.8083 38.8638,-77.7742 38.8577,-77.7404 38.8453,-77.7119 38.8342,-77.6969 38.83,-77.6829 38.8274,-77.6688 38.8257,-77.6537 38.8243,-77.6426 38.8216,-77.6325 38.8168)
+LINESTRING(-77.6325 38.8168,-77.6229 38.8114,-77.6133 38.8069,-77.6097 38.8062,-77.6061 38.8054,-77.6025 38.8047,-77.5988 38.804,-77.5943 38.8032,-77.5898 38.8024,-77.5853 38.8016,-77.5808 38.8008,-77.5754 38.8,-77.57 38.7991,-77.5646 38.7983,-77.5593 38.7974,-77.5125 38.8021,-77.4756 38.8179,-77.4484 38.8356,-77.4309 38.8457,-77.4028 38.8517,-77.3729 38.8565,-77.3428 38.861,-77.3139 38.8659,-77.2914 38.8701,-77.2687 38.8741,-77.2461 38.8781,-77.2235 38.8824,-77.2136 38.8859,-77.2042 38.8911,-77.1944 38.8957,-77.1834 38.898,-77.1725 38.8964,-77.1633 38.8922,-77.1541 38.8875,-77.1431 38.8845,-77.1132 38.8835,-77.0903 38.8868,-77.0709 38.8917,-77.0569 38.8945)
+LINESTRING(-89.4855 40.6202,-89.5381 40.6355,-89.5715 40.6502,-89.5915 40.6623,-89.6042 40.6696,-89.6065 40.676,-89.6125 40.6907,-89.6212 40.7071,-89.6315 40.7184,-89.6447 40.7238,-89.6646 40.7297,-89.6854 40.7356,-89.7011 40.7407,-89.726 40.7527,-89.7481 40.7651,-89.7704 40.7772,-89.7956 40.7882,-89.8287 40.8031,-89.8602 40.8206,-89.8924 40.8369,-89.9277 40.8486,-89.9409 40.8502,-89.9543 40.8503,-89.9678 40.8499,-89.9812 40.8502,-90.0021 40.8533,-90.0276 40.859,-90.0534 40.8654,-90.0749 40.8707,-90.0875 40.8748,-90.0993 40.8801,-90.1111 40.8855,-90.1237 40.8898,-90.1722 40.8983,-90.2214 40.9038,-90.2699 40.9121,-90.3162 40.9292,-90.3297 40.941,-90.3339 40.9548,-90.3333 40.9698,-90.3327 40.9849)
+LINESTRING(-104.907 40.9995,-104.905 41.0071,-104.903 41.0148,-104.901 41.0226,-104.899 41.0302,-104.896 41.0324,-104.891 41.0478,-104.876 41.0675,-104.861 41.0903,-104.852 41.1153)
+LINESTRING(-80.2693 39.2822,-80.2611 39.294,-80.2483 39.3037,-80.2353 39.314,-80.226 39.3272,-80.2201 39.3526,-80.2172 39.3791,-80.2118 39.4052,-80.1984 39.4292,-80.1927 39.434,-80.1861 39.4374,-80.1789 39.4402,-80.1714 39.4434,-80.1394 39.461,-80.109 39.4802,-80.0795 39.5001,-80.0501 39.52,-80.0386 39.523,-80.0253 39.5218,-80.0113 39.5213,-79.9977 39.5264,-79.988 39.5364,-79.9829 39.5471,-79.9792 39.558,-79.9732 39.5685)
+LINESTRING(-80.2693 39.2822,-80.2914 39.2811,-80.319 39.2804,-80.3453 39.2817,-80.3638 39.2865)
+LINESTRING(-100.771 41.1021,-100.784 41.102,-100.797 41.1019,-100.81 41.1018,-100.822 41.1017,-100.884 41.1067,-100.939 41.1119,-100.993 41.1158,-101.056 41.1169,-101.074 41.1172,-101.091 41.1173,-101.106 41.1155,-101.122 41.11,-101.141 41.0992,-101.157 41.0884,-101.173 41.0784,-101.194 41.07,-101.232 41.0621,-101.267 41.0608,-101.303 41.0625,-101.343 41.0636,-101.387 41.0633,-101.425 41.0637,-101.464 41.0642,-101.507 41.0646,-101.564 41.0679,-101.614 41.0715,-101.663 41.0743,-101.717 41.0754)
+LINESTRING(-103.658 41.2077,-103.641 41.2134,-103.623 41.2182,-103.604 41.2215,-103.583 41.2232,-103.551 41.2214,-103.524 41.2157,-103.497 41.2091,-103.465 41.2044,-103.423 41.2022,-103.348 41.2012,-103.306 41.199,-103.271 41.1934,-103.243 41.1837,-103.215 41.1718,-103.134 41.14,-103.092 41.1224,-103.049 41.1101,-102.996 41.1063,-102.902 41.1062,-102.83 41.1075,-102.818 41.1037,-102.629 41.1084,-102.622 41.109,-102.608 41.1114,-102.601 41.112,-102.553 41.1083,-102.513 41.0973,-102.473 41.0827,-102.427 41.0684,-102.348 41.0499,-102.277 41.0358,-102.207 41.0196,-102.155 41.0023)
+LINESTRING(-102.101 41.0021,-102.084 41.0083,-102.038 41.0195,-101.991 41.0276,-101.936 41.0358,-101.911 41.0388,-101.888 41.0404,-101.866 41.0429,-101.841 41.0485,-101.814 41.0575,-101.79 41.066,-101.766 41.0724,-101.737 41.0753,-101.727 41.0754,-101.717 41.0754)
+LINESTRING(-102.127 40.993,-102.101 41.0021)
+LINESTRING(-102.155 41.0023,-102.127 40.993)
+LINESTRING(-84.2117 39.8586,-84.2157 39.8817,-84.2178 39.9054,-84.22 39.9292,-84.2242 39.9528,-84.233 39.9693,-84.2465 39.9839,-84.2592 39.9985,-84.2653 40.0152,-84.2656 40.031,-84.2659 40.0468,-84.266 40.0676,-84.2657 40.0778,-84.2438 40.1091,-84.2218 40.1295,-84.2072 40.1499,-84.2076 40.1815,-84.2018 40.2007,-84.2023 40.2224,-84.205 40.2444,-84.2059 40.2647,-84.1934 40.2914,-84.1688 40.3118,-84.1446 40.3304,-84.1334 40.3519,-84.136 40.3768,-84.1426 40.3959,-84.1498 40.4145,-84.1541 40.4379,-84.1591 40.4672,-84.1641 40.4965,-84.1691 40.5258,-84.1741 40.5551,-84.1697 40.5741,-84.158 40.5978,-84.1439 40.6211,-84.1325 40.6391,-84.1287 40.6533,-84.1278 40.6703,-84.1234 40.6867,-84.1096 40.6988,-84.0998 40.6989,-84.0902 40.6993,-84.0819 40.7015,-84.0758 40.707,-84.0775 40.7474,-84.0744 40.7659,-84.0543 40.781,-84.0046 40.8108)
+LINESTRING(-81.4454 39.3964,-81.4415 39.4061,-81.4381 39.4105,-81.4335 39.4144,-81.4288 39.4182,-81.4251 39.4226,-81.4327 39.4382,-81.4366 39.4469,-81.4369 39.4548,-81.434 39.468,-81.436 39.4758,-81.4427 39.4851,-81.4497 39.4952,-81.4525 39.5058,-81.4527 39.523,-81.4548 39.539,-81.4578 39.5548,-81.4605 39.5716,-81.4583 39.612,-81.4541 39.6457,-81.4682 39.6724,-81.521 39.6922,-81.5337 39.7154,-81.5505 39.7381,-81.5661 39.7604,-81.5754 39.7824,-81.5735 39.7855,-81.5717 39.7887,-81.5647 39.7922,-81.5571 39.7974,-81.5504 39.8031,-81.5463 39.8085,-81.5374 39.8383,-81.5258 39.8876,-81.5165 39.9358,-81.5143 39.9619,-81.519 39.9683,-81.5285 39.9795,-81.5385 39.9905,-81.5444 39.9966)
+LINESTRING(-89.4855 40.6202,-89.4597 40.6225,-89.4124 40.6228,-89.3615 40.622,-89.3251 40.621,-89.3135 40.6212,-89.2993 40.6219,-89.2859 40.6224,-89.2766 40.6218,-89.2641 40.6187,-89.2517 40.615,-89.2392 40.6115,-89.2264 40.609,-89.2167 40.6081,-89.2069 40.6077,-89.1972 40.6071,-89.1875 40.6058,-89.1837 40.6051,-89.18 40.6044,-89.1763 40.6037,-89.1725 40.603,-89.1526 40.5894,-89.1298 40.5683,-89.0934 40.5487,-89.0331 40.54,-89.0316 40.539,-89.0301 40.5379,-89.0286 40.5369,-89.0271 40.5359,-89.0298 40.5149,-89.0318 40.4888,-89.0301 40.4629,-89.0217 40.4429)
+LINESTRING(-82.9836 39.9517,-83.0331 39.9744,-83.1153 39.982,-83.1958 39.9816,-83.2406 39.9804,-83.2633 39.9791,-83.2802 39.9742,-83.2961 39.9676,-83.316 39.9613,-83.3428 39.9558,-83.3736 39.9505,-83.4038 39.9455,-83.434 39.9405,-83.4853 39.9365,-83.551 39.9356,-83.6161 39.9342,-83.6659 39.9286,-83.6833 39.9226,-83.6973 39.9146,-83.7098 39.9051,-83.7229 39.895,-83.7332 39.8933,-83.7445 39.8927,-83.7558 39.8925,-83.7666 39.8918,-83.7822 39.8898,-83.7978 39.8875,-83.8135 39.8858,-83.8294 39.8853,-83.853 39.887,-83.8752 39.8898,-83.8981 39.8917,-83.9236 39.8911,-83.9566 39.8836,-83.9769 39.8731,-84.0025 39.8645,-84.0513 39.8628,-84.0659 39.8229,-84.0914 39.8044,-84.118 39.7939,-84.1362 39.7781)
+LINESTRING(-84.2117 39.8586,-84.1928 39.8385,-84.1739 39.8184,-84.1551 39.7982,-84.1362 39.7781)
+LINESTRING(-84.2117 39.8586,-84.2293 39.8613,-84.244 39.8628,-84.2579 39.8636,-84.2705 39.8625,-84.2782 39.8586,-84.2859 39.855,-84.3072 39.8531,-84.3298 39.8525,-84.3524 39.8529,-84.3739 39.8538,-84.4061 39.8508,-84.4297 39.8453,-84.4508 39.8397,-84.4759 39.8363,-84.5306 39.8351,-84.586 39.8358,-84.6414 39.8372,-84.6964 39.8381,-84.7135 39.8369,-84.7306 39.8342,-84.7477 39.8314,-84.7651 39.8301,-84.7806 39.8314,-84.7962 39.8344,-84.8114 39.8372,-84.8139 39.8374)
+LINESTRING(-121.26 38.7535,-121.233 38.7761,-121.191 38.8116,-121.15 38.8458,-121.131 38.865,-121.133 38.8731,-121.127 38.8809,-121.112 38.8849,-121.098 38.8897,-121.084 38.8952,-121.071 38.9011,-121.065 38.9104,-121.058 38.9226,-121.052 38.9349,-121.05 38.9444,-121.021 38.9713,-120.995 39.0042,-120.977 39.0321,-120.97 39.0438,-120.967 39.0525,-120.966 39.0656,-120.968 39.0829,-120.975 39.1043,-120.972 39.1202,-120.951 39.1323,-120.924 39.1424,-120.898 39.1524,-120.882 39.1604,-120.866 39.1685,-120.85 39.1758,-120.832 39.1837,-120.812 39.1925,-120.795 39.2016,-120.78 39.2127,-120.769 39.2276,-120.751 39.2455,-120.734 39.2627,-120.716 39.2782,-120.696 39.2911,-120.682 39.296,-120.664 39.2994,-120.645 39.3023,-120.629 39.3057,-120.615 39.3102,-120.601 39.316,-120.587 39.3224,-120.574 39.3284,-120.563 39.3272,-120.557 39.3218,-120.547 39.315,-120.537 39.3089,-120.529 39.3057,-120.507 39.3088,-120.484 39.3106,-120.462 39.3129,-120.441 39.3177,-120.431 39.3229,-120.42 39.3278,-120.411 39.3291,-120.398 39.3297,-120.385 39.3298,-120.376 39.3295,-120.36 39.3349,-120.348 39.3406,-120.335 39.346,-120.32 39.3502,-120.306 39.3506,-120.294 39.3473,-120.281 39.3426,-120.268 39.3386,-120.252 39.3368,-120.238 39.3372,-120.224 39.3393,-120.208 39.3423,-120.2 39.3451,-120.19 39.3546,-120.184 39.3596,-120.175 39.3644,-120.167 39.368,-120.158 39.3715,-120.149 39.3761,-120.138 39.3838,-120.128 39.3911,-120.117 39.3973,-120.103 39.4016,-120.096 39.4022,-120.083 39.4012,-120.076 39.4018,-120.068 39.4051,-120.062 39.4175,-120.059 39.4247,-120.052 39.4417,-120.048 39.4576,-120.041 39.4718,-120.026 39.4838,-120.003 39.4961,-120.002 39.4965)
+LINESTRING(-81.4994 39.2676,-81.4816 39.3012,-81.4679 39.3362,-81.4555 39.3715,-81.4454 39.3964)
+LINESTRING(-97.0441 40.822,-97.0038 40.8226,-96.9536 40.8277,-96.9031 40.8343,-96.8622 40.8392,-96.854 40.8406,-96.8455 40.8427,-96.8369 40.8444,-96.8285 40.8447,-96.8123 40.8412,-96.7965 40.8354,-96.7804 40.8303,-96.7637 40.8289,-96.7518 40.8346,-96.7419 40.8412,-96.7308 40.8439,-96.6994 40.8799,-96.6671 40.8941,-96.6266 40.8963,-96.5708 40.8959,-96.5631 40.8926,-96.5554 40.8892,-96.5039 40.8995,-96.454 40.9263,-96.4078 40.9583,-96.3674 40.9843,-96.3535 40.9907,-96.3387 40.9966,-96.3237 41.0021,-96.3089 41.0076,-96.3039 41.0152,-96.3002 41.0232,-96.2926 41.028,-96.2923 41.0334,-96.293 41.0423,-96.2943 41.0512,-96.296 41.0567,-96.2617 41.0888,-96.2156 41.116,-96.1656 41.1421,-96.1196 41.1709,-96.1083 41.192,-96.105 41.2201,-96.0987 41.2453,-96.0787 41.2578,-96.0356 41.2591,-95.9957 41.256,-95.9609 41.2501,-95.9329 41.2432,-95.9049 41.2391)
+LINESTRING(-81.5684 39.2813,-81.5687 39.2785,-81.5691 39.2752,-81.5694 39.2719,-81.5676 39.2708,-81.5659 39.2698,-81.5641 39.2687,-81.5624 39.2677,-81.5594 39.2682,-81.5454 39.2638,-81.5302 39.265,-81.5146 39.2676,-81.4994 39.2676)
+LINESTRING(-97.5945 40.8214,-97.4831 40.8206,-97.3715 40.8209,-97.26 40.8215,-97.1486 40.8217,-97.1231 40.8222,-97.0957 40.8232,-97.0686 40.8235,-97.0441 40.822)
+LINESTRING(-87.5327 40.116,-87.4657 40.1213,-87.3934 40.1249,-87.3209 40.1266,-87.2487 40.1261)
+LINESTRING(-98.3858 40.8062,-98.3811 40.807,-98.2678 40.8105,-98.0346 40.8157,-97.778 40.8199,-97.5945 40.8214)
+LINESTRING(-86.0541 39.8926,-86.0464 39.9034,-86.0387 39.9141,-86.031 39.9249,-86.0232 39.9356,-86.0198 39.9411,-86.0165 39.947,-86.0129 39.9528,-86.0087 39.9578,-85.9935 39.9647,-85.9622 39.9765,-85.928 39.9878,-85.904 39.9931,-85.8784 39.9937,-85.8393 39.9947,-85.8014 39.9963,-85.7797 39.9988,-85.772 40.006,-85.7671 40.0144,-85.7616 40.0226,-85.7518 40.0295,-85.7156 40.0418,-85.678 40.0496,-85.6394 40.0551,-85.6006 40.0602,-85.5872 40.0715,-85.5783 40.0878,-85.5735 40.1055,-85.5722 40.1208,-85.5728 40.1313,-85.5736 40.1422,-85.574 40.1531,-85.5735 40.1634,-85.569 40.1733,-85.5661 40.1788,-85.565 40.235,-85.5646 40.3044,-85.5594 40.375,-85.5452 40.4308,-85.551 40.4576,-85.5525 40.5032,-85.5524 40.5512,-85.5535 40.5855,-85.5333 40.6123,-85.5131 40.6394,-85.4924 40.6663,-85.4708 40.6924,-85.456 40.7069,-85.4361 40.7245,-85.4147 40.7435,-85.3958 40.7625,-85.388 40.7753,-85.3836 40.789,-85.3786 40.8024,-85.3694 40.814,-85.3619 40.8191,-85.3537 40.8242,-85.3469 40.8302,-85.3436 40.8378,-85.3429 40.8497,-85.3433 40.862,-85.344 40.8744,-85.3446 40.8863,-85.3228 40.9151,-85.2985 40.9507,-85.2744 40.9844,-85.2531 41.008,-85.2529 41.0201,-85.2528 41.0323,-85.2521 41.0444,-85.251 41.0565,-85.2422 41.0642,-85.2307 41.0695,-85.2267 41.0744,-85.2241 41.0807,-85.2231 41.0873,-85.2236 41.093,-85.2072 41.1015,-85.1909 41.1099,-85.1746 41.1184,-85.1583 41.1268)
+LINESTRING(-86.1564 39.9356,-86.1286 39.9276,-86.1025 39.918,-86.0778 39.9064,-86.0541 39.8926)
+LINESTRING(-88.2843 40.1464,-88.2704 40.1599,-88.2565 40.1735,-88.2426 40.1871,-88.2286 40.2007,-88.2004 40.2404,-88.1895 40.2781,-88.1856 40.3097,-88.1781 40.3312,-88.1503 40.3682,-88.1334 40.4003,-88.1221 40.4328,-88.1108 40.4711,-88.1038 40.4865,-88.095 40.5007,-88.0869 40.5155,-88.0824 40.5329,-88.0665 40.5565,-88.0639 40.5797,-88.0611 40.6009,-88.0449 40.6182,-88.0411 40.636,-88.0357 40.6688,-88.0308 40.7029,-88.0288 40.7246,-88.022 40.7301,-88.0154 40.7339,-88.0105 40.7396,-88.0089 40.7507,-88.0092 40.7586,-88.0094 40.7664,-88.0097 40.7742,-88.01 40.782,-88.0066 40.7852,-88.0032 40.7883,-88.0034 40.7989,-88.0037 40.8094,-88.0039 40.82,-88.0042 40.8305,-88.0011 40.8334,-87.9979 40.8363,-87.9893 40.8605,-87.9806 40.8752,-87.9692 40.8904,-87.9525 40.9161,-87.9488 40.9188,-87.9446 40.9194,-87.9404 40.9199,-87.9363 40.921,-87.9329 40.9227,-87.9235 40.9534,-87.906 41.0024,-87.8876 41.0497,-87.8752 41.0758,-87.8667 41.0787,-87.8573 41.0806,-87.8476 41.0825,-87.8384 41.0857,-87.8357 41.0978,-87.8353 41.1191,-87.836 41.1411,-87.8368 41.1551,-87.8426 41.1609,-87.8502 41.1657,-87.858 41.1711,-87.8643 41.1782,-87.8674 41.2159,-87.8495 41.2617,-87.8268 41.3101,-87.8155 41.3555,-87.783 41.3813,-87.7668 41.4012,-87.7605 41.4236,-87.7573 41.4573,-87.7556 41.4647,-87.7526 41.472,-87.7492 41.4794,-87.7468 41.4866,-87.7437 41.5067,-87.7427 41.5274,-87.7427 41.5481,-87.7429 41.5683)
+LINESTRING(-89.0217 40.4429,-89.0181 40.4383,-89.0145 40.4338,-89.0037 40.4318,-88.9907 40.4323,-88.9769 40.4328,-88.9632 40.4309,-88.9582 40.4284,-88.9525 40.4245,-88.9468 40.4203,-88.9421 40.4172,-88.899 40.396,-88.8539 40.3765,-88.8086 40.3575,-88.7644 40.3374,-88.7409 40.3226,-88.7193 40.3048,-88.6979 40.2866,-88.6751 40.2706,-88.6656 40.266,-88.6588 40.2644,-88.6524 40.2639,-88.6445 40.2622,-88.6364 40.2587,-88.6287 40.2541,-88.6212 40.2492,-88.6134 40.2452,-88.562 40.2304,-88.5066 40.2207,-88.4504 40.2117,-88.3966 40.1986,-88.3589 40.1877,-88.3343 40.1804,-88.3127 40.1692,-88.2843 40.1464)
+LINESTRING(-88.2843 40.1464,-88.2636 40.1361,-88.2439 40.1342,-88.2236 40.1356,-88.2009 40.1351,-88.1939 40.133,-88.1866 40.1293,-88.1793 40.1255,-88.1723 40.123,-88.1597 40.1226,-88.1346 40.1224,-88.1144 40.1223,-88.0941 40.1222,-88.0012 40.1228,-87.9085 40.1247,-87.8157 40.1271,-87.7229 40.1297,-87.7038 40.1176,-87.6825 40.1088,-87.6593 40.1042,-87.6351 40.1049,-87.6164 40.1132,-87.5903 40.1155,-87.5621 40.1152,-87.5374 40.1156,-87.5327 40.116)
+LINESTRING(-82.0659 39.3263,-82.0563 39.3319,-82.0453 39.3366,-82.0338 39.3406,-82.0224 39.3438,-82.0206 39.3433,-82.0188 39.3429,-82.0149 39.3427,-82.011 39.3426,-82.0069 39.3424,-82.0034 39.3419,-81.9962 39.3391,-81.9909 39.3349,-81.9864 39.3302,-81.9815 39.326,-81.973 39.3223,-81.9609 39.3189,-81.9479 39.3153,-81.9364 39.3108,-81.9339 39.3095,-81.9316 39.3081,-81.9267 39.3008,-81.9239 39.2927,-81.9213 39.2846,-81.917 39.2772,-81.9034 39.2637,-81.8876 39.2511,-81.8721 39.2388,-81.8592 39.2261,-81.8498 39.2243,-81.8399 39.2222,-81.83 39.2206,-81.8207 39.2205,-81.7966 39.2325,-81.7709 39.2403,-81.7455 39.2479,-81.7223 39.2593,-81.7092 39.2695,-81.6944 39.281,-81.6779 39.2901,-81.6601 39.2929,-81.6371 39.291,-81.6141 39.289,-81.5911 39.287,-81.5681 39.285,-81.5684 39.2817,-81.5684 39.2813)
+LINESTRING(-93.9253 40.5752,-93.9089 40.5978,-93.8713 40.624,-93.8417 40.657,-93.8338 40.7212,-93.8313 40.7497,-93.8223 40.7793,-93.811 40.8086,-93.802 40.8361,-93.8009 40.8499,-93.8024 40.8644,-93.8045 40.8789,-93.8053 40.8927,-93.8056 40.9258,-93.8075 40.9601,-93.8078 40.9942,-93.8033 41.027,-93.7987 41.0373,-93.7919 41.0462,-93.7856 41.0555,-93.7822 41.0665,-93.7817 41.0819,-93.7827 41.1005,-93.7854 41.1191,-93.7898 41.1345,-93.7869 41.1962,-93.7855 41.3323,-93.7848 41.4813,-93.7842 41.5811)
+LINESTRING(-111.859 40.7181,-111.858 40.6863,-111.866 40.6491,-111.873 40.612,-111.872 40.5701,-111.864 40.5531,-111.853 40.5375,-111.846 40.523,-111.852 40.5091,-111.876 40.4938,-111.903 40.4812,-111.924 40.4674,-111.93 40.4483,-111.927 40.4449,-111.923 40.4418,-111.89 40.4309,-111.859 40.4221,-111.828 40.4148,-111.794 40.4085,-111.762 40.4024,-111.739 40.3942,-111.724 40.3808,-111.714 40.3594,-111.71 40.3331,-111.706 40.3047,-111.699 40.2774,-111.684 40.2547,-111.663 40.2367,-111.642 40.2213,-111.626 40.2048,-111.616 40.1831,-111.618 40.1622,-111.631 40.1456,-111.649 40.1301,-111.67 40.1129)
+LINESTRING(-121.506 38.568,-121.504 38.5826,-121.501 38.5891,-121.503 38.5993,-121.515 38.6245,-121.521 38.6344,-121.527 38.6443,-121.533 38.6567,-121.537 38.6645,-121.568 38.6712,-121.628 38.6725,-121.691 38.6716,-121.734 38.6715,-121.744 38.6773,-121.749 38.6824,-121.752 38.689,-121.757 38.6992,-121.765 38.7002,-121.772 38.7012,-121.779 38.7022,-121.786 38.7032,-121.834 38.7474,-121.883 38.791,-121.93 38.8354,-121.974 38.8823,-122.008 38.9279,-122.057 39.0004,-122.104 39.0739,-122.133 39.1225,-122.135 39.1296,-122.134 39.1363,-122.133 39.1426,-122.134 39.1488,-122.147 39.1708,-122.161 39.1921,-122.174 39.214,-122.178 39.2381,-122.169 39.2454,-122.162 39.252,-122.156 39.2578,-122.154 39.2629,-122.16 39.2721,-122.173 39.28,-122.186 39.2879,-122.196 39.2971,-122.199 39.3647,-122.205 39.4394,-122.212 39.4999,-122.216 39.5248,-122.215 39.5475,-122.212 39.5701,-122.209 39.5926,-122.206 39.6152,-122.205 39.6451,-122.205 39.6757,-122.207 39.7063,-122.207 39.7363,-122.206 39.7751,-122.205 39.814,-122.203 39.853,-122.202 39.892,-122.201 39.9119,-122.2 39.9318,-122.2 39.9518,-122.2 39.9718,-122.205 40.014,-122.212 40.0561,-122.219 40.0984,-122.222 40.141,-122.221 40.15,-122.22 40.1618,-122.22 40.1734,-122.223 40.1818)
+LINESTRING(-87.3243 41.4688,-87.3256 41.4491,-87.321 41.4252,-87.3193 41.4021,-87.3295 41.3844,-87.3229 41.3691,-87.3154 41.3536,-87.3083 41.3381,-87.303 41.3228,-87.2991 41.293,-87.299 41.2625,-87.2989 41.2316,-87.2943 41.2008,-87.2893 41.1893,-87.2804 41.1723,-87.2681 41.1501,-87.269 41.114,-87.2711 41.0781,-87.2733 41.0421,-87.2745 41.0058,-87.2675 41.0013,-87.2475 40.9732,-87.2301 40.9467,-87.2134 40.92,-87.1979 40.8928,-87.1889 40.8748,-87.1804 40.8565,-87.1717 40.8383,-87.1619 40.8205,-87.1494 40.8027,-87.1348 40.7855,-87.1197 40.7685,-87.1055 40.7513,-87.0918 40.7322,-87.0695 40.7019,-87.0464 40.6739,-87.0302 40.6614,-86.9928 40.6133,-86.9609 40.579,-86.9237 40.5453,-86.87 40.4991,-86.8597 40.4937,-86.8538 40.4798,-86.8507 40.465,-86.8487 40.4499,-86.8461 40.4353,-86.8331 40.4241,-86.8193 40.4138,-86.8059 40.4032,-86.794 40.3914,-86.7822 40.374,-86.7704 40.353,-86.7576 40.3333,-86.7431 40.3199,-86.6933 40.2932,-86.6687 40.2786,-86.6483 40.2633,-86.6157 40.2319,-86.5848 40.1986,-86.5547 40.1649,-86.5241 40.1319,-86.5235 40.1256,-86.5125 40.1054,-86.5043 40.0866,-86.4973 40.0677,-86.4898 40.0471,-86.4763 40.0375,-86.4613 40.0323,-86.4474 40.0288,-86.4376 40.0245,-86.4116 40.004,-86.3839 39.9828,-86.3574 39.9611,-86.3351 39.9391,-86.3201 39.9189,-86.3074 39.8977,-86.2942 39.8763,-86.2754 39.8547)
+LINESTRING(-121.26 38.7535,-121.283 38.7272,-121.327 38.6859,-121.377 38.6458,-121.418 38.6229,-121.423 38.6164,-121.432 38.6052,-121.443 38.5934,-121.451 38.5852,-121.46 38.581,-121.466 38.5742,-121.47 38.5659,-121.473 38.5572)
+LINESTRING(-84.8139 39.8374,-84.8258 39.8381,-84.8292 39.843,-84.834 39.8473,-84.8395 39.8513,-84.8446 39.8553,-84.877 39.8736,-84.9075 39.8737,-84.9396 39.8655,-84.977 39.8586,-85.007 39.858,-85.0371 39.8574,-85.0672 39.8567,-85.0973 39.8561,-85.1481 39.8555,-85.1983 39.8557,-85.2483 39.8565,-85.2987 39.8576,-85.3294 39.8574,-85.3602 39.856,-85.391 39.8543,-85.4216 39.8533,-85.443 39.8535,-85.4656 39.8542,-85.4882 39.8543,-85.5091 39.8526,-85.5214 39.8496,-85.5342 39.8443,-85.5456 39.8375,-85.5537 39.8298,-85.5774 39.8289,-85.6009 39.8282,-85.6244 39.8275,-85.6478 39.8269,-85.7053 39.8259,-85.7886 39.825,-85.8692 39.8231,-85.9186 39.8194,-85.956 39.81,-85.9766 39.8036,-86.0008 39.8008,-86.0463 39.8006)
+LINESTRING(-86.0541 39.8926,-86.053 39.8698,-86.0507 39.8468,-86.0481 39.8237,-86.0463 39.8006)
+LINESTRING(-87.2487 40.1261,-87.1648 40.1215,-87.0544 40.1086,-86.9439 40.0906,-86.86 40.0711,-86.8346 40.0606,-86.8151 40.048,-86.7972 40.0341,-86.7763 40.0196,-86.7582 40.0111,-86.7397 40.0053,-86.7211 39.9999,-86.7027 39.9927,-86.6579 39.9694,-86.5922 39.9351,-86.5268 39.9032,-86.4833 39.8871,-86.4719 39.8861,-86.4599 39.886,-86.4477 39.8859,-86.4359 39.8853,-86.4149 39.8715,-86.392 39.8577,-86.3682 39.845,-86.3443 39.8344,-86.3235 39.8337,-86.3009 39.8411,-86.2828 39.8502,-86.2754 39.8547)
+LINESTRING(-89.4122 40.1798,-89.3897 40.1799,-89.3673 40.1803,-89.3449 40.1809,-89.3225 40.1816,-89.3093 40.1911,-89.2974 40.2017,-89.286 40.2126,-89.2742 40.2232,-89.2616 40.2322,-89.2485 40.2393,-89.2353 40.2458,-89.2223 40.253,-89.2135 40.2608,-89.2098 40.2682,-89.2075 40.2754,-89.2029 40.2825,-89.1938 40.2908,-89.1852 40.297,-89.1763 40.3025,-89.166 40.3087,-89.155 40.3173,-89.1442 40.3282,-89.1338 40.3396,-89.1242 40.3494,-89.1211 40.3522,-89.1177 40.3549,-89.1137 40.3571,-89.1091 40.3584,-89.0965 40.3711,-89.0694 40.3971,-89.0402 40.4249,-89.0217 40.4429)
+LINESTRING(-89.4855 40.6202,-89.4776 40.6018,-89.4784 40.5764,-89.4794 40.55,-89.4716 40.5291,-89.475 40.5051,-89.475 40.4752,-89.4698 40.4456,-89.4572 40.4225,-89.4572 40.4207,-89.4569 40.3787,-89.4583 40.3352,-89.4574 40.2921,-89.4506 40.2511,-89.4478 40.2418,-89.445 40.2325,-89.4416 40.2227,-89.438 40.2143,-89.4321 40.2065,-89.4246 40.1998,-89.4174 40.1917,-89.4122 40.1798)
+LINESTRING(-86.0463 39.8006,-86.0674 39.8019,-86.0981 39.804,-86.1278 39.8056,-86.1456 39.8054)
+LINESTRING(-86.2754 39.8547,-86.2547 39.8395,-86.2176 39.8243,-86.177 39.812,-86.1456 39.8054)
+LINESTRING(-100.771 41.1021,-100.725 41.1007,-100.684 41.0982,-100.643 41.0967,-100.601 41.0963,-100.561 41.0865,-100.472 41.0424,-100.433 41.0325,-100.407 41.0305,-100.377 41.0255,-100.347 41.019,-100.321 41.0129,-100.262 40.9925,-100.205 40.965,-100.149 40.9354,-100.094 40.9084,-100.052 40.8919,-100.01 40.8768,-99.9684 40.8617,-99.9272 40.8454,-99.9085 40.8377,-99.8897 40.8301,-99.871 40.8224,-99.8526 40.8143,-99.8398 40.8075,-99.8275 40.8002,-99.8151 40.7929,-99.8021 40.7865,-99.7802 40.7786,-99.7574 40.7723,-99.7343 40.7664,-99.7118 40.7596,-99.6934 40.7543,-99.6744 40.7499,-99.6558 40.7453,-99.6382 40.7391,-99.6089 40.7356,-99.5826 40.7281,-99.5566 40.7203,-99.5279 40.7157,-99.4973 40.7151,-99.4667 40.7161,-99.4361 40.7173,-99.4055 40.7175,-99.3764 40.7155,-99.3477 40.7117,-99.3191 40.7072,-99.2904 40.703,-99.1848 40.6923,-99.0754 40.688,-98.9661 40.6909,-98.8606 40.7018,-98.8357 40.7029,-98.8111 40.7007,-98.7864 40.6981,-98.7616 40.6979,-98.7243 40.7007,-98.6873 40.7039,-98.6508 40.7089,-98.6148 40.717,-98.5576 40.74,-98.4977 40.7702,-98.438 40.7964,-98.3858 40.8062)
+LINESTRING(-95.874 41.2436,-95.8349 41.2259,-95.8164 41.2118,-95.8049 41.1945,-95.8018 41.1738,-95.8055 41.161,-95.8196 41.1396,-95.8233 41.1268,-95.8251 41.0985,-95.8271 41.0861,-95.8338 41.0646,-95.8358 41.0522,-95.8333 41.0315,-95.8247 41.014,-95.8128 40.9968,-95.8008 40.9772,-95.7901 40.9531,-95.784 40.9311,-95.7817 40.9086,-95.7823 40.8832,-95.7869 40.8576,-95.8024 40.8132,-95.8069 40.7876,-95.801 40.7447,-95.7804 40.7089,-95.7498 40.6751,-95.7142 40.6384,-95.6993 40.624,-95.6819 40.604,-95.6635 40.5854,-95.6629 40.5851)
+LINESTRING(-103.141 40.6184,-103.137 40.624,-103.058 40.6854,-102.962 40.7326,-102.849 40.7738,-102.767 40.8009,-102.693 40.8236,-102.617 40.8443,-102.531 40.8651,-102.503 40.8739,-102.481 40.8843,-102.457 40.8931,-102.429 40.8972,-102.4 40.8978,-102.371 40.8985,-102.342 40.8991,-102.312 40.8997,-102.257 40.9079,-102.212 40.9278,-102.173 40.9564,-102.134 40.9907,-102.127 40.993)
+LINESTRING(-111.774 39.978,-111.77 39.981,-111.767 39.9843,-111.763 39.9879,-111.761 39.9916,-111.761 40.0004,-111.76 40.0116,-111.759 40.0225,-111.757 40.0306,-111.743 40.0466,-111.715 40.0729,-111.687 40.0987,-111.67 40.1129)
+LINESTRING(-104.991 40.4074,-104.994 40.4322,-104.994 40.4577,-104.994 40.4832,-104.994 40.5082,-104.995 40.5268,-104.998 40.5453,-105 40.5638,-105.001 40.5826,-105.002 40.6236,-105.002 40.6653,-105 40.7069,-104.995 40.7477,-104.992 40.7586,-104.987 40.7697,-104.982 40.7809,-104.978 40.792,-104.973 40.8163,-104.968 40.8407,-104.962 40.8648,-104.952 40.8884,-104.948 40.8937,-104.944 40.899,-104.939 40.9042,-104.935 40.9096,-104.927 40.9311,-104.921 40.954,-104.915 40.9772,-104.907 40.9995,-104.907 40.9995)
+LINESTRING(-122.556 38.0876,-122.56 38.0929,-122.566 38.0998,-122.571 38.1066,-122.569 38.1179,-122.568 38.1293,-122.568 38.1408,-122.569 38.1521,-122.588 38.1758,-122.599 38.1999,-122.609 38.2231,-122.627 38.244,-122.651 38.2599,-122.675 38.2749,-122.697 38.291,-122.716 38.3102,-122.714 38.4249,-122.733 38.4747,-122.774 38.5128,-122.842 38.5921,-122.857 38.5964,-122.872 38.6008,-122.889 38.6184,-122.906 38.6359,-122.923 38.6535,-122.94 38.6711,-122.956 38.6831,-122.978 38.703,-123.004 38.7267,-123.034 38.7501,-123.032 38.7786,-123.009 38.8038,-122.98 38.8277,-122.958 38.8525,-122.968 38.8623,-122.979 38.8767,-122.988 38.8897,-122.993 38.8955,-122.994 38.9045,-122.995 38.9133,-122.997 38.9219,-122.999 38.9307,-123.015 38.9479,-123.049 38.952,-123.087 38.953,-123.115 38.9609,-123.126 38.9676,-123.146 38.9785,-123.165 38.99,-123.175 38.9982,-123.188 39.0213,-123.207 39.0459,-123.227 39.0705,-123.243 39.0937,-123.25 39.1267,-123.251 39.1694,-123.251 39.209,-123.256 39.233,-123.265 39.249,-123.274 39.2651,-123.284 39.2811,-123.293 39.2971,-123.304 39.3074,-123.31 39.3211,-123.314 39.3356,-123.322 39.3484,-123.317 39.3556,-123.313 39.3627,-123.314 39.3746,-123.327 39.3851,-123.342 39.3956,-123.353 39.4073,-123.357 39.4302,-123.35 39.4497,-123.346 39.4693,-123.359 39.492,-123.379 39.5082,-123.388 39.5231,-123.4 39.5352,-123.427 39.5425,-123.445 39.5934,-123.482 39.6919,-123.535 39.7874,-123.603 39.8295,-123.635 39.8219,-123.663 39.8227,-123.684 39.8309,-123.694 39.8455,-123.699 39.8505,-123.705 39.8554,-123.71 39.8603,-123.715 39.8652,-123.728 39.8792,-123.756 39.9105,-123.785 39.947,-123.799 39.9763,-123.795 40.0103,-123.785 40.0523,-123.784 40.0968,-123.807 40.1381,-123.776 40.1599,-123.776 40.181,-123.788 40.2004,-123.796 40.2174,-123.807 40.2159,-123.819 40.2144,-123.83 40.2241,-123.833 40.2314,-123.833 40.2393,-123.83 40.2508,-123.84 40.2545,-123.849 40.2583,-123.855 40.2658,-123.865 40.2688,-123.876 40.2719,-123.882 40.2788,-123.888 40.2853,-123.892 40.2923,-123.891 40.3008,-123.926 40.325,-123.937 40.3452,-123.944 40.3676,-123.965 40.398,-123.979 40.3985,-123.994 40.3991,-123.999 40.4064,-124.004 40.4137,-124.008 40.421,-124.013 40.4283,-124.024 40.4277,-124.035 40.4272,-124.046 40.4266,-124.057 40.4261,-124.067 40.4299,-124.076 40.4336,-124.086 40.4374,-124.095 40.4412,-124.097 40.4486,-124.099 40.4559,-124.101 40.4633,-124.104 40.4707,-124.118 40.4739,-124.133 40.48,-124.145 40.4879,-124.156 40.4962,-124.155 40.5434,-124.144 40.5679,-124.13 40.5856,-124.12 40.6124,-124.132 40.6176,-124.144 40.6251,-124.154 40.6341,-124.161 40.644,-124.156 40.6622,-124.153 40.6814,-124.154 40.7007,-124.158 40.7189,-124.152 40.728,-124.146 40.7419,-124.138 40.7568,-124.123 40.769,-124.102 40.7715,-124.08 40.7788,-124.06 40.7891,-124.045 40.8005,-124.044 40.8311,-124.053 40.8643,-124.07 40.8954,-124.094 40.9198)
+LINESTRING(-121.506 38.568,-121.51 38.5703,-121.515 38.5727,-121.519 38.5755,-121.522 38.5781,-121.532 38.5741,-121.542 38.5735,-121.552 38.5743,-121.562 38.5748,-121.595 38.5697,-121.651 38.5587,-121.709 38.5462,-121.747 38.5366,-121.783 38.5078,-121.856 38.4462,-121.941 38.3807,-122.013 38.3406,-122.022 38.33,-122.03 38.3174,-122.034 38.3042,-122.032 38.2917,-122.042 38.2816,-122.051 38.2711,-122.059 38.2604,-122.068 38.2497,-122.107 38.2311,-122.156 38.2036,-122.198 38.1724,-122.218 38.1426,-122.22 38.138)
+LINESTRING(-122.22 38.138,-122.229 38.1209,-122.231 38.0988,-122.228 38.0763,-122.227 38.0677)
+LINESTRING(-122.227 38.0677,-122.225 38.0601)
+LINESTRING(-86.0463 39.8006,-86.0457 39.7885,-86.0435 39.7755,-86.0394 39.7629,-86.0334 39.7516,-86.032 39.7469,-86.0305 39.7423,-86.029 39.7376,-86.0276 39.733,-86.0136 39.722,-86.0027 39.7098,-85.993 39.6969,-85.9825 39.6843,-85.9743 39.6774,-85.9639 39.6707,-85.953 39.6642,-85.9432 39.6583,-85.8634 39.6085,-85.7291 39.5234,-85.5957 39.4328,-85.5182 39.3669,-85.4792 39.3648,-85.4404 39.3517,-85.4026 39.3352,-85.3666 39.323,-85.3378 39.3188,-85.3052 39.3166,-85.2723 39.3152,-85.2424 39.3136,-85.2262 39.3109,-85.2102 39.306,-85.1946 39.3001,-85.1797 39.2944,-85.1382 39.2876,-85.0815 39.2864,-85.0242 39.2883,-84.9806 39.2908,-84.975 39.2884,-84.9696 39.2855,-84.9644 39.2824,-84.9356 39.2766,-84.9102 39.2749,-84.8847 39.2749,-84.8609 39.2775,-84.8572 39.2833,-84.8295 39.2723,-84.8235 39.269)
+LINESTRING(-89.5928 39.8013,-89.5938 39.8254,-89.5946 39.8621,-89.5947 39.8961,-89.5936 39.9123,-89.5849 39.9216,-89.5759 39.9304,-89.5681 39.9397,-89.563 39.9504,-89.5513 39.9602,-89.5327 39.9773,-89.515 39.9945,-89.5061 40.0044,-89.5047 40.0092,-89.5038 40.0147,-89.5021 40.02,-89.4982 40.0239,-89.4793 40.0358,-89.4528 40.0635,-89.4282 40.0931,-89.4147 40.1105,-89.4163 40.1264,-89.4178 40.1429,-89.4182 40.1595,-89.4164 40.1753,-89.4153 40.1765,-89.4143 40.1776,-89.4132 40.1787,-89.4122 40.1798)
+LINESTRING(-84.8235 39.269,-84.7907 39.2511,-84.7485 39.2275,-84.7108 39.2095)
+LINESTRING(-83.0135 39.8865,-83.0528 39.8426,-83.0838 39.8275,-83.1157 39.8237,-83.1579 39.8137,-83.1726 39.8071,-83.1863 39.7996,-83.1999 39.7917,-83.2139 39.7844,-83.2281 39.7784,-83.2428 39.7731,-83.2575 39.7678,-83.2717 39.7618,-83.3483 39.7252,-83.4249 39.6885,-83.5013 39.6518,-83.5777 39.615,-83.6098 39.5978,-83.6425 39.5788,-83.6755 39.5608,-83.7085 39.5467,-83.7352 39.5381,-83.7615 39.5304,-83.7879 39.523,-83.8147 39.5152,-83.8412 39.5077,-83.8687 39.5002,-83.8959 39.4922,-83.9214 39.4832,-83.9349 39.4762,-83.9471 39.4677,-83.9598 39.4595,-83.975 39.4532,-84.0045 39.444,-84.0336 39.4342,-84.0627 39.4245,-84.0922 39.4159,-84.107 39.415,-84.1149 39.4151,-84.1225 39.4146,-84.1525 39.406,-84.189 39.3901,-84.2233 39.3708,-84.2461 39.3522,-84.2549 39.3397,-84.2639 39.3246,-84.2725 39.3105,-84.2799 39.3009,-84.2935 39.2904,-84.3085 39.2806,-84.323 39.2707,-84.3354 39.2598,-84.3407 39.2478,-84.3428 39.231,-84.3439 39.2135,-84.3457 39.1998,-84.3576 39.189,-84.3821 39.1728,-84.4077 39.1575,-84.4228 39.1497,-84.4374 39.1468,-84.4448 39.1461,-84.4524 39.1456,-84.4599 39.1437,-84.4704 39.1393)
+LINESTRING(-84.1362 39.7781,-84.1401 39.751,-84.156 39.7225,-84.178 39.6958,-84.2001 39.6738,-84.2058 39.6606,-84.2143 39.6478,-84.2229 39.6349,-84.2289 39.6215,-84.2425 39.5942,-84.2633 39.5731,-84.287 39.5537,-84.3096 39.5315,-84.3228 39.5095,-84.3269 39.4896,-84.3278 39.47,-84.3314 39.4487,-84.337 39.4409,-84.3467 39.4331,-84.3567 39.4255,-84.3634 39.4178,-84.3678 39.4019,-84.3685 39.3844,-84.3689 39.3667,-84.3724 39.3501,-84.3826 39.3375,-84.3972 39.3303,-84.4118 39.3253,-84.4215 39.3195,-84.4344 39.299,-84.4424 39.2779,-84.448 39.2562,-84.4537 39.2337,-84.4616 39.219,-84.4768 39.1956,-84.4927 39.1737,-84.5029 39.1631,-84.5136 39.1598,-84.5243 39.1564,-84.5351 39.1531,-84.5458 39.1497)
+LINESTRING(-84.7108 39.2095,-84.702 39.2101,-84.6932 39.2111,-84.6846 39.2124,-84.6759 39.2137,-84.6691 39.2061,-84.6624 39.1986,-84.6516 39.196,-84.6443 39.1903,-84.6175 39.1889,-84.6018 39.1867,-84.5897 39.1794,-84.5735 39.1629,-84.5645 39.1628,-84.5579 39.1609,-84.5458 39.1497)
+LINESTRING(-89.6454 39.7396,-89.63 39.7462,-89.6183 39.7519,-89.6076 39.7581,-89.5946 39.7659,-89.5927 39.7747,-89.5922 39.7835,-89.5924 39.7924,-89.5928 39.8013)
+LINESTRING(-122.483 37.8245,-122.486 37.8341,-122.488 37.8407,-122.489 37.8437,-122.491 37.8469,-122.497 37.8536,-122.503 37.8597,-122.51 37.8679,-122.519 37.8809,-122.524 37.8849,-122.528 37.8895,-122.53 37.8947,-122.532 37.9004,-122.533 37.9145,-122.527 37.9402,-122.528 37.9543,-122.533 37.963,-122.546 37.9767,-122.551 37.9855,-122.558 38.0049,-122.557 38.0203,-122.542 38.0477,-122.541 38.063,-122.549 38.0791,-122.556 38.0876)
+LINESTRING(-84.4704 39.1393,-84.4873 39.1248,-84.5093 39.0996,-84.5176 39.089)
+LINESTRING(-84.5458 39.1497,-84.5393 39.0876)
+LINESTRING(-122.472 37.8019,-122.473 37.8023,-122.479 37.8108,-122.483 37.8245)
+LINESTRING(-79.0473 38.1166,-79.0216 38.1538,-78.9911 38.1897,-78.9625 38.223,-78.9427 38.2521,-78.9346 38.283,-78.934 38.3153,-78.9328 38.3468,-78.923 38.3753,-78.9012 38.3993,-78.8723 38.4212,-78.8418 38.4424,-78.8154 38.464,-78.7793 38.5102,-78.7506 38.5605,-78.7176 38.6128,-78.6683 38.6649,-78.6671 38.6813,-78.6661 38.6979,-78.6643 38.7144,-78.6607 38.7305,-78.6536 38.7441,-78.6429 38.7566,-78.6307 38.7684,-78.6194 38.7801,-78.6152 38.7861,-78.6123 38.7926,-78.6098 38.7991,-78.6067 38.8054,-78.5995 38.8133,-78.5885 38.8224,-78.5767 38.8315,-78.5672 38.8394,-78.5242 38.8826,-78.4794 38.9285,-78.4316 38.9723,-78.3797 39.0093,-78.3655 39.0119,-78.3418 39.0125,-78.3169 39.0122,-78.2991 39.0122)
+LINESTRING(-122.225 38.0601,-122.224 38.0536,-122.239 38.0177,-122.253 37.9949,-122.268 37.9805,-122.283 37.9695,-122.299 37.9553,-122.306 37.9423,-122.303 37.93,-122.292 37.9177,-122.283 37.9018,-122.277 37.8784,-122.276 37.8542,-122.283 37.8358,-122.294 37.8314)
+LINESTRING(-84.5176 39.089,-84.5283 39.0751,-84.5366 39.0625)
+LINESTRING(-84.5393 39.0876,-84.5366 39.0625)
+LINESTRING(-87.4137 39.4313,-87.358 39.4309,-87.3305 39.4309,-87.3029 39.4312,-87.2881 39.4426,-87.2709 39.4453,-87.253 39.4457,-87.2349 39.4452,-87.2173 39.4453,-87.2092 39.4468,-87.2016 39.4498,-87.1943 39.453,-87.187 39.4554,-87.1734 39.4565,-87.1567 39.4557,-87.1395 39.4544,-87.1244 39.454,-87.0963 39.4597,-87.0702 39.4612,-87.0465 39.4622,-87.0256 39.4667,-87.0122 39.4729,-86.9997 39.4802,-86.9876 39.4878,-86.9751 39.495,-86.9469 39.5083,-86.9169 39.5205,-86.8863 39.5318,-86.8562 39.5425,-86.7673 39.5425,-86.6485 39.5666,-86.5292 39.6019,-86.4391 39.6359,-86.4252 39.6428,-86.3981 39.658,-86.3841 39.6649,-86.3708 39.6697,-86.3566 39.6737,-86.3425 39.6779,-86.3297 39.6834,-86.2897 39.7063,-86.2686 39.7169,-86.2465 39.725,-86.2297 39.7476,-86.2136 39.7519,-86.189 39.7532,-86.1633 39.7525,-86.1441 39.751)
+LINESTRING(-87.4137 39.4313,-87.4268 39.433,-87.4425 39.4493,-87.4634 39.4487,-87.4958 39.4445,-87.5275 39.4381,-87.5307 39.4369)
+LINESTRING(-122.389 37.7857,-122.389 37.7857,-122.375 37.7971,-122.36 37.8073,-122.334 37.8203,-122.333 37.8205)
+LINESTRING(-78.5764 38.0235,-78.5768 38.0236,-78.5976 38.0272,-78.6131 38.0299,-78.6476 38.032,-78.6721 38.0284,-78.6985 38.0284,-78.7386 38.0416,-78.7415 38.043,-78.771 38.0486,-78.7895 38.0494,-78.8071 38.0472,-78.8339 38.044,-78.8917 38.0471,-78.9476 38.0638,-79 38.0887,-79.0473 38.1166)
+LINESTRING(-122.408 37.7686,-122.389 37.7857)
+LINESTRING(-122.408 37.7686,-122.412 37.7817,-122.416 37.7861,-122.421 37.7892,-122.429 37.7913,-122.437 37.7927,-122.45 37.7946,-122.463 37.7974,-122.472 37.8019)
+LINESTRING(-91.3066 40.0064,-91.3079 39.9896,-91.3154 39.9566,-91.3217 39.9196,-91.3193 39.891,-91.3223 39.8859,-91.3278 39.8808,-91.3331 39.8755,-91.3355 39.8699,-91.3257 39.8534,-91.3126 39.8396,-91.301 39.8231,-91.2954 39.7984,-91.2985 39.7956,-91.3015 39.7927,-91.3046 39.7898,-91.3077 39.7869,-91.3087 39.7818,-91.3097 39.7748,-91.3098 39.7678,-91.3083 39.7629,-91.3069 39.762,-91.3055 39.7611,-91.3042 39.7602,-91.3028 39.7593,-91.278 39.7448,-91.2518 39.7327,-91.2237 39.7237,-91.1935 39.7182,-91.1902 39.7194,-91.187 39.7206,-91.1833 39.7218,-91.1805 39.7225,-91.0656 39.7291,-91.0266 39.718,-91.0062 39.6999,-90.9477 39.685,-90.9063 39.6805,-90.8644 39.676,-90.8224 39.6733,-90.7807 39.6737,-90.7767 39.6745,-90.7727 39.6759,-90.7687 39.6773,-90.7646 39.678,-90.7154 39.6797,-90.6661 39.6815,-90.6167 39.6831,-90.5675 39.6839,-90.4928 39.6822,-90.4167 39.6788,-90.3406 39.677,-90.2662 39.6802,-90.2531 39.6816,-90.2401 39.6831,-90.2242 39.6851,-90.2149 39.6868,-90.1959 39.699,-90.1808 39.7151,-90.1625 39.7294,-90.134 39.7358,-90.0568 39.7371,-89.9798 39.739,-89.9027 39.7408,-89.8254 39.7419,-89.8204 39.7435,-89.8105 39.7471,-89.7998 39.7509,-89.792 39.7532,-89.7661 39.755,-89.7383 39.7526,-89.7109 39.7477,-89.6861 39.7422,-89.677 39.7409,-89.6661 39.7403,-89.6551 39.74,-89.6454 39.7396)
+LINESTRING(-95.6629 40.5851,-95.6456 40.5751,-95.6363 40.5576,-95.6251 40.5407,-95.6127 40.5243,-95.5997 40.5082,-95.598 40.4799,-95.5874 40.4516,-95.5717 40.4241,-95.555 40.3986,-95.5436 40.3828,-95.5315 40.368,-95.5193 40.3533,-95.5078 40.338,-95.5005 40.3244,-95.4949 40.3102,-95.4886 40.2963,-95.479 40.2833,-95.4523 40.2593,-95.4232 40.2366,-95.3632 40.193,-95.3477 40.1857,-95.3169 40.1722,-95.267 40.1507,-95.2471 40.1355,-95.2306 40.1137,-95.2171 40.0924,-95.2059 40.0786,-95.1889 40.0671,-95.1693 40.0559,-95.1492 40.0451,-95.1304 40.0348,-95.0972 40.0144,-95.0618 39.9935,-95.0237 39.9772,-94.9827 39.9707,-94.9519 39.9503,-94.8953 39.9103)
+LINESTRING(-77.0465 38.8705,-77.0566 38.86,-77.072 38.8528,-77.0891 38.8473,-77.1073 38.839,-77.113 38.8341,-77.118 38.8279,-77.123 38.8218,-77.1287 38.8167,-77.1397 38.8109,-77.152 38.8053,-77.1637 38.799,-77.1727 38.7908,-77.1801 38.7772,-77.1852 38.7626,-77.1904 38.7481,-77.1981 38.7346,-77.2039 38.7288,-77.2111 38.7235,-77.2186 38.7185,-77.2253 38.7133,-77.2322 38.7049,-77.2374 38.6953,-77.2424 38.6858,-77.2488 38.6775,-77.2573 38.6709,-77.2668 38.6653,-77.2764 38.6595,-77.2849 38.6523,-77.3028 38.629,-77.317 38.6038,-77.3295 38.578,-77.3421 38.5527,-77.3557 38.5333,-77.3731 38.5152,-77.3913 38.4973,-77.4074 38.4787,-77.4171 38.4601,-77.4233 38.4405,-77.4296 38.4215,-77.4398 38.4047,-77.4606 38.3825,-77.4873 38.3524,-77.5105 38.3202,-77.5204 38.2918,-77.5181 38.2763,-77.5125 38.2609,-77.5056 38.2457,-77.4998 38.2307,-77.4965 38.1972,-77.503 38.165,-77.5112 38.1327,-77.5133 38.099,-77.5089 38.064,-77.5024 38.0278,-77.4931 37.9919,-77.4803 37.958,-77.4672 37.9283,-77.4571 37.9007,-77.4508 37.8726,-77.4491 37.8409,-77.4526 37.7881,-77.4571 37.7307,-77.4581 37.6737,-77.4511 37.622,-77.4558 37.6136,-77.4616 37.6059,-77.4673 37.5985,-77.4717 37.591)
+LINESTRING(-77.4717 37.591,-77.4792 37.5919,-77.4858 37.5936,-77.492 37.5957,-77.4989 37.5974,-77.5083 37.5985,-77.5186 37.5992,-77.5288 37.6001,-77.5383 37.6016,-77.5604 37.6116,-77.5773 37.6265,-77.5923 37.6425,-77.6089 37.6558,-77.6591 37.6764,-77.7163 37.6909,-77.7734 37.7055,-77.8236 37.7265,-77.8633 37.7532,-77.9162 37.7922,-77.9672 37.8316,-78.0013 37.8598,-78.0251 37.8839,-78.0478 37.9084,-78.0731 37.9309,-78.1046 37.949,-78.1305 37.9578,-78.1805 37.9741,-78.2302 37.9899,-78.2549 37.9973,-78.2643 37.9979,-78.2732 37.9976,-78.2819 37.997,-78.2912 37.9963,-78.3201 37.9977,-78.3447 38.0038,-78.368 38.0133,-78.3929 38.0245,-78.4021 38.0278,-78.4128 38.0302,-78.4235 38.0307,-78.4326 38.028,-78.4501 38.0182,-78.4701 38.0089,-78.4917 38.0023,-78.5136 38.0006,-78.5224 38.0023,-78.5303 38.0059,-78.5376 38.0103,-78.5444 38.0149,-78.5569 38.0194,-78.5764 38.0235)
+LINESTRING(-84.5366 39.0625,-84.5841 39.042,-84.6163 39.0253,-84.6326 39.0013,-84.6326 38.9592,-84.63 38.939,-84.6277 38.9188,-84.625 38.8987,-84.6211 38.8784)
+LINESTRING(-121.926 37.6995,-121.934 37.6995,-121.944 37.698,-121.954 37.6959,-121.965 37.6941,-121.975 37.6946,-121.985 37.6972,-121.995 37.7001,-122.005 37.7015,-122.025 37.6986,-122.039 37.6932,-122.053 37.6896,-122.072 37.6924,-122.084 37.7049,-122.095 37.7176,-122.106 37.7305,-122.118 37.7432,-122.122 37.7495,-122.124 37.7566,-122.126 37.7635,-122.129 37.7697,-122.147 37.7848,-122.169 37.7984,-122.191 37.8129,-122.206 37.8305,-122.212 37.8312,-122.218 37.831,-122.224 37.8304,-122.23 37.8295,-122.238 37.8277,-122.249 37.8282,-122.259 37.8284,-122.265 37.8255,-122.273 37.8271,-122.28 37.8286,-122.288 37.8301,-122.294 37.8314)
+LINESTRING(-81.6049 38.3774,-81.5808 38.4059,-81.5334 38.4407,-81.4816 38.4719,-81.4429 38.4913,-81.4225 38.4984,-81.4011 38.5046,-81.38 38.5106,-81.3605 38.5176,-81.3412 38.5297,-81.3231 38.5455,-81.3043 38.5603,-81.2832 38.5697,-81.2549 38.5716,-81.2128 38.5716,-81.1727 38.5716,-81.1502 38.5737,-81.1392 38.5792,-81.1272 38.5857,-81.1151 38.5919,-81.104 38.5963,-81.0927 38.5977,-81.0805 38.5988,-81.0648 38.5998,-81.049 38.6003,-81.0332 38.6009,-81.0176 38.602,-80.9967 38.6055,-80.9764 38.6101,-80.9558 38.614,-80.9341 38.6154,-80.8978 38.6144,-80.8765 38.6141,-80.8556 38.6154,-80.8205 38.6194,-80.7981 38.6203,-80.7796 38.6207,-80.7637 38.6258,-80.7489 38.6407,-80.7419 38.654,-80.7367 38.6685,-80.7311 38.6826,-80.7229 38.6952,-80.7129 38.703,-80.7031 38.7075,-80.6935 38.7142,-80.6843 38.7285,-80.6754 38.7559,-80.6696 38.7844,-80.6622 38.8123,-80.6487 38.838,-80.6223 38.8677,-80.5926 38.896,-80.5633 38.9243,-80.5379 38.9545,-80.5195 38.9633,-80.5067 38.9731,-80.4979 38.9857,-80.4915 39.0023,-80.467 39.0085,-80.4571 39.014,-80.4508 39.0202,-80.4372 39.0283,-80.4252 39.0324,-80.4125 39.0352,-80.3998 39.0378,-80.3881 39.0416,-80.3831 39.0461,-80.38 39.0623,-80.3839 39.0766,-80.3887 39.091,-80.3902 39.1046,-80.3869 39.1175,-80.3812 39.1307,-80.3745 39.1436,-80.3683 39.1556,-80.3515 39.1819,-80.3309 39.2065,-80.3111 39.2314,-80.2965 39.2581,-80.287 39.2629,-80.2776 39.2677,-80.2734 39.2749,-80.2693 39.2822)
+LINESTRING(-81.6062 38.3759,-81.6049 38.3774)
+LINESTRING(-81.4994 39.2676,-81.5017 39.2591,-81.5041 39.2507,-81.5067 39.2423,-81.5094 39.2339,-81.5215 39.2253,-81.5274 39.2138,-81.5293 39.201,-81.5298 39.1883,-81.5319 39.1848,-81.5365 39.1789,-81.5413 39.1716,-81.5441 39.1641,-81.5438 39.1421,-81.5404 39.121,-81.5402 39.0999,-81.5494 39.0779,-81.5598 39.0694,-81.5814 39.0532,-81.5998 39.0395,-81.6182 39.0258,-81.6526 38.9969,-81.6933 38.9571,-81.7277 38.9146,-81.7432 38.8777,-81.7429 38.8603,-81.7408 38.8428,-81.7382 38.8252,-81.736 38.8078,-81.7296 38.7868,-81.7153 38.7671,-81.6944 38.7514,-81.6685 38.7423,-81.6549 38.7228,-81.6509 38.6968,-81.6509 38.6695,-81.6492 38.646,-81.6471 38.6387,-81.6443 38.6314,-81.6415 38.6241,-81.6398 38.6167,-81.6409 38.6035,-81.6457 38.587,-81.6512 38.57,-81.6549 38.5553,-81.6542 38.5226,-81.6476 38.4772,-81.6379 38.4318,-81.6278 38.3992,-81.6245 38.3953,-81.6176 38.3878,-81.6119 38.3819,-81.6062 38.3759)
+LINESTRING(-77.4717 37.591,-77.459 37.5804,-77.4462 37.5698,-77.4334 37.5591,-77.4206 37.5485,-77.4093 37.5451,-77.3985 37.5385,-77.3875 37.5315,-77.3759 37.5271,-77.3626 37.5255,-77.3463 37.5247,-77.3157 37.524,-77.2664 37.5217)
+LINESTRING(-121.565 37.7428,-121.581 37.741,-121.596 37.7381,-121.612 37.7353,-121.627 37.7336,-121.645 37.7223,-121.667 37.7184,-121.69 37.7173,-121.712 37.714,-121.718 37.7111,-121.726 37.7072,-121.733 37.7037,-121.74 37.7016,-121.778 37.6992,-121.821 37.6992,-121.865 37.7001,-121.904 37.7003,-121.909 37.7001,-121.914 37.6999,-121.918 37.6997,-121.923 37.6995,-121.926 37.6995)
+LINESTRING(-104.982 39.82,-104.965 39.8309,-104.939 39.8484,-104.912 39.8658,-104.885 39.8833,-104.818 39.9135,-104.741 39.9837,-104.663 40.0601,-104.594 40.1089,-104.578 40.1118,-104.558 40.1116,-104.538 40.1104,-104.52 40.1103,-104.486 40.1387,-104.456 40.1569,-104.421 40.1667,-104.372 40.17,-104.36 40.1699,-104.348 40.1699,-104.335 40.1702,-104.324 40.1713,-104.288 40.1826,-104.242 40.2012,-104.198 40.2193,-104.164 40.2294,-104.142 40.2328,-104.116 40.2369,-104.091 40.2406,-104.068 40.2429,-104.052 40.2516,-104.042 40.2576,-104.034 40.2606,-103.993 40.2621,-103.947 40.2647,-103.906 40.2732,-103.878 40.2928,-103.829 40.2914,-103.779 40.2916,-103.73 40.2927,-103.681 40.2939,-103.655 40.2948,-103.614 40.2967,-103.576 40.2995,-103.553 40.3028,-103.45 40.3513,-103.36 40.4081,-103.279 40.4718,-103.202 40.5407,-103.141 40.6184)
+LINESTRING(-104.987 39.8226,-104.982 39.82)
+LINESTRING(-86.1456 39.8054,-86.1483 39.7923,-86.1497 39.7775,-86.1479 39.7631,-86.1406 39.7512,-86.1196 39.7282,-86.1004 39.7082,-86.0838 39.6873,-86.0703 39.6619,-86.0618 39.6314,-86.0583 39.6037,-86.053 39.5765,-86.0394 39.5476,-86.0282 39.5279,-86.0203 39.5096,-86.0129 39.4911,-86.0033 39.4708,-85.9809 39.4379,-85.9582 39.409,-85.9425 39.3795,-85.9411 39.3448,-85.9451 39.3299,-85.949 39.3196,-85.953 39.3092,-85.9569 39.2943,-85.9554 39.2727,-85.9465 39.2511,-85.9376 39.2294,-85.936 39.2078,-85.941 39.1842,-85.946 39.1606,-85.9509 39.1369,-85.9559 39.1133,-85.9547 39.105,-85.9514 39.0971,-85.9328 39.0756,-85.9169 39.0558,-85.9003 39.0367,-85.8798 39.0175,-85.8674 39.0091,-85.8552 39.0022,-85.8448 38.9945)
+LINESTRING(-104.992 39.8134,-104.982 39.82)
+LINESTRING(-104.992 39.8134,-104.995 39.8378,-104.995 39.8632,-104.993 39.8886,-104.992 39.9132,-104.989 39.9354,-104.986 39.9573,-104.982 39.979,-104.98 40.0006,-104.978 40.0392,-104.977 40.0781,-104.977 40.117,-104.977 40.1557,-104.976 40.2014,-104.974 40.2474,-104.973 40.2933,-104.975 40.3388,-104.984 40.3546,-104.989 40.3719,-104.99 40.3899,-104.991 40.4074)
+LINESTRING(-121.506 38.568,-121.506 38.5541,-121.505 38.5405,-121.503 38.527,-121.5 38.5132,-121.495 38.4898,-121.494 38.474,-121.493 38.4594,-121.491 38.4395,-121.485 38.407,-121.478 38.374,-121.471 38.3411,-121.463 38.3089,-121.455 38.273,-121.448 38.2517,-121.436 38.232,-121.412 38.2009,-121.409 38.196,-121.407 38.191,-121.405 38.1861,-121.403 38.1811,-121.403 38.1682,-121.403 38.1553,-121.402 38.1424,-121.402 38.1294,-121.391 38.1025,-121.367 38.0474,-121.342 37.9906,-121.327 37.9583,-121.317 37.9473,-121.305 37.9298,-121.295 37.9135,-121.29 37.9063,-121.28 37.8858,-121.283 37.8522,-121.292 37.8184,-121.299 37.7973,-121.326 37.7741,-121.366 37.7652,-121.409 37.7635,-121.449 37.7624,-121.46 37.7566,-121.471 37.7507,-121.482 37.7449,-121.493 37.739,-121.51 37.7401,-121.532 37.7409,-121.553 37.7416,-121.565 37.7428)
+LINESTRING(-121.473 38.5572,-121.475 38.5507,-121.475 38.5436,-121.473 38.5365,-121.47 38.5303,-121.458 38.5133,-121.444 38.4995,-121.429 38.4865,-121.416 38.472,-121.407 38.4569,-121.399 38.4405,-121.392 38.4238,-121.385 38.4081,-121.373 38.391,-121.359 38.3755,-121.344 38.3601,-121.331 38.3436,-121.322 38.3311,-121.311 38.3177,-121.301 38.3041,-121.294 38.2909,-121.286 38.275,-121.277 38.261,-121.267 38.2472,-121.257 38.2321,-121.238 38.1755,-121.23 38.1046,-121.229 38.0376,-121.228 37.9926,-121.229 37.99,-121.229 37.9872,-121.228 37.9844,-121.226 37.9819,-121.218 37.9532,-121.216 37.9221,-121.217 37.8907,-121.216 37.8607,-121.216 37.8516,-121.216 37.8423,-121.216 37.833,-121.218 37.8239,-121.21 37.8181,-121.203 37.8115,-121.196 37.8046,-121.189 37.798)
+LINESTRING(-94.2233 39.7521,-94.2224 39.7577,-94.2127 39.7802,-94.1861 39.8365,-94.159 39.8925,-94.1455 39.9196,-94.1356 39.932,-94.1243 39.9442,-94.1133 39.9565,-94.104 39.9691,-94.1006 39.989,-94.1026 40.0178,-94.1049 40.0475,-94.1027 40.0702,-94.09 40.0889,-94.0653 40.1195,-94.0387 40.1514,-94.0201 40.1737,-94.0202 40.185,-94.0197 40.1963,-94.0192 40.2074,-94.0187 40.2186,-94.0117 40.304,-93.9954 40.3879,-93.9711 40.4711,-93.9407 40.5538,-93.9253 40.5752)
+LINESTRING(-94.8953 39.9103,-94.8393 39.8693,-94.8101 39.8461,-94.8082 39.8204,-94.7955 39.7759,-94.7931 39.7488)
+LINESTRING(-105.04 39.7197,-105.035 39.7448,-105.026 39.7688,-105.012 39.7917,-104.992 39.8134)
+LINESTRING(-79.3755 37.8185,-79.3732 37.828,-79.367 37.8372,-79.3573 37.848,-79.3421 37.8608,-79.3169 37.8774,-79.2902 37.8926,-79.2643 37.9085,-79.241 37.9268,-79.221 37.9499,-79.1972 37.981,-79.1742 38.0102,-79.1565 38.0272,-79.1487 38.0306,-79.1399 38.0332,-79.1311 38.0357,-79.1232 38.0389,-79.1027 38.0522,-79.0856 38.0686,-79.071 38.0866,-79.0579 38.1048,-79.0555 38.1079,-79.053 38.1108,-79.0473 38.1166)
+LINESTRING(-105.668 39.7559,-105.628 39.7673,-105.601 39.7692,-105.575 39.7618,-105.538 39.7455,-105.527 39.7424,-105.517 39.7415,-105.508 39.7411,-105.501 39.7394,-105.495 39.7417,-105.489 39.7434,-105.482 39.745,-105.476 39.747,-105.467 39.746,-105.458 39.7456,-105.449 39.746,-105.44 39.7473,-105.421 39.7358,-105.403 39.7265,-105.384 39.7191,-105.36 39.713,-105.352 39.7105,-105.344 39.7071,-105.335 39.7041,-105.327 39.7023,-105.316 39.7037,-105.303 39.7076,-105.286 39.7104,-105.263 39.7088,-105.247 39.7048,-105.233 39.7001,-105.218 39.6961,-105.201 39.6944,-105.197 39.6961,-105.187 39.6993,-105.176 39.7064,-105.166 39.7196,-105.131 39.7202,-105.103 39.7194,-105.075 39.7187,-105.04 39.7197)
+LINESTRING(-82.6478 38.3784,-82.6333 38.3789,-82.6044 38.377,-82.5807 38.3658)
+LINESTRING(-82.5807 38.3658,-82.58 38.3655,-82.5387 38.3586,-82.5016 38.3566,-82.4781 38.3585,-82.4345 38.3608,-82.3849 38.3755,-82.3722 38.383,-82.3469 38.3976,-82.3203 38.4122,-82.3039 38.4197,-82.2932 38.4211,-82.2822 38.4214,-82.2711 38.4217,-82.2605 38.4232,-82.2504 38.4264,-82.2406 38.4302,-82.2306 38.4336,-82.2198 38.4358,-82.2016 38.4369,-82.1745 38.4377,-82.1476 38.4381,-82.1299 38.4378,-82.116 38.4356,-82.102 38.4321,-82.088 38.429,-82.0744 38.4279,-82.0535 38.4317,-82.0354 38.4393,-82.0178 38.4478,-81.9987 38.4541,-81.9732 38.4562,-81.9323 38.4572,-81.8911 38.4566,-81.8647 38.4539,-81.8598 38.4522,-81.8531 38.4496,-81.8464 38.4465,-81.8416 38.4438,-81.8334 38.4365,-81.8272 38.4285,-81.8212 38.4205,-81.8138 38.4134,-81.798 38.4034,-81.779 38.3926,-81.7609 38.3818,-81.748 38.3717,-81.7298 38.3657,-81.7257 38.3659,-81.7221 38.3664,-81.719 38.3664,-81.7161 38.3648,-81.7 38.3639,-81.6837 38.362,-81.6677 38.3589,-81.6527 38.3545,-81.6443 38.359,-81.6299 38.3664,-81.6152 38.3732,-81.6062 38.3759)
+LINESTRING(-87.5307 39.4369,-87.5464 39.4311,-87.5792 39.4295,-87.6106 39.4275,-87.642 39.4263,-87.6748 39.4268,-87.6852 39.4271,-87.6955 39.4261,-87.7073 39.4219,-87.7179 39.4159,-87.7279 39.4101,-87.7376 39.4063,-87.7501 39.4041,-87.7628 39.4026,-87.7756 39.4009,-87.7884 39.3984,-87.8397 39.3827,-87.8989 39.3615,-87.9567 39.3385,-88.0039 39.3177,-88.0125 39.3128,-88.0208 39.307,-88.0292 39.3013,-88.0382 39.2964,-88.0661 39.2856,-88.0953 39.2765,-88.1249 39.2673,-88.1537 39.2564,-88.1604 39.257,-88.1675 39.2569,-88.1745 39.2562,-88.181 39.2549,-88.2172 39.233,-88.2604 39.2153,-88.3057 39.2004,-88.3485 39.1867,-88.3578 39.1816,-88.3677 39.176,-88.4007 39.1669,-88.4381 39.1607,-88.4762 39.1558,-88.5126 39.1509)
+LINESTRING(-89.5928 39.8013,-89.5837 39.8046,-89.5745 39.8079,-89.5656 39.8113,-89.5563 39.8153,-89.5474 39.8225,-89.542 39.8298,-89.5319 39.8354,-89.5084 39.8376,-89.4466 39.8395,-89.387 39.8441,-89.3274 39.8486,-89.2656 39.8503,-89.2129 39.8491,-89.1594 39.8483,-89.1062 39.8505,-89.0542 39.8584,-89.0555 39.8651,-89.0559 39.8716,-89.0355 39.9059,-88.9971 39.9231,-88.9498 39.9294,-88.9026 39.9312,-88.8966 39.9317,-88.8713 39.9395,-88.8515 39.951,-88.8348 39.9654,-88.8187 39.982,-88.8126 39.9868,-88.8059 39.9907,-88.7995 39.9952,-88.7945 40.0013,-88.793 40.0064,-88.7922 40.012,-88.7906 40.0173,-88.7865 40.0217,-88.7417 40.0307,-88.6919 40.0331,-88.6418 40.0335,-88.5955 40.037,-88.5812 40.0425,-88.5724 40.0513,-88.5658 40.0608,-88.5579 40.068,-88.493 40.1043,-88.4564 40.1203,-88.4071 40.1231,-88.304 40.1198,-88.3039 40.0182,-88.3031 39.9676,-88.3008 39.9166,-88.2959 39.9107,-88.2852 39.9026,-88.2738 39.8952,-88.2671 39.8909,-88.267 39.7903,-88.2678 39.7754,-88.2712 39.7655,-88.2785 39.7564,-88.2911 39.7442,-88.289 39.7066,-88.2829 39.6594,-88.2822 39.6147,-88.296 39.5848,-88.2965 39.5588,-88.2933 39.5239,-88.2932 39.4907,-88.3032 39.4697,-88.3446 39.4393,-88.3613 39.4166,-88.3707 39.3868,-88.3903 39.3353,-88.3972 39.322,-88.4124 39.2968,-88.419 39.2837,-88.4242 39.2694,-88.4286 39.2546,-88.4331 39.2399,-88.4389 39.226,-88.4434 39.2199,-88.4494 39.214,-88.455 39.2081,-88.4582 39.2022,-88.4671 39.1896,-88.4834 39.1766,-88.5007 39.1636,-88.5126 39.1509)
+LINESTRING(-88.5126 39.1509,-88.5357 39.1544,-88.5442 39.1555,-88.558 39.1548,-88.5699 39.1501,-88.5787 39.1423,-88.5832 39.1321,-88.5839 39.1224,-88.583 39.1138,-88.5814 39.1051,-88.5806 39.0957)
+LINESTRING(-76.3173 37.0126,-76.3187 37.0162,-76.3199 37.0251,-76.3231 37.0342,-76.33 37.0405,-76.3424 37.0408,-76.3477 37.0367,-76.3548 37.0338,-76.3625 37.032,-76.37 37.0307,-76.3874 37.0381,-76.404 37.0492,-76.4194 37.0615,-76.4332 37.0729,-76.4464 37.0873,-76.4551 37.1035,-76.4628 37.1202,-76.4731 37.1362,-76.4987 37.1673,-76.5209 37.1921,-76.5467 37.2137,-76.5831 37.2356,-76.5887 37.2386,-76.5944 37.2416,-76.6001 37.2445,-76.6057 37.2475,-76.6172 37.2583,-76.6342 37.2669,-76.6518 37.2754,-76.6648 37.286,-76.6959 37.3214,-76.7401 37.3638,-76.7878 37.4043,-76.8296 37.434,-76.8488 37.4459,-76.8706 37.4595,-76.8923 37.4722,-76.9114 37.4816,-76.92 37.4844,-76.9305 37.4872,-76.9411 37.4896,-76.95 37.4914,-76.9715 37.4941,-76.9933 37.4949,-77.0151 37.4952,-77.0368 37.4964,-77.0945 37.5033,-77.1519 37.5114,-77.2092 37.5183,-77.2664 37.5217)
+LINESTRING(-76.3152 37.007,-76.3173 37.0126)
+LINESTRING(-106.456 39.6068,-106.443 39.6148,-106.43 39.6236,-106.416 39.6321,-106.403 39.6396,-106.387 39.6438,-106.364 39.6468,-106.34 39.6481,-106.322 39.6475,-106.314 39.6446,-106.303 39.639,-106.293 39.6328,-106.285 39.6281,-106.283 39.6223,-106.28 39.617,-106.278 39.6114,-106.278 39.6046,-106.276 39.6014,-106.273 39.5982,-106.265 39.5962,-106.257 39.596,-106.25 39.5947,-106.245 39.5892,-106.247 39.5847,-106.249 39.5801,-106.243 39.5706,-106.23 39.5538,-106.217 39.5363,-106.208 39.5245,-106.206 39.5209,-106.205 39.5173,-106.202 39.5137,-106.2 39.5109,-106.194 39.5074,-106.187 39.5043,-106.179 39.5018,-106.172 39.5005,-106.167 39.5017,-106.161 39.5029,-106.156 39.5045,-106.153 39.506,-106.152 39.5106,-106.149 39.5149,-106.145 39.5191,-106.143 39.5232,-106.133 39.5467,-106.122 39.5693,-106.107 39.5911,-106.087 39.6116,-106.082 39.6157,-106.076 39.6194,-106.072 39.6237,-106.069 39.6293,-106.046 39.64,-106.008 39.6556,-105.969 39.6703,-105.945 39.6783,-105.93 39.6801,-105.914 39.6805,-105.899 39.6812,-105.885 39.6837,-105.875 39.6879,-105.865 39.6928,-105.855 39.6972,-105.844 39.6995,-105.814 39.6984,-105.777 39.6948,-105.74 39.6928,-105.713 39.6966,-105.7 39.7076,-105.691 39.7247,-105.681 39.7425,-105.668 39.7559)
+LINESTRING(-76.3114 37.0005,-76.3143 37.0048,-76.3152 37.007)
+LINESTRING(-76.2989 36.9702,-76.3002 36.9818,-76.3068 36.9939,-76.3114 37.0005)
+LINESTRING(-76.2655 36.9521,-76.2687 36.9581,-76.2763 36.9602,-76.284 36.9623,-76.2917 36.9646,-76.2986 36.967,-76.2989 36.9702)
+LINESTRING(-80.2325 37.7861,-80.2307 37.7861,-80.213 37.7934,-80.1989 37.8038,-80.1822 37.8132,-80.1572 37.8174,-80.1039 37.8127,-80.0576 37.8032,-80.0157 37.7969,-79.9757 37.8016,-79.9308 37.8211,-79.8907 37.8391,-79.8482 37.8505,-79.7964 37.8502,-79.7845 37.846,-79.7694 37.8378,-79.7548 37.8285,-79.7442 37.8212,-79.7396 37.8164,-79.7362 37.8106,-79.7325 37.8051,-79.7272 37.8008,-79.6832 37.8099,-79.6469 37.8435,-79.6139 37.8765,-79.5799 37.8839,-79.5411 37.8658,-79.4809 37.8469,-79.4199 37.8293,-79.3755 37.8185)
+LINESTRING(-121.926 37.6995,-121.924 37.694,-121.923 37.6889,-121.921 37.6836,-121.919 37.6783,-121.906 37.6569,-121.887 37.6407,-121.868 37.6246,-121.854 37.6031,-121.856 37.5895,-121.867 37.5789,-121.883 37.5695,-121.9 37.5595,-121.917 37.5466,-121.93 37.5326,-121.937 37.5172,-121.936 37.4998,-121.926 37.4819,-121.911 37.4687,-121.895 37.4561,-121.878 37.4401,-121.872 37.413,-121.869 37.3885,-121.862 37.3653,-121.846 37.3423)
+LINESTRING(-121.942 37.3151,-121.918 37.3219,-121.894 37.3287,-121.87 37.3355,-121.846 37.3423)
+LINESTRING(-121.942 37.3151,-121.977 37.317,-121.991 37.3214,-122 37.3277,-122.024 37.3351,-122.035 37.3359,-122.051 37.3354,-122.067 37.3345,-122.081 37.3344,-122.087 37.3382,-122.093 37.3431,-122.098 37.3485,-122.102 37.3539,-122.115 37.3582,-122.132 37.3696,-122.15 37.3825,-122.162 37.3916,-122.19 37.4076,-122.218 37.4219,-122.247 37.4358,-122.274 37.4508,-122.284 37.4598,-122.29 37.4703,-122.294 37.4813,-122.3 37.4914,-122.31 37.4977,-122.323 37.5031,-122.338 37.508,-122.35 37.5129,-122.358 37.5234,-122.364 37.5344,-122.371 37.5452,-122.379 37.5554,-122.391 37.5678,-122.403 37.5801,-122.416 37.5926,-122.427 37.6055,-122.427 37.6091,-122.426 37.6127,-122.425 37.6164,-122.425 37.62,-122.436 37.6351,-122.448 37.6467,-122.458 37.6572,-122.465 37.6686,-122.467 37.6728,-122.467 37.6762,-122.468 37.6796,-122.469 37.6838,-122.47 37.6925,-122.466 37.7001,-122.458 37.707,-122.449 37.7133,-122.441 37.7167,-122.434 37.7187,-122.427 37.7208,-122.42 37.7248,-122.409 37.7379,-122.406 37.7514,-122.407 37.7659,-122.408 37.7686)
+LINESTRING(-77.3578 37.1524,-77.3502 37.1617,-77.3413 37.1743,-77.3335 37.187,-77.3293 37.1968,-77.3247 37.2177,-77.32 37.2385,-77.3144 37.2642,-77.312 37.2768,-77.316 37.2873,-77.3247 37.3053,-77.3337 37.3239,-77.3386 37.3362,-77.3424 37.362,-77.3442 37.3889,-77.3452 37.4159,-77.3465 37.442,-77.3243 37.4577,-77.3044 37.4749,-77.2858 37.4929,-77.2673 37.5113,-77.2678 37.5139,-77.2677 37.5165,-77.2672 37.5192,-77.2664 37.5217)
+LINESTRING(-77.4267 37.2036,-77.3998 37.2189,-77.3854 37.2091,-77.3707 37.1987,-77.3583 37.187,-77.3508 37.1733,-77.3525 37.1681,-77.3543 37.1629,-77.356 37.1577,-77.3578 37.1524)
+LINESTRING(-75.9856 36.8509,-76.0184 36.8468,-76.0503 36.8398,-76.0819 36.8333,-76.1137 36.8305,-76.1355 36.8338,-76.1576 36.8406,-76.1796 36.8466,-76.201 36.8474)
+LINESTRING(-76.2655 36.9521,-76.2668 36.9481,-76.2676 36.946,-76.269 36.9414,-76.2708 36.9367,-76.2722 36.9324,-76.2728 36.9281,-76.272 36.9234,-76.2666 36.9143,-76.2583 36.9079,-76.2479 36.9027,-76.2363 36.8973,-76.2234 36.8874,-76.2162 36.8755,-76.2105 36.8623,-76.201 36.8474)
+LINESTRING(-108.602 39.1205,-108.616 39.1224,-108.626 39.1288,-108.635 39.1367,-108.645 39.143,-108.679 39.1608,-108.712 39.1777,-108.744 39.195,-108.777 39.2139,-108.8 39.2266,-108.824 39.2386,-108.849 39.2485,-108.873 39.2549,-108.881 39.2543,-108.893 39.2517,-108.905 39.2487,-108.913 39.2465,-108.928 39.2391,-108.943 39.2285,-108.959 39.218,-108.974 39.211,-108.988 39.2073,-109.001 39.2039,-109.015 39.2002,-109.031 39.1954,-109.036 39.1927,-109.042 39.1906,-109.047 39.1903,-109.053 39.1905)
+LINESTRING(-106.456 39.6068,-106.472 39.6135,-106.486 39.6216,-106.5 39.6293,-106.516 39.6351,-106.543 39.6409,-106.579 39.6481,-106.612 39.6562,-106.635 39.6649,-106.654 39.6791,-106.674 39.6939,-106.695 39.7062,-106.721 39.713,-106.733 39.7073,-106.749 39.7006,-106.764 39.6928,-106.772 39.6836,-106.787 39.6804,-106.803 39.6742,-106.817 39.6667,-106.83 39.6592,-106.856 39.656,-106.906 39.6536,-106.954 39.6522,-106.978 39.652,-107.001 39.6614,-107.012 39.6655,-107.024 39.6689,-107.055 39.6708,-107.085 39.6648,-107.117 39.6544,-107.15 39.6427,-107.175 39.6332,-107.195 39.6238,-107.215 39.6142,-107.239 39.6043,-107.278 39.5924,-107.311 39.5873,-107.344 39.5885,-107.382 39.595,-107.398 39.5991,-107.411 39.6036,-107.425 39.6083,-107.44 39.6127,-107.464 39.618,-107.485 39.6212,-107.508 39.6225,-107.533 39.6216,-107.584 39.6151,-107.673 39.5959,-107.724 39.5892,-107.776 39.5855,-107.801 39.5834,-107.822 39.5803,-107.842 39.5747,-107.863 39.5655,-107.87 39.5604,-107.877 39.5548,-107.884 39.5502,-107.894 39.5479,-107.903 39.549,-107.919 39.556,-107.929 39.5572,-107.966 39.5502,-107.997 39.5363,-108.022 39.5166,-108.046 39.4922,-108.053 39.4805,-108.056 39.4683,-108.057 39.455,-108.058 39.4401,-108.066 39.4064,-108.079 39.3756,-108.102 39.3525,-108.138 39.3415,-108.158 39.3437,-108.187 39.3582,-108.208 39.3604,-108.222 39.3566,-108.237 39.3487,-108.249 39.3388,-108.259 39.3288,-108.268 39.2995,-108.278 39.2745,-108.289 39.2498,-108.301 39.2212,-108.326 39.1765,-108.362 39.1451,-108.411 39.1253,-108.474 39.1154,-108.494 39.1136,-108.513 39.1125,-108.531 39.113,-108.551 39.1161,-108.565 39.119,-108.577 39.1207,-108.588 39.1212,-108.602 39.1205)
+LINESTRING(-76.3446 36.7551,-76.3276 36.7546,-76.3105 36.7543,-76.2935 36.7543,-76.2765 36.7542,-76.2748 36.7555,-76.2731 36.7568,-76.2715 36.7581,-76.2698 36.7595,-76.2529 36.7627,-76.241 36.7739,-76.2292 36.7856,-76.2127 36.7901,-76.2049 36.8029,-76.2011 36.8176,-76.2002 36.8329,-76.201 36.8474)
+LINESTRING(-81.2029 37.7333,-81.1872 37.7414,-81.1709 37.7487,-81.1547 37.7562,-81.1394 37.7647,-81.1155 37.766,-81.0896 37.7641,-81.0632 37.7616,-81.038 37.7611,-81.0149 37.7648,-80.9948 37.7714,-80.9758 37.7788,-80.9556 37.7844,-80.9445 37.7846,-80.9338 37.7825,-80.9233 37.7803,-80.9125 37.7802,-80.8951 37.7828,-80.8775 37.7852,-80.86 37.788,-80.843 37.7914,-80.8334 37.7938,-80.8248 37.7976,-80.8171 37.8056,-80.8114 37.8152,-80.8057 37.8245,-80.7978 37.8313,-80.7728 37.8421,-80.7462 37.8513,-80.7192 37.8601,-80.6932 37.8696,-80.6716 37.8832,-80.6493 37.9001,-80.6262 37.9105,-80.6022 37.9048,-80.5944 37.8992,-80.5885 37.8928,-80.5689 37.8588,-80.5426 37.8475,-80.5113 37.8449,-80.4767 37.8371,-80.4625 37.8294,-80.437 37.811,-80.4229 37.8033,-80.4121 37.8001,-80.4008 37.7984,-80.3897 37.7963,-80.3794 37.7919,-80.3739 37.7864,-80.3684 37.7791,-80.3636 37.7716,-80.3604 37.7658,-80.3494 37.7654,-80.34 37.7596,-80.3161 37.7625,-80.3002 37.7718,-80.2869 37.7825,-80.2709 37.7897,-80.2613 37.7897,-80.251 37.7878,-80.2406 37.7859,-80.2325 37.7861)
+LINESTRING(-81.6049 38.3774,-81.5787 38.3664,-81.5618 38.3569,-81.553 38.3463,-81.5484 38.3308,-81.5606 38.3011,-81.5932 38.2748,-81.6208 38.249,-81.6183 38.2209,-81.5948 38.1954,-81.5719 38.177,-81.5458 38.1643,-81.5125 38.1558,-81.4861 38.1523,-81.4352 38.1484,-81.4089 38.1449,-81.4012 38.1427,-81.3946 38.1392,-81.3899 38.1289,-81.3941 38.1207,-81.4066 38.1076,-81.4109 38.0994,-81.4068 38.0869,-81.3903 38.0838,-81.3718 38.0805,-81.3613 38.0675,-81.3577 38.0611,-81.3549 38.0538,-81.3529 38.0464,-81.3517 38.0395,-81.3516 38.0304,-81.3524 38.0199,-81.3522 38.0098,-81.3492 38.0014,-81.3305 37.9919,-81.3091 37.9858,-81.2858 37.9756,-81.2614 37.9539,-81.2618 37.9441,-81.2666 37.9377,-81.2733 37.9323,-81.2795 37.9256,-81.2777 37.9096,-81.2759 37.8876,-81.273 37.8672,-81.2679 37.8564,-81.243 37.8469,-81.2307 37.8421,-81.2186 37.8369,-81.2152 37.8235,-81.2166 37.8077,-81.2206 37.7919,-81.2252 37.7779,-81.2219 37.7675,-81.2166 37.7551,-81.2103 37.743,-81.2029 37.7333)
+LINESTRING(-109.816 38.9404,-109.839 38.9384,-109.843 38.9374,-109.847 38.9358,-109.851 38.9341,-109.855 38.9328,-109.877 38.9286,-109.896 38.9256,-109.915 38.9233,-109.937 38.9211,-109.954 38.9197,-109.969 38.9193,-109.984 38.9204,-110 38.9233,-110.008 38.9257,-110.014 38.929,-110.02 38.9325,-110.027 38.9357,-110.041 38.9413,-110.06 38.9497,-110.096 38.9653,-110.109 38.9701,-110.122 38.9728,-110.135 38.9747,-110.15 38.977,-110.167 38.9817,-110.182 38.9873,-110.197 38.9916,-110.214 38.9923,-110.251 38.9886)
+LINESTRING(-109.053 39.1905,-109.054 39.1906,-109.066 39.1916,-109.076 39.1883,-109.089 39.1884,-109.104 39.1886,-109.116 39.1855,-109.134 39.1691,-109.153 39.1449,-109.172 39.1191,-109.193 39.0984,-109.216 39.0825,-109.24 39.0666,-109.263 39.0504,-109.285 39.0338,-109.298 39.0214,-109.31 39.008,-109.323 38.9946,-109.338 38.9823,-109.352 38.9741,-109.366 38.9665,-109.38 38.9584,-109.392 38.9489,-109.404 38.937,-109.438 38.9347,-109.504 38.9351,-109.572 38.9369,-109.613 38.9394,-109.638 38.9436,-109.664 38.9492,-109.69 38.9553,-109.715 38.9613,-109.72 38.9618,-109.746 38.9581,-109.769 38.9535,-109.793 38.9476,-109.816 38.9404)
+LINESTRING(-104.982 39.82,-104.968 39.8126,-104.936 39.7967,-104.904 39.7829,-104.877 39.7767,-104.829 39.77,-104.801 39.7662,-104.775 39.7582,-104.732 39.7385,-104.703 39.7405,-104.673 39.7388,-104.643 39.7368,-104.614 39.7377,-104.605 39.7385,-104.597 39.7387,-104.589 39.7386,-104.58 39.7383,-104.539 39.7381,-104.497 39.7395,-104.455 39.7399,-104.414 39.7367,-104.405 39.7334,-104.396 39.7302,-104.365 39.7287,-104.336 39.7289,-104.307 39.7279,-104.275 39.7227,-104.264 39.7201,-104.252 39.7178,-104.24 39.7154,-104.228 39.7125,-104.204 39.7071,-104.177 39.7025,-104.15 39.6971,-104.128 39.6888,-104.076 39.651,-104.036 39.6041,-104.003 39.5534,-103.97 39.5045,-103.96 39.4937,-103.948 39.484,-103.936 39.4739,-103.926 39.4616,-103.91 39.4348,-103.895 39.4075,-103.88 39.3802,-103.864 39.3531,-103.855 39.3489,-103.845 39.3433,-103.838 39.3358,-103.835 39.3276,-103.831 39.3196,-103.824 39.3126,-103.806 39.3032,-103.778 39.2911,-103.748 39.2803,-103.727 39.275,-103.717 39.2741,-103.708 39.2733)
+LINESTRING(-76.3446 36.7551,-76.3471 36.7553,-76.3496 36.7556,-76.3522 36.7559,-76.3547 36.7561,-76.3588 36.7629,-76.3646 36.7677,-76.3705 36.7722,-76.3752 36.7779,-76.3779 36.7786,-76.3806 36.7792,-76.3833 36.7799,-76.386 36.7805,-76.3876 36.7824,-76.3892 36.7844,-76.3908 36.7863,-76.3924 36.7882,-76.3952 36.7869,-76.398 36.7856,-76.4252 36.7823,-76.4645 36.7714,-76.5032 36.7587,-76.5288 36.7498,-76.5442 36.7551,-76.5663 36.7612,-76.5886 36.7653,-76.6046 36.7643,-76.6102 36.7536,-76.6158 36.7428,-76.6214 36.7321,-76.627 36.7213)
+LINESTRING(-103.708 39.2733,-103.688 39.2707,-103.657 39.268,-103.627 39.2659,-103.609 39.2651,-103.602 39.2652,-103.595 39.2653,-103.588 39.2655,-103.581 39.2658)
+LINESTRING(-112.615 38.5765,-112.616 38.5923,-112.616 38.6082,-112.616 38.6241,-112.616 38.6399,-112.606 38.6514,-112.595 38.6614,-112.595 38.6748,-112.602 38.6871,-112.601 38.7062,-112.577 38.7398,-112.525 38.7907,-112.471 38.8392,-112.415 38.8871,-112.36 38.9356,-112.353 38.9444,-112.35 38.9526,-112.348 38.9611,-112.344 38.9705,-112.336 38.9814,-112.327 38.9916,-112.318 39.0019,-112.312 39.0132,-112.305 39.0283,-112.299 39.0434,-112.293 39.0585,-112.287 39.0735,-112.28 39.083,-112.271 39.0911,-112.261 39.0989,-112.253 39.1076,-112.247 39.1179,-112.244 39.1286,-112.24 39.1394,-112.235 39.1498,-112.2 39.1873,-112.156 39.2191,-112.114 39.2506,-112.083 39.2873,-112.075 39.3192,-112.075 39.3539,-112.072 39.3885,-112.055 39.4197,-112.036 39.4361,-112.013 39.4515,-111.991 39.4668,-111.974 39.4827,-111.963 39.5014,-111.955 39.5231,-111.948 39.5454,-111.94 39.5657,-111.934 39.5732,-111.924 39.5833,-111.918 39.5899,-111.912 39.5965,-111.909 39.6085,-111.906 39.6205,-111.903 39.6325,-111.9 39.6445,-111.887 39.6593,-111.864 39.6723,-111.839 39.6874,-111.819 39.7088,-111.821 39.7241,-111.828 39.7529,-111.837 39.7843,-111.84 39.8072,-111.834 39.8357,-111.822 39.8809,-111.811 39.9229,-111.806 39.9418,-111.798 39.9509,-111.79 39.9599,-111.782 39.969,-111.774 39.978)
+LINESTRING(-103.581 39.2658,-103.551 39.2677,-103.522 39.2702,-103.493 39.2726,-103.463 39.2744,-103.387 39.2774,-103.31 39.28,-103.233 39.2823,-103.157 39.2846,-103.141 39.2855,-103.124 39.2868,-103.107 39.2878,-103.091 39.2876,-103.07 39.2854,-103.048 39.282,-103.026 39.2782,-103.004 39.2747,-102.978 39.2757,-102.942 39.2819,-102.905 39.2889,-102.874 39.2923,-102.79 39.2929,-102.706 39.2936,-102.623 39.2938,-102.539 39.293,-102.467 39.2913,-102.395 39.2895,-102.323 39.2895,-102.252 39.2929,-102.247 39.2966,-102.242 39.3008,-102.238 39.3053,-102.235 39.31,-102.188 39.3156,-102.141 39.3211,-102.094 39.3263,-102.047 39.3311)
+LINESTRING(-94.563 39.1765,-94.5519 39.1761,-94.5406 39.1771,-94.5296 39.1792,-94.5192 39.1822,-94.5154 39.1858,-94.5138 39.1897,-94.5129 39.1937,-94.5113 39.1977,-94.5044 39.2063,-94.4963 39.2134,-94.4879 39.2202,-94.4801 39.2277,-94.4686 39.2423,-94.4582 39.2573,-94.4474 39.2724,-94.4347 39.2871,-94.4324 39.2893,-94.4301 39.2916,-94.4279 39.2941,-94.4261 39.2966,-94.4109 39.3221,-94.3958 39.3476,-94.3809 39.3733,-94.3663 39.399,-94.344 39.4372,-94.3209 39.4758,-94.2987 39.5146,-94.279 39.5535,-94.2648 39.5932,-94.2448 39.6589,-94.2273 39.7256,-94.2233 39.7521)
+LINESTRING(-94.563 39.1765,-94.5748 39.1878,-94.5954 39.1994,-94.6181 39.211,-94.6362 39.2224,-94.6405 39.2307,-94.6438 39.2387,-94.6469 39.2463,-94.6507 39.2534,-94.6646 39.2727,-94.6774 39.2905,-94.6864 39.3096,-94.6888 39.3326,-94.7095 39.3429,-94.7301 39.3533,-94.7542 39.3655,-94.7656 39.3716,-94.7849 39.4128,-94.7904 39.4698,-94.7889 39.5281,-94.7874 39.5734,-94.7888 39.6173,-94.7901 39.6612,-94.7919 39.705,-94.7931 39.7488)
+LINESTRING(-110.251 38.9886,-110.294 38.9628,-110.331 38.9424,-110.371 38.9279,-110.421 38.9197,-110.435 38.9206,-110.446 38.9245,-110.456 38.9293,-110.467 38.9334,-110.469 38.9393,-110.476 38.9396,-110.484 38.94,-110.494 38.9312,-110.503 38.9224,-110.512 38.9137,-110.521 38.905,-110.526 38.9053,-110.533 38.9048,-110.538 38.9033,-110.543 38.9003,-110.56 38.8999,-110.593 38.8969,-110.627 38.8927,-110.649 38.8893,-110.668 38.8731,-110.692 38.8678,-110.718 38.8685,-110.744 38.8703,-110.756 38.8695,-110.77 38.8671,-110.785 38.8641,-110.797 38.8614,-110.803 38.8636,-110.81 38.866,-110.817 38.8678,-110.823 38.8684,-110.831 38.8653,-110.836 38.8656,-110.841 38.8658,-110.849 38.8709,-110.857 38.8685,-110.863 38.8645,-110.867 38.8591,-110.87 38.853,-110.877 38.8528,-110.883 38.8526,-110.888 38.8477,-110.893 38.8468,-110.899 38.846,-110.904 38.8486,-110.91 38.8513,-110.915 38.8539,-110.921 38.8566,-110.927 38.8564,-110.932 38.8562,-110.939 38.8526,-110.944 38.8477,-110.97 38.8423,-110.983 38.8419,-110.995 38.8446,-111.019 38.8488,-111.04 38.848,-111.062 38.843,-111.084 38.8376,-111.106 38.8354,-111.112 38.8287,-111.118 38.8274,-111.124 38.8265,-111.13 38.826,-111.137 38.8257,-111.141 38.8218,-111.145 38.818,-111.167 38.8125,-111.194 38.81,-111.221 38.8097,-111.245 38.8105,-111.252 38.807,-111.258 38.8031,-111.264 38.7988,-111.27 38.7943,-111.277 38.7941,-111.285 38.7928,-111.292 38.7905,-111.297 38.7872,-111.3 38.7814,-111.311 38.7772,-111.323 38.7747,-111.336 38.7728,-111.347 38.7703,-111.378 38.761,-111.397 38.7562,-111.416 38.7546,-111.45 38.7545,-111.456 38.7575,-111.462 38.7603,-111.468 38.7626,-111.475 38.7641,-111.492 38.7819,-111.506 38.7926,-111.519 38.8,-111.529 38.8078,-111.533 38.8159,-111.534 38.8243,-111.533 38.8329,-111.534 38.8414,-111.537 38.8481,-111.542 38.8559,-111.547 38.8642,-111.551 38.8723,-111.561 38.878,-111.572 38.8806,-111.584 38.8817,-111.596 38.8828,-111.603 38.8852,-111.612 38.8894,-111.621 38.8936,-111.629 38.8979,-111.631 38.9023,-111.635 38.9056,-111.641 38.9025,-111.647 38.8993,-111.676 38.9039,-111.72 38.9135,-111.762 38.9244,-111.783 38.9327,-111.789 38.9335,-111.795 38.9342,-111.801 38.9346,-111.807 38.935,-111.812 38.9312,-111.817 38.9273,-111.826 38.927,-111.837 38.9292,-111.848 38.932,-111.859 38.9333,-111.866 38.9299,-111.876 38.9222,-111.885 38.9137,-111.892 38.9079,-111.89 38.9027,-111.889 38.8975,-111.913 38.8868,-111.944 38.88,-111.976 38.8721,-112.005 38.8577,-112.024 38.8439,-112.054 38.8209,-112.082 38.7986,-112.096 38.7869,-112.098 38.7793,-112.099 38.7715,-112.101 38.7637,-112.103 38.7561,-112.11 38.7448,-112.122 38.7279,-112.134 38.7108,-112.143 38.6994,-112.162 38.6747,-112.178 38.656,-112.189 38.6399,-112.197 38.6231,-112.199 38.6152,-112.201 38.6073,-112.203 38.5994,-112.205 38.5913,-112.211 38.5875,-112.218 38.5852,-112.225 38.5835,-112.231 38.5813,-112.257 38.5734,-112.276 38.5748,-112.297 38.579,-112.329 38.5794,-112.334 38.5785,-112.339 38.5772,-112.343 38.5762,-112.349 38.5762,-112.353 38.5733,-112.357 38.5705,-112.362 38.5676,-112.366 38.5648,-112.365 38.5585,-112.363 38.5521,-112.37 38.5487,-112.378 38.5453,-112.387 38.5509,-112.4 38.5532,-112.414 38.554,-112.426 38.5546,-112.433 38.5598,-112.436 38.5632,-112.437 38.5664,-112.457 38.5716,-112.479 38.5806,-112.498 38.5925,-112.507 38.606,-112.519 38.6065,-112.53 38.607,-112.547 38.6078,-112.557 38.6085,-112.571 38.6025,-112.585 38.5932,-112.6 38.5835,-112.615 38.5765)
+LINESTRING(-79.3755 37.8185,-79.4232 37.7616,-79.4307 37.7473,-79.4437 37.7269,-79.4583 37.7071,-79.4704 37.695,-79.4972 37.6792,-79.5256 37.6639,-79.5543 37.6488,-79.582 37.6333,-79.6059 37.6169,-79.6278 37.5989,-79.6494 37.5807,-79.6725 37.5638,-79.6801 37.5595,-79.6885 37.5557,-79.697 37.5519,-79.705 37.5479,-79.7188 37.5393,-79.7323 37.5297,-79.7458 37.5198,-79.7594 37.5106,-79.7851 37.4956,-79.8114 37.4811,-79.8376 37.4665,-79.8629 37.451,-79.8878 37.4309,-79.9091 37.409,-79.9319 37.3868,-79.9616 37.3659,-79.9831 37.3596)
+LINESTRING(-84.5238 38.1131,-84.5277 38.1296,-84.5313 38.1517,-84.5315 38.173,-84.5252 38.1869,-84.5286 38.2085,-84.5374 38.2288,-84.5474 38.249,-84.5545 38.2701,-84.5556 38.2825,-84.5552 38.2955,-84.555 38.3087,-84.5568 38.3214,-84.5611 38.3359,-84.5653 38.3504,-84.5692 38.3647,-84.5725 38.3799,-84.5762 38.3999,-84.576 38.4113,-84.5736 38.4218,-84.5706 38.4393,-84.571 38.442,-84.5722 38.4464,-84.5734 38.4501,-84.5745 38.4538,-84.5788 38.473,-84.5817 38.4901,-84.5841 38.5067,-84.5872 38.5242,-84.5897 38.5315,-84.5935 38.5389,-84.5971 38.5465,-84.5991 38.5546,-84.5971 38.5702,-84.5908 38.589,-84.5834 38.6079,-84.5782 38.6238,-84.5776 38.627,-84.577 38.6302,-84.5764 38.6333,-84.5757 38.6365,-84.5812 38.6482,-84.5875 38.6599,-84.5933 38.6714,-84.597 38.6829,-84.6014 38.7055,-84.6066 38.7347,-84.6099 38.7637,-84.6087 38.7859,-84.6052 38.7966,-84.6013 38.8069,-84.5981 38.8175,-84.5969 38.8289,-84.5999 38.8342,-84.6049 38.8397,-84.6109 38.8445,-84.6174 38.8476,-84.6176 38.8553,-84.6185 38.8631,-84.6198 38.8707,-84.6211 38.8784)
+LINESTRING(-94.563 39.1765,-94.5747 39.0969)
+LINESTRING(-88.5806 39.0957,-88.6558 39.0725,-88.731 39.0501,-88.8065 39.0279,-88.8819 39.0056,-88.9048 38.9981,-88.9274 38.99,-88.9501 38.9821,-88.9733 38.9752,-89.0024 38.9739,-89.0371 38.9789,-89.0753 38.9835,-89.1153 38.9811,-89.1474 38.9711,-89.1753 38.9576,-89.1995 38.9442,-89.2203 38.9347,-89.2301 38.9299,-89.2368 38.9239,-89.2425 38.9182,-89.2594 38.9117,-89.2709 38.9099,-89.2824 38.9078,-89.2931 38.9045,-89.3068 38.8975,-89.3222 38.8885,-89.3379 38.8802,-89.3529 38.8752,-89.3713 38.871,-89.3881 38.866,-89.4045 38.8605,-89.422 38.8548,-89.4464 38.8502,-89.4711 38.848,-89.4963 38.8433,-89.5225 38.8313,-89.5513 38.827,-89.5773 38.8137,-89.603 38.7987,-89.6311 38.7895,-89.6604 38.7883,-89.6979 38.7875,-89.732 38.7829,-89.7515 38.7703,-89.7655 38.7648,-89.7817 38.7639,-89.7983 38.765,-89.8134 38.7656,-89.8204 38.7643,-89.8276 38.7624,-89.8482 38.7585,-89.8675 38.7567,-89.8866 38.7555,-89.9066 38.7531)
+LINESTRING(-89.6454 39.7396,-89.6443 39.7271,-89.6433 39.7146,-89.6422 39.7022,-89.6411 39.6897,-89.643 39.6875,-89.645 39.6854,-89.6469 39.6832,-89.6489 39.6811,-89.6446 39.5708,-89.6431 39.4602,-89.6431 39.3495,-89.6432 39.2391,-89.6581 39.2106,-89.6921 39.1611,-89.7291 39.1126,-89.7532 39.0871,-89.7545 39.073,-89.7554 39.0583,-89.7553 39.0436,-89.7541 39.0295,-89.7524 39.0275,-89.7506 39.0255,-89.7504 39.0123,-89.7502 38.9992,-89.75 38.986,-89.7498 38.9729,-89.7516 38.9704,-89.7535 38.9679,-89.7556 38.9652,-89.7575 38.9634,-89.7967 38.9311,-89.8353 38.8933,-89.8683 38.8527,-89.8904 38.8116,-89.895 38.7971,-89.8989 38.7825,-89.9025 38.7677,-89.9066 38.7531)
+LINESTRING(-85.8502 38.3143,-85.8406 38.3137,-85.835 38.3137,-85.8253 38.3124,-85.8218 38.3113,-85.8193 38.3094,-85.8171 38.307,-85.8147 38.3045,-85.8092 38.2984,-85.8054 38.2923,-85.8017 38.2862,-85.7966 38.2798,-85.7964 38.2797)
+LINESTRING(-94.6077 39.0938,-94.605 39.094,-94.59 39.0952,-94.5747 39.0969)
+LINESTRING(-85.8448 38.9945,-85.8376 38.9838,-85.8347 38.9685,-85.836 38.9545,-85.8372 38.9404,-85.8343 38.9252,-85.8258 38.9141,-85.8139 38.9054,-85.8039 38.8966,-85.8013 38.8852,-85.8037 38.8725,-85.8057 38.8612,-85.8076 38.8499,-85.8101 38.8372,-85.8132 38.8238,-85.8164 38.8121,-85.8196 38.8004,-85.8227 38.787,-85.8227 38.7629,-85.8143 38.7419,-85.802 38.7211,-85.7901 38.6975,-85.7786 38.6532,-85.7776 38.613,-85.7798 38.5724,-85.7776 38.5265,-85.7721 38.4923,-85.7665 38.4623,-85.7608 38.4323,-85.7553 38.3981,-85.7528 38.3604,-85.7532 38.3214,-85.753 38.2824,-85.7514 38.2679)
+LINESTRING(-84.4553 38.0789,-84.4672 38.089,-84.487 38.1014,-84.508 38.111,-84.5238 38.1131)
+LINESTRING(-94.6075 39.0707,-94.6001 39.0763,-94.5914 39.0831,-94.583 39.09,-94.5747 39.0969)
+LINESTRING(-84.1488 38.0179,-84.1098 38.0248,-84.0848 38.0329,-84.0625 38.0443,-84.0317 38.0615,-84.0241 38.0618,-84.006 38.067,-83.9873 38.0725,-83.9685 38.0777,-83.95 38.0818,-83.9378 38.0829,-83.9247 38.0828,-83.9117 38.0829,-83.8997 38.0843,-83.8798 38.091,-83.8624 38.0988,-83.8424 38.1043,-83.815 38.104,-83.8082 38.1088,-83.8013 38.1136,-83.7945 38.1183,-83.7877 38.1231,-83.7564 38.1252,-83.7298 38.134,-83.7043 38.1446,-83.6764 38.1519,-83.6577 38.1543,-83.6391 38.1568,-83.6204 38.1592,-83.6018 38.1616,-83.5773 38.1681,-83.5608 38.1762,-83.5391 38.182,-83.4988 38.1813,-83.4659 38.1989,-83.4417 38.2277,-83.4227 38.257,-83.4053 38.2759,-83.385 38.2802,-83.3652 38.2816,-83.3461 38.2826,-83.3282 38.2859,-83.2992 38.2964,-83.2724 38.3077,-83.2445 38.3177,-83.2121 38.3241,-83.2026 38.3244,-83.1931 38.324,-83.1755 38.3246,-83.1499 38.3258,-83.1251 38.3269,-83.1099 38.3271,-83.0851 38.3254,-83.0544 38.3236,-83.0242 38.3231,-83.0008 38.325,-82.9924 38.3279,-82.9851 38.3321,-82.9782 38.3365,-82.9632 38.3415,-82.9549 38.3425,-82.9465 38.3435,-82.9385 38.345,-82.9138 38.3524,-82.8888 38.3605,-82.8633 38.3671,-82.8372 38.3696,-82.8084 38.3686,-82.7784 38.367,-82.7485 38.3659,-82.7199 38.3665,-82.6981 38.3696,-82.6768 38.3743,-82.6554 38.3781,-82.6478 38.3784)
+LINESTRING(-85.7488 38.2444,-85.7394 38.2496,-85.7299 38.2547,-85.7205 38.2598,-85.7111 38.265,-85.6946 38.2694,-85.67 38.2752,-85.654 38.2789,-85.6379 38.2825,-85.623 38.2899,-85.6073 38.2965,-85.5913 38.3024,-85.5753 38.3081,-85.5367 38.3227,-85.4988 38.3382,-85.4611 38.354,-85.423 38.3697,-85.4077 38.3749,-85.3916 38.3795,-85.3757 38.3844,-85.3608 38.3904,-85.3512 38.3962,-85.3418 38.4032,-85.3331 38.4109,-85.3255 38.4185,-85.2894 38.4567,-85.2531 38.4961,-85.2179 38.5361,-85.1851 38.5761,-85.1797 38.5857,-85.1759 38.5964,-85.1719 38.6075,-85.1661 38.6178,-85.1568 38.6256,-85.143 38.6331,-85.1282 38.6405,-85.1159 38.6475,-85.0934 38.6513,-85.0736 38.6548,-85.055 38.6586,-85.0357 38.6631,-84.9534 38.6871,-84.8796 38.7156,-84.8102 38.7502,-84.7408 38.7922,-84.7127 38.8135,-84.6827 38.8386,-84.6519 38.862,-84.6211 38.8784)
+LINESTRING(-85.7514 38.2679,-85.7494 38.2501,-85.7488 38.2444)
+LINESTRING(-85.7964 38.2797,-85.7867 38.2714,-85.7745 38.263,-85.7615 38.2542,-85.7513 38.2464,-85.7488 38.2444)
+LINESTRING(-84.4288 38.052,-84.4354 38.0587,-84.442 38.0655,-84.4486 38.0722,-84.4553 38.0789)
+LINESTRING(-84.5238 38.1131,-84.5449 38.1246,-84.5659 38.136,-84.587 38.1475,-84.6081 38.159,-84.6184 38.1589,-84.6286 38.1592,-84.6388 38.1595,-84.649 38.1598,-84.6751 38.1601,-84.7019 38.1608,-84.7286 38.1624,-84.7543 38.165,-84.7685 38.1676,-84.783 38.1707,-84.7976 38.1732,-84.8122 38.1735,-84.8259 38.1713,-84.8386 38.1678,-84.8511 38.164,-84.8638 38.1611,-84.8948 38.1563,-84.9271 38.152,-84.9595 38.1484,-84.9909 38.1458,-85.04 38.1493,-85.1129 38.1601,-85.187 38.1733,-85.2395 38.1837,-85.3204 38.2003,-85.3953 38.2124,-85.4713 38.22,-85.5555 38.2225,-85.5724 38.2232,-85.5905 38.2254,-85.6082 38.2294,-85.6237 38.2356,-85.6366 38.234,-85.6494 38.2344,-85.6622 38.2349,-85.6746 38.2338,-85.6911 38.2354,-85.7126 38.2354,-85.7336 38.2373,-85.7488 38.2444)
+LINESTRING(-102.047 39.3311,-102.046 39.3311,-101.966 39.3293,-101.885 39.3285,-101.805 39.3284,-101.725 39.3286,-101.663 39.329,-101.6 39.3296,-101.538 39.3303,-101.476 39.3307,-101.454 39.3308,-101.432 39.331,-101.405 39.3313,-101.392 39.3317,-101.372 39.3387,-101.353 39.3486,-101.333 39.3587,-101.313 39.3658,-101.263 39.3687,-101.182 39.3687,-101.096 39.3673,-101.034 39.3663,-101.021 39.3578,-101.01 39.3437,-101 39.3289,-100.988 39.3182,-100.985 39.3168,-100.98 39.3149,-100.975 39.3131,-100.973 39.3117,-100.947 39.282,-100.921 39.2522,-100.896 39.2225,-100.87 39.1927)
+LINESTRING(-92.2947 38.961,-92.2637 38.9591,-92.2326 38.9579,-92.2015 38.9569,-92.1705 38.9553,-92.1433 38.953,-92.1163 38.9504,-92.0892 38.948,-92.0617 38.9468,-92.0419 38.947,-92.0216 38.9477,-92.0014 38.9481,-91.9818 38.9474,-91.9681 38.9456,-91.9546 38.943,-91.9411 38.9403,-91.9274 38.9386,-91.9022 38.9377,-91.8628 38.937,-91.8253 38.9363,-91.8056 38.9352,-91.7811 38.9278,-91.7586 38.919,-91.7351 38.9113,-91.7077 38.907,-91.6892 38.9056,-91.671 38.904,-91.6528 38.9022,-91.6345 38.9006,-91.5994 38.9,-91.5636 38.9016,-91.5281 38.9025,-91.4937 38.9,-91.4677 38.8937,-91.4421 38.8847,-91.4166 38.8755,-91.3908 38.8683,-91.3769 38.8671,-91.3628 38.8678,-91.3489 38.8685,-91.3352 38.8673,-91.3214 38.8637,-91.3073 38.8592,-91.2931 38.855,-91.2793 38.8523,-91.273 38.852,-91.2662 38.8523,-91.2595 38.8525,-91.2533 38.852,-91.2352 38.8469,-91.2173 38.8396,-91.1993 38.8323,-91.1811 38.8273,-91.1628 38.8249,-91.1384 38.8228,-91.1144 38.8216,-91.0973 38.8223,-91.0799 38.8271,-91.066 38.8332,-91.0495 38.8375,-91.0244 38.8368,-90.9742 38.8279,-90.9249 38.8168,-90.8753 38.8063,-90.8243 38.7994)
+LINESTRING(-84.1488 38.0179,-84.188 38.0094,-84.2098 38.0119,-84.2305 38.0217,-84.266 38.035,-84.2753 38.0367,-84.2863 38.0377,-84.2976 38.0386,-84.308 38.04,-84.339 38.0492,-84.3672 38.0588,-84.3959 38.062,-84.4288 38.052)
+LINESTRING(-93.2001 38.9651,-93.2657 38.9673,-93.3313 38.9695,-93.3969 38.9719,-93.4624 38.9751,-93.4733 38.9764,-93.4833 38.9787,-93.493 38.9812,-93.5034 38.9834,-93.508 38.9838,-93.5126 38.9842,-93.5173 38.9847,-93.5219 38.9851,-93.5422 38.9873,-93.5697 38.9905,-93.5964 38.9936,-93.6142 38.9952,-93.6204 38.993,-93.6266 38.9909,-93.6339 38.9886,-93.6378 38.9877,-93.6541 38.9888,-93.6705 38.99,-93.6869 38.9913,-93.703 38.993,-93.7118 38.9947,-93.7204 38.9972,-93.7292 38.9995,-93.7387 39.0008,-93.863 39.0076,-93.9875 39.0142,-94.112 39.0198,-94.2366 39.0234,-94.254 39.0257,-94.2701 39.0306,-94.2861 39.0359,-94.3027 39.0397,-94.3615 39.0432,-94.421 39.044,-94.4793 39.0495,-94.5346 39.0669,-94.5445 39.0723,-94.5572 39.0803,-94.5686 39.0891,-94.5747 39.0969)
+LINESTRING(-92.2947 38.961,-92.3007 38.9631,-92.3084 38.965,-92.3162 38.9665,-92.3225 38.9669,-92.3277 38.966,-92.333 38.9639,-92.3383 38.9619,-92.3432 38.9606,-92.385 38.9594,-92.43 38.962,-92.4751 38.9662,-92.5172 38.9698,-92.5366 38.965,-92.5527 38.9525,-92.5687 38.9396,-92.5876 38.9335,-92.6772 38.9322,-92.7668 38.9308,-92.8564 38.9296,-92.946 38.9282,-92.9694 38.9303,-92.9873 38.9355,-93.0034 38.9413,-93.0213 38.9451,-93.0477 38.947,-93.0745 38.9478,-93.1012 38.9487,-93.1278 38.9505,-93.1463 38.9535,-93.1643 38.9576,-93.1821 38.9619,-93.2001 38.9651)
+LINESTRING(-95.7222 39.0265,-95.6975 39.0266,-95.6729 39.0267,-95.6482 39.0268,-95.6236 39.0269)
+LINESTRING(-77.5537 36.7036,-77.539 36.7144,-77.5165 36.724,-77.4927 36.7322,-77.4743 36.7386,-77.4537 36.7513,-77.4471 36.7654,-77.4459 36.7816,-77.4413 36.8008,-77.4297 36.8179,-77.4139 36.8339,-77.3988 36.8494,-77.3895 36.8652,-77.387 36.8916,-77.3846 36.9181,-77.3821 36.9445,-77.3797 36.971,-77.38 36.983,-77.381 36.995,-77.3814 37.007,-77.38 37.019,-77.3778 37.0265,-77.3749 37.0339,-77.372 37.0412,-77.37 37.0483,-77.3669 37.0757,-77.3664 37.0999,-77.3647 37.1244,-77.3578 37.1524)
+LINESTRING(-95.2328 38.9937,-95.2204 38.9939,-95.2081 38.9942,-95.1958 38.9946,-95.1835 38.9955,-95.1803 38.9981,-95.1768 39.0003,-95.1521 39.0125,-95.1272 39.0259,-95.1022 39.0389,-95.0773 39.0498,-95.0251 39.0657,-94.9502 39.0842,-94.8735 39.0995,-94.816 39.1058,-94.783 39.1065,-94.7468 39.1076,-94.7106 39.1074,-94.6778 39.1044,-94.6663 39.1015,-94.6548 39.0976,-94.6431 39.0943,-94.6309 39.0929,-94.6188 39.0932,-94.6077 39.0938)
+LINESTRING(-95.6236 39.0269,-95.6004 39.0326,-95.5753 39.0313,-95.5507 39.0255,-95.5291 39.0174,-95.4909 39.0175,-95.4522 39.0116,-95.4135 39.0035,-95.3754 38.9973,-95.3573 38.9961,-95.3392 38.9959,-95.3211 38.9962,-95.3029 38.9965,-95.2915 38.996,-95.2797 38.9945,-95.2681 38.992,-95.2573 38.9889,-95.2511 38.9901,-95.245 38.9913,-95.2389 38.9925,-95.2328 38.9937)
+LINESTRING(-89.9066 38.7531,-89.9077 38.7451,-89.909 38.7354,-89.9112 38.726,-89.9152 38.7191,-89.9418 38.7125,-89.9689 38.7065,-89.9931 38.6971,-90.0111 38.6802,-90.0135 38.6795,-90.0158 38.6788,-90.052 38.6672,-90.086 38.66,-90.1174 38.6495,-90.1458 38.6284)
+LINESTRING(-90.1809 38.6264,-90.1458 38.6284)
+LINESTRING(-90.1962 38.6256,-90.1809 38.6264)
+LINESTRING(-90.1962 38.6256,-90.195 38.6318,-90.1969 38.6385,-90.2004 38.645,-90.2038 38.6505,-90.2083 38.6583,-90.2136 38.6669,-90.2195 38.6751,-90.2257 38.6819,-90.2413 38.6891,-90.271 38.7001,-90.3012 38.7106,-90.3184 38.7162,-90.3238 38.7171,-90.3295 38.7174,-90.3351 38.718,-90.3401 38.7198,-90.3707 38.7302,-90.392 38.735,-90.4135 38.7376,-90.4451 38.7415,-90.4636 38.7486,-90.4939 38.7627,-90.5265 38.7776,-90.5519 38.7868,-90.6191 38.7959,-90.6878 38.7972,-90.7567 38.7965,-90.8243 38.7994)
+LINESTRING(-90.6984 38.7106,-90.6923 38.7084,-90.6861 38.7063,-90.68 38.7042,-90.6738 38.702,-90.6701 38.6948,-90.6663 38.6876,-90.6629 38.6802,-90.6598 38.6728,-90.656 38.6711,-90.6523 38.6693,-90.6485 38.6676,-90.6447 38.6658,-90.6164 38.6675,-90.5965 38.6628,-90.5791 38.655,-90.5585 38.6477,-90.5135 38.6403,-90.4516 38.6343,-90.39 38.6312,-90.3462 38.6328,-90.3119 38.6338,-90.2774 38.6328,-90.2429 38.6307,-90.2085 38.6281,-90.2054 38.6275,-90.2023 38.6269,-90.1993 38.6262,-90.1962 38.6256)
+LINESTRING(-78.0906 36.7569,-78.0737 36.7692,-78.0479 36.7764,-78.0214 36.782,-78.0024 36.7896,-77.9838 36.8045,-77.9643 36.8194,-77.9433 36.8326,-77.9199 36.8428,-77.9075 36.8424,-77.8951 36.8417,-77.8829 36.8419,-77.871 36.8444,-77.8612 36.8487,-77.8525 36.8542,-77.8368 36.8667,-77.821 36.8802,-77.8049 36.8933,-77.7885 36.9044,-77.7736 36.9118,-77.7575 36.9184,-77.7422 36.9256,-77.7291 36.9349,-77.7151 36.9501,-77.7025 36.9662,-77.6896 36.9821,-77.6746 36.9966,-77.6453 37.0188,-77.6149 37.0405,-77.5862 37.0634,-77.5616 37.0888,-77.5472 37.107,-77.5345 37.1246,-77.523 37.1429,-77.5129 37.1628,-77.5092 37.1714,-77.5068 37.1767,-77.4743 37.2,-77.4499 37.2026,-77.4267 37.2036)
+LINESTRING(-84.1488 38.0179,-84.1207 37.9963,-84.0914 37.9866,-84.0627 37.98,-84.0365 37.9677,-84.0162 37.9522,-83.9908 37.9319,-83.9671 37.9117,-83.9522 37.8964,-83.9466 37.8862,-83.9431 37.8759,-83.9395 37.8656,-83.9338 37.8558,-83.9016 37.838,-83.8565 37.8351,-83.8095 37.8405,-83.7719 37.8477,-83.7689 37.8467,-83.7658 37.8456,-83.7628 37.8445,-83.7598 37.8435,-83.7576 37.8404,-83.7555 37.8373,-83.7534 37.8342,-83.7513 37.8311,-83.7439 37.829,-83.7359 37.8273,-83.7278 37.8262,-83.72 37.8257,-83.7082 37.8173,-83.6901 37.8099,-83.6705 37.8039,-83.6542 37.7998,-83.6505 37.7963,-83.6468 37.7929,-83.6465 37.7907,-83.6463 37.7885,-83.6461 37.7864,-83.6458 37.7842,-83.6233 37.7723,-83.6124 37.7613,-83.5946 37.7514,-83.5514 37.7429,-83.547 37.7444,-83.5426 37.7459,-83.5382 37.7474,-83.5338 37.7489,-83.5211 37.7467,-83.5058 37.7444,-83.4906 37.7439,-83.4785 37.7471,-83.4724 37.7429,-83.4662 37.7387,-83.4601 37.7346,-83.454 37.7304,-83.4362 37.7365,-83.4202 37.7413,-83.4035 37.7434,-83.3832 37.7414,-83.3772 37.7464,-83.3713 37.7514,-83.3653 37.7564,-83.3594 37.7614,-83.3128 37.7583,-83.2687 37.7455,-83.2226 37.7374,-83.1699 37.7484,-83.1569 37.7453,-83.1356 37.7396,-83.1154 37.7337,-83.1053 37.7299,-83.0988 37.7344,-83.0925 37.7397,-83.0869 37.7454,-83.0825 37.7512)
+LINESTRING(-78.0906 36.7569,-78.0978 36.7466,-78.105 36.7362,-78.1119 36.7257,-78.1183 36.715)
+LINESTRING(-81.1102 37.2786,-81.1048 37.2836,-81.0852 37.2985,-81.0716 37.3061,-81.0695 37.308,-81.0673 37.31,-81.0652 37.3119,-81.063 37.3139,-81.062 37.3243,-81.0613 37.3354,-81.0597 37.3462,-81.0561 37.3561,-81.0533 37.3602,-81.0503 37.364,-81.0477 37.368,-81.0465 37.3729,-81.0496 37.3806,-81.0568 37.3947,-81.0644 37.4103,-81.0686 37.4226,-81.0691 37.4345,-81.0682 37.4465,-81.068 37.4584,-81.0705 37.4698,-81.0797 37.4812,-81.0939 37.4905,-81.1084 37.4999,-81.1187 37.5115,-81.1182 37.5174,-81.116 37.5281,-81.1136 37.54,-81.1128 37.5492,-81.1161 37.5621,-81.1216 37.5744,-81.1264 37.587,-81.1281 37.6007,-81.1258 37.6112,-81.1213 37.6215,-81.1169 37.6318,-81.1148 37.6421,-81.1205 37.6634,-81.1353 37.6853,-81.1552 37.7051,-81.1759 37.7199,-81.1794 37.7205,-81.1829 37.721,-81.1864 37.7215,-81.1899 37.7221,-81.1933 37.7248,-81.1966 37.7275,-81.1998 37.7304,-81.2029 37.7333)
+LINESTRING(-77.5802 36.5457,-77.5802 36.5459,-77.5804 36.5493,-77.5815 36.5538,-77.5827 36.5584,-77.5831 36.5621,-77.5806 36.5985,-77.5755 36.634,-77.5669 36.669,-77.5537 36.7036)
+LINESTRING(-81.1308 37.2554,-81.1226 37.2672,-81.1102 37.2786)
+LINESTRING(-105.04 39.7197,-105.029 39.7184,-105.018 39.7172,-105.008 39.7159,-104.997 39.7146,-104.972 39.7042,-104.947 39.6888,-104.925 39.6704,-104.912 39.6508,-104.894 39.6116,-104.884 39.5913,-104.879 39.5672,-104.877 39.5164,-104.877 39.5134,-104.877 39.5103,-104.877 39.5072,-104.877 39.5042,-104.878 39.4882,-104.88 39.4712,-104.881 39.4543,-104.881 39.4385,-104.877 39.4251,-104.869 39.4084,-104.862 39.3905,-104.857 39.3734,-104.864 39.3622,-104.87 39.3464,-104.876 39.3302,-104.88 39.3177,-104.891 39.291,-104.896 39.2795,-104.892 39.2676,-104.878 39.2395,-104.875 39.2326,-104.874 39.2255,-104.872 39.2185,-104.868 39.2117,-104.863 39.2056,-104.858 39.2,-104.855 39.194,-104.853 39.1866,-104.854 39.1623,-104.859 39.1394,-104.862 39.1159,-104.86 39.0902,-104.848 39.0599,-104.831 39.0304,-104.815 39.0011,-104.808 38.9714,-104.81 38.9394,-104.819 38.9168,-104.829 38.8998,-104.835 38.8846,-104.836 38.8707,-104.835 38.8565,-104.834 38.8422,-104.834 38.8279)
+LINESTRING(-87.4455 38.1769,-87.4091 38.1844,-87.3725 38.189,-87.3356 38.1921,-87.2982 38.1947,-87.2863 38.1961,-87.2738 38.1979,-87.2615 38.1996,-87.2502 38.2005,-87.2301 38.2,-87.2098 38.1986,-87.1895 38.197,-87.1694 38.1959,-87.1415 38.1963,-87.1135 38.1981,-87.0857 38.1998,-87.0581 38.2001,-87.0383 38.199,-87.0183 38.1973,-86.9983 38.1957,-86.9785 38.195,-86.9645 38.1959,-86.9379 38.1978,-86.9117 38.2001,-86.8989 38.2016,-86.8945 38.2057,-86.8901 38.2098,-86.8698 38.2122,-86.8555 38.2094,-86.8424 38.2041,-86.8256 38.1991,-86.8143 38.2035,-86.8021 38.205,-86.7897 38.2057,-86.7777 38.2074,-86.7657 38.2112,-86.754 38.2159,-86.7418 38.2206,-86.7285 38.2243,-86.7122 38.2277,-86.6949 38.2311,-86.6775 38.2341,-86.6612 38.2362,-86.6369 38.2373,-86.6118 38.237,-86.5864 38.2366,-86.5616 38.2372,-86.5242 38.2403,-86.4871 38.2439,-86.4498 38.2469,-86.4121 38.248,-86.4042 38.2444,-86.3963 38.2408,-86.3884 38.2371,-86.3805 38.2335,-86.3434 38.2449,-86.3105 38.2517,-86.2771 38.2511,-86.2387 38.2405,-86.2164 38.2468,-86.2019 38.2468,-86.1893 38.2441,-86.1725 38.2422,-86.1407 38.2427,-86.1001 38.2451,-86.0594 38.2491,-86.0277 38.2544,-86.0013 38.2613,-85.9749 38.2681,-85.9433 38.2767,-85.9255 38.2821,-85.9139 38.2864,-85.9001 38.2908,-85.8859 38.2947,-85.8729 38.2975,-85.8672 38.3017,-85.8615 38.3059,-85.8559 38.3101,-85.8502 38.3143)
+LINESTRING(-88.5806 39.0957,-88.5815 39.0831,-88.5836 39.0714,-88.5862 39.0598,-88.5889 39.0478,-88.5897 39.0313,-88.589 39.0158,-88.5918 39.0014,-88.6032 38.988,-88.6084 38.9848,-88.6139 38.9818,-88.6193 38.9787,-88.6241 38.975,-88.6616 38.9418,-88.7 38.9102,-88.7391 38.8793,-88.7787 38.8478,-88.7937 38.8347,-88.8082 38.8212,-88.8231 38.8078,-88.8394 38.7951,-88.8518 38.7875,-88.865 38.7808,-88.878 38.7738,-88.8898 38.7654,-88.8942 38.7607,-88.8981 38.7551,-88.9019 38.7493,-88.9059 38.7442,-88.9141 38.7286,-88.9156 38.7123,-88.9174 38.6962,-88.9268 38.6814,-88.9292 38.6787,-88.9316 38.676,-88.9311 38.596,-88.9203 38.4944,-88.9115 38.398,-88.9173 38.3338)
+LINESTRING(-90.1458 38.6284,-90.1278 38.6267,-90.1066 38.6243,-90.0848 38.6214,-90.0654 38.6183,-90.0524 38.6144,-90.0387 38.6084,-90.0262 38.6028,-90.0164 38.6,-89.9914 38.5986,-89.9673 38.5968,-89.9456 38.5911,-89.9274 38.5776,-89.9016 38.572,-89.8786 38.568,-89.8537 38.5631,-89.8219 38.5548,-89.8144 38.5526,-89.8104 38.5516,-89.8066 38.5508,-89.7902 38.5492,-89.7725 38.5482,-89.7551 38.5465,-89.7395 38.5428,-89.7331 38.5392,-89.7265 38.5338,-89.72 38.5282,-89.7136 38.5238,-89.6984 38.5178,-89.6868 38.5166,-89.6755 38.5167,-89.6612 38.5148,-89.6483 38.5102,-89.6364 38.5039,-89.6261 38.498,-89.6182 38.4945,-89.6045 38.4909,-89.5976 38.4893,-89.5906 38.4881,-89.5862 38.4819,-89.5792 38.4726,-89.572 38.4639,-89.567 38.4592,-89.5536 38.4518,-89.5397 38.4438,-89.5251 38.4368,-89.51 38.4324,-89.5004 38.4316,-89.4806 38.4315,-89.4713 38.4306,-89.463 38.4284,-89.4553 38.425,-89.448 38.4212,-89.4407 38.4175,-89.4123 38.4055,-89.3851 38.3976,-89.3565 38.3933,-89.3239 38.3924,-89.3184 38.3919,-89.3124 38.3906,-89.306 38.3894,-89.2998 38.3892,-89.2963 38.39,-89.2925 38.3913,-89.2887 38.3927,-89.2851 38.3937,-89.2547 38.3952,-89.2104 38.3937,-89.1639 38.391,-89.1266 38.3893,-89.0917 38.3694,-89.067 38.3639,-89.041 38.3636,-89.0018 38.3589,-88.9844 38.3539,-88.9598 38.3457,-88.9351 38.3378,-88.9173 38.3338)
+LINESTRING(-97.6418 38.8778,-97.6053 38.8835,-97.5786 38.8977,-97.5537 38.9141,-97.5232 38.9266,-97.5001 38.9298,-97.4743 38.9303,-97.4482 38.9297,-97.4244 38.9294,-97.4136 38.9323,-97.4009 38.9387,-97.3882 38.9462,-97.3779 38.9521,-97.353 38.9514,-97.3271 38.9506,-97.3013 38.9504,-97.2767 38.9516,-97.2542 38.9559,-97.2022 38.9706,-97.1808 38.9746,-97.1694 38.9744,-97.1531 38.9735,-97.1371 38.9729,-97.1264 38.9736,-97.0969 38.9836,-97.0684 38.9955,-97.0395 39.0073,-97.0088 39.0166,-96.9766 39.0171,-96.9355 39.0106,-96.8936 39.0032,-96.8588 39.0009,-96.8481 39.0031,-96.8375 39.0075,-96.8278 39.0131,-96.8199 39.0189,-96.8038 39.0241,-96.7791 39.0265,-96.7542 39.029,-96.7376 39.0345,-96.7279 39.041,-96.7115 39.0484,-96.6882 39.0541,-96.6575 39.0559,-96.1772 39.0412,-95.8742 39.0312,-95.7222 39.0265)
+LINESTRING(-97.6692 39.1186,-97.6647 39.1154,-97.6601 39.1122,-97.6555 39.109,-97.651 39.1058,-97.6506 39.0924,-97.6507 39.079,-97.6509 39.0657,-97.6504 39.0523,-97.6487 39.0435,-97.6455 39.0346,-97.6422 39.0257,-97.6402 39.0169,-97.639 39.0023,-97.6385 38.9875,-97.6382 38.9727,-97.6379 38.958,-97.6385 38.9384,-97.6407 38.9207,-97.6425 38.9016,-97.6418 38.8778)
+LINESTRING(-87.5497 38.1706,-87.528 38.1666,-87.4992 38.1692,-87.4696 38.1741,-87.4455 38.1769)
+LINESTRING(-87.9829 38.223,-87.9771 38.2191,-87.962 38.2074,-87.9465 38.1992,-87.92 38.1948,-87.8919 38.1945,-87.8638 38.1945,-87.8369 38.1909,-87.8213 38.1854,-87.8085 38.1798,-87.7941 38.1766,-87.774 38.1785,-87.7497 38.165,-87.7186 38.1626,-87.686 38.1656,-87.6573 38.1687,-87.6306 38.1698,-87.6035 38.1702,-87.5765 38.1703,-87.5497 38.1706)
+LINESTRING(-121.942 37.3151,-121.942 37.3061,-121.941 37.2971,-121.939 37.2881,-121.939 37.2788,-121.953 37.2631,-121.965 37.2458,-121.977 37.2281,-121.988 37.2112,-121.994 37.19,-121.99 37.1656,-121.982 37.1414,-121.973 37.1208,-121.974 37.1141,-121.976 37.1012,-121.977 37.0794,-121.993 37.0667,-122.007 37.0526,-122.018 37.0372,-122.027 37.0208,-122.022 37.0105,-122.018 37.0027,-122.017 36.9947,-122.018 36.9838,-121.981 36.9832,-121.949 36.9859,-121.917 36.9878,-121.881 36.9846,-121.857 36.9757,-121.839 36.9614,-121.825 36.9438,-121.808 36.9249,-121.795 36.9109,-121.784 36.8982,-121.776 36.8845,-121.769 36.8676,-121.768 36.8459,-121.777 36.8075,-121.775 36.7857,-121.771 36.7747,-121.76 36.7563,-121.755 36.7453,-121.752 36.7288,-121.753 36.715,-121.759 36.7014,-121.768 36.6858,-121.777 36.6657,-121.782 36.6472,-121.788 36.6286,-121.798 36.6084,-121.802 36.6034,-121.809 36.5991,-121.817 36.5955,-121.824 36.5927,-121.841 36.586,-121.856 36.5809,-121.871 36.5766,-121.889 36.5725)
+LINESTRING(-100.87 39.1927,-100.852 39.1724,-100.835 39.1521,-100.817 39.1318,-100.8 39.1115,-100.723 39.1109,-100.646 39.1115,-100.57 39.1114,-100.493 39.1086,-100.474 39.1061,-100.454 39.1019,-100.434 39.0979,-100.414 39.0958,-100.395 39.0956,-100.374 39.096,-100.354 39.0965,-100.334 39.097,-100.299 39.0858,-100.245 39.0607,-100.192 39.0354,-100.161 39.0237,-100.102 39.0241,-100.042 39.0255,-99.9818 39.0252,-99.9238 39.0203,-99.8999 39.0157,-99.8759 39.0095,-99.8518 39.003,-99.828 38.9974,-99.7897 38.9909,-99.751 38.9858,-99.7126 38.9807,-99.6749 38.9744,-99.6562 38.9693,-99.6378 38.9622,-99.6196 38.9546,-99.6017 38.9479,-99.5884 38.9468,-99.5671 38.9471,-99.5444 38.9476,-99.5271 38.9472,-99.4911 38.9395,-99.4558 38.9282,-99.4199 38.9196,-99.3818 38.9198,-99.3655 38.9135,-99.3487 38.9073,-99.3322 38.901,-99.3165 38.8944,-99.3049 38.889,-99.2917 38.8831,-99.2779 38.8783,-99.2649 38.8761,-99.2325 38.8766,-99.1989 38.8786,-99.1653 38.8798,-99.1331 38.8778,-99.1137 38.8736,-99.0962 38.8682,-99.0784 38.8635,-99.0579 38.8614,-99.0071 38.8617,-98.9563 38.863,-98.9054 38.8641,-98.8546 38.8639,-98.8335 38.8625)
+LINESTRING(-98.8335 38.8625,-98.8124 38.86,-98.7912 38.8574,-98.7701 38.856,-98.7338 38.8561,-98.6974 38.8574,-98.6611 38.8586,-98.6247 38.8585,-98.5898 38.8566,-98.5557 38.8538,-98.5214 38.8505,-98.487 38.8472,-98.4485 38.8453,-98.4085 38.8458,-98.3685 38.8471,-98.3299 38.848,-98.29 38.8478,-98.2501 38.8471,-98.2103 38.8463,-98.1704 38.8459,-98.1569 38.8481,-98.1345 38.8534,-98.112 38.8599,-98.0982 38.8656,-98.0926 38.8658,-98.087 38.866,-98.0814 38.8662,-98.0757 38.8664,-98.071 38.8691,-98.0662 38.8718,-98.0471 38.8734,-98.0285 38.8757,-98.0098 38.8778,-97.9906 38.8788,-97.9033 38.879,-97.8162 38.8787,-97.729 38.8783,-97.6418 38.8778)
+LINESTRING(-88.8938 38.2657,-88.8757 38.2678,-88.8653 38.2701,-88.8549 38.2724,-88.837 38.2747,-88.799 38.2774,-88.7579 38.2784,-88.7167 38.277,-88.6788 38.2724,-88.6746 38.2712,-88.6696 38.2692,-88.6646 38.2674,-88.6607 38.2664,-88.5668 38.2666,-88.4292 38.2698,-88.2974 38.2662,-88.2214 38.2463,-88.1686 38.2414,-88.1165 38.2385,-88.0642 38.2367,-88.0107 38.2349,-87.9929 38.2298,-87.9829 38.223)
+LINESTRING(-88.8938 38.2657,-88.9028 38.2806,-88.9116 38.2994,-88.9173 38.3183,-88.9173 38.3338)
+LINESTRING(-78.1183 36.715,-78.1289 36.6957,-78.1404 36.677,-78.1508 36.6579,-78.1585 36.6379,-78.1643 36.623,-78.1719 36.6094,-78.1805 36.5961,-78.189 36.5821,-78.2009 36.5608,-78.2104 36.5454)
+LINESTRING(-94.357 38.6127,-94.3586 38.6226,-94.3602 38.6325,-94.3614 38.6423,-94.3627 38.6521,-94.3717 38.6557,-94.3809 38.6587,-94.3901 38.6617,-94.399 38.6651,-94.408 38.6704,-94.4157 38.677,-94.4227 38.6841,-94.4298 38.6909,-94.4398 38.6991,-94.4508 38.7078,-94.4609 38.7169,-94.4685 38.7266,-94.4807 38.754,-94.4898 38.7794,-94.5027 38.8032,-94.5266 38.8254,-94.5318 38.8481,-94.5307 38.8764,-94.5285 38.9059,-94.5308 38.9323,-94.5341 38.9332,-94.5374 38.934,-94.5402 38.9369,-94.5438 38.9396,-94.5478 38.9418,-94.5518 38.9438,-94.5541 38.9539,-94.5593 38.9642,-94.5648 38.9748,-94.5678 38.9857,-94.5672 38.9983,-94.5643 39.0106,-94.561 39.0228,-94.5592 39.0352,-94.5616 39.0501,-94.5675 39.066,-94.5731 39.0819,-94.5747 39.0969)
+LINESTRING(-80.9177 36.948,-80.8673 36.9543,-80.8446 36.9692,-80.8342 36.9848,-80.8206 36.9932,-80.7629 37.0062,-80.7362 37.0262,-80.7187 37.0519,-80.6884 37.0821,-80.6731 37.0854,-80.6428 37.0895,-80.6099 37.0937,-80.5871 37.0971,-80.5407 37.102,-80.4812 37.1053,-80.4229 37.1116,-80.3805 37.1259,-80.3763 37.1315,-80.372 37.1371,-80.3677 37.1427,-80.3634 37.1483,-80.3396 37.1668,-80.314 37.1913,-80.293 37.2182,-80.2825 37.2441,-80.273 37.2506,-80.2628 37.2562,-80.2526 37.2617,-80.2429 37.2676,-80.199 37.2935,-80.1566 37.3125,-80.1121 37.3295,-80.0618 37.3498,-80.0382 37.3553,-80.0103 37.3573,-79.9831 37.3596)
+LINESTRING(-95.2674 38.5751,-95.2476 38.5834,-95.2376 38.5995,-95.2337 38.619,-95.2322 38.6372,-95.2224 38.6393,-95.2131 38.6421,-95.1799 38.6598,-95.1454 38.6764,-95.1099 38.6918,-95.0739 38.7059,-95.0624 38.709,-95.0518 38.7121,-95.0407 38.7193,-95.0301 38.7274,-95.0196 38.7354,-95.0085 38.7426,-94.9944 38.749,-94.9788 38.7545,-94.9629 38.7602,-94.9482 38.7672,-94.9123 38.789,-94.8747 38.8128,-94.838 38.8376,-94.8052 38.8624,-94.7992 38.8689,-94.795 38.876,-94.7913 38.8833,-94.7866 38.8904,-94.7645 38.9168,-94.7418 38.9428,-94.7184 38.9685,-94.6943 38.9937,-94.6913 39.0226,-94.6807 39.0341,-94.6631 39.0391,-94.6386 39.0483,-94.6301 39.0541,-94.6151 39.0651,-94.6075 39.0707)
+LINESTRING(-81.1308 37.2554,-81.1205 37.2444,-81.1143 37.2426,-81.1081 37.2405,-81.1021 37.238,-81.0965 37.2351,-81.0942 37.231,-81.0922 37.2267,-81.0907 37.2222,-81.0902 37.2177,-81.0986 37.2111,-81.1066 37.2041,-81.1222 37.19,-81.1306 37.1767,-81.1311 37.1627,-81.1289 37.1487,-81.1291 37.1355,-81.1325 37.1264,-81.1372 37.1163,-81.141 37.1062,-81.1416 37.0972,-81.1364 37.0844,-81.1285 37.0721,-81.1209 37.0595,-81.1168 37.0459,-81.1171 37.0412,-81.1181 37.0364,-81.1184 37.0317,-81.117 37.0273,-81.1016 37.009,-81.0856 36.995,-81.0713 36.9785,-81.0614 36.9536)
+LINESTRING(-87.5474 37.929,-87.5198 37.9266,-87.4917 37.931,-87.4655 37.9408,-87.4438 37.9544,-87.4391 37.9848,-87.4379 38.0164,-87.4377 38.0481,-87.4361 38.0791,-87.4405 38.0815,-87.4449 38.084,-87.4493 38.0864,-87.4538 38.0889,-87.4544 38.1044,-87.4517 38.1185,-87.4478 38.1321,-87.4446 38.1465,-87.4449 38.1539,-87.4466 38.1617,-87.4475 38.1695,-87.4455 38.1769)
+LINESTRING(-81.0614 36.9536,-81.0609 36.9523,-81.0606 36.9514,-81.0311 36.9399,-80.9923 36.94,-80.952 36.9449,-80.9177 36.948)
+LINESTRING(-84.4553 38.0789,-84.4644 38.0734,-84.4735 38.0678,-84.4803 38.0708,-84.4892 38.0738,-84.4984 38.0758,-84.5062 38.0757,-84.5158 38.0742,-84.5255 38.0727,-84.5337 38.0668,-84.5433 38.0621,-84.5531 38.0577,-84.562 38.0526,-84.565 38.0454,-84.5943 38.044,-84.6226 38.0431,-84.6507 38.0433,-84.6796 38.0453,-84.709 38.0264,-84.7493 38.0091,-84.7908 37.9943,-84.8239 37.9827,-84.8315 37.9859,-84.839 37.9892,-84.8624 37.9846,-84.8812 37.9708,-84.8984 37.9549,-84.9171 37.9438,-84.9325 37.9396,-84.9483 37.9362,-84.9642 37.9327,-84.9796 37.9286,-84.9985 37.9222,-85.0172 37.9149,-85.036 37.9078,-85.055 37.9017,-85.0851 37.8948,-85.1122 37.889,-85.1383 37.8803,-85.1654 37.8645,-85.227 37.8784,-85.2849 37.8733,-85.3397 37.8539,-85.3923 37.8245,-85.4095 37.8123,-85.4262 37.7993,-85.4437 37.7872,-85.4634 37.7774,-85.4943 37.7801,-85.5177 37.7767,-85.5402 37.7703,-85.5682 37.7638,-85.59 37.7611,-85.6107 37.7594,-85.6315 37.757,-85.6537 37.752,-85.6758 37.744,-85.6978 37.7345,-85.7196 37.7254,-85.7415 37.7183,-85.753 37.7163,-85.765 37.7152,-85.777 37.7143,-85.7886 37.7127,-85.8005 37.7101,-85.8124 37.7069,-85.8243 37.7037,-85.8362 37.7008)
+LINESTRING(-85.8362 37.7008,-85.8283 37.7124,-85.815 37.7215,-85.7997 37.7308,-85.7854 37.7424,-85.777 37.7515,-85.7735 37.7558,-85.7708 37.7601,-85.7648 37.768,-85.7589 37.777,-85.7521 37.7851,-85.7431 37.7901,-85.7356 37.8105,-85.71 37.8442,-85.6956 37.8786,-85.6893 37.9129,-85.6874 37.9464,-85.6887 37.9576,-85.6923 37.9701,-85.6967 37.9827,-85.7004 37.9939,-85.7011 37.9958,-85.7015 37.9976,-85.6967 38.0268,-85.6949 38.0648,-85.6972 38.1035,-85.7042 38.1349,-85.7146 38.1601,-85.7241 38.1782,-85.7365 38.1946,-85.7554 38.215,-85.7537 38.228,-85.7488 38.2444)
+LINESTRING(-90.3848 38.1582,-90.4167 38.1715,-90.4392 38.1843,-90.452 38.2127,-90.4587 38.2587,-90.4601 38.3054,-90.4573 38.336,-90.4539 38.345,-90.4488 38.3546,-90.4429 38.3641,-90.4369 38.3724,-90.4342 38.4016,-90.4158 38.4301,-90.39 38.4574,-90.3653 38.4831,-90.3556 38.4925,-90.344 38.5012,-90.3322 38.51,-90.3213 38.5192,-90.3134 38.5286,-90.3059 38.5393,-90.2982 38.5495,-90.2896 38.5575,-90.2662 38.5708,-90.2454 38.5811,-90.2277 38.5941,-90.1962 38.6256)
+LINESTRING(-79.4663 36.5399,-79.464 36.5452,-79.4336 36.5466,-79.4005 36.5542,-79.3697 36.5666,-79.3465 36.5818)
+LINESTRING(-87.575 37.8668,-87.5681 37.855,-87.5631 37.8404,-87.5605 37.8254,-87.5606 37.8122)
+LINESTRING(-96.2369 38.414,-96.228 38.417,-96.2191 38.4211,-96.2109 38.4261,-96.204 38.4315,-96.1822 38.4309,-96.1587 38.4308,-96.1353 38.431,-96.1119 38.4311,-96.0766 38.4288,-96.0413 38.4266,-96.006 38.4243,-95.9706 38.422,-95.9493 38.4234,-95.9292 38.4265,-95.9095 38.4301,-95.8894 38.4328,-95.8494 38.4329,-95.809 38.4289,-95.7689 38.4256,-95.7294 38.4276,-95.6968 38.434,-95.6644 38.4416,-95.6321 38.4492,-95.5995 38.4555,-95.5909 38.4559,-95.5815 38.4554,-95.5722 38.4549,-95.5637 38.4555,-95.5307 38.4654,-95.4968 38.4803,-95.4634 38.4965,-95.4321 38.5099,-95.4244 38.5121,-95.4163 38.5136,-95.4083 38.5151,-95.4006 38.5173,-95.3889 38.5236,-95.3789 38.5321,-95.3694 38.5409,-95.3592 38.5484,-95.3385 38.5568,-95.3144 38.5627,-95.2898 38.5681,-95.2674 38.5751)
+LINESTRING(-96.2369 38.414,-96.2321 38.4194,-96.2278 38.4251,-96.224 38.4311,-96.2209 38.4372,-96.2083 38.4468,-96.1856 38.4676,-96.1622 38.49,-96.1476 38.5048,-96.1412 38.5142,-96.136 38.5246,-96.1309 38.5353,-96.1246 38.5451,-96.1092 38.5621,-96.092 38.5783,-96.0742 38.5942,-96.0571 38.61,-96.048 38.6203,-96.0407 38.6308,-96.034 38.6416,-96.0268 38.6525,-96.0197 38.6596,-96.0107 38.6668,-96.0021 38.6743,-95.9963 38.6822,-95.9921 38.6919,-95.9883 38.6997,-95.9833 38.7071,-95.9756 38.7158,-95.9613 38.73,-95.9459 38.7449,-95.9312 38.7601,-95.9193 38.7754,-95.9139 38.7854,-95.909 38.7969,-95.9037 38.8081,-95.8977 38.8176,-95.8805 38.8346,-95.8609 38.8506,-95.8414 38.8666,-95.8249 38.8841,-95.8158 38.8876,-95.8046 38.8957,-95.7936 38.905,-95.7849 38.9118,-95.7788 38.92,-95.766 38.9288,-95.7525 38.9379,-95.7445 38.9471,-95.7343 38.9505,-95.7308 38.9567,-95.7246 38.9628,-95.717 38.9678,-95.7093 38.9708,-95.707 38.9758,-95.7035 38.981,-95.6992 38.9858,-95.6767 38.9943,-95.6568 39.0048,-95.638 39.017,-95.6236 39.0269)
+LINESTRING(-80.9177 36.948,-80.9136 36.9325,-80.9011 36.9203,-80.8857 36.9094,-80.8729 36.8978,-80.8695 36.8879,-80.8706 36.877,-80.8715 36.8652,-80.8673 36.8525,-80.8442 36.8245,-80.8144 36.7973,-80.7828 36.7708,-80.7542 36.7446,-80.7383 36.7243,-80.728 36.7043,-80.7191 36.6842,-80.7076 36.6639,-80.7084 36.6598,-80.7092 36.6557)
+LINESTRING(-104.834 38.8279,-104.834 38.8256,-104.833 38.8233,-104.833 38.8211,-104.832 38.8188,-104.828 38.8159,-104.825 38.8147,-104.821 38.8146,-104.815 38.8151,-104.797 38.7923,-104.769 38.7628,-104.743 38.7353,-104.729 38.7186,-104.726 38.7121,-104.723 38.7056,-104.719 38.6991,-104.716 38.6926,-104.713 38.6874,-104.709 38.6831,-104.705 38.679,-104.701 38.6743,-104.688 38.6465,-104.667 38.5954,-104.645 38.541,-104.628 38.5032,-104.624 38.4952,-104.619 38.4872,-104.615 38.4783,-104.612 38.4712,-104.611 38.4446,-104.614 38.4162,-104.618 38.3877,-104.62 38.3607,-104.619 38.3474,-104.615 38.3336,-104.613 38.3199,-104.614 38.3075)
+LINESTRING(-97.6207 38.3759,-97.6209 38.457,-97.6212 38.5381,-97.6216 38.6193,-97.6227 38.7004,-97.6224 38.7241,-97.6216 38.7486,-97.6215 38.773,-97.6233 38.7965,-97.6268 38.8079,-97.6332 38.8206,-97.6404 38.8332,-97.6464 38.8443,-97.646 38.8499,-97.6445 38.8609,-97.6432 38.8693,-97.6418 38.8778)
+LINESTRING(-84.4288 38.052,-84.4195 38.0361,-84.4099 38.0205,-84.4012 38.0046,-84.3947 37.9878,-84.3913 37.9703,-84.3888 37.9511,-84.3847 37.9321,-84.3765 37.9155,-84.3615 37.898,-84.3465 37.8818,-84.3325 37.8638,-84.3205 37.8407,-84.3127 37.8076,-84.3155 37.7828,-84.322 37.7608,-84.3251 37.7364,-84.3221 37.7152,-84.3165 37.6936,-84.3109 37.672,-84.3078 37.6506,-84.3146 37.583,-84.3311 37.5195,-84.3437 37.455,-84.3382 37.3843,-84.3309 37.3795,-84.3211 37.3761,-84.3118 37.3716,-84.3061 37.3636,-84.2981 37.334,-84.288 37.307,-84.2707 37.2832,-84.2412 37.2632,-84.2284 37.2403,-84.2177 37.228,-84.2002 37.2197,-84.167 37.2089,-84.1531 37.2016,-84.1454 37.192,-84.1399 37.1809,-84.1324 37.1691,-84.1277 37.1645,-84.1224 37.1603,-84.1171 37.1558,-84.1126 37.1503)
+LINESTRING(-80.7092 36.6557,-80.7 36.6412,-80.6964 36.6161,-80.684 36.5933,-80.6626 36.5781,-80.6564 36.565,-80.653 36.5583)
+LINESTRING(-83.2412 37.2641,-83.243 37.2617,-83.2492 37.2578,-83.2586 37.2573,-83.2648 37.258,-83.271 37.2587,-83.2772 37.2594,-83.2963 37.252,-83.3121 37.2431,-83.3267 37.2332,-83.3425 37.2224,-83.3495 37.2201,-83.3604 37.2182,-83.3717 37.2167,-83.3802 37.2154,-83.3837 37.2118,-83.3871 37.2083,-83.3905 37.2047,-83.3939 37.2011,-83.4019 37.1976,-83.4137 37.1891,-83.4261 37.1796,-83.4358 37.1728,-83.4474 37.1724,-83.4642 37.1686,-83.4826 37.1645,-83.4996 37.163,-83.5143 37.1689,-83.533 37.1692,-83.5526 37.1669,-83.57 37.1651,-83.5873 37.1741,-83.5976 37.1795,-83.6089 37.1825,-83.629 37.1841,-83.6303 37.1783,-83.6317 37.1724,-83.6326 37.1665,-83.6336 37.1606,-83.6403 37.1596,-83.647 37.1586,-83.6505 37.1551,-83.6541 37.1516,-83.6576 37.1482,-83.6612 37.1447,-83.672 37.142,-83.6837 37.1409,-83.6956 37.1405,-83.7071 37.1398,-83.719 37.137,-83.7302 37.1328,-83.7416 37.1293,-83.7539 37.1289,-83.7663 37.1323,-83.7783 37.1371,-83.7909 37.141,-83.805 37.1414,-83.8259 37.1384,-83.8469 37.1351,-83.8676 37.1312,-83.8879 37.1262,-83.9069 37.1192,-83.9216 37.1126,-83.9372 37.1089,-83.9587 37.1102,-83.9958 37.1189,-84.0472 37.1324,-84.0929 37.1448,-84.1126 37.1503)
+LINESTRING(-77.8773 35.9798,-77.8769 35.9865,-77.8766 35.9932,-77.8763 35.9999,-77.8759 36.0066,-77.8674 36.0174,-77.8543 36.0307,-77.8398 36.0465,-77.8271 36.0647,-77.8158 36.0885,-77.8065 36.1132,-77.7973 36.1378,-77.7861 36.1615,-77.7815 36.168,-77.7759 36.1745,-77.7707 36.1811,-77.7671 36.1879,-77.7661 36.1926,-77.7652 36.199,-77.7642 36.2052,-77.763 36.2092,-77.7551 36.221,-77.7458 36.233,-77.736 36.2447,-77.7268 36.2561,-77.723 36.2654,-77.719 36.2806,-77.7154 36.2964,-77.7127 36.3076,-77.7003 36.3328,-77.6817 36.3559,-77.6618 36.3786,-77.6458 36.4025,-77.6431 36.4093,-77.6412 36.4166,-77.6393 36.4239,-77.6369 36.4309,-77.6227 36.4583,-77.6056 36.4876,-77.5899 36.5173,-77.5802 36.5457)
+LINESTRING(-80.7425 36.559,-80.7417 36.5748,-80.7392 36.6009,-80.7351 36.6282,-80.7277 36.6345,-80.7196 36.6408,-80.7128 36.6478,-80.7092 36.6557)
+LINESTRING(-85.8362 37.7008,-85.8425 37.6952,-85.8487 37.6895,-85.8549 37.6838,-85.8611 37.6781,-85.897 37.6562,-85.9327 37.6364,-85.968 37.6174,-86.0025 37.5978,-86.0097 37.5921,-86.0163 37.5851,-86.0227 37.5782,-86.0296 37.5728,-86.0543 37.5619,-86.0829 37.5533,-86.1125 37.5457,-86.1402 37.5378,-86.1488 37.5273,-86.1627 37.513,-86.1777 37.4998,-86.1897 37.4922,-86.2326 37.4791,-86.2764 37.4677,-86.3205 37.4564,-86.3637 37.4435,-86.38 37.4359,-86.3955 37.4263,-86.4113 37.4172,-86.4283 37.4113,-86.4488 37.4089,-86.4746 37.4082,-86.5003 37.4096,-86.5204 37.4133,-86.5315 37.4105,-86.5415 37.4066,-86.551 37.4026,-86.5608 37.3993,-86.5795 37.3953,-86.605 37.3909,-86.6303 37.387,-86.6486 37.3849,-86.6802 37.3856,-86.713 37.3896,-86.7462 37.3937,-86.7791 37.3945,-86.7894 37.3908,-86.8004 37.3866)
+LINESTRING(-87.5606 37.8122,-87.5549 37.8123,-87.5496 37.8119,-87.5199 37.8048,-87.4859 37.7994,-87.4528 37.7934,-87.4254 37.7842,-87.4168 37.7788,-87.409 37.7733,-87.4002 37.7691,-87.3883 37.7676,-87.3618 37.7686,-87.3339 37.7687,-87.3065 37.765,-87.2813 37.7549,-87.2678 37.7554,-87.2468 37.7586,-87.2257 37.7627,-87.2117 37.7659,-87.2026 37.7644,-87.1866 37.7641,-87.1698 37.7645,-87.1581 37.7648,-87.1466 37.7421,-87.1263 37.7317,-87.1011 37.7322,-87.075 37.7424,-87.0664 37.7341,-87.0565 37.7266,-87.0468 37.7194,-87.0388 37.712,-87.034 37.7048,-87.0298 37.6965,-87.0257 37.688,-87.0211 37.6802,-86.9968 37.6458,-86.9722 37.6116,-86.9476 37.5773,-86.9233 37.5429,-86.918 37.5338,-86.9148 37.5253,-86.9127 37.5167,-86.9104 37.5073,-86.9046 37.4962,-86.894 37.4822,-86.8825 37.4686,-86.8736 37.4583,-86.8469 37.4384,-86.8306 37.4234,-86.8174 37.408,-86.8004 37.3866)
+LINESTRING(-88.9958 37.6051,-88.9909 37.6137,-88.9854 37.6222,-88.9804 37.6309,-88.977 37.6399,-88.972 37.6589,-88.9651 37.6842,-88.959 37.7085,-88.9566 37.7246,-88.9541 37.7396,-88.9478 37.7572,-88.9408 37.7745,-88.9359 37.7889,-88.9305 37.8036,-88.9198 37.8312,-88.9094 37.8592,-88.9046 37.8752,-88.904 37.8853,-88.9027 37.8954,-88.9014 37.9058,-88.9006 37.9166,-88.8997 37.9245,-88.8977 37.9312,-88.8952 37.9377,-88.8928 37.9447,-88.8916 37.9606,-88.892 37.9813,-88.8898 38.0013,-88.8811 38.0149,-88.8806 38.0285,-88.8813 38.0451,-88.8818 38.0606,-88.8807 38.0711,-88.8779 38.0761,-88.8743 38.0807,-88.8709 38.0854,-88.8688 38.091,-88.8661 38.0975,-88.8613 38.1134,-88.8583 38.1362,-88.8615 38.1631,-88.8678 38.1918,-88.8715 38.2159,-88.8734 38.233,-88.8745 38.2404,-88.8785 38.2463,-88.8836 38.2527,-88.889 38.2593,-88.8938 38.2657)
+LINESTRING(-81.0614 36.9536,-81.074 36.9626,-81.0835 36.9654,-81.0943 36.964,-81.1115 36.9607,-81.1782 36.95,-81.2419 36.9386,-81.3038 36.9249,-81.365 36.9076,-81.4007 36.8881,-81.4244 36.8635,-81.4453 36.8359,-81.4725 36.8076,-81.5043 36.7862,-81.5388 36.7733,-81.5768 36.7688,-81.6186 36.7725,-81.6333 36.7759,-81.6462 36.7798,-81.6591 36.7837,-81.6738 36.787,-81.7272 36.7909,-81.7743 36.7843,-81.8208 36.7708,-81.8718 36.7542,-81.8858 36.7457,-81.8997 36.7373,-81.9245 36.7221,-81.9477 36.7076,-81.9625 36.7012,-81.9798 36.6974,-81.9979 36.6941,-82.0148 36.6894,-82.0413 36.6769,-82.0669 36.6618,-82.0925 36.6464,-82.1193 36.6329,-82.1287 36.6292,-82.139 36.6273,-82.1487 36.6279,-82.1585 36.6285,-82.1682 36.6287,-82.178 36.6283)
+LINESTRING(-78.2104 36.5454,-78.2145 36.5387,-78.2297 36.5172,-78.2466 36.4979,-78.2656 36.4768,-78.2837 36.4547,-78.3026 36.433,-78.3242 36.4134,-78.3445 36.397,-78.364 36.38,-78.3833 36.3627,-78.4029 36.3455,-78.42 36.3369,-78.4494 36.3269,-78.48 36.321,-78.5004 36.3246,-78.509 36.3242,-78.5181 36.3228,-78.5272 36.3213,-78.5363 36.3198,-78.5451 36.3179,-78.5885 36.2891,-78.6483 36.2327,-78.7053 36.1716,-78.7407 36.1291,-78.7487 36.1163,-78.7565 36.1021,-78.7648 36.0883,-78.774 36.0768,-78.791 36.0607,-78.8169 36.0368,-78.8452 36.0115,-78.8695 35.9911,-78.8797 35.9959,-78.8921 35.9995,-78.9051 36.0027,-78.9171 36.0065,-78.9364 36.0054,-78.9562 36.0094,-78.976 36.0149,-78.9954 36.0181,-79.0072 36.0166,-79.0199 36.0169,-79.0347 36.0217,-79.05 36.0269,-79.0654 36.0317,-79.0805 36.0356,-79.1016 36.0396,-79.1224 36.0435,-79.1435 36.0494,-79.1657 36.0591)
+LINESTRING(-82.178 36.6283,-82.219 36.6151,-82.2571 36.5963)
+LINESTRING(-113.455 37.166,-113.389 37.2216,-113.326 37.284,-113.271 37.3506,-113.23 37.4187,-113.23 37.4268,-113.232 37.4341,-113.229 37.4582,-113.226 37.485,-113.221 37.511,-113.211 37.5327,-113.196 37.5548,-113.182 37.5785,-113.167 37.6018,-113.151 37.6226,-113.089 37.6433,-113.078 37.6762,-113.074 37.7169,-113.033 37.761,-113.013 37.7722,-112.991 37.7825,-112.969 37.7926,-112.948 37.8034,-112.939 37.8092,-112.93 37.8158,-112.922 37.8225,-112.913 37.8286,-112.894 37.8382,-112.872 37.8462,-112.85 37.8539,-112.83 37.8627,-112.805 37.8839,-112.777 37.9182,-112.751 37.9536,-112.733 37.978,-112.718 38.0026,-112.704 38.0284,-112.69 38.0544,-112.675 38.0794,-112.662 38.0966,-112.648 38.1137,-112.634 38.1309,-112.62 38.1482,-112.623 38.1572,-112.632 38.1701,-112.642 38.1831,-112.648 38.1924,-112.65 38.2017,-112.652 38.2122,-112.653 38.2229,-112.654 38.2327,-112.655 38.2677,-112.658 38.303,-112.664 38.338,-112.674 38.3718,-112.675 38.3781,-112.661 38.4056,-112.648 38.4263,-112.634 38.4463,-112.618 38.4718,-112.616 38.479,-112.62 38.4939,-112.62 38.5223,-112.618 38.5535,-112.615 38.5765)
+LINESTRING(-79.1657 36.0591,-79.1888 36.0628,-79.2115 36.0686,-79.2342 36.0737,-79.2573 36.0754,-79.274 36.0735,-79.2906 36.0702,-79.3074 36.0669,-79.3245 36.0649,-79.3404 36.0661,-79.3553 36.0688,-79.3701 36.0696,-79.3854 36.0648,-79.3866 36.0634,-79.3877 36.0621,-79.3927 36.0614,-79.3975 36.0611,-79.4023 36.0612,-79.4071 36.0613,-79.4249 36.0629,-79.4436 36.0657,-79.4619 36.0682,-79.4787 36.0693,-79.5101 36.0675,-79.5423 36.0635,-79.5746 36.0592,-79.6063 36.0562,-79.6446 36.0553,-79.6764 36.0558,-79.7094 36.0546,-79.7514 36.0489,-79.7572 36.048,-79.7629 36.0473,-79.7685 36.0464,-79.7742 36.0448)
+LINESTRING(-79.7742 36.0448,-79.7724 36.0579,-79.7716 36.0717,-79.7703 36.0853,-79.7672 36.0979,-79.7485 36.1298,-79.7131 36.1818,-79.6738 36.2342,-79.6434 36.2677,-79.6421 36.2784,-79.6408 36.2959,-79.6406 36.3131,-79.642 36.323,-79.6208 36.3611,-79.5944 36.3965,-79.5651 36.4309,-79.5355 36.466,-79.5298 36.4668,-79.5257 36.4698,-79.5217 36.4727,-79.5164 36.4726,-79.5102 36.4729,-79.5041 36.4739,-79.4994 36.4758,-79.4898 36.4928,-79.4805 36.5099,-79.4718 36.5274,-79.4663 36.5399)
+LINESTRING(-79.7742 36.0448,-79.7823 36.0396,-79.7915 36.0355,-79.8014 36.0327,-79.8118 36.0313)
+LINESTRING(-85.8362 37.7008,-85.8537 37.6553,-85.8694 37.6042,-85.8804 37.5527,-85.8835 37.5058,-85.8821 37.4778,-85.8805 37.4492,-85.8798 37.4206,-85.8806 37.3929,-85.8834 37.3791,-85.8885 37.3648,-85.894 37.3503,-85.8981 37.3362,-85.8994 37.3261,-85.9001 37.3155,-85.9009 37.305,-85.9027 37.2954,-85.907 37.2846,-85.913 37.2742,-85.9193 37.264,-85.9244 37.2536,-85.9286 37.2416,-85.9322 37.2294,-85.9359 37.2172,-85.9401 37.2052,-85.9415 37.2019,-85.9428 37.1985,-85.9441 37.1952,-85.9455 37.1919,-85.9552 37.1774,-85.9638 37.1648,-85.9709 37.1515,-85.9763 37.1351,-85.9969 37.1211,-86.021 37.1152,-86.0454 37.1063,-86.0665 37.0835,-86.0782 37.0777,-86.0898 37.072,-86.1014 37.0663,-86.1131 37.0606)
+LINESTRING(-80.234 36.0965,-80.2162 36.0977,-80.1997 36.1004,-80.1833 36.1039,-80.1663 36.1075,-80.1255 36.1115,-80.0844 36.1092,-80.0439 36.1022,-80.0046 36.0922,-79.9826 36.0852,-79.9609 36.0771,-79.9392 36.0687,-79.9175 36.0609,-79.8915 36.053,-79.8649 36.0458,-79.8382 36.0388,-79.8118 36.0313)
+LINESTRING(-80.653 36.5583,-80.6464 36.5456,-80.6364 36.5274,-80.6298 36.5178,-80.6279 36.4979,-80.6102 36.4849,-80.5873 36.4752,-80.5699 36.4651,-80.5544 36.4536,-80.5311 36.4346,-80.509 36.4157,-80.4968 36.4046,-80.4918 36.3956,-80.4885 36.3844,-80.4862 36.3744,-80.4846 36.3693,-80.4728 36.3544,-80.4618 36.3378,-80.4501 36.3221,-80.4363 36.3101,-80.4098 36.2933,-80.3871 36.2771,-80.3661 36.2594,-80.3446 36.2382,-80.3327 36.2284,-80.3187 36.2197,-80.3047 36.2109,-80.2925 36.2012,-80.2878 36.1951,-80.2837 36.188,-80.2795 36.1807,-80.2742 36.174,-80.267 36.1678,-80.2588 36.1615,-80.2509 36.1551,-80.245 36.1487,-80.2393 36.1352,-80.238 36.122,-80.2375 36.1091,-80.234 36.0965)
+LINESTRING(-77.8773 35.9798,-77.8951 35.9781,-77.9131 35.9766,-77.9311 35.9754,-77.9491 35.9743,-77.9555 35.978,-77.9619 35.9818,-77.968 35.9821,-77.9742 35.9825,-77.9803 35.9825,-77.9864 35.9822,-78.0152 35.9667,-78.0604 35.9491,-78.1083 35.9317,-78.1455 35.9167,-78.1632 35.9058,-78.1863 35.8897,-78.2084 35.8747,-78.2227 35.8675,-78.2347 35.8659,-78.2467 35.8643,-78.2586 35.8626,-78.2706 35.861,-78.2798 35.854,-78.2895 35.8472,-78.2994 35.8408,-78.3098 35.8348,-78.3427 35.8346,-78.3749 35.8292,-78.4051 35.8187,-78.4319 35.8033,-78.4643 35.804,-78.501 35.7981,-78.5376 35.7938,-78.5698 35.7996,-78.5777 35.7977,-78.5857 35.7957,-78.5972 35.7834,-78.6107 35.777,-78.6267 35.7745,-78.6456 35.7735)
+LINESTRING(-79.1657 36.0591,-79.1492 36.0485,-79.1304 36.0385,-79.1119 36.0283,-79.0963 36.0171,-79.0882 36.0089,-79.082 36.0018,-79.0742 35.9947,-79.0612 35.9865,-79.0535 35.9833,-79.0438 35.9802,-79.034 35.9773,-79.026 35.9743,-79.0123 35.9686,-78.9972 35.9629,-78.9821 35.9573,-78.9683 35.9518,-78.9418 35.941,-78.9145 35.9307,-78.887 35.9206,-78.8599 35.9105,-78.8286 35.8921,-78.7732 35.8423,-78.7409 35.8228,-78.7164 35.8123,-78.6934 35.8011,-78.6713 35.7884,-78.6456 35.7735)
+LINESTRING(-86.8004 37.3866,-86.8306 37.3749,-86.8604 37.3638,-86.8912 37.356,-86.9243 37.3543,-86.9523 37.3404,-86.9746 37.3319,-86.998 37.3257,-87.0295 37.3181,-87.0484 37.3105,-87.0686 37.2986,-87.0885 37.2855,-87.1061 37.2745,-87.1153 37.2745,-87.1244 37.2745,-87.1335 37.2745,-87.1426 37.2745,-87.1616 37.2645,-87.1816 37.2585,-87.2025 37.2543,-87.2242 37.2498,-87.2353 37.2464,-87.2459 37.2424,-87.2568 37.2388,-87.2689 37.2364,-87.3024 37.2364,-87.3396 37.2377,-87.3734 37.2324,-87.3967 37.2127,-87.4081 37.213,-87.4195 37.2133,-87.431 37.2136,-87.4424 37.2138)
+LINESTRING(-87.5606 37.8122,-87.5583 37.8,-87.5537 37.7868,-87.5458 37.7752,-87.5332 37.7678,-87.5249 37.7473,-87.5184 37.7254,-87.514 37.7031,-87.5122 37.682,-87.5129 37.6681,-87.5141 37.655,-87.5144 37.6417,-87.5119 37.6276,-87.5057 37.612,-87.4974 37.5963,-87.4893 37.5807,-87.4835 37.565,-87.4759 37.5223,-87.4716 37.4667,-87.4737 37.4114,-87.4852 37.3696,-87.4732 37.331,-87.4588 37.2917,-87.4469 37.2524,-87.4424 37.2138)
+LINESTRING(-96.8468 37.9042,-96.8266 37.9206,-96.8039 37.9316,-96.7805 37.9421,-96.7583 37.9568,-96.7419 37.9692,-96.7245 37.9801,-96.7074 37.9911,-96.6917 38.004,-96.6695 38.0233,-96.645 38.0413,-96.6196 38.0586,-96.5946 38.0759,-96.5842 38.0862,-96.5766 38.0977,-96.5691 38.1093,-96.559 38.1198,-96.5436 38.1292,-96.5259 38.1374,-96.5095 38.1447,-96.4979 38.151,-96.4856 38.1605,-96.4733 38.1705,-96.4613 38.1805,-96.4493 38.1906,-96.4431 38.1973,-96.4383 38.2049,-96.4338 38.2125,-96.4286 38.2197,-96.4168 38.2271,-96.4101 38.2304,-96.3877 38.2535,-96.3723 38.2731,-96.356 38.2924,-96.3363 38.311,-96.3242 38.3184,-96.3177 38.3219,-96.292 38.3433,-96.2706 38.3676,-96.251 38.3929,-96.2369 38.414)
+LINESTRING(-84.623 37.0988,-84.6353 37.0955,-84.6511 37.0962,-84.667 37.0989,-84.6801 37.1015,-84.6988 37.0978,-84.7256 37.0979,-84.7537 37.0989,-84.7765 37.098,-84.7855 37.0953,-84.7937 37.0915,-84.8029 37.0887,-84.8153 37.0887,-84.8263 37.0912,-84.8379 37.0948,-84.8497 37.0985,-84.8613 37.1012,-84.8666 37.0998,-84.9081 37.0863,-84.9487 37.0803,-84.99 37.0759,-85.0312 37.0685,-85.0596 37.0594,-85.083 37.0512,-85.1091 37.0465,-85.146 37.0475,-85.1804 37.0556,-85.214 37.0685,-85.2477 37.0808,-85.2826 37.0869,-85.2994 37.0847,-85.3155 37.0793,-85.3301 37.0737,-85.3426 37.0711,-85.3567 37.0709,-85.3709 37.0707,-85.385 37.0705,-85.3991 37.0702,-85.4119 37.0632,-85.4245 37.0555,-85.4371 37.0479,-85.4499 37.0413,-85.4604 37.0371,-85.4713 37.0334,-85.4821 37.0296,-85.4926 37.0249,-85.5072 37.0278,-85.5205 37.0272,-85.5333 37.0259,-85.5462 37.0268,-85.5904 37.0051,-85.621 36.996,-85.6566 36.9944,-85.7161 36.9951,-85.7562 36.9952,-85.7962 36.9952,-85.8363 36.9957,-85.8763 36.9972,-85.8916 36.9868,-85.9004 36.9816,-85.9107 36.9785,-85.9303 36.9743,-85.9494 36.9813,-85.9699 36.9882,-85.9883 36.9945,-86.0008 36.9999,-86.0169 37.0105,-86.0332 37.0225,-86.0494 37.0342,-86.0656 37.0436,-86.0775 37.0473,-86.0906 37.05,-86.1031 37.0537,-86.1131 37.0606)
+LINESTRING(-78.6456 35.7735,-78.6251 35.7559,-78.6119 35.7381,-78.6025 35.7188,-78.5932 35.6969)
+LINESTRING(-113.606 37.0015,-113.607 37.0104,-113.605 37.0216,-113.601 37.0288,-113.6 37.0375,-113.6 37.0465,-113.599 37.0551,-113.594 37.0649,-113.584 37.0769,-113.573 37.0886,-113.564 37.0978,-113.555 37.1015,-113.546 37.1062,-113.529 37.1252,-113.501 37.1449,-113.473 37.1602,-113.455 37.166)
+LINESTRING(-84.1126 37.1503,-84.1106 37.1436,-84.1075 37.1315,-84.1051 37.1202,-84.1022 37.109,-84.0974 37.0972,-84.0946 37.0916,-84.0966 37.0463,-84.1093 36.9901,-84.1283 36.934,-84.1496 36.8891,-84.1489 36.8674,-84.1547 36.8527,-84.1638 36.8393,-84.1733 36.8218,-84.1765 36.8064,-84.1753 36.7908,-84.1721 36.7751,-84.1692 36.7596,-84.1719 36.7556,-84.1745 36.7515,-84.1681 36.7259,-84.1562 36.7019,-84.1451 36.6777,-84.1413 36.6514,-84.1306 36.6413,-84.1231 36.6354,-84.1181 36.6322,-84.1123 36.6268,-84.1101 36.621,-84.1072 36.6105,-84.1028 36.5935)
+LINESTRING(-86.4313 36.9139,-86.4142 36.9359,-86.4025 36.9598,-86.3899 36.9837,-86.3702 37.0055,-86.3446 37.0089,-86.3181 37.0099,-86.2917 37.0114,-86.2666 37.0162,-86.2587 37.0203,-86.2499 37.0271,-86.2412 37.0345,-86.2334 37.0404,-86.2064 37.0433,-86.1692 37.0475,-86.134 37.0532,-86.1131 37.0606)
+LINESTRING(-86.8004 37.3866,-86.7956 37.379,-86.7905 37.3707,-86.7862 37.3623,-86.7836 37.3541,-86.7752 37.3487,-86.7661 37.3441,-86.757 37.3395,-86.7485 37.3341,-86.7139 37.2997,-86.7097 37.2768,-86.7179 37.2543,-86.7206 37.221,-86.6939 37.1929,-86.6645 37.1661,-86.6414 37.1362,-86.6333 37.099,-86.617 37.0847,-86.6005 37.0688,-86.5836 37.0533,-86.5661 37.0406,-86.5522 37.0335,-86.5377 37.027,-86.5231 37.0202,-86.5092 37.0121,-86.5039 36.9998,-86.5019 36.9851,-86.5019 36.9702,-86.5027 36.9573,-86.4836 36.9474,-86.465 36.9377,-86.4474 36.9269,-86.4313 36.9139)
+LINESTRING(-87.4424 37.2138,-87.4571 37.2147,-87.4721 37.2133,-87.4869 37.2106,-87.501 37.2078,-87.5212 37.2046,-87.5564 37.1996,-87.5914 37.1948,-87.6105 37.1924,-87.6337 37.1931,-87.6574 37.1959,-87.6837 37.1974,-87.7146 37.1938,-87.7356 37.1782,-87.7713 37.1603,-87.8087 37.1447,-87.8347 37.1362,-87.8447 37.1349,-87.8552 37.1344,-87.8656 37.1339,-87.8756 37.1327,-87.8876 37.1285,-87.8998 37.1225,-87.9121 37.1166,-87.9246 37.1126,-87.9487 37.1095,-87.9824 37.1065,-88.0163 37.1047,-88.0409 37.1051)
+LINESTRING(-114.049 36.8405,-114.006 36.8454,-113.975 36.8497,-113.939 36.8589,-113.877 36.8789,-113.866 36.8881,-113.86 36.8923,-113.846 36.8972,-113.836 36.896,-113.827 36.8949,-113.82 36.8948,-113.812 36.9002,-113.807 36.9078,-113.802 36.9158,-113.796 36.9223,-113.78 36.9296,-113.76 36.9344,-113.742 36.9402,-113.729 36.9501,-113.719 36.9501,-113.708 36.9492,-113.697 36.9482,-113.687 36.9479,-113.671 36.9505,-113.645 36.956,-113.62 36.9622,-113.607 36.9667,-113.604 36.9776,-113.606 36.994,-113.606 37.0015)
+LINESTRING(-78.2672 35.4891,-78.2367 35.503,-78.198 35.5181,-78.1617 35.533,-78.1388 35.5464,-78.1298 35.5595,-78.1186 35.5802,-78.108 35.601,-78.1008 35.6145,-78.078 35.6469,-78.054 35.679,-78.0317 35.7106,-78.0143 35.7417,-78.0042 35.7699,-77.996 35.7993,-77.9862 35.8283,-77.971 35.8549,-77.9462 35.8837,-77.9176 35.9153,-77.8923 35.9479,-77.8773 35.9798)
+LINESTRING(-78.2874 35.4802,-78.2831 35.4831,-78.2785 35.4856,-78.2732 35.4876,-78.2672 35.4891)
+LINESTRING(-88.6859 37.1288,-88.6828 37.1535,-88.6804 37.18,-88.6979 37.2143,-88.7295 37.2687,-88.7625 37.3225,-88.7845 37.3547,-88.8037 37.3717,-88.827 37.3862,-88.8496 37.4006,-88.8667 37.4173,-88.8787 37.4401,-88.8835 37.4592,-88.8866 37.4773,-88.8933 37.4968,-88.9107 37.5225,-88.938 37.5536,-88.9685 37.5834,-88.9958 37.6051)
+LINESTRING(-104.614 38.3075,-104.609 38.2928,-104.605 38.2759,-104.605 38.2597,-104.615 38.2468,-104.614 38.239,-104.615 38.2315,-104.617 38.2244,-104.621 38.2174,-104.625 38.2172,-104.628 38.217,-104.63 38.2073,-104.632 38.1974,-104.632 38.1875,-104.632 38.1777,-104.643 38.1642,-104.654 38.1441,-104.664 38.1232,-104.674 38.1079,-104.685 38.0942,-104.699 38.081,-104.712 38.0677,-104.724 38.054,-104.731 38.0438,-104.736 38.0323,-104.741 38.0208,-104.747 38.0103,-104.766 37.9855,-104.785 37.9625,-104.805 37.9403,-104.827 37.9181,-104.831 37.8793,-104.829 37.8395,-104.828 37.7995,-104.835 37.76,-104.825 37.7391,-104.814 37.7093,-104.804 37.6813,-104.794 37.6658,-104.792 37.6587,-104.786 37.6521,-104.779 37.6462,-104.771 37.6415,-104.77 37.6381,-104.768 37.6337,-104.766 37.6293,-104.763 37.626)
+LINESTRING(-97.3109 37.6793,-97.3127 37.7046,-97.3167 37.7324,-97.3214 37.7594,-97.326 37.7864,-97.3291 37.8185,-97.3292 37.8516,-97.328 37.8848,-97.3271 37.9167,-97.3255 37.9546,-97.3239 37.9926,-97.3221 38.0412,-97.3222 38.0656,-97.3614 38.0996,-97.4472 38.1709,-97.5345 38.2427,-97.5779 38.2781,-97.5889 38.287,-97.6 38.2959,-97.6108 38.3049,-97.6214 38.3142,-97.6212 38.3296,-97.6209 38.3451,-97.6208 38.3605,-97.6207 38.3759)
+LINESTRING(-121.846 37.3423,-121.829 37.3193,-121.814 37.3053,-121.803 37.2899,-121.791 37.2677,-121.78 37.2593,-121.768 37.2495,-121.757 37.2397,-121.745 37.2313,-121.71 37.2068,-121.678 37.1785,-121.649 37.1481,-121.624 37.1171,-121.618 37.1106,-121.611 37.1046,-121.605 37.0984,-121.6 37.0911,-121.579 37.0463,-121.567 37.024,-121.555 37.0021,-121.558 36.9875,-121.555 36.9728,-121.551 36.9579,-121.555 36.9427,-121.545 36.9215,-121.552 36.9055,-121.558 36.8896,-121.566 36.8742,-121.578 36.8598,-121.59 36.857,-121.601 36.8578,-121.613 36.8589,-121.625 36.8571,-121.633 36.8493,-121.631 36.8437,-121.628 36.8379,-121.626 36.832,-121.624 36.8263,-121.632 36.8162,-121.644 36.8092,-121.656 36.8033,-121.665 36.7965,-121.667 36.7795,-121.659 36.7556,-121.639 36.7283,-121.602 36.7009,-121.592 36.6911,-121.579 36.6832,-121.566 36.6758,-121.553 36.6676,-121.542 36.6578,-121.521 36.6382,-121.51 36.6285,-121.482 36.6019,-121.457 36.5739,-121.429 36.5482,-121.393 36.5285,-121.377 36.5052,-121.351 36.4845,-121.322 36.4663,-121.294 36.4502,-121.282 36.4149,-121.265 36.3751,-121.247 36.3371,-121.233 36.3071,-121.212 36.2883,-121.196 36.2695,-121.188 36.2474,-121.19 36.2186,-121.184 36.2096,-121.178 36.2006,-121.171 36.1919,-121.164 36.184,-121.127 36.1779,-121.099 36.1727,-121.081 36.1684,-121.071 36.1512,-121.059 36.1357,-121.047 36.1207,-121.036 36.1045,-121.039 36.0951,-121.042 36.0859,-120.992 36.0444,-120.948 36.0048,-120.912 35.9615,-120.884 35.9086,-120.863 35.8984,-120.859 35.8892,-120.857 35.8799,-120.856 35.8706,-120.853 35.8613,-120.844 35.856,-120.835 35.8514,-120.827 35.8463,-120.82 35.8394,-120.812 35.8341,-120.804 35.8295,-120.793 35.8073,-120.78 35.7866,-120.759 35.7691,-120.727 35.7568,-120.725 35.7504,-120.725 35.7421,-120.726 35.7337,-120.727 35.7268,-120.727 35.7201,-120.726 35.7137,-120.723 35.7077,-120.719 35.702,-120.721 35.6876,-120.726 35.6734,-120.73 35.6593,-120.729 35.6452,-120.678 35.6435)
+LINESTRING(-88.6613 37.0593,-88.668 37.0649,-88.6751 37.0699,-88.686 37.093,-88.6866 37.1227,-88.6859 37.1288)
+LINESTRING(-77.0725 35.1133,-77.0863 35.128,-77.1019 35.1406,-77.1201 35.1499,-77.1418 35.1549,-77.1466 35.1534,-77.1515 35.1518,-77.1563 35.1502,-77.1612 35.1486,-77.2265 35.1654,-77.3215 35.19,-77.4095 35.2115,-77.4536 35.2189)
+LINESTRING(-80.3373 35.7951,-80.3006 35.7935,-80.2585 35.7889,-80.2176 35.7879,-80.1846 35.7971,-80.1727 35.8064,-80.1606 35.8177,-80.1479 35.8286,-80.134 35.8365,-80.1102 35.8439,-80.0863 35.8489,-80.0621 35.8532,-80.0372 35.8581,-80.0087 35.8708,-79.9691 35.8942,-79.9318 35.9187,-79.9103 35.9348,-79.9032 35.9443,-79.8943 35.96,-79.8866 35.9764,-79.8835 35.9878,-79.8669 35.9963,-79.8464 36.0082,-79.8265 36.0208,-79.8118 36.0313)
+LINESTRING(-80.234 36.0965,-80.2348 36.0762,-80.2395 36.0534,-80.245 36.0306,-80.2482 36.0104,-80.2518 35.9936,-80.2573 35.9768,-80.2601 35.9605,-80.2559 35.9451,-80.2503 35.9264,-80.2539 35.9089,-80.2615 35.8936,-80.2682 35.8817,-80.274 35.869,-80.2805 35.8553,-80.2875 35.8418,-80.2946 35.8302,-80.3039 35.8211,-80.3157 35.8134,-80.3276 35.8053,-80.3373 35.7951)
+LINESTRING(-89.1868 37.0976,-89.1795 37.1173,-89.1698 37.1371,-89.1608 37.1568,-89.1558 37.1764,-89.1528 37.2269,-89.1524 37.278,-89.1529 37.3292,-89.1526 37.3799,-89.1529 37.394,-89.1537 37.4087,-89.1537 37.4232,-89.1517 37.437,-89.1255 37.48,-89.0814 37.5166,-89.0345 37.5495,-89 37.5816,-88.9983 37.5863,-88.9972 37.593,-88.9965 37.5991,-88.9958 37.6051)
+LINESTRING(-97.3108 37.6086,-97.3081 37.6143,-97.3048 37.6198,-97.2941 37.6267,-97.2803 37.6391,-97.2639 37.6533,-97.2454 37.6655,-97.2313 37.6705,-97.2167 37.6731,-97.2021 37.6755,-97.1876 37.6798,-97.1601 37.6936,-97.1332 37.7091,-97.106 37.7241,-97.0777 37.7362,-97.0487 37.7448,-97.0186 37.753,-96.9893 37.7626,-96.9629 37.7751,-96.9421 37.7923,-96.9148 37.8195,-96.8895 37.8471,-96.8747 37.8651,-96.8672 37.8759,-96.8596 37.8868,-96.8517 37.8978,-96.8468 37.9042)
+LINESTRING(-97.3109 37.6793,-97.3108 37.6086)
+LINESTRING(-88.3368 36.9912,-88.317 37.0263,-88.2851 37.0513,-88.2433 37.0695,-88.195 37.0847,-88.17 37.0941,-88.1482 37.104,-88.1258 37.111,-88.0995 37.1118,-88.0409 37.1051)
+LINESTRING(-88.6613 37.0593,-88.5885 37.0197,-88.5096 37.0015,-88.4254 36.9951,-88.3368 36.9912)
+LINESTRING(-78.2874 35.4802,-78.2917 35.4768,-78.2958 35.4732,-78.3002 35.4695,-78.3049 35.4657,-78.3141 35.4604,-78.3234 35.4568,-78.3326 35.4531,-78.3411 35.4472,-78.3472 35.4388,-78.3507 35.43,-78.3546 35.4218,-78.3622 35.4147,-78.394 35.4006,-78.4247 35.3915,-78.454 35.3814,-78.4818 35.3644)
+LINESTRING(-78.4818 35.3644,-78.4896 35.3727,-78.497 35.3805,-78.5044 35.3884,-78.5119 35.3963,-78.5125 35.3988,-78.5132 35.4013,-78.5138 35.4038,-78.5145 35.4063,-78.5186 35.4205,-78.5231 35.435,-78.5271 35.4495,-78.5303 35.4637,-78.5306 35.4707,-78.53 35.4781,-78.5293 35.4854,-78.5298 35.4923,-78.5368 35.5108,-78.5475 35.528,-78.5581 35.5452,-78.5646 35.564,-78.5678 35.5991,-78.5697 35.6311,-78.5761 35.6628,-78.5932 35.6969)
+LINESTRING(-87.4424 37.2138,-87.4409 37.2084,-87.4396 37.2028,-87.4389 37.1972,-87.4389 37.1917,-87.4456 37.1834,-87.4515 37.1747,-87.4569 37.1658,-87.4623 37.1568,-87.4568 37.1256,-87.4604 37.1018,-87.4667 37.0802,-87.4694 37.0561,-87.4675 37.0467,-87.4637 37.0368,-87.4596 37.0268,-87.4569 37.0173,-87.4573 37.0067,-87.4605 36.9948,-87.4644 36.9827,-87.4672 36.9717,-87.4693 36.9463,-87.4707 36.9074,-87.4707 36.8703,-87.4686 36.8502,-87.4713 36.8472,-87.4739 36.8442,-87.4766 36.8412,-87.4792 36.8382)
+LINESTRING(-79.8269 35.6171,-79.8292 35.6192,-79.8314 35.6214,-79.8337 35.6235,-79.836 35.6257,-79.841 35.6522,-79.8384 35.6792,-79.8338 35.7064,-79.8329 35.7332,-79.8342 35.7704,-79.8319 35.8071,-79.8288 35.8439,-79.8275 35.8811,-79.8278 35.8958,-79.8282 35.9105,-79.8288 35.9253,-79.8294 35.94,-79.827 35.9615,-79.8207 35.9857,-79.8142 36.0098,-79.8118 36.0313)
+LINESTRING(-80.8435 35.8106,-80.8287 35.8132,-80.8178 35.8166,-80.8075 35.8211,-80.7943 35.8273,-80.78 35.8358,-80.7661 35.8461,-80.7518 35.856,-80.7362 35.8636,-80.7059 35.873,-80.675 35.8822,-80.6449 35.893,-80.6174 35.9069,-80.5928 35.922,-80.5683 35.9371,-80.5438 35.9524,-80.5201 35.9681,-80.5098 35.9761,-80.4999 35.9846,-80.4897 35.9927,-80.4782 35.9996,-80.4697 36.0032,-80.4615 36.0057,-80.4531 36.0078,-80.4442 36.0102,-80.4214 36.0185,-80.3964 36.03,-80.372 36.0426,-80.3511 36.0545,-80.3415 36.0615,-80.3323 36.0697,-80.3231 36.0777,-80.3131 36.0841,-80.2897 36.0924,-80.2706 36.0944,-80.253 36.0944,-80.234 36.0965)
+LINESTRING(-80.8435 35.8106,-80.8406 35.8274,-80.8407 35.8428,-80.842 35.8581,-80.8425 35.8747,-80.8427 35.885,-80.8434 35.8947,-80.8437 35.9043,-80.8427 35.9142,-80.8423 35.9195,-80.8427 35.9248,-80.8431 35.9302,-80.8429 35.9355,-80.8394 35.9588,-80.8358 35.9821,-80.8318 36.0052,-80.8266 36.0281,-80.8227 36.0491,-80.8189 36.0791,-80.8156 36.1096,-80.8135 36.1325,-80.8136 36.1513,-80.8149 36.1731,-80.8143 36.1938,-80.8091 36.2092,-80.8125 36.2268,-80.8181 36.2432,-80.8226 36.2601,-80.8225 36.2794,-80.8189 36.291,-80.813 36.3014,-80.806 36.3114,-80.7989 36.3218,-80.7941 36.3354,-80.794 36.3495,-80.7951 36.3637,-80.7944 36.3776,-80.7906 36.3891,-80.7851 36.4,-80.7797 36.4109,-80.776 36.4222,-80.7681 36.4479,-80.7575 36.4731,-80.7481 36.4974,-80.7438 36.5203,-80.7431 36.5485,-80.7425 36.559)
+LINESTRING(-89.1868 37.0976,-89.1884 37.0907,-89.1897 37.08,-89.1906 37.0691,-89.1909 37.0618,-89.1944 37.0586,-89.1979 37.0554,-89.1999 37.0465,-89.2019 37.0375,-89.2045 37.0273,-89.2064 37.0216,-89.2084 37.0195)
+LINESTRING(-86.4313 36.9139,-86.4425 36.8952,-86.4535 36.8744,-86.4628 36.853,-86.4688 36.8329,-86.4699 36.8238,-86.4703 36.8144,-86.4708 36.8051,-86.4724 36.7961,-86.486 36.7667,-86.5118 36.7238,-86.5416 36.683,-86.567 36.6597,-86.5688 36.6554,-86.571 36.6511,-86.5731 36.6467,-86.5746 36.6427)
+LINESTRING(-121.565 37.7428,-121.539 37.723,-121.488 37.6911,-121.434 37.6587,-121.399 37.6376,-121.353 37.6055,-121.285 37.5561,-121.22 37.5054,-121.181 37.4694,-121.136 37.3906,-121.108 37.3088,-121.085 37.231,-121.055 37.1642,-121.018 37.1139,-120.978 37.0655,-120.935 37.0187,-120.89 36.973,-120.868 36.9532,-120.846 36.9338,-120.825 36.9139,-120.805 36.8928,-120.757 36.8263,-120.706 36.7489,-120.654 36.6741,-120.604 36.6155,-120.572 36.5894,-120.536 36.5651,-120.5 36.5408,-120.467 36.5151,-120.447 36.4957,-120.429 36.4742,-120.411 36.4522,-120.393 36.4313,-120.362 36.3966,-120.33 36.362,-120.299 36.3274,-120.268 36.2925,-120.261 36.2828,-120.255 36.2721,-120.25 36.2611,-120.244 36.2509,-120.214 36.2046,-120.181 36.1591,-120.144 36.1157,-120.103 36.0757,-120.07 36.052,-120.028 36.026,-119.982 35.9967,-119.939 35.963,-119.908 35.9333,-119.877 35.9024,-119.846 35.8711,-119.817 35.84,-119.773 35.786,-119.733 35.7292,-119.694 35.6719,-119.651 35.6166)
+LINESTRING(-93.2406 37.2461,-93.2049 37.2492,-93.1758 37.256,-93.1478 37.2644,-93.1154 37.2721,-93.1001 37.274,-93.0848 37.2746,-93.0695 37.2753,-93.0541 37.2774,-93.0289 37.2945,-93.0082 37.2997,-92.9906 37.3005,-92.9745 37.3045,-92.9631 37.3113,-92.9476 37.3216,-92.9343 37.3308,-92.9209 37.3401,-92.8964 37.3734,-92.8725 37.4282,-92.8495 37.487,-92.8279 37.5326,-92.8006 37.563,-92.7741 37.5738,-92.7455 37.5818,-92.7121 37.6035,-92.6789 37.6358,-92.6472 37.6685,-92.6159 37.7015,-92.5838 37.7347,-92.5558 37.7549,-92.5294 37.7604,-92.5006 37.7597,-92.4657 37.7615,-92.4533 37.764,-92.4413 37.7674,-92.4292 37.7708,-92.4168 37.7732,-92.3928 37.7749,-92.3691 37.775,-92.3454 37.7755,-92.3213 37.7786,-92.309 37.7808,-92.2967 37.7829,-92.2844 37.7853,-92.2723 37.7884,-92.2524 37.7957,-92.2319 37.8043,-92.2114 37.8124,-92.1913 37.8182,-92.1805 37.82,-92.1709 37.824,-92.1548 37.8239,-92.1341 37.825,-92.1135 37.8274,-92.098 37.8311,-92.0477 37.8484,-92.0155 37.8631,-91.9984 37.8733,-91.983 37.8848,-91.9726 37.8925,-91.9622 37.9001,-91.9518 37.9078,-91.9434 37.9128,-91.9349 37.9177,-91.9271 37.9217,-91.9196 37.9244,-91.9048 37.9301,-91.8895 37.9375,-91.8737 37.9437,-91.8575 37.9459,-91.8438 37.9505,-91.8176 37.9645,-91.7902 37.9815,-91.7727 37.9951,-91.7339 37.9964,-91.6964 38.0039,-91.6604 38.0155,-91.6263 38.0295,-91.6181 38.0338,-91.6103 38.0386,-91.6022 38.0431,-91.5928 38.0465,-91.5805 38.0479,-91.5682 38.0495,-91.5608 38.0522,-91.5465 38.0593,-91.5388 38.0619,-91.5237 38.0642,-91.508 38.065,-91.4925 38.066,-91.4779 38.0687,-91.445 38.0832,-91.4007 38.1073,-91.3563 38.1326,-91.3234 38.1502,-91.3133 38.1546,-91.3027 38.1585,-91.2921 38.1625,-91.2822 38.1671,-91.2572 38.1821,-91.2296 38.2016,-91.2029 38.2223,-91.1808 38.2408,-91.1719 38.2509,-91.1646 38.262,-91.1564 38.2724,-91.1449 38.2808,-91.1412 38.2901,-91.1392 38.2997,-91.1299 38.3088,-91.1262 38.3139,-91.123 38.3191,-91.1107 38.3223,-91.0982 38.3241,-91.0858 38.3257,-91.0736 38.328,-91.0616 38.3345,-91.05 38.3446,-91.0352 38.3542,-91.0137 38.3592,-90.9993 38.3719,-90.9794 38.3849,-90.9622 38.3969,-90.9557 38.4068,-90.9478 38.4114,-90.9378 38.4153,-90.9292 38.4196,-90.9257 38.4258,-90.9142 38.4337,-90.8981 38.4406,-90.879 38.4517,-90.8588 38.4725,-90.8646 38.4642,-90.8446 38.486,-90.8194 38.5014,-90.7894 38.5097,-90.7552 38.5105,-90.7453 38.5086,-90.7353 38.5068,-90.7254 38.5049,-90.7154 38.503,-90.6969 38.5048,-90.6812 38.511,-90.6655 38.5172,-90.647 38.519,-90.6262 38.5143,-90.6091 38.5066,-90.5921 38.4989,-90.5713 38.4943,-90.5354 38.4983,-90.505 38.5113,-90.4747 38.5244,-90.4388 38.5283,-90.4314 38.5276,-90.424 38.5269,-90.4166 38.5263,-90.4092 38.5256,-90.4 38.5266,-90.3859 38.5354,-90.3775 38.5397,-90.3573 38.5489,-90.3413 38.5593,-90.3262 38.5707,-90.3089 38.5833,-90.2942 38.5919,-90.2795 38.5981,-90.2647 38.6025,-90.2495 38.6058,-90.2372 38.6095,-90.224 38.6152,-90.2103 38.6212,-90.1962 38.6256)
+LINESTRING(-87.4591 36.707,-87.5252 36.751,-87.5877 36.7948,-87.6496 36.8397,-87.7139 36.887,-87.7444 36.9088,-87.7951 36.9439,-87.8455 36.9763,-87.8749 36.99,-87.906 36.9954,-87.9337 37.0112,-87.9561 37.0297,-87.971 37.0431,-87.9923 37.059,-88.0124 37.0739,-88.0293 37.0888,-88.0409 37.1051)
+LINESTRING(-114.9 36.3922,-114.878 36.4033,-114.851 36.4166,-114.823 36.4327,-114.795 36.4527,-114.777 36.4673,-114.759 36.4816,-114.74 36.4958,-114.723 36.5105,-114.716 36.5195,-114.711 36.5309,-114.706 36.5421,-114.699 36.5503,-114.688 36.5567,-114.677 36.5628,-114.666 36.569,-114.656 36.576,-114.637 36.5934,-114.618 36.6146,-114.598 36.6352,-114.576 36.6508,-114.565 36.6545,-114.547 36.6597,-114.528 36.6643,-114.518 36.6661,-114.512 36.6742,-114.506 36.6823,-114.5 36.6903,-114.494 36.6977,-114.485 36.7022,-114.474 36.712,-114.463 36.7226,-114.454 36.7299,-114.416 36.7461,-114.355 36.7676,-114.294 36.786,-114.252 36.7928,-114.244 36.7877,-114.237 36.7856,-114.229 36.7854,-114.219 36.7858,-114.189 36.788,-114.173 36.7929,-114.159 36.8015,-114.133 36.8144,-114.119 36.8193,-114.107 36.8223,-114.094 36.8249,-114.081 36.8284,-114.075 36.8315,-114.068 36.8349,-114.062 36.8381,-114.054 36.84,-114.049 36.8405)
+LINESTRING(-82.3701 36.3542,-82.3614 36.3388,-82.3565 36.3278,-82.3537 36.3223,-82.3505 36.3172,-82.3428 36.3082,-82.3342 36.2993,-82.3262 36.2902,-82.3203 36.2804,-82.3202 36.2599,-82.3306 36.2365,-82.3437 36.213,-82.352 36.1924,-82.3657 36.1818,-82.3805 36.17,-82.396 36.1593,-82.4121 36.1516,-82.4146 36.1353,-82.4252 36.13,-82.4363 36.1253,-82.4459 36.1196,-82.4516 36.111,-82.4664 36.102,-82.4777 36.0932,-82.4881 36.0837,-82.5001 36.0725,-82.5051 36.072,-82.5102 36.0723,-82.5152 36.0725,-82.5201 36.0717,-82.5224 36.068,-82.5271 36.0622,-82.5358 36.0517,-82.5408 36.0496,-82.5442 36.0465,-82.547 36.0429,-82.5506 36.0394,-82.5512 36.0267,-82.559 36.017,-82.5552 36.0011,-82.5547 35.9864,-82.5562 35.9717,-82.5583 35.9561)
+LINESTRING(-82.5583 35.9561,-82.5583 35.9561)
+LINESTRING(-87.3366 36.6425,-87.3652 36.6647,-87.3918 36.6806,-87.4214 36.6936,-87.4591 36.707)
+LINESTRING(-82.2571 36.5963,-82.2622 36.5938,-82.3028 36.5684,-82.3361 36.5432,-82.3582 36.5405,-82.3821 36.5345,-82.4036 36.5251,-82.4189 36.5121,-82.4458 36.5025,-82.4881 36.4794,-82.5303 36.4538,-82.557 36.4363,-82.5659 36.429,-82.5739 36.4213,-82.5827 36.4139,-82.5938 36.4074,-82.6053 36.4039,-82.6189 36.4022,-82.6327 36.4022,-82.6449 36.4039,-82.6586 36.3946,-82.6708 36.3832,-82.6823 36.3711,-82.6937 36.3598,-82.7099 36.3576,-82.7268 36.3561,-82.7437 36.3556,-82.7602 36.3562,-82.8174 36.3278,-82.8728 36.2993,-82.9295 36.2725,-82.9902 36.2492,-83.015 36.2413,-83.0416 36.2333,-83.0683 36.2257,-83.0932 36.2193,-83.1309 36.2122,-83.1574 36.2089,-83.1825 36.2028,-83.2162 36.1868,-83.2281 36.1798,-83.2406 36.1723,-83.2534 36.1653,-83.2662 36.1598,-83.2806 36.153,-83.2951 36.1437,-83.3094 36.1338,-83.3234 36.1246,-83.3391 36.1128,-83.3542 36.0979,-83.3692 36.0826,-83.3846 36.0693)
+LINESTRING(-89.2084 37.0195,-89.2231 37.0037,-89.2589 36.9667,-89.2972 36.9284,-89.321 36.9068,-89.3823 36.9013,-89.4264 36.9007,-89.4728 36.8944,-89.5406 36.872)
+LINESTRING(-89.5406 36.872,-89.5454 36.9319,-89.5451 37.0274,-89.5427 37.1257,-89.5411 37.194,-89.5455 37.2065,-89.5555 37.2169,-89.5663 37.2272,-89.5729 37.2397,-89.5728 37.2477,-89.5714 37.2592,-89.5698 37.2697,-89.587 37.3122,-89.6074 37.3494,-89.6291 37.3861,-89.6509 37.4225,-89.6603 37.4413,-89.6684 37.4608,-89.677 37.4799,-89.688 37.4978,-89.7082 37.5223,-89.7298 37.5464,-89.7509 37.5708,-89.7697 37.5958,-89.8351 37.631,-89.8842 37.6891,-89.9247 37.7537,-89.9641 37.8086,-90.0019 37.8435,-90.0454 37.8755,-90.0915 37.9055,-90.1372 37.934,-90.1452 37.9387,-90.2151 37.9864,-90.2544 38.0265,-90.286 38.0708,-90.3328 38.1308,-90.3534 38.1445,-90.3848 38.1582)
+LINESTRING(-121.189 37.798,-121.185 37.784,-121.144 37.756,-121.103 37.7297,-121.064 37.7015,-121.028 37.6678,-121.027 37.6515,-121.016 37.6443,-121.006 37.6377,-120.999 37.63,-120.994 37.6192,-120.965 37.6036,-120.931 37.5768,-120.899 37.5471,-120.874 37.5232,-120.874 37.5102,-120.868 37.4963,-120.859 37.4839,-120.847 37.4754,-120.813 37.4568,-120.786 37.4344,-120.761 37.4104,-120.733 37.3869,-120.724 37.3866,-120.716 37.3889,-120.687 37.3778,-120.625 37.3554,-120.556 37.331,-120.509 37.3141,-120.504 37.3028,-120.494 37.299,-120.482 37.2948,-120.469 37.2921,-120.459 37.2928,-120.451 37.2882,-120.444 37.2834,-120.39 37.2427,-120.335 37.2012,-120.281 37.1586,-120.231 37.1148,-120.222 37.1039,-120.218 37.095,-120.216 37.0879,-120.213 37.0828,-120.185 37.0562,-120.154 37.0312,-120.121 37.007,-120.09 36.9823,-120.053 36.9489,-120.017 36.9142,-119.982 36.8797,-119.945 36.8469,-119.918 36.8282,-119.889 36.81,-119.86 36.791,-119.837 36.7702,-119.829 36.7591,-119.822 36.7479,-119.813 36.738,-119.799 36.7308,-119.743 36.6791,-119.7 36.642,-119.657 36.6048,-119.617 36.5665,-119.605 36.554,-119.593 36.5411,-119.581 36.5284,-119.568 36.5162,-119.555 36.5065,-119.541 36.4979,-119.527 36.4894,-119.515 36.4804,-119.487 36.4476,-119.464 36.4085,-119.441 36.3683,-119.417 36.3321,-119.412 36.3309,-119.408 36.3293,-119.398 36.3257,-119.383 36.2997,-119.365 36.2745,-119.347 36.2492,-119.331 36.2231,-119.326 36.2052,-119.327 36.1875,-119.33 36.17,-119.33 36.1528,-119.324 36.112,-119.315 36.0703,-119.305 36.0287,-119.295 35.9881,-119.283 35.9386,-119.271 35.8891,-119.259 35.8396,-119.249 35.7898,-119.263 35.7771,-119.247 35.7345,-119.235 35.6906,-119.226 35.6462,-119.219 35.6018)
+LINESTRING(-88.3368 36.9912,-88.3386 36.9852,-88.3414 36.9791,-88.3441 36.9732,-88.3457 36.9678,-88.3488 36.9469,-88.3519 36.926,-88.3546 36.9051,-88.3563 36.8841,-88.3775 36.8629,-88.4067 36.8488,-88.4379 36.8381,-88.4652 36.8271,-88.4739 36.8215,-88.4821 36.815,-88.4902 36.8085,-88.4987 36.8026,-88.5247 36.7929,-88.5627 36.7837,-88.6019 36.7764,-88.6314 36.772,-88.6345 36.7705,-88.6376 36.7687)
+LINESTRING(-93.2446 37.1218,-93.2449 37.1516,-93.2471 37.185,-93.247 37.2178,-93.2406 37.2461)
+LINESTRING(-114.9 36.3922,-114.933 36.3476,-114.974 36.3129,-115.021 36.2858,-115.071 36.2644,-115.091 36.2516,-115.118 36.229,-115.143 36.2051,-115.158 36.1887,-115.165 36.1739)
+LINESTRING(-115.165 36.1739,-115.172 36.1736,-115.195 36.1735,-115.217 36.1736,-115.24 36.1738,-115.24 36.1931,-115.241 36.2124,-115.241 36.2316,-115.241 36.2509)
+LINESTRING(-79.7798 35.4681,-79.7664 35.4265,-79.7444 35.3517,-79.7268 35.2775,-79.7265 35.2379)
+LINESTRING(-83.3846 36.0693,-83.4065 36.0554,-83.4305 36.0415,-83.4555 36.0291,-83.4802 36.0196,-83.4939 36.0171,-83.5081 36.0162,-83.5221 36.015,-83.5351 36.0112,-83.5598 35.999,-83.5783 35.9908,-83.5989 35.9863,-83.6297 35.985,-83.6326 35.9855,-83.6354 35.986,-83.6474 35.9901,-83.6603 35.9947,-83.6732 35.9988,-83.6855 36.0015,-83.6902 36.0017,-83.6948 36.0019,-83.6995 36.002,-83.7041 36.0022,-83.7206 36.0022,-83.7373 36.0017,-83.7539 36.0014,-83.7703 36.0022,-83.7919 36.0052,-83.8142 36.0087,-83.8366 36.0116,-83.8583 36.0126,-83.8717 36.0055,-83.8867 35.9987,-83.902 35.992,-83.9164 35.9849,-83.9168 35.9812,-83.9178 35.9766,-83.9196 35.9723,-83.9225 35.9696,-83.9259 35.9699,-83.9293 35.9702,-83.9447 35.9668)
+LINESTRING(-84.1028 36.5935,-84.1028 36.5934,-84.1081 36.5883,-84.1123 36.5824,-84.1162 36.5764,-84.1207 36.5708,-84.1473 36.545,-84.1784 36.5156,-84.2099 36.4875,-84.2378 36.4656,-84.2475 36.4587,-84.2579 36.4516,-84.2686 36.445,-84.2796 36.4397,-84.288 36.4365,-84.2947 36.4315,-84.2839 36.416,-84.2702 36.4047,-84.2555 36.3939,-84.2415 36.3799,-84.2341 36.3633,-84.2332 36.3464,-84.2337 36.3297,-84.2305 36.3135,-84.2253 36.3066,-84.22 36.2997,-84.2188 36.2949,-84.2184 36.2895,-84.218 36.284,-84.2171 36.2788,-84.2114 36.2748,-84.2048 36.2715,-84.1978 36.2686,-84.1911 36.2657,-84.1756 36.2481,-84.1454 36.2201,-84.1136 36.1921,-84.093 36.1748,-84.0786 36.1649,-84.0632 36.1559,-84.048 36.1467,-84.0341 36.1362,-84.0331 36.1226,-84.0278 36.1125,-84.0201 36.1036,-84.0119 36.0932,-84.014 36.0873,-84.0162 36.0815,-84.0116 36.0703,-84.0077 36.0487,-84.0064 36.0264,-84.0095 36.0129,-84.0057 36.0056,-83.9946 35.9997,-83.9842 35.9933,-83.9739 35.987,-83.9631 35.9813,-83.9544 35.975,-83.9464 35.9708,-83.9447 35.9668)
+LINESTRING(-93.2406 37.2461,-93.2493 37.2466,-93.258 37.2471,-93.2666 37.2473,-93.2753 37.2472,-93.336 37.2442,-93.356 37.2386,-93.3678 37.2279,-93.4038 37.2096,-93.4278 37.2019,-93.4538 37.1957,-93.4802 37.1902,-93.5052 37.1848,-93.5501 37.1798,-93.5956 37.1804,-93.6405 37.1779,-93.6833 37.1632,-93.7086 37.1486,-93.7512 37.1243,-93.7938 37.1008,-93.8194 37.0888,-93.8386 37.0853,-93.8527 37.0841,-93.8667 37.0815,-93.8855 37.074,-94.0024 37.0754,-94.119 37.0774,-94.2357 37.0797,-94.3524 37.0818,-94.3815 37.076,-94.4139 37.0623,-94.4476 37.0473,-94.4805 37.0376)
+LINESTRING(-83.0379 35.7866,-83.0359 35.7864,-83.0353 35.7863)
+LINESTRING(-83.3846 36.0693,-83.3608 36.0553,-83.3384 36.0431,-83.3233 36.0358,-83.3171 36.0316,-83.3123 36.0257,-83.3081 36.0163,-83.3061 36.0074,-83.3051 35.9982,-83.3034 35.988,-83.3015 35.9802,-83.2987 35.9729,-83.2939 35.9673,-83.286 35.9641,-83.2577 35.9595,-83.2185 35.9488,-83.1868 35.9307,-83.1645 35.9057,-83.1537 35.874,-83.1494 35.856,-83.1412 35.8408,-83.1285 35.8279,-83.1107 35.8166,-83.094 35.8072,-83.079 35.799,-83.0633 35.7922,-83.0443 35.7875,-83.0379 35.7866)
+LINESTRING(-83.0353 35.7863,-83.021 35.7853,-83.0126 35.7842,-82.9968 35.7783,-82.9922 35.7738)
+LINESTRING(-94.4805 37.0376,-94.4879 37.0377,-94.4953 37.0369,-94.5025 37.0357,-94.5098 37.0344,-94.5281 37.0275,-94.5416 37.0171,-94.5555 37.0067,-94.5751 36.9997,-94.5848 36.999,-94.5953 36.9993,-94.6059 36.9997,-94.616 36.9995,-94.6188 36.9975)
+LINESTRING(-97.3108 37.6086,-97.3131 37.605,-97.3158 37.6013,-97.319 37.5979,-97.3227 37.5951,-97.3268 37.5339,-97.3257 37.4707,-97.3214 37.4076,-97.3162 37.3466,-97.3184 37.3416,-97.324 37.3361,-97.3304 37.3308,-97.335 37.3264,-97.3372 37.3172,-97.3378 37.3019,-97.3376 37.2861,-97.3376 37.2756,-97.3385 37.248,-97.3389 37.2206,-97.3388 37.1932,-97.3387 37.1659,-97.3379 37.1286,-97.3369 37.0908)
+LINESTRING(-88.8909 36.5241,-88.8841 36.5235,-88.8762 36.5238,-88.8686 36.5251,-88.8624 36.5276,-88.8593 36.5304,-88.8495 36.5414,-88.8433 36.5524,-88.8383 36.564,-88.8325 36.5765,-88.8153 36.5987,-88.7932 36.6179,-88.7713 36.6368,-88.7546 36.6581,-88.752 36.6645,-88.7483 36.6746,-88.7445 36.6843,-88.7417 36.6897,-88.7293 36.7,-88.7155 36.7098,-88.7013 36.7194,-88.6876 36.7288,-88.6828 36.7294,-88.6779 36.73,-88.6731 36.7306,-88.6682 36.7311,-88.6636 36.7432,-88.6604 36.7529,-88.6534 36.7611,-88.6376 36.7687)
+LINESTRING(-119.219 35.6018,-119.213 35.5923,-119.198 35.5873,-119.193 35.5603,-119.184 35.5355,-119.169 35.5131,-119.148 35.4932,-119.129 35.4776,-119.107 35.4604,-119.084 35.4441,-119.061 35.4316,-119.058 35.4251,-119.055 35.4183,-119.053 35.4118,-119.048 35.4057,-119.046 35.3923,-119.043 35.3786,-119.041 35.365,-119.041 35.3508)
+LINESTRING(-104.763 37.626,-104.761 37.6214,-104.758 37.6159,-104.755 37.6108,-104.752 37.6073,-104.752 37.6046,-104.735 37.5844,-104.721 37.5614,-104.708 37.5384,-104.692 37.5183,-104.656 37.4784,-104.623 37.432,-104.594 37.3836,-104.567 37.3374,-104.563 37.3296,-104.559 37.3219,-104.555 37.3141,-104.55 37.3068,-104.539 37.2959,-104.523 37.2844,-104.509 37.2728,-104.501 37.2613,-104.498 37.2424,-104.498 37.2246,-104.5 37.2069,-104.502 37.188,-104.503 37.1842,-104.503 37.1804,-104.504 37.1764,-104.503 37.1729,-104.501 37.1693,-104.506 37.1608,-104.511 37.1523,-104.516 37.1441,-104.522 37.136,-104.523 37.1114,-104.521 37.0838,-104.515 37.0574,-104.503 37.0364,-104.5 37.0355,-104.497 37.0345,-104.494 37.0313,-104.493 37.0277,-104.486 37.027,-104.481 37.0241,-104.477 37.0216,-104.474 37.018,-104.472 37.0143,-104.475 36.9934)
+LINESTRING(-86.5746 36.6427,-86.5747 36.6424,-86.577 36.6348,-86.5795 36.6276,-86.5825 36.6206,-86.5865 36.6133,-86.5992 36.5952,-86.6139 36.578,-86.6285 36.5606,-86.6409 36.5421,-86.6498 36.5261,-86.6587 36.5101,-86.6678 36.4924,-86.673 36.4793,-86.6741 36.4761,-86.6753 36.4728,-86.6769 36.4689,-86.678 36.4666,-86.6826 36.4627,-86.6883 36.4593,-86.6941 36.4557,-86.6985 36.4515,-86.7054 36.4396,-86.7133 36.4231,-86.7204 36.4065,-86.7248 36.3942,-86.7393 36.3809,-86.7484 36.3701,-86.7539 36.3579,-86.7579 36.3407,-86.7596 36.3259,-86.7598 36.313,-86.76 36.3002,-86.7617 36.2853,-86.7652 36.276,-86.7719 36.2644,-86.7801 36.2541,-86.7875 36.249)
+LINESTRING(-86.7875 36.249,-86.7954 36.2627,-86.8035 36.2768,-86.8117 36.2918,-86.8182 36.3056,-86.8347 36.3112,-86.8517 36.3161,-86.8686 36.321,-86.8846 36.3265,-86.9006 36.3338,-86.9158 36.3423,-86.9306 36.3511,-86.9456 36.3591,-86.9961 36.3855,-87.0418 36.4129,-87.0861 36.4419,-87.1324 36.4727,-87.1511 36.4831,-87.1747 36.4947,-87.1971 36.5061,-87.2127 36.5164,-87.2201 36.5228,-87.2282 36.5297,-87.236 36.5366,-87.2423 36.5433,-87.2451 36.5506,-87.2462 36.5548,-87.2576 36.5724,-87.2689 36.5877,-87.2812 36.6026,-87.2939 36.6153,-87.3042 36.6227,-87.3154 36.6291,-87.3266 36.6354,-87.3366 36.6425,-87.3366 36.6425)
+LINESTRING(-115.165 36.1739,-115.149 36.1743,-115.136 36.1734,-115.122 36.171,-115.108 36.1686,-115.094 36.1673,-115.092 36.1658,-115.089 36.1635,-115.087 36.1608,-115.085 36.1585,-115.085 36.1518,-115.084 36.1451,-115.084 36.1384,-115.084 36.1317,-115.081 36.12,-115.076 36.1052,-115.07 36.0909,-115.065 36.081,-115.061 36.0764,-115.057 36.0727,-115.051 36.0695,-115.045 36.0665,-115.022 36.0507,-115 36.0328,-114.978 36.0149,-114.955 35.9992,-114.951 35.998,-114.946 35.9973,-114.941 35.9971,-114.937 35.997,-114.934 35.9952,-114.932 35.9933)
+LINESTRING(-83.9447 35.9668,-83.954 35.9648,-84.0127 35.9511,-84.0791 35.9352,-84.127 35.9231,-84.1537 35.914,-84.1911 35.8993,-84.2281 35.8835,-84.2539 35.871)
+LINESTRING(-80.3373 35.7951,-80.3754 35.7764,-80.4132 35.7633,-80.4434 35.7461,-80.461 35.7176,-80.4635 35.6964,-80.4629 35.6765,-80.4651 35.6587,-80.4758 35.6436,-80.4789 35.6399,-80.5042 35.6209,-80.5283 35.5995,-80.5493 35.5756,-80.5653 35.5491,-80.5703 35.5344,-80.5702 35.5248,-80.5684 35.5157,-80.5683 35.5024,-80.5723 35.4926,-80.5806 35.4766,-80.5945 35.4514,-80.6034 35.4478,-80.6124 35.4452,-80.6215 35.4428,-80.6305 35.4399,-80.644 35.4379,-80.664 35.428,-80.6841 35.4159,-80.698 35.4073,-80.7119 35.382,-80.7371 35.3437,-80.7638 35.3075,-80.7825 35.2883,-80.7975 35.2824,-80.8158 35.2775,-80.8348 35.2742,-80.8516 35.2733)
+LINESTRING(-80.8516 35.2733,-80.8545 35.2729)
+LINESTRING(-80.8435 35.8106,-80.8441 35.7891,-80.843 35.7698,-80.8401 35.7508,-80.8352 35.73,-80.8276 35.6984,-80.8238 35.6734,-80.8216 35.6484,-80.8191 35.6166,-80.8168 35.5942,-80.815 35.5708,-80.815 35.5474,-80.8184 35.5252,-80.821 35.5154,-80.8235 35.5055,-80.8261 35.4956,-80.8287 35.4857,-80.8316 35.4655,-80.8327 35.4413,-80.8338 35.4171,-80.8367 35.3968,-80.8414 35.3643,-80.8461 35.3319,-80.8507 35.2994,-80.8545 35.2729)
+LINESTRING(-97.3369 37.0908,-97.3371 37.0531,-97.3399 37.0159,-97.3422 36.9999)
+LINESTRING(-89.0027 36.4441,-88.9893 36.4501,-88.9652 36.4625,-88.9458 36.4729,-88.9264 36.4832,-88.9159 36.4928,-88.8976 36.51,-88.8909 36.5241)
+LINESTRING(-82.6087 35.5567,-82.5969 35.5563,-82.5856 35.5578,-82.5745 35.5597,-82.563 35.5604,-82.5507 35.5592,-82.5383 35.5572,-82.5259 35.556,-82.5137 35.5569,-82.4967 35.5625,-82.4799 35.5705,-82.4629 35.5788,-82.4456 35.5851,-82.41 35.5911,-82.3695 35.5959,-82.3313 35.6047,-82.3025 35.6225,-82.2901 35.6247,-82.2751 35.6268,-82.2608 35.6265,-82.2508 35.6215,-82.2418 35.6235,-82.2328 35.6255,-82.2165 35.6273,-82.2007 35.6266,-82.1851 35.6258,-82.169 35.6268,-82.1567 35.6312,-82.1438 35.6355,-82.1282 35.6364,-82.1126 35.6358,-82.097 35.6349,-82.0815 35.6352,-82.0719 35.6374,-82.063 35.6412,-82.0543 35.6448,-82.0451 35.6467,-82.0365 35.6438,-82.0244 35.6368,-82.0125 35.6293,-82.0045 35.625,-81.984 35.63,-81.969 35.639,-81.9571 35.6511,-81.946 35.6651,-81.9276 35.6687,-81.9094 35.6754,-81.8912 35.682,-81.8729 35.6853,-81.8327 35.6818,-81.8163 35.6746,-81.8016 35.6739,-81.7667 35.69,-81.729 35.6885,-81.6976 35.6907,-81.6668 35.6948,-81.6309 35.6987,-81.602 35.7005,-81.5707 35.7028,-81.5404 35.7073,-81.5144 35.7159,-81.4711 35.7008,-81.4415 35.6921,-81.4095 35.6893,-81.3587 35.6922,-81.3492 35.6929,-81.3387 35.6939,-81.3285 35.6957,-81.3198 35.6991,-81.3063 35.6972,-81.2934 35.6937,-81.2803 35.6903,-81.2658 35.6888,-81.2504 35.6906,-81.2376 35.6946,-81.2255 35.6991,-81.2118 35.7024,-81.1844 35.7079,-81.1572 35.7155,-81.1303 35.7239,-81.1033 35.7319,-81.0677 35.7442,-81.0248 35.7619,-80.9804 35.7806,-80.9403 35.7959,-80.9175 35.8011,-80.8917 35.8042,-80.866 35.8069,-80.8435 35.8106)
+LINESTRING(-82.5319 35.7994,-82.5332 35.7955,-82.5354 35.791,-82.5382 35.7867,-82.5416 35.7837,-82.5412 35.7576,-82.5563 35.7283,-82.5748 35.6992,-82.5849 35.6739,-82.5833 35.6591,-82.5785 35.6357,-82.5728 35.6119,-82.5681 35.5957,-82.5705 35.5938,-82.5728 35.592,-82.5752 35.5901,-82.5775 35.5882,-82.5792 35.588,-82.5809 35.5877,-82.5826 35.5874,-82.5843 35.5872,-82.5858 35.5809,-82.5884 35.5737,-82.592 35.5668,-82.5964 35.5615,-82.5996 35.5605,-82.6029 35.5596,-82.6059 35.5583,-82.6087 35.5567)
+LINESTRING(-86.7861 36.1639,-86.786 36.2301,-86.7875 36.2356,-86.7868 36.2396,-86.7862 36.2435,-86.7875 36.249)
+LINESTRING(-80.8516 35.2733,-80.8524 35.2582,-80.8551 35.2444,-80.8592 35.2317,-80.864 35.2201)
+LINESTRING(-86.7278 36.1476,-86.7552 36.1512,-86.7861 36.1639)
+LINESTRING(-84.2539 35.871,-84.2659 35.8693,-84.2791 35.8632,-84.2924 35.8566,-84.3044 35.853,-84.3163 35.8546,-84.3279 35.8594,-84.3394 35.8651,-84.3511 35.8696,-84.3608 35.8671,-84.3777 35.8599,-84.3952 35.8516,-84.4067 35.8458,-84.4312 35.8533,-84.4564 35.8618,-84.4817 35.87,-84.5064 35.8767,-84.5128 35.8823,-84.5193 35.8877,-84.5262 35.8929,-84.5332 35.8979,-84.5409 35.8987,-84.5486 35.8995,-84.5562 35.9003,-84.5639 35.901,-84.5819 35.9055,-84.5892 35.9102,-84.6016 35.9104,-84.6348 35.9014,-84.642 35.8999,-84.6493 35.899,-84.6565 35.898,-84.6633 35.8958,-84.6696 35.893,-84.6759 35.8901,-84.6822 35.8872,-84.6885 35.8843,-84.6957 35.8877,-84.7029 35.8911,-84.7101 35.8944,-84.7173 35.8978,-84.7466 35.8916,-84.762 35.8948,-84.7735 35.9005,-84.791 35.902,-84.7989 35.8988,-84.806 35.8934,-84.8142 35.8893,-84.8253 35.8898,-84.8402 35.8948,-84.8511 35.8982,-84.8624 35.9004,-84.8785 35.9012,-84.897 35.9136,-84.9118 35.9272,-84.9259 35.9411,-84.9425 35.954,-84.9546 35.9594,-84.9678 35.9623,-84.9813 35.9647,-84.994 35.9685,-85.0069 35.9743,-85.0222 35.9818,-85.0375 35.9899,-85.0503 35.9972,-85.0693 36.008,-85.0895 36.018,-85.1101 36.0275,-85.1301 36.0369,-85.1431 36.0382,-85.1558 36.0401,-85.1684 36.0424,-85.1813 36.0445,-85.2025 36.0582,-85.2236 36.0721,-85.2414 36.0874,-85.2529 36.1058,-85.2546 36.1082,-85.2562 36.1106,-85.2578 36.1131,-85.2595 36.1155,-85.2655 36.12,-85.27 36.1258,-85.2745 36.1319,-85.2808 36.1373,-85.2909 36.1389,-85.3013 36.1408,-85.3113 36.1413,-85.3205 36.1387,-85.3237 36.139,-85.327 36.1392,-85.3303 36.1394,-85.3335 36.1401,-85.3378 36.1388,-85.3421 36.1374,-85.3438 36.1351,-85.3468 36.1333,-85.3503 36.132,-85.3536 36.1311,-85.3564 36.1316,-85.3592 36.1321,-85.363 36.1347,-85.3674 36.1372,-85.3716 36.1397,-85.3745 36.1426,-85.3809 36.1439,-85.3873 36.1452,-85.3944 36.1463,-85.3996 36.1464,-85.4448 36.141,-85.4889 36.1392,-85.5333 36.14,-85.5791 36.1426,-85.6099 36.1428,-85.6328 36.1388,-85.6526 36.1309,-85.6743 36.1197,-85.6943 36.1135,-85.7134 36.1114,-85.7331 36.1122,-85.755 36.1148,-85.768 36.1165,-85.7793 36.1177,-85.7907 36.1189,-85.8037 36.1206,-85.8111 36.1216,-85.8186 36.1226,-85.826 36.1236,-85.8334 36.1247,-85.8486 36.1249,-85.862 36.1226,-85.8754 36.1203,-85.8906 36.1205,-85.9034 36.1253,-85.9129 36.1342,-85.9205 36.1453,-85.9275 36.1566,-85.9381 36.1671,-85.9515 36.1733,-85.9673 36.177,-85.9848 36.1795,-86.0002 36.1794,-86.0134 36.176,-86.0268 36.1718,-86.0422 36.1692,-86.0538 36.1699,-86.0639 36.1723,-86.0741 36.1749,-86.0858 36.1761,-86.0925 36.1753,-86.0981 36.1733,-86.1037 36.1711,-86.1104 36.1696,-86.1129 36.1697,-86.1154 36.1699,-86.1181 36.1702,-86.1207 36.1705,-86.1431 36.1761,-86.1622 36.1837,-86.1826 36.1906,-86.2087 36.1944,-86.2302 36.194,-86.2492 36.1913,-86.2676 36.1872,-86.2873 36.1824,-86.3112 36.1808,-86.3437 36.1821,-86.3781 36.184,-86.4076 36.1839,-86.4321 36.1821,-86.4586 36.1797,-86.4852 36.1765,-86.5095 36.1722,-86.517 36.1702,-86.5243 36.1679,-86.5318 36.1659,-86.5397 36.1648,-86.5568 36.1651,-86.5744 36.1665,-86.592 36.1671,-86.609 36.165,-86.6226 36.1611,-86.6346 36.1565,-86.6467 36.1518,-86.6604 36.1472,-86.6847 36.1463,-86.7187 36.1464,-86.7278 36.1476)
+LINESTRING(-104.475 36.9934,-104.475 36.993,-104.476 36.9787,-104.472 36.9636,-104.459 36.9402,-104.452 36.9368,-104.447 36.9317,-104.441 36.9263,-104.435 36.9217,-104.426 36.9186,-104.418 36.917,-104.412 36.9127,-104.408 36.9014,-104.411 36.8969,-104.414 36.892,-104.416 36.887,-104.418 36.8821)
+LINESTRING(-82.6087 35.5567,-82.6595 35.559,-82.7085 35.5544,-82.7572 35.5476,-82.8073 35.5435,-82.8126 35.5462,-82.8179 35.5489,-82.8233 35.5516,-82.8286 35.5544,-82.8519 35.5521,-82.875 35.5485,-82.898 35.5442,-82.9208 35.5399)
+LINESTRING(-82.9922 35.7738,-82.986 35.7678,-82.9806 35.7545,-82.9809 35.7399,-82.9831 35.7317,-82.9889 35.7123,-82.9911 35.7041,-82.9897 35.6974,-82.9829 35.6945,-82.9735 35.6923,-82.9643 35.6876,-82.9579 35.6793,-82.9559 35.6704,-82.9569 35.6608,-82.9592 35.6505,-82.9616 35.6382,-82.9632 35.6324,-82.966 35.6264,-82.9699 35.6212,-82.9723 35.6154,-82.9723 35.6047,-82.9678 35.5956,-82.9602 35.5871,-82.9508 35.5786,-82.9417 35.5691,-82.9345 35.5601,-82.9269 35.5513,-82.9208 35.5399)
+LINESTRING(-104.418 36.8821,-104.415 36.8629,-104.412 36.8433,-104.41 36.8242,-104.41 36.8069)
+LINESTRING(-80.864 35.2201,-80.8671 35.2127,-80.8709 35.2059,-80.8744 35.1998,-80.8773 35.1942,-80.882 35.1833,-80.8865 35.1718,-80.8914 35.1607,-80.8969 35.1508,-80.9127 35.1259,-80.9272 35.1007,-80.9275 35.1003)
+LINESTRING(-80.8545 35.2729,-80.8706 35.2706,-80.8836 35.2652,-80.8957 35.2591,-80.9118 35.2544,-80.9353 35.2544,-80.9604 35.2594,-80.9876 35.2652,-81.0168 35.2676,-81.0285 35.2691,-81.0389 35.2711,-81.0486 35.2733,-81.0585 35.2754,-81.072 35.2757,-81.0861 35.2735,-81.1005 35.2709,-81.1145 35.2704,-81.1209 35.2707,-81.1271 35.2715,-81.134 35.2731,-81.142 35.2745,-81.1492 35.2758,-81.1564 35.277,-81.1889 35.2805,-81.2259 35.279,-81.2615 35.2721,-81.2902 35.2593,-81.2989 35.2512,-81.3064 35.2418,-81.3143 35.2326,-81.3245 35.2253,-81.3524 35.2115,-81.3801 35.1972,-81.4076 35.1827,-81.435 35.1681)
+LINESTRING(-82.3994 35.2855,-82.4207 35.3104,-82.442 35.3395,-82.4622 35.3673,-82.4805 35.3883,-82.4915 35.3958,-82.5044 35.402,-82.5165 35.4081,-82.5248 35.415,-82.537 35.4363,-82.5455 35.4571,-82.5547 35.4778,-82.5688 35.4985,-82.5798 35.5104,-82.5941 35.5266,-82.6058 35.5433,-82.6087 35.5567)
+LINESTRING(-119.041 35.3508,-119.037 35.3199,-119.026 35.2637,-119.016 35.2088,-119.01 35.1822,-118.996 35.1425,-118.981 35.1026,-118.967 35.0625,-118.956 35.0222)
+LINESTRING(-119.651 35.6166,-119.644 35.6072,-119.637 35.5974,-119.63 35.5876,-119.622 35.5785,-119.584 35.5406,-119.543 35.5038,-119.498 35.4689,-119.453 35.4365,-119.402 35.4024,-119.349 35.3674,-119.298 35.3311,-119.251 35.2928,-119.178 35.2246,-119.106 35.1558,-119.032 35.0878,-118.956 35.0222)
+LINESTRING(-115.393 35.6114,-115.384 35.6367,-115.376 35.6629,-115.368 35.6892,-115.362 35.715,-115.36 35.7252,-115.36 35.7356,-115.358 35.7459,-115.355 35.7557,-115.313 35.8106,-115.262 35.8565,-115.213 35.9003,-115.181 35.949,-115.18 35.9743,-115.179 36.0219,-115.179 36.0711,-115.18 36.1014,-115.178 36.1229,-115.174 36.1463,-115.167 36.169,-115.165 36.1739)
+LINESTRING(-82.1709 35.1946,-82.1807 35.2044,-82.187 35.2144,-82.1928 35.2257,-82.1991 35.2366,-82.2067 35.2452,-82.2334 35.2532,-82.2708 35.2519,-82.31 35.2489,-82.342 35.2517,-82.356 35.258,-82.3715 35.2673,-82.3865 35.2772,-82.3994 35.2855)
+LINESTRING(-78.4818 35.3644,-78.5052 35.3522,-78.5134 35.3423,-78.5177 35.331,-78.5286 35.3142,-78.5373 35.3056,-78.5472 35.2979,-78.5571 35.2902,-78.5661 35.2819,-78.5801 35.2645,-78.5929 35.2461,-78.6059 35.228,-78.6206 35.2112,-78.6566 35.1793,-78.6958 35.1473,-78.7337 35.1142,-78.7652 35.0792,-78.7744 35.0631,-78.7881 35.037,-78.8016 35.0114,-78.8103 34.997,-78.841 34.9748,-78.8783 34.9591,-78.9154 34.9437,-78.9455 34.9221,-78.9512 34.9135,-78.9562 34.9025,-78.9602 34.892,-78.9641 34.8816,-78.985 34.82,-78.9942 34.7712,-78.9995 34.7233,-79.0088 34.6646,-79.0223 34.6415,-79.0471 34.6254,-79.0767 34.6132,-79.1045 34.6018)
+LINESTRING(-89.5406 36.872,-89.54 36.8403,-89.5401 36.8086,-89.5402 36.777,-89.5399 36.7454,-89.5391 36.6891,-89.5431 36.6531,-89.5563 36.6189,-89.583 36.5677,-89.5896 36.5537,-89.5964 36.5378,-89.6032 36.5225,-89.6098 36.5103,-89.6314 36.4842,-89.6568 36.4592,-89.6809 36.4334,-89.6985 36.4048,-89.7048 36.3793,-89.7058 36.3527,-89.7054 36.326,-89.7076 36.2998,-89.7133 36.2807,-89.7191 36.2615,-89.7273 36.2355,-89.7321 36.2219,-89.7359 36.2169,-89.7408 36.212,-89.7458 36.2071,-89.75 36.2019)
+LINESTRING(-119.041 35.3508,-119.009 35.351,-118.977 35.3512,-118.946 35.3514,-118.914 35.3516,-118.892 35.3485,-118.858 35.3413,-118.824 35.3328,-118.802 35.326,-118.792 35.3196,-118.784 35.3116,-118.775 35.3036,-118.766 35.2972,-118.744 35.2882,-118.721 35.2807,-118.697 35.2744,-118.673 35.2693,-118.664 35.2674,-118.655 35.2656,-118.63 35.2602,-118.608 35.2534,-118.588 35.2427,-118.571 35.2259,-118.562 35.2226,-118.554 35.2171,-118.548 35.2166,-118.523 35.2,-118.501 35.1933,-118.481 35.1828,-118.462 35.155,-118.453 35.1457,-118.44 35.1406,-118.424 35.1371,-118.41 35.1328,-118.406 35.1275,-118.401 35.1223,-118.379 35.1165,-118.359 35.1126,-118.339 35.1099,-118.316 35.1078,-118.311 35.1032,-118.306 35.0986,-118.284 35.1031,-118.252 35.1116,-118.223 35.1189,-118.205 35.1198,-118.197 35.122,-118.183 35.1125,-118.174 35.0942,-118.169 35.0756)
+LINESTRING(-94.6188 36.9975,-94.6268 36.9918,-94.637 36.9827,-94.6482 36.9731,-94.6593 36.9635,-94.671 36.954,-94.683 36.9453,-94.7194 36.9312,-94.7693 36.918,-94.8166 36.9022,-94.8451 36.8802,-94.8613 36.8476,-94.8765 36.8144,-94.8913 36.781,-94.9065 36.748,-94.9101 36.7419,-94.9153 36.7355,-94.9216 36.7299,-94.9284 36.7261,-94.9551 36.7161,-94.9818 36.7061,-95.0084 36.6961,-95.0351 36.686,-95.0582 36.6771,-95.0817 36.6672,-95.1042 36.656,-95.1246 36.6436,-95.131 36.6387,-95.1371 36.6338,-95.1508 36.6249,-95.1628 36.6209,-95.1742 36.6166,-95.1881 36.6055,-95.2001 36.5914,-95.2103 36.5762,-95.2188 36.5617)
+LINESTRING(-118.169 35.0756,-118.168 35.0737,-118.168 35.0591,-118.163 35.0461)
+LINESTRING(-89.331 36.0905,-89.3094 36.1063,-89.2884 36.1212,-89.2686 36.1372,-89.2507 36.1562,-89.231 36.195,-89.2231 36.2354,-89.2183 36.2721,-89.2078 36.2999,-89.1971 36.3102,-89.1811 36.3225,-89.1643 36.3341,-89.1513 36.3427)
+LINESTRING(-78.4818 35.3644,-78.4632 35.3446,-78.4443 35.3245,-78.4253 35.3043,-78.4064 35.2842,-78.3985 35.2717,-78.3901 35.254,-78.3819 35.2373,-78.3744 35.2275,-78.3635 35.2221,-78.3519 35.2182,-78.34 35.2148,-78.3286 35.2109,-78.3025 35.199,-78.2778 35.1852,-78.2546 35.1697,-78.2331 35.1528,-78.1848 35.1032,-78.145 35.0491,-78.1086 34.9931,-78.0673 34.9351,-78.0599 34.9284,-78.0417 34.9002,-78.0224 34.8709,-78.0042 34.8412,-77.9895 34.8119,-77.9768 34.7726,-77.9671 34.7326,-77.9541 34.6934,-77.9315 34.6569,-77.9324 34.6505,-77.9333 34.6442,-77.9341 34.6378,-77.935 34.6315,-77.9272 34.6193,-77.9202 34.6046,-77.9144 34.5894,-77.9102 34.5761,-77.8899 34.4975,-77.8798 34.4399,-77.8767 34.3808,-77.8776 34.3058,-77.8777 34.2983,-77.8851 34.2887,-77.8889 34.2802,-77.892 34.2696,-77.8998 34.2559,-77.8758 34.2441)
+LINESTRING(-89.75 36.2019,-89.7209 36.1777,-89.6907 36.1549,-89.6594 36.133,-89.6336 36.1159)
+LINESTRING(-89.6336 36.1159,-89.6273 36.1117,-89.6215 36.1081,-89.6157 36.1044,-89.6101 36.1006,-89.6048 36.0961,-89.5616 36.0888,-89.5005 36.0782,-89.4404 36.0699,-89.4002 36.0695,-89.3829 36.0739,-89.3654 36.0793,-89.348 36.085,-89.331 36.0905)
+LINESTRING(-79.1045 34.6018,-79.1209 34.5886,-79.1337 34.583,-79.1481 34.5795,-79.169 34.5727,-79.1825 34.5659,-79.1959 34.5572,-79.2093 34.5483,-79.2229 34.5408,-79.2354 34.5368,-79.2495 34.5339,-79.2637 34.5309,-79.2766 34.5267,-79.2911 34.5193,-79.3063 34.5103,-79.3121 34.5068)
+LINESTRING(-81.435 35.1681,-81.435 35.1681,-81.4463 35.1636,-81.4573 35.1584,-81.4685 35.1602,-81.4935 35.1502,-81.5328 35.1345,-81.5704 35.1187,-81.5902 35.1083,-81.6042 35.1079,-81.6163 35.1052,-81.6282 35.1024,-81.6418 35.1017,-81.6501 35.0976,-81.6594 35.0954,-81.6692 35.0941,-81.6788 35.0928,-81.6898 35.0895,-81.7009 35.0844,-81.7123 35.079,-81.724 35.0749,-81.7363 35.0743,-81.7482 35.0734,-81.7596 35.0714,-81.7702 35.0678,-81.799 35.0544,-81.8215 35.0451,-81.8449 35.0372,-81.8764 35.028,-81.9094 35.0162,-81.9418 35.0013,-81.9735 34.9853,-82.0048 34.9702)
+LINESTRING(-82.0048 34.9702,-82.0193 34.9905,-82.0361 35.0213,-82.0507 35.0531,-82.0584 35.0764,-82.0738 35.0898,-82.0897 35.1134,-82.1053 35.1388,-82.1197 35.1576,-82.1348 35.1693,-82.1512 35.1797,-82.167 35.1908,-82.1709 35.1946)
+LINESTRING(-89.75 36.2019,-89.7521 36.198,-89.7542 36.1942,-89.7512 36.1781,-89.7498 36.1612,-89.7496 36.1443,-89.7504 36.1279,-89.7827 36.1036,-89.8241 36.0689,-89.8596 36.032,-89.8744 36.0014)
+LINESTRING(-97.3172 36.3949,-97.2535 36.3972,-97.1893 36.3956,-97.1252 36.3919,-97.0618 36.3884)
+LINESTRING(-97.3422 36.9999,-97.3432 36.9935,-97.3469 36.971,-97.3496 36.9483,-97.3502 36.9256,-97.3481 36.9114,-97.3442 36.8971,-97.3406 36.8831,-97.3393 36.8696,-97.3417 36.8152,-97.3442 36.7608,-97.3461 36.7064,-97.348 36.6519,-97.3494 36.631,-97.3515 36.608,-97.3524 36.5852,-97.3507 36.5646,-97.345 36.5436,-97.3371 36.5222,-97.3284 36.5008,-97.3205 36.4803,-97.3165 36.4602,-97.316 36.4378,-97.3169 36.4154,-97.3172 36.3949)
+LINESTRING(-116.986 34.9135,-116.978 34.9207,-116.905 34.9228,-116.839 34.9283,-116.773 34.9412,-116.707 34.9597,-116.676 34.9712,-116.646 34.9852,-116.615 34.9997,-116.585 35.0129,-116.558 35.0228,-116.53 35.032,-116.502 35.0413,-116.476 35.0517,-116.466 35.0571,-116.456 35.064,-116.446 35.0711,-116.437 35.0774,-116.406 35.0945,-116.387 35.1013,-116.365 35.1039,-116.33 35.1079,-116.318 35.1111,-116.308 35.1151,-116.297 35.1181,-116.281 35.1183,-116.246 35.1327,-116.212 35.148,-116.181 35.1663,-116.156 35.1898,-116.131 35.1977,-116.121 35.201,-116.114 35.2088,-116.098 35.2352,-116.091 35.2448,-116.088 35.251,-116.045 35.2805,-116.001 35.312,-115.956 35.3423,-115.91 35.3683,-115.845 35.3921,-115.736 35.4273,-115.633 35.4591,-115.586 35.473,-115.557 35.4719,-115.528 35.4689,-115.499 35.4648,-115.47 35.4604,-115.451 35.468,-115.433 35.5007,-115.418 35.5381,-115.405 35.5763,-115.393 35.6114,-115.393 35.6114)
+LINESTRING(-84.2539 35.871,-84.2604 35.8634,-84.2648 35.857,-84.2682 35.8506,-84.2721 35.8427,-84.2842 35.8313,-84.3021 35.8235,-84.3204 35.8158,-84.3336 35.8046,-84.3412 35.8014,-84.3488 35.7983,-84.3566 35.7955,-84.3645 35.7928,-84.3851 35.7666,-84.408 35.7431,-84.4318 35.7204,-84.4549 35.6964,-84.4955 35.6507,-84.5346 35.6074,-84.5743 35.5644,-84.6168 35.5198,-84.6592 35.4775,-84.7004 35.4363,-84.7383 35.393,-84.7705 35.345,-84.7808 35.3421,-84.791 35.3401,-84.8007 35.3372,-84.8096 35.3313,-84.8141 35.3247,-84.8183 35.3153,-84.8223 35.3054,-84.8259 35.2974,-84.8387 35.2725,-84.8529 35.2442,-84.8689 35.217,-84.8871 35.1951)
+LINESTRING(-97.0618 36.3884,-97.0282 36.3749,-97.0118 36.3577,-97.0012 36.3371,-96.9849 36.3136,-96.9697 36.2978,-96.9533 36.2821,-96.9363 36.2668,-96.9192 36.2521)
+LINESTRING(-117.008 34.8862,-117 34.8935,-116.993 34.9037,-116.986 34.9135)
+LINESTRING(-88.8569 35.662,-88.8288 35.6688,-88.8018 35.6732,-88.7745 35.6764,-88.7454 35.6796,-88.7113 35.6897,-88.6572 35.7097,-88.6033 35.7307,-88.5697 35.744,-88.5476 35.7503,-88.5218 35.7551,-88.4955 35.7596,-88.4718 35.7646,-88.4343 35.7753,-88.3971 35.7863,-88.3597 35.7966,-88.3216 35.8053,-88.3065 35.8082,-88.2919 35.8112,-88.2776 35.8149,-88.2631 35.8201,-88.2063 35.8153,-88.1569 35.8195,-88.1104 35.8332,-88.0626 35.8569,-88.0393 35.8668,-88.0151 35.871,-87.9896 35.8714,-87.9625 35.8695,-87.9548 35.8688,-87.9471 35.8681,-87.9394 35.8675,-87.9318 35.8668,-87.8961 35.8664,-87.8773 35.8713,-87.8639 35.8779,-87.8441 35.8827,-87.8103 35.8822,-87.7731 35.8774,-87.7361 35.8726,-87.7025 35.8721,-87.6904 35.8827,-87.6711 35.8894,-87.6506 35.8943,-87.6344 35.8998,-87.615 35.9113,-87.5958 35.9238,-87.5769 35.9366,-87.5582 35.949,-87.5531 35.9566,-87.5493 35.9621,-87.5393 35.9693,-87.5303 35.9714,-87.521 35.973,-87.5127 35.975,-87.4956 35.9832,-87.4783 35.9928,-87.4599 35.9986,-87.4397 35.9958,-87.409 36.0082,-87.3658 36.0182,-87.3206 36.0246,-87.2839 36.0262,-87.2742 36.0249,-87.2645 36.0226,-87.2549 36.0204,-87.2451 36.0193,-87.231 36.0213,-87.2179 36.0252,-87.2043 36.027,-87.1888 36.0231,-87.1554 36.0409,-87.1343 36.0609,-87.1104 36.0784,-87.0686 36.0886,-87.0359 36.0798,-87.0177 36.0759,-87.0006 36.0738,-86.9711 36.0705,-86.962 36.0741,-86.9347 36.089,-86.913 36.1051,-86.8916 36.1215,-86.8698 36.1367,-86.8569 36.1391,-86.8444 36.1428,-86.832 36.1467,-86.8193 36.1498,-86.8029 36.1585,-86.7916 36.1623,-86.7861 36.1639)
+LINESTRING(-95.9755 36.1612,-95.9528 36.163,-95.9299 36.1638,-95.9071 36.164,-95.8842 36.1643,-95.856 36.1644,-95.8169 36.1644,-95.7808 36.1649,-95.7621 36.1665,-95.7463 36.1752,-95.732 36.1862,-95.7185 36.1982,-95.7054 36.2098,-95.6532 36.2542,-95.5989 36.2953,-95.5384 36.3289,-95.4672 36.3505,-95.4396 36.3755,-95.4154 36.4043,-95.3904 36.4327,-95.3603 36.4567,-95.316 36.4844,-95.2836 36.5072,-95.2541 36.5311,-95.2188 36.5617)
+LINESTRING(-95.9246 36.2771,-95.9276 36.2549,-95.9342 36.2335,-95.9401 36.2122,-95.9407 36.1907,-95.9494 36.1833,-95.9581 36.1759,-95.9668 36.1686,-95.9755 36.1612)
+LINESTRING(-95.9864 36.1453,-95.9837 36.1492,-95.9755 36.1612)
+LINESTRING(-95.9755 36.1612,-95.9886 36.1619,-96.0012 36.1621,-96.0138 36.1615,-96.0269 36.1602,-96.0378 36.155,-96.0603 36.1476,-96.0848 36.1409,-96.1018 36.1375,-96.1144 36.1401,-96.1353 36.1465,-96.1556 36.1535,-96.166 36.1581,-96.1766 36.1553,-96.188 36.1532,-96.1996 36.1519,-96.2107 36.1515,-96.2166 36.1557,-96.2225 36.16,-96.2287 36.164,-96.2352 36.1675,-96.2393 36.1669,-96.2433 36.1663,-96.2473 36.1657,-96.2513 36.1651,-96.262 36.1786,-96.2726 36.1921,-96.2832 36.2055,-96.2944 36.2187,-96.3216 36.2197,-96.3487 36.221,-96.3754 36.2222,-96.4021 36.2234,-96.4504 36.2233,-96.4889 36.2202,-96.5265 36.2156,-96.5719 36.2111,-96.6298 36.2097,-96.7235 36.2101,-96.8155 36.2126,-96.8683 36.2181,-96.8808 36.2243,-96.8948 36.2337,-96.9083 36.2438,-96.9192 36.2521)
+LINESTRING(-96.9192 36.2521,-96.95 36.2229,-96.9835 36.194,-97.0209 36.1691,-97.0633 36.152)
+LINESTRING(-96.0082 36.1134,-96 36.1254,-95.9919 36.1373,-95.9864 36.1453)
+LINESTRING(-79.3121 34.5068,-79.3215 34.501,-79.3357 34.4925,-79.3701 34.451,-79.4242 34.4105,-79.4844 34.3738,-79.5371 34.3439,-79.5571 34.3353,-79.5797 34.3285,-79.6023 34.3215,-79.6222 34.3122,-79.6418 34.2995,-79.6571 34.2901,-79.6738 34.2821,-79.698 34.2736,-79.7119 34.2693,-79.7259 34.265,-79.7399 34.2608,-79.7538 34.2565,-79.7824 34.2446,-79.8051 34.2304,-79.8259 34.2142,-79.8481 34.1961)
+LINESTRING(-81.8723 34.5134,-81.8894 34.5369,-81.8929 34.5565,-81.8917 34.5762,-81.8945 34.6,-81.9008 34.6162,-81.9098 34.6327,-81.9197 34.6489,-81.9287 34.6643,-81.9299 34.6667,-81.931 34.6692,-81.9417 34.7023,-81.9474 34.7365,-81.952 34.7709,-81.959 34.8048,-81.9659 34.8226,-81.9752 34.8395,-81.985 34.8561,-81.9934 34.8731,-81.9962 34.8842,-81.9963 34.8959,-81.9952 34.9077,-81.994 34.919,-81.9936 34.9222,-81.9932 34.9253,-81.9932 34.9285,-81.9942 34.9317,-82.0024 34.9391,-82.0057 34.9493,-82.0059 34.9603,-82.0048 34.9702)
+LINESTRING(-82.0048 34.9702,-82.0176 34.9676,-82.0303 34.9656,-82.0428 34.9635,-82.0552 34.9611,-82.1155 34.9126,-82.1651 34.8926,-82.2162 34.8798,-82.2806 34.8531,-82.2834 34.8487,-82.2863 34.8444,-82.2892 34.84,-82.292 34.8357,-82.2957 34.8345,-82.2993 34.8333,-82.3029 34.8322,-82.3065 34.831,-82.3028 34.8289,-82.2992 34.8267,-82.2955 34.8246,-82.2918 34.8225,-82.2863 34.8065,-82.2839 34.7877,-82.2851 34.7689,-82.2906 34.753,-82.2736 34.7362,-82.2561 34.7175,-82.2376 34.7,-82.2174 34.687,-82.1934 34.6746,-82.1746 34.6627,-82.1599 34.6526,-82.1481 34.6455,-82.1406 34.6425,-82.1325 34.64,-82.1243 34.6376,-82.1166 34.6349,-82.0864 34.619,-82.0618 34.6003,-82.0395 34.5795,-82.0162 34.5572,-81.9904 34.5521,-81.9583 34.5412,-81.9269 34.5283,-81.9035 34.5168,-81.8959 34.5172,-81.8877 34.5165,-81.8796 34.5152,-81.8723 34.5134)
+LINESTRING(-96.0119 36.0106,-96.0116 36.0363,-96.0093 36.062,-96.0074 36.0877,-96.0082 36.1134)
+LINESTRING(-114.09 35.2076,-114.049 35.2222,-114.003 35.2196,-113.957 35.2089,-113.914 35.1997,-113.893 35.1981,-113.873 35.1976,-113.852 35.1968,-113.831 35.1942,-113.816 35.1897,-113.802 35.1836,-113.788 35.1775,-113.774 35.1729,-113.754 35.1691,-113.732 35.1658,-113.711 35.163,-113.691 35.1609)
+LINESTRING(-84.8871 35.1951,-84.9016 35.1892,-84.9186 35.1762,-84.9351 35.1616,-84.9479 35.1507,-84.9668 35.1456,-84.9995 35.1358,-85.0307 35.126,-85.045 35.1211,-85.0502 35.1139,-85.0545 35.1049,-85.0587 35.0966,-85.0634 35.0913,-85.0684 35.0892,-85.0738 35.088,-85.0794 35.0871,-85.0848 35.0861,-85.1087 35.0776,-85.1274 35.0665,-85.1442 35.0529,-85.1623 35.0367,-85.1741 35.0264,-85.1836 35.0191,-85.1939 35.0129,-85.2074 35.0049)
+LINESTRING(-85.1976 34.9867,-85.1981 34.9874,-85.2074 35.0049)
+LINESTRING(-86.7278 36.1476,-86.7302 36.1363,-86.7307 36.1297,-86.7303 36.1231,-86.729 36.1157,-86.7178 36.1013,-86.7059 36.0857,-86.6936 36.0705,-86.6812 36.057,-86.6694 36.0479,-86.6558 36.0399,-86.642 36.0319,-86.6297 36.0228,-86.62 36.0126,-86.6102 36.0025,-86.6025 35.9976,-86.5937 35.9941,-86.5852 35.9909,-86.5782 35.9872,-86.5542 35.9663,-86.5247 35.9374,-86.4942 35.9069,-86.4673 35.8816,-86.4411 35.8595,-86.4132 35.8357,-86.3872 35.8108,-86.3663 35.7853,-86.3606 35.7771,-86.3545 35.7688,-86.3487 35.7606,-86.3435 35.7522,-86.3323 35.7395,-86.3115 35.7122,-86.2912 35.684,-86.2814 35.6684,-86.2752 35.6621,-86.2625 35.6483,-86.2499 35.6342,-86.2439 35.6272,-86.2419 35.6213,-86.2402 35.6151,-86.2371 35.6027,-86.2361 35.5971,-86.2357 35.5913,-86.2345 35.5856,-86.1983 35.5564,-86.1522 35.5364,-86.1072 35.518,-86.0774 35.499,-86.0706 35.4913,-86.0345 35.4404,-85.9918 35.3935,-85.947 35.3478,-85.9043 35.3007,-85.8969 35.2907,-85.8905 35.2808,-85.8843 35.2706,-85.8773 35.2602,-85.8753 35.2489,-85.8753 35.2428,-85.8734 35.2371,-85.8582 35.243,-85.8489 35.2404,-85.8409 35.2374,-85.8331 35.2342,-85.8244 35.2311,-85.8212 35.2145,-85.8163 35.1973,-85.8071 35.1824,-85.7908 35.1725,-85.7784 35.1568,-85.7657 35.1406,-85.7537 35.1241,-85.7432 35.1075,-85.7389 35.0907,-85.7411 35.0801,-85.7356 35.0689,-85.708 35.0507)
+LINESTRING(-85.2074 35.0049,-85.2119 35.0012,-85.2182 34.9994,-85.2253 34.999,-85.233 34.9993,-85.31 35.0207,-85.319 35.0206,-85.327 35.0192,-85.335 35.0179,-85.344 35.0181,-85.3485 35.0191,-85.3527 35.0208,-85.3692 35.02,-85.3845 35.0178,-85.3972 35.0125,-85.4063 35.0028,-85.4122 34.9925,-85.4185 34.9844)
+LINESTRING(-118.163 35.0461,-118.16 35.0378,-118.156 35.0245,-118.154 35.0175,-118.156 34.9987,-118.16 34.9611,-118.165 34.9208,-118.168 34.8937,-118.17 34.8406,-118.172 34.788,-118.172 34.7362,-118.17 34.6853,-118.165 34.6815,-118.161 34.6777,-118.157 34.6739,-118.153 34.6701,-118.153 34.6534,-118.152 34.6367,-118.152 34.62,-118.152 34.6033,-118.143 34.5973,-118.134 34.5913,-118.134 34.5657,-118.128 34.5503,-118.119 34.5376,-118.11 34.5201,-118.113 34.512,-118.119 34.5083,-118.123 34.5038,-118.126 34.4988,-118.13 34.4935,-118.141 34.4878,-118.152 34.4878,-118.163 34.4907,-118.174 34.4936,-118.181 34.4938,-118.189 34.4929,-118.196 34.492,-118.203 34.4921,-118.215 34.4959,-118.222 34.5011,-118.231 34.5051,-118.248 34.5053,-118.254 34.5003,-118.261 34.4946,-118.268 34.4928,-118.276 34.4911,-118.286 34.481,-118.302 34.4724,-118.321 34.4664,-118.336 34.464,-118.359 34.4451,-118.381 34.4359,-118.406 34.4317,-118.437 34.4277,-118.445 34.4229,-118.451 34.4138,-118.456 34.4039,-118.463 34.3966,-118.489 34.3811,-118.5 34.3701,-118.504 34.3567,-118.508 34.3338)
+LINESTRING(-118.956 35.0222,-118.943 34.9955,-118.935 34.9588,-118.928 34.9219,-118.918 34.8944,-118.898 34.8822,-118.886 34.8703,-118.875 34.8571,-118.861 34.8405,-118.866 34.8341,-118.871 34.8279,-118.877 34.822,-118.884 34.8166,-118.883 34.8132,-118.883 34.8097,-118.881 34.8076,-118.88 34.8054,-118.878 34.8032,-118.876 34.8011,-118.867 34.7987,-118.857 34.7969,-118.847 34.7952,-118.838 34.7927,-118.8 34.7693,-118.797 34.7424,-118.793 34.7083,-118.755 34.6632,-118.75 34.6491,-118.74 34.641,-118.728 34.6341,-118.716 34.6239,-118.711 34.6149,-118.709 34.6048,-118.708 34.5944,-118.706 34.5843,-118.68 34.5682,-118.651 34.541,-118.627 34.5107,-118.613 34.4855,-118.611 34.4773,-118.611 34.467,-118.611 34.4575,-118.61 34.4519,-118.607 34.4482,-118.604 34.4445,-118.601 34.4438,-118.598 34.4431,-118.594 34.4424,-118.591 34.4417,-118.582 34.4276,-118.57 34.4016,-118.558 34.3729,-118.547 34.3505,-118.537 34.3462,-118.527 34.3422,-118.518 34.3382,-118.508 34.3338)
+LINESTRING(-85.708 35.0507,-85.7035 35.055,-85.6911 35.0644,-85.6724 35.0731,-85.6492 35.0756,-85.6226 35.0656,-85.5833 35.0445,-85.5447 35.0216,-85.5202 35.006,-85.5194 35.0038,-85.5177 34.9988,-85.5142 34.9925,-85.508 34.9864,-85.5015 34.9856,-85.4949 34.9866,-85.4884 34.9885,-85.4821 34.9899,-85.4717 34.9853,-85.4707 34.9847)
+LINESTRING(-85.4185 34.9844,-85.4189 34.9839,-85.4276 34.9769,-85.4418 34.9709)
+LINESTRING(-85.4707 34.9847,-85.462 34.98,-85.4523 34.975,-85.4418 34.9709)
+LINESTRING(-95.9864 36.1453,-95.9222 36.127,-95.871 36.1057,-95.8205 36.0828,-95.7699 36.0623,-95.7578 36.0585,-95.7452 36.055,-95.7328 36.0513,-95.7211 36.0469,-95.6969 36.0344,-95.6716 36.0189,-95.6471 36.0023,-95.6258 35.9866,-95.5997 35.9608,-95.5924 35.9456,-95.5748 35.9296,-95.4918 35.8891,-95.4669 35.8759,-95.4412 35.8642,-95.4132 35.8559)
+LINESTRING(-114.753 34.8797,-114.76 34.8759,-114.794 34.8793,-114.834 34.8701,-114.877 34.8596,-114.923 34.8592,-114.948 34.8506,-114.976 34.8414,-115.004 34.8333,-115.03 34.8279,-115.037 34.8275,-115.044 34.8278,-115.051 34.8282,-115.058 34.828,-115.141 34.8194,-115.224 34.8111,-115.307 34.8031,-115.39 34.7951,-115.428 34.7869,-115.464 34.7722,-115.499 34.7555,-115.535 34.741,-115.588 34.7296,-115.662 34.7204,-115.737 34.7153,-115.791 34.7163,-115.814 34.7201,-115.838 34.7256,-115.861 34.7317,-115.883 34.7378,-115.921 34.7292,-115.966 34.7247,-116.006 34.7204,-116.031 34.7127,-116.044 34.7162,-116.058 34.7219,-116.07 34.7273,-116.078 34.7295,-116.129 34.7277,-116.193 34.727,-116.256 34.7302,-116.306 34.7401,-116.322 34.748,-116.336 34.7571,-116.351 34.7662,-116.366 34.774,-116.417 34.7823,-116.513 34.7941,-116.609 34.8049,-116.659 34.8105,-116.683 34.8129,-116.708 34.8146,-116.733 34.8162,-116.758 34.8183,-116.793 34.8231,-116.833 34.8301,-116.873 34.8382,-116.908 34.8462,-116.933 34.8553,-116.958 34.8674,-116.983 34.8789,-117.008 34.8862)
+LINESTRING(-82.3076 34.8304,-82.3324 34.8175,-82.3598 34.8046,-82.3885 34.7946,-82.4172 34.7906,-82.4293 34.7909,-82.4403 34.7907,-82.4507 34.7885,-82.4607 34.7828,-82.4762 34.7642,-82.4873 34.7403,-82.4965 34.7153,-82.5066 34.6937,-82.5111 34.6884,-82.5235 34.6818,-82.5585 34.6644,-82.5859 34.646,-82.6123 34.6266,-82.6373 34.6088,-82.6768 34.5897,-82.7219 34.5769,-82.768 34.5655,-82.8107 34.5508,-82.82 34.5457,-82.8286 34.5397,-82.837 34.5336,-82.8459 34.528,-82.8723 34.5192,-82.9089 34.5128,-82.9469 34.508,-82.9775 34.5045,-82.9902 34.5021,-83.0005 34.4993)
+LINESTRING(-79.8481 34.1961,-79.8824 34.2018,-79.9394 34.2073,-79.9979 34.2109,-80.0368 34.211,-80.0528 34.2084,-80.0684 34.2045,-80.084 34.2005,-80.0997 34.1974,-80.1131 34.1964,-80.1272 34.1963,-80.1415 34.1963,-80.1553 34.1956,-80.1699 34.1932,-80.1838 34.1898,-80.1975 34.1863,-80.2115 34.1832,-80.2465 34.1908,-80.2962 34.1955,-80.348 34.1995,-80.3894 34.2047,-80.4002 34.2055,-80.4117 34.2044,-80.4231 34.2026,-80.4339 34.2013,-80.4522 34.202,-80.4708 34.2054,-80.4895 34.2088,-80.5082 34.2098,-80.5189 34.2092,-80.5296 34.2085,-80.5403 34.2079,-80.551 34.2072,-80.5672 34.2062,-80.5854 34.2044,-80.6059 34.2013,-80.6286 34.1959,-80.6356 34.193,-80.6422 34.189,-80.6487 34.1849,-80.6553 34.1815,-80.6606 34.1799,-80.6665 34.1789,-80.6725 34.1779,-80.6781 34.1765,-80.6898 34.1698,-80.7091 34.1569,-80.7293 34.1431,-80.7435 34.1336,-80.7727 34.113,-80.8016 34.0943,-80.8428 34.0802,-80.9085 34.0736,-80.9268 34.073,-80.9425 34.0726)
+LINESTRING(-80.9275 35.1003,-80.942 35.0756,-80.9585 35.0508,-80.9608 35.0483,-80.963 35.0458,-80.9713 35.0323,-80.9796 35.0189,-80.9889 35.0029,-80.9928 34.994,-80.9913 34.9883,-80.9891 34.9824,-80.9871 34.9765,-80.986 34.9708,-80.9867 34.9661,-80.9884 34.9614,-80.9899 34.9562,-80.99 34.9504,-80.9879 34.9429,-80.9848 34.9333,-80.9822 34.924,-80.9815 34.9173,-80.9893 34.897,-81.0025 34.8769,-81.0165 34.857,-81.0269 34.8373,-81.0411 34.7793,-81.0424 34.7226,-81.0342 34.666,-81.0196 34.608,-81.0136 34.5891,-81.007 34.5695,-81.0013 34.5499,-80.9978 34.5308,-80.9992 34.4668,-81.0064 34.374,-81.0136 34.2877,-81.0147 34.2434,-81.0086 34.2259,-81.0013 34.2082,-80.9916 34.1918,-80.9784 34.1779,-80.9751 34.1657,-80.9704 34.1508,-80.9664 34.136,-80.9651 34.1238,-80.9616 34.1139,-80.9535 34.0969,-80.9453 34.0798,-80.9425 34.0726)
+LINESTRING(-89.8744 36.0014,-89.8744 36.0013,-89.8741 35.9831,-89.8737 35.9649,-89.8734 35.9467,-89.873 35.9285,-89.8783 35.9141,-89.8916 35.9035,-89.908 35.894,-89.9226 35.8831,-89.9313 35.8728,-89.9392 35.8617,-89.9466 35.8502,-89.9538 35.8392,-90.027 35.7338,-90.0998 35.6289,-90.1705 35.5232,-90.2372 35.4153,-90.2392 35.4119,-90.2481 35.4063,-90.257 35.4008,-90.2649 35.3967,-90.2727 35.3926)
+LINESTRING(-113.691 35.1609,-113.657 35.1609,-113.62 35.1587,-113.585 35.1575,-113.553 35.1605,-113.536 35.1654,-113.52 35.1717,-113.503 35.1784,-113.486 35.1841,-113.464 35.1895,-113.442 35.1941,-113.42 35.1981,-113.398 35.202,-113.377 35.2039,-113.356 35.2042,-113.335 35.2048,-113.315 35.2079,-113.3 35.2136,-113.284 35.221,-113.268 35.2279,-113.253 35.2322,-113.239 35.2337,-113.226 35.2346,-113.212 35.2357,-113.198 35.2378,-113.177 35.244,-113.156 35.2522,-113.136 35.2607,-113.115 35.2677,-113.093 35.2726,-113.07 35.277,-113.048 35.2816,-113.026 35.2875,-113.004 35.2959,-112.984 35.3057,-112.964 35.3148,-112.942 35.3214,-112.919 35.3232,-112.899 35.3211,-112.879 35.3184,-112.859 35.3179,-112.829 35.2981,-112.798 35.2867,-112.764 35.279,-112.729 35.2707,-112.705 35.2628,-112.681 35.254,-112.656 35.2454,-112.632 35.2381,-112.612 35.235,-112.591 35.2319,-112.571 35.2289,-112.551 35.2258,-112.534 35.2245,-112.517 35.2247,-112.5 35.2252,-112.484 35.2247,-112.452 35.2211,-112.419 35.217,-112.385 35.2144,-112.353 35.2152,-112.338 35.2175,-112.328 35.2198,-112.316 35.2214,-112.294 35.2213,-112.282 35.22,-112.268 35.2222,-112.254 35.2249,-112.241 35.225,-112.235 35.2282,-112.23 35.2323,-112.216 35.2405,-112.202 35.2471,-112.187 35.2528,-112.171 35.2583,-112.153 35.2608,-112.127 35.2607,-112.1 35.2599,-112.079 35.2606,-112.071 35.2626,-112.063 35.2649,-112.055 35.2665,-112.046 35.2661,-112.028 35.262,-112.01 35.257,-111.991 35.2523,-111.972 35.2493,-111.968 35.251,-111.962 35.2528,-111.956 35.254,-111.951 35.2543,-111.95 35.2575,-111.95 35.2607,-111.925 35.2561,-111.895 35.2538,-111.864 35.2516,-111.837 35.2469,-111.819 35.2396,-111.801 35.2299,-111.785 35.2192,-111.769 35.2091,-111.746 35.1984,-111.72 35.1897,-111.693 35.1824,-111.668 35.1758,-111.663 35.1739)
+LINESTRING(-120.678 35.6435,-120.677 35.6372,-120.678 35.6278,-120.679 35.6186,-120.688 35.6119,-120.698 35.6007,-120.698 35.5884,-120.698 35.5752,-120.7 35.563,-120.716 35.5431,-120.705 35.5211,-120.682 35.5003,-120.662 35.4844,-120.652 35.472,-120.644 35.4581,-120.639 35.4436,-120.633 35.4297,-120.628 35.4206,-120.624 35.4112,-120.622 35.4016,-120.622 35.3917,-120.634 35.3804,-120.64 35.3747,-120.64 35.3651,-120.639 35.3595,-120.635 35.3537,-120.626 35.3481,-120.622 35.3348,-120.618 35.3249,-120.618 35.3143,-120.624 35.2991,-120.645 35.29,-120.654 35.2899,-120.667 35.2636,-120.671 35.2543,-120.675 35.2452,-120.68 35.236,-120.684 35.2262,-120.683 35.2151,-120.671 35.203,-120.652 35.1898,-120.624 35.1756,-120.614 35.1673,-120.609 35.1621,-120.589 35.1469,-120.577 35.1325,-120.565 35.1176,-120.551 35.1045,-120.533 35.09,-120.516 35.0736,-120.501 35.0565,-120.486 35.0397,-120.463 35.0191,-120.441 35.0016,-120.424 34.9814,-120.417 34.9526,-120.417 34.9386,-120.417 34.9242,-120.417 34.9098,-120.416 34.8959,-120.403 34.8704,-120.378 34.8451,-120.353 34.8212,-120.341 34.8002,-120.323 34.7874,-120.308 34.7731,-120.294 34.7584,-120.278 34.7448,-120.248 34.733,-120.205 34.7202,-120.169 34.7037,-120.155 34.6806,-120.163 34.6703,-120.168 34.6651,-120.173 34.6582,-120.175 34.6477,-120.176 34.6355,-120.177 34.624,-120.18 34.6152,-120.178 34.6036,-120.179 34.5966,-120.18 34.5901,-120.181 34.5802,-120.185 34.5709,-120.189 34.5617,-120.195 34.5549,-120.202 34.549,-120.204 34.5431,-120.203 34.5371,-120.203 34.5298,-120.2 34.5239,-120.191 34.5237,-120.181 34.5236,-120.171 34.523,-120.161 34.5225,-120.152 34.5231,-120.143 34.5238,-120.135 34.524,-120.128 34.5242,-120.12 34.5244,-120.113 34.5246,-120.102 34.5215,-120.092 34.5185,-120.081 34.5136,-120.074 34.5139,-120.066 34.5142,-120.057 34.5145,-120.048 34.5148,-120.04 34.5156,-120.033 34.5164,-120.021 34.5156,-120.01 34.5147,-119.998 34.5127,-119.987 34.5106,-119.979 34.5083,-119.971 34.506,-119.964 34.5037,-119.956 34.5014,-119.943 34.4958,-119.93 34.4901,-119.92 34.488,-119.911 34.4858,-119.902 34.4841,-119.894 34.4825,-119.886 34.4817,-119.874 34.4838,-119.867 34.4847,-119.86 34.4855,-119.853 34.4864,-119.846 34.4873,-119.839 34.4877,-119.832 34.488,-119.826 34.4884,-119.819 34.4888,-119.808 34.4893,-119.796 34.4898,-119.787 34.4902,-119.778 34.4906,-119.769 34.491,-119.76 34.4914,-119.749 34.4893,-119.738 34.4871,-119.731 34.4833,-119.723 34.4795,-119.713 34.4738,-119.7 34.4676,-119.691 34.466,-119.682 34.4677,-119.673 34.4694,-119.663 34.4694,-119.653 34.4695,-119.642 34.4679,-119.631 34.4663,-119.624 34.4663,-119.612 34.4667,-119.604 34.4667,-119.596 34.4667,-119.584 34.4648,-119.571 34.4628,-119.563 34.4616,-119.555 34.4604,-119.545 34.4585,-119.536 34.4567,-119.526 34.4495,-119.515 34.4462,-119.504 34.443,-119.498 34.4382,-119.492 34.4334,-119.481 34.431,-119.469 34.4287,-119.466 34.4214,-119.463 34.4141,-119.459 34.4068,-119.456 34.3995,-119.443 34.3932,-119.43 34.3877,-119.417 34.3821,-119.409 34.3791,-119.401 34.3762,-119.392 34.3686,-119.383 34.3611,-119.375 34.3536,-119.367 34.3462,-119.359 34.3458,-119.352 34.3454,-119.34 34.3384,-119.327 34.3314,-119.316 34.3228,-119.305 34.3151,-119.295 34.3116,-119.287 34.3088,-119.277 34.3049,-119.266 34.3034,-119.259 34.3034,-119.253 34.3034,-119.243 34.2968,-119.233 34.2902,-119.222 34.2907,-119.209 34.2859,-119.195 34.281,-119.188 34.2775,-119.18 34.2741,-119.17 34.2695,-119.161 34.2648,-119.151 34.2571,-119.139 34.2501,-119.13 34.2434,-119.121 34.2367,-119.112 34.2329,-119.103 34.2291,-119.095 34.2253,-119.086 34.2215,-119.079 34.2211,-119.071 34.2207,-119.063 34.2204,-119.055 34.22,-119.049 34.2194,-119.042 34.2188,-119.035 34.2182,-119.028 34.2177,-119.02 34.2176,-119.013 34.2176,-119.005 34.2176,-118.998 34.2175,-118.984 34.2121,-118.97 34.2066,-118.956 34.2012,-118.942 34.1957,-118.919 34.1876,-118.9 34.183,-118.882 34.1798,-118.86 34.1759,-118.844 34.1697,-118.83 34.1602,-118.815 34.1509,-118.8 34.1455,-118.782 34.1433,-118.76 34.1408,-118.739 34.1388,-118.721 34.1377,-118.714 34.1392,-118.706 34.143,-118.699 34.1477,-118.693 34.1521,-118.669 34.1535,-118.66 34.1523,-118.648 34.1554,-118.615 34.1697,-118.594 34.1705,-118.574 34.1731,-118.554 34.1753,-118.534 34.175,-118.516 34.171,-118.501 34.1653,-118.485 34.1606,-118.466 34.1598)
+LINESTRING(-86.7861 36.1639,-86.7779 36.1332,-86.7746 36.1189,-86.7669 36.0905,-86.7695 36.0812,-86.7764 36.0644,-86.7835 36.0467,-86.7868 36.0346,-86.7904 36.0103,-86.7994 35.9862,-86.8102 35.9621,-86.8193 35.9377,-86.8253 35.9083,-86.8314 35.849,-86.8373 35.8201,-86.842 35.8116,-86.849 35.8046,-86.8562 35.7978,-86.8614 35.79,-86.8662 35.7737,-86.8753 35.7411,-86.8842 35.7079,-86.8886 35.6895,-86.8892 35.6751,-86.8892 35.6603,-86.8897 35.6456,-86.8918 35.6314,-86.8968 35.6126,-86.9019 35.5941,-86.9058 35.5753,-86.9074 35.5559,-86.9032 35.534,-86.894 35.4939,-86.8841 35.4521,-86.8781 35.425,-86.8775 35.4105,-86.8795 35.3966,-86.8824 35.3828,-86.8843 35.3684,-86.8856 35.331,-86.8861 35.2951,-86.8871 35.2588,-86.8899 35.2206,-86.8733 35.2012,-86.873 35.1787,-86.8764 35.153,-86.8808 35.1272,-86.8835 35.104,-86.8827 35.0743,-86.8801 35.0513,-86.8797 35.0268,-86.8856 34.9923)
+LINESTRING(-114.753 34.8797,-114.728 34.8836,-114.721 34.8851,-114.709 34.889,-114.702 34.8905,-114.686 34.8903,-114.672 34.8854,-114.662 34.8766,-114.656 34.8645,-114.646 34.8138,-114.631 34.7726)
+LINESTRING(-118.508 34.3338,-118.483 34.3112,-118.457 34.2809,-118.432 34.2518,-118.409 34.2329,-118.401 34.2127,-118.392 34.1929,-118.382 34.1733,-118.375 34.1535)
+LINESTRING(-118.375 34.1535,-118.398 34.1543,-118.421 34.1551,-118.444 34.1567,-118.466 34.1598)
+LINESTRING(-81.1092 34.0368,-81.0697 34.0565,-81.0302 34.0686,-80.9907 34.0733,-80.9693 34.0717,-80.9634 34.0719,-80.9451 34.0725,-80.9425 34.0726)
+LINESTRING(-81.1092 34.0368,-81.1341 34.0599,-81.158 34.0844,-81.1825 34.1081,-81.2093 34.1289,-81.2355 34.1429,-81.2638 34.154,-81.2928 34.1641,-81.321 34.175,-81.3343 34.1816,-81.3471 34.189,-81.3597 34.1965,-81.3728 34.2035,-81.3921 34.2119,-81.412 34.219,-81.432 34.2258,-81.4518 34.2332,-81.4902 34.2546,-81.5593 34.2957,-81.6268 34.3366,-81.6601 34.3576,-81.6732 34.3709,-81.6844 34.3859,-81.6933 34.3988,-81.699 34.406,-81.7166 34.4192,-81.727 34.4242,-81.736 34.4269,-81.7499 34.4329,-81.7639 34.4412,-81.7778 34.4505,-81.7916 34.4602,-81.8049 34.4694,-81.8218 34.4803,-81.8389 34.491,-81.8558 34.5019,-81.8723 34.5134)
+LINESTRING(-109.045 35.36,-109.035 35.3609,-109.026 35.3625,-109.01 35.3654,-108.999 35.3675,-108.988 35.3696,-108.961 35.3962,-108.939 35.4185,-108.914 35.4393,-108.881 35.4617,-108.856 35.4733,-108.835 35.4786,-108.819 35.4805,-108.81 35.482,-108.796 35.488,-108.779 35.4932,-108.761 35.4979,-108.741 35.5018)
+LINESTRING(-114.631 34.7726,-114.602 34.7386,-114.562 34.7173,-114.513 34.714,-114.474 34.7193)
+LINESTRING(-85.554 34.7145,-85.5493 34.7224,-85.5444 34.7343,-85.5406 34.7467,-85.539 34.7558,-85.5407 34.768,-85.5443 34.7803,-85.5475 34.7926,-85.5479 34.8047,-85.5343 34.8488,-85.5086 34.8929,-85.4761 34.9345,-85.4418 34.9709)
+LINESTRING(-114.474 34.7193,-114.457 34.7217,-114.44 34.7237,-114.423 34.726,-114.406 34.728,-114.389 34.7296,-114.358 34.7307,-114.315 34.7323,-114.272 34.7349,-114.243 34.7397,-114.217 34.7524,-114.186 34.7728,-114.16 34.7961,-114.146 34.817,-114.144 34.8431,-114.148 34.8692,-114.153 34.8951,-114.153 34.9204,-114.144 34.9624,-114.134 35.0047,-114.125 35.047,-114.118 35.0891,-114.115 35.1101,-114.11 35.1227,-114.103 35.1336,-114.092 35.1499,-114.1 35.1634,-114.102 35.1787,-114.098 35.194,-114.09 35.2076)
+LINESTRING(-105.923 35.6298,-105.911 35.6108,-105.9 35.5924,-105.889 35.574,-105.877 35.5556)
+LINESTRING(-118.375 34.1535,-118.352 34.1536,-118.326 34.1526,-118.303 34.1516,-118.284 34.1517,-118.276 34.1528,-118.268 34.1542,-118.259 34.1553,-118.25 34.1554,-118.243 34.1542,-118.237 34.1519,-118.232 34.1493,-118.226 34.147,-118.215 34.1454,-118.203 34.1455,-118.192 34.1448,-118.181 34.1406,-118.172 34.1424,-118.155 34.147,-118.137 34.1518,-118.124 34.1545,-118.11 34.154,-118.085 34.1522,-118.059 34.1499,-118.045 34.1481,-118.038 34.1462,-118.032 34.1437,-118.026 34.1412,-118.02 34.1396,-118.007 34.1382,-117.993 34.1376,-117.978 34.1373,-117.964 34.1366,-117.962 34.1344,-117.958 34.1324,-117.955 34.1308,-117.952 34.1291)
+LINESTRING(-94.2245 36.4213,-94.1776 36.3752,-94.1741 36.3547,-94.1851 36.3361,-94.182 36.296,-94.1766 36.2913,-94.1696 36.2878,-94.162 36.2845,-94.1553 36.2806,-94.1531 36.2737,-94.1521 36.2626,-94.1526 36.2513,-94.1548 36.2438,-94.1603 36.242,-94.1656 36.2396,-94.1706 36.2367,-94.175 36.2335,-94.1773 36.2221,-94.1803 36.1983,-94.1829 36.1727,-94.1842 36.1562,-94.1826 36.1533,-94.181 36.1504,-94.1787 36.1457,-94.1775 36.1418,-94.1785 36.1402,-94.1794 36.1386,-94.1804 36.137,-94.1813 36.1354,-94.18 36.1289,-94.1774 36.1224,-94.1736 36.1163,-94.1687 36.1111,-94.1913 36.0981,-94.2003 36.0785,-94.1981 36.0565,-94.187 36.0368,-94.1834 36.0349,-94.1793 36.0324,-94.1752 36.0303,-94.1715 36.0298,-94.1693 36.0168,-94.1688 36.0048,-94.1689 35.9928,-94.1683 35.98,-94.1669 35.9784,-94.1654 35.9768,-94.1683 35.965,-94.1725 35.9548,-94.1767 35.9447,-94.1795 35.9335,-94.1792 35.9292,-94.1777 35.925,-94.1759 35.921,-94.1745 35.9168,-94.1695 35.8982,-94.1609 35.884,-94.1512 35.8709,-94.1403 35.8077,-94.1472 35.7745,-94.1532 35.7254,-94.1612 35.6782,-94.1645 35.636,-94.1687 35.6126,-94.1783 35.5948,-94.1886 35.5796,-94.1963 35.5701,-94.2107 35.5555,-94.2172 35.549,-94.2199 35.5416,-94.2232 35.5244)
+LINESTRING(-88.8569 35.662,-88.8905 35.6516,-88.9239 35.6409,-88.9573 35.6301,-88.9906 35.6192,-88.9996 35.6169,-89.0087 35.6152,-89.018 35.6134,-89.0276 35.6106,-89.0833 35.5902,-89.1407 35.5698,-89.1989 35.5513,-89.2571 35.5368,-89.2641 35.5224,-89.2698 35.5064,-89.2749 35.4901,-89.2799 35.4749,-89.316 35.4512,-89.354 35.4267,-89.3929 35.4033,-89.4317 35.3829,-89.4447 35.379,-89.4579 35.3758,-89.4794 35.3678,-89.5009 35.3587,-89.5219 35.3489,-89.542 35.3388,-89.5621 35.3271,-89.5809 35.3143,-89.5993 35.301,-89.618 35.2879,-89.6615 35.2619,-89.7196 35.231,-89.7785 35.2019,-89.8246 35.181,-89.8409 35.1745,-89.8578 35.1681,-89.8748 35.1616,-89.8914 35.1547,-89.9023 35.1636,-89.9127 35.1739,-89.9218 35.185,-89.929 35.1961,-89.9409 35.1965,-89.953 35.1971,-89.9651 35.1977,-89.9769 35.1977,-89.9891 35.1967,-90.0042 35.1955,-90.0187 35.1957,-90.0292 35.1989)
+LINESTRING(-90.2727 35.3926,-90.2756 35.3914,-90.2776 35.3896,-90.2788 35.3873,-90.2791 35.3846,-90.2725 35.3499,-90.2573 35.3168,-90.2385 35.2843,-90.2207 35.2516,-90.2135 35.2345,-90.2072 35.2167,-90.2012 35.1987,-90.1953 35.1813,-90.1946 35.1791,-90.1938 35.1768,-90.1929 35.1747,-90.1916 35.1726)
+LINESTRING(-96.0082 36.1134,-96.0212 36.1057,-96.0393 36.0927,-96.0568 36.0791,-96.068 36.07,-96.0775 36.0588,-96.0854 36.045,-96.0931 36.0308,-96.1018 36.0182,-96.122 36.0121,-96.1475 36.0052,-96.172 35.9979,-96.1894 35.9903,-96.2281 35.9649,-96.267 35.9383,-96.305 35.9108,-96.341 35.8831,-96.3517 35.8724,-96.357 35.8669,-96.413 35.8428,-96.5066 35.8119,-96.5998 35.7822,-96.649 35.7666,-96.7085 35.752,-96.7869 35.7386,-96.8685 35.7254,-96.938 35.7116,-96.9695 35.7039,-97.0128 35.6931,-97.0565 35.6813,-97.0892 35.6705,-97.1065 35.6606,-97.1178 35.6505,-97.131 35.6419,-97.154 35.6366,-97.2168 35.632,-97.2927 35.6264,-97.3675 35.6167,-97.427 35.5992)
+LINESTRING(-97.3172 36.3949,-97.3217 36.3448,-97.3225 36.293,-97.3219 36.241,-97.3223 36.1904,-97.324 36.1732,-97.3274 36.1594,-97.332 36.1459,-97.3374 36.1294,-97.34 36.1037,-97.3433 36.0542,-97.3458 36.0049,-97.3458 35.9798,-97.3526 35.9713,-97.36 35.9626,-97.3671 35.9538,-97.3732 35.9452,-97.3833 35.9124,-97.3863 35.8724,-97.3935 35.8342,-97.4159 35.8065,-97.416 35.7748,-97.415 35.7418,-97.415 35.7091,-97.418 35.6781,-97.4212 35.6581,-97.4236 35.6388,-97.4255 35.6194,-97.427 35.5992)
+LINESTRING(-94.3249 35.4716,-94.3207 35.4709,-94.3165 35.4704,-94.3028 35.4701,-94.2971 35.4711,-94.2925 35.4731,-94.2885 35.476,-94.2847 35.4797,-94.2817 35.4824,-94.2788 35.4847,-94.2724 35.4892,-94.2587 35.4987,-94.2559 35.5013,-94.254 35.5039,-94.2522 35.5066,-94.2496 35.5093,-94.2418 35.5162,-94.2388 35.5186,-94.235 35.5209,-94.2313 35.5224,-94.2274 35.5236,-94.2232 35.5244)
+LINESTRING(-86.8856 34.9923,-86.8856 34.9923,-86.8915 34.9715,-86.8996 34.9441,-86.9061 34.9183,-86.9075 34.9019,-86.921 34.8753,-86.9257 34.8474,-86.9244 34.8184,-86.9198 34.7883)
+LINESTRING(-94.4445 35.4684,-94.4369 35.4786,-94.4264 35.4872,-94.4135 35.4892,-94.4023 35.4904,-94.3912 35.4902,-94.3788 35.4876,-94.3729 35.4869,-94.3677 35.4857,-94.3627 35.4841,-94.357 35.4825,-94.3523 35.4815,-94.3481 35.4808,-94.3439 35.4801,-94.3394 35.4788,-94.3355 35.477,-94.329 35.4733,-94.3249 35.4716)
+LINESTRING(-90.1916 35.1726,-90.1515 35.1564,-90.1112 35.1442,-90.0728 35.1365)
+LINESTRING(-90.0292 35.1989,-90.0293 35.1821,-90.0295 35.1654,-90.0296 35.1486,-90.0298 35.1319)
+LINESTRING(-90.0728 35.1365,-90.0706 35.136,-90.0298 35.1319)
+LINESTRING(-86.5985 34.7336,-86.5643 34.759)
+LINESTRING(-95.4132 35.8559,-95.3888 35.8399,-95.3674 35.8184,-95.3506 35.7934,-95.3395 35.7669,-95.3312 35.7467,-95.323 35.7335,-95.3167 35.7201,-95.3144 35.6995,-95.3142 35.6887,-95.3136 35.6773,-95.3125 35.666,-95.3108 35.6553,-95.2845 35.6256,-95.2391 35.5699,-95.1959 35.5144,-95.176 35.4857)
+LINESTRING(-97.4649 35.5448,-97.4593 35.5524,-97.4494 35.5682,-97.4378 35.586,-97.427 35.5992)
+LINESTRING(-95.176 35.4857,-95.2196 35.4835,-95.262 35.48,-95.304 35.4739,-95.3461 35.4643,-95.3904 35.4563,-95.4386 35.4536,-95.487 35.4537,-95.5319 35.454)
+LINESTRING(-95.3953 35.7269,-95.4066 35.6975,-95.4331 35.6537,-95.4609 35.6131,-95.4763 35.5931,-95.4872 35.5845,-95.4993 35.5751,-95.5108 35.5651,-95.5199 35.5549,-95.5204 35.5332,-95.5208 35.5116,-95.5209 35.4899,-95.5205 35.4682,-95.5233 35.4646,-95.5262 35.4611,-95.529 35.4575,-95.5319 35.454)
+LINESTRING(-117.952 34.1291,-117.958 34.1147,-117.963 34.1002,-117.968 34.0855,-117.973 34.0708,-117.992 34.0494,-118.023 34.034,-118.056 34.0089,-118.085 33.9582,-118.087 33.9544,-118.09 33.9497,-118.093 33.9454,-118.094 33.9427)
+LINESTRING(-118.375 34.1535,-118.363 34.1436,-118.35 34.1335,-118.339 34.1227,-118.332 34.1104,-118.314 34.1011,-118.301 34.0906,-118.285 34.0805,-118.263 34.0724,-118.254 34.0689,-118.244 34.0633,-118.233 34.0574,-118.224 34.0529,-118.222 34.0484,-118.221 34.0437,-118.221 34.039,-118.221 34.0342,-118.187 34.0259,-118.159 34.0075,-118.136 33.984,-118.117 33.9607,-118.112 33.9562,-118.106 33.9523,-118.099 33.9481,-118.094 33.9427)
+LINESTRING(-104.41 36.8069,-104.408 36.7789,-104.41 36.7582,-104.415 36.7403,-104.423 36.7225,-104.432 36.7025,-104.44 36.6844,-104.45 36.6691,-104.464 36.6567,-104.484 36.6476,-104.495 36.6439,-104.504 36.6403,-104.513 36.6369,-104.524 36.6339,-104.533 36.6323,-104.541 36.631,-104.549 36.6287,-104.556 36.6246,-104.571 36.6069,-104.578 36.5881,-104.58 36.5677,-104.579 36.5452,-104.578 36.5248,-104.58 36.5136,-104.587 36.5045,-104.596 36.4957,-104.604 36.4851,-104.61 36.4715,-104.613 36.4588,-104.613 36.4459,-104.613 36.4313,-104.61 36.4172,-104.609 36.3961,-104.608 36.3782,-104.607 36.3624,-104.608 36.3468,-104.612 36.3295,-104.617 36.3193,-104.621 36.3103,-104.626 36.3013,-104.63 36.2909,-104.635 36.2703,-104.648 36.2233,-104.666 36.1719,-104.682 36.1382,-104.682 36.1162,-104.684 36.0803,-104.688 36.045,-104.691 36.0249,-104.721 35.9932,-104.78 35.9391,-104.839 35.8873,-104.867 35.8625,-104.936 35.8459,-104.963 35.8215,-104.981 35.7898,-105.019 35.7518,-105.053 35.7278,-105.079 35.7107,-105.108 35.697,-105.148 35.6833,-105.17 35.6758,-105.177 35.6696,-105.18 35.6615,-105.185 35.6482,-105.201 35.6174,-105.216 35.5863,-105.23 35.5551,-105.246 35.5238,-105.258 35.4931,-105.274 35.4506,-105.294 35.4128,-105.319 35.3967,-105.359 35.3971,-105.399 35.3978,-105.44 35.3997,-105.48 35.4034,-105.496 35.4073,-105.533 35.4199,-105.55 35.4241,-105.558 35.4247,-105.565 35.4249,-105.573 35.4254,-105.58 35.427,-105.594 35.4322,-105.617 35.4414,-105.64 35.4515,-105.654 35.4593,-105.662 35.4641,-105.67 35.4689,-105.677 35.4743,-105.682 35.4812,-105.69 35.5088,-105.692 35.5255,-105.696 35.5388,-105.709 35.5563,-105.728 35.5592,-105.743 35.5664,-105.756 35.5769,-105.766 35.59,-105.774 35.5922,-105.784 35.5886,-105.787 35.5801,-105.788 35.5714,-105.814 35.5601,-105.819 35.5528,-105.835 35.5484,-105.844 35.5464,-105.852 35.5447,-105.865 35.5501,-105.877 35.5556)
+LINESTRING(-117.008 34.8862,-117.027 34.8856,-117.048 34.8845,-117.067 34.8797,-117.077 34.8676,-117.081 34.8552,-117.085 34.8428,-117.089 34.8304,-117.092 34.818,-117.105 34.8035,-117.13 34.7814,-117.156 34.7599,-117.171 34.7469,-117.198 34.7123,-117.207 34.6858,-117.21 34.6621,-117.223 34.6357,-117.239 34.6153,-117.255 34.5949,-117.272 34.5749,-117.289 34.5556,-117.303 34.5428,-117.312 34.5346,-117.318 34.5246,-117.321 34.5067,-117.341 34.477,-117.375 34.4275,-117.412 34.3803,-117.441 34.3574,-117.448 34.3553,-117.455 34.3532,-117.462 34.3511,-117.469 34.3489,-117.477 34.3464,-117.482 34.3378,-117.482 34.3327,-117.481 34.3268,-117.48 34.321,-117.478 34.3164,-117.465 34.3082,-117.454 34.2908,-117.447 34.2716,-117.449 34.2577,-117.441 34.252,-117.434 34.2456,-117.428 34.2392,-117.421 34.2337,-117.39 34.2116,-117.36 34.1897,-117.333 34.1654,-117.31 34.1365,-117.306 34.1307,-117.301 34.1254,-117.299 34.1095,-117.298 34.0936,-117.296 34.0732,-117.295 34.0635)
+LINESTRING(-117.952 34.1291,-117.925 34.1215,-117.893 34.1174,-117.86 34.1163,-117.832 34.1179,-117.829 34.104,-117.824 34.0904,-117.817 34.0775,-117.807 34.0657,-117.794 34.0687,-117.783 34.0707,-117.772 34.0714,-117.758 34.07,-117.733 34.0781,-117.697 34.084,-117.662 34.0866,-117.636 34.0849,-117.592 34.0701,-117.513 34.0668,-117.431 34.0691,-117.378 34.0709,-117.357 34.0703,-117.336 34.0688,-117.316 34.0665,-117.295 34.0635)
+LINESTRING(-97.938 35.5005,-97.9574 35.5015,-97.9738 35.5096,-97.9886 35.5207,-98.0032 35.5306,-98.0287 35.5298,-98.0551 35.5311,-98.0814 35.533,-98.1071 35.5342,-98.1301 35.5341,-98.1532 35.5336,-98.1762 35.5331,-98.1993 35.5326,-98.216 35.534,-98.234 35.5379,-98.2518 35.5428,-98.2675 35.5471,-98.2838 35.548,-98.2998 35.5445,-98.3155 35.5392,-98.3309 35.5347)
+LINESTRING(-95.176 35.4857,-95.1622 35.4889,-95.1468 35.4932,-95.1309 35.497,-95.1156 35.4988,-95.0897 35.501,-95.0246 35.5092,-94.9962 35.5116,-94.9917 35.5116,-94.9865 35.511,-94.9813 35.5099,-94.9772 35.5083,-94.9179 35.4749,-94.9128 35.4739,-94.9041 35.473,-94.8905 35.4721,-94.8657 35.4658,-94.8414 35.4527,-94.8172 35.4396,-94.7927 35.433,-94.7694 35.4316,-94.7571 35.4307,-94.7494 35.4298,-94.7224 35.4213,-94.6925 35.4082,-94.6636 35.3942,-94.6399 35.3832,-94.6164 35.3804,-94.5853 35.3841,-94.5536 35.3909,-94.5284 35.3975,-94.5144 35.4024,-94.4968 35.4103,-94.4799 35.4191,-94.4679 35.4271,-94.4577 35.4468,-94.4473 35.4645,-94.4445 35.4684)
+LINESTRING(-117.31 34.0432,-117.295 34.0635)
+LINESTRING(-95.5319 35.454,-95.568 35.455,-95.6328 35.4541,-95.7003 35.4516,-95.7445 35.4478,-95.7583 35.4443,-95.7715 35.4397,-95.7845 35.4349,-95.7978 35.4311,-95.8049 35.4304,-95.812 35.4309,-95.819 35.432,-95.8259 35.4327,-95.8394 35.4324,-95.8537 35.4307,-95.868 35.4287,-95.8815 35.4269,-95.9023 35.4263,-95.9247 35.4274,-95.947 35.4292,-95.9677 35.4306)
+LINESTRING(-97.4649 35.5448,-97.464 35.5284,-97.4648 35.508,-97.4679 35.4882,-97.4742 35.4732)
+LINESTRING(-97.4649 35.5448,-97.4903 35.5403,-97.5261 35.5302,-97.5594 35.5175,-97.5775 35.5049,-97.5797 35.4961,-97.5806 35.4833,-97.5807 35.4704,-97.5806 35.4614,-97.6064 35.4602,-97.6351 35.459,-97.6636 35.4587,-97.689 35.4604,-97.7187 35.4683,-97.749 35.4809,-97.7793 35.4934,-97.8087 35.5007,-97.8401 35.5025,-97.8731 35.5023,-97.9063 35.5012,-97.938 35.5005)
+LINESTRING(-90.0298 35.1319,-90.0292 35.1118,-90.0209 35.0833,-90.011 35.0572,-90.0055 35.0441,-90.0043 35.0376,-90.0046 35.0296,-90.0054 35.0223,-90.0062 35.015,-90.0058 34.9964)
+LINESTRING(-86.8899 34.6293,-86.8797 34.63,-86.8477 34.6392,-86.8155 34.6512,-86.7923 34.6611,-86.7643 34.6622,-86.7326 34.6712,-86.7029 34.6839,-86.6812 34.6963,-86.6807 34.6982,-86.6803 34.7001,-86.6799 34.7021,-86.6795 34.704,-86.6599 34.7119,-86.6392 34.7183,-86.6184 34.7249,-86.5985 34.7336)
+LINESTRING(-86.9198 34.7883,-86.9146 34.7503,-86.9045 34.7013,-86.8948 34.6569,-86.8899 34.6293)
+LINESTRING(-118.094 33.9427,-118.077 33.9179,-118.043 33.8939,-118.004 33.8728,-117.973 33.8566)
+LINESTRING(-110.18 34.9319,-110.175 34.9376,-110.17 34.9432,-110.149 34.9648,-110.127 34.982,-110.104 34.9953,-110.078 35.0051,-110.066 35.0087,-110.053 35.0116,-110.04 35.0139,-110.027 35.0157,-110.014 35.0172,-110 35.0184,-109.985 35.0196,-109.97 35.0207,-109.96 35.0214,-109.949 35.0221,-109.938 35.023,-109.927 35.0238,-109.917 35.025,-109.907 35.0264,-109.899 35.028,-109.892 35.03,-109.886 35.0323,-109.88 35.035,-109.874 35.0381,-109.868 35.0416,-109.861 35.046,-109.853 35.0505,-109.846 35.0552,-109.838 35.06,-109.82 35.071,-109.798 35.0821,-109.772 35.0928,-109.741 35.1024,-109.719 35.1113,-109.697 35.1233,-109.675 35.1352,-109.652 35.1439,-109.629 35.1497,-109.607 35.1561,-109.586 35.1633,-109.566 35.1714,-109.553 35.1773,-109.543 35.1827,-109.534 35.1876,-109.527 35.1921,-109.52 35.1969,-109.513 35.2017,-109.507 35.2061,-109.501 35.2105,-109.483 35.2208,-109.46 35.2304,-109.43 35.2399,-109.39 35.2497,-109.368 35.2558,-109.353 35.262,-109.343 35.2681,-109.336 35.2738,-109.328 35.283,-109.319 35.2924,-109.313 35.2986,-109.306 35.3048,-109.297 35.311,-109.287 35.3172,-109.272 35.324,-109.258 35.3278,-109.244 35.3294,-109.232 35.3297,-109.223 35.3293,-109.214 35.3287,-109.204 35.3282,-109.193 35.3286,-109.184 35.3295,-109.174 35.3304,-109.164 35.3312,-109.154 35.3321,-109.134 35.3368,-109.117 35.3446,-109.1 35.3524,-109.079 35.357,-109.068 35.358,-109.057 35.359,-109.046 35.36,-109.045 35.36)
+LINESTRING(-110.18 34.9319,-110.199 34.9253,-110.221 34.9342,-110.243 34.951,-110.263 34.9684,-110.279 34.9779,-110.296 34.9824,-110.314 34.9848,-110.334 34.9877,-110.357 34.9912,-110.377 34.9926,-110.398 34.9932,-110.421 34.9939,-110.445 34.9952,-110.467 34.9971,-110.489 35.0003,-110.514 35.0056,-110.527 35.0085,-110.538 35.0109,-110.549 35.0137,-110.562 35.0175,-110.575 35.0232,-110.585 35.03,-110.594 35.0378,-110.604 35.0466,-110.623 35.0602,-110.643 35.0703,-110.664 35.076,-110.688 35.0763,-110.7 35.0766,-110.729 35.0808,-110.741 35.0811,-111.082 35.1168,-111.101 35.1176,-111.12 35.1179,-111.14 35.1191,-111.159 35.1224,-111.176 35.1275,-111.193 35.1335,-111.209 35.1398,-111.226 35.146,-111.239 35.1497,-111.253 35.1534,-111.267 35.1574,-111.279 35.1622,-111.284 35.1613,-111.295 35.1615,-111.3 35.1605,-111.33 35.1724,-111.359 35.185,-111.39 35.1962,-111.422 35.2034,-111.441 35.2045,-111.459 35.2041,-111.477 35.2039,-111.495 35.2056,-111.515 35.2096,-111.54 35.2145,-111.578 35.2155,-111.663 35.1739)
+LINESTRING(-97.4742 35.4732,-97.4537 35.4663,-97.436 35.4552,-97.4192 35.4434,-97.401 35.4341,-97.3883 35.4306,-97.3751 35.4282,-97.3618 35.4263,-97.3488 35.4239,-97.3224 35.4169,-97.2983 35.4086,-97.275 35.3994,-97.2508 35.3893,-97.2429 35.3871,-97.2349 35.3863,-97.2269 35.3864,-97.2187 35.3866,-97.1633 35.3866,-97.1073 35.387,-97.0514 35.3871,-96.9964 35.3862,-96.9727 35.3856,-96.9487 35.3854,-96.9247 35.3857,-96.9011 35.3868,-96.885 35.3885,-96.869 35.3909,-96.8529 35.393,-96.8365 35.3938,-96.8104 35.3917,-96.7846 35.3875,-96.7587 35.3834,-96.7325 35.3819,-96.6625 35.3819,-96.5717 35.3811,-96.485 35.3814,-96.4278 35.3847,-96.385 35.3941,-96.3463 35.4054,-96.3035 35.4164,-96.2486 35.4247,-96.191 35.4274,-96.0988 35.4296,-96.0112 35.4309,-95.9677 35.4306)
+LINESTRING(-97.4742 35.4732,-97.4772 35.4729,-97.4801 35.4726,-97.4831 35.4723,-97.4861 35.472,-97.4911 35.4532,-97.4933 35.4324,-97.4943 35.4115,-97.4956 35.3922)
+LINESTRING(-94.2232 35.5244,-94.2165 35.5256,-94.2106 35.527,-94.2051 35.5284,-94.1996 35.5297,-94.1933 35.5307,-94.1827 35.5332,-94.1739 35.5344,-94.1651 35.5346,-94.1539 35.5337,-94.1448 35.5375,-94.1372 35.5386,-94.1304 35.539,-94.1236 35.5406,-94.0745 35.5598,-94.0441 35.5681,-94.0102 35.5694,-93.9507 35.5677,-93.9408 35.5688,-93.9267 35.5715,-93.9114 35.5738,-93.8977 35.574,-93.8885 35.5687,-93.872 35.5679,-93.848 35.5666,-93.825 35.5638,-93.8114 35.5585,-93.7852 35.5567,-93.749 35.5508,-93.7117 35.5443,-93.6821 35.5409,-93.6269 35.5402,-93.5991 35.5383,-93.5723 35.5333,-93.5587 35.53,-93.5316 35.5238,-93.5183 35.5204,-93.5013 35.5146,-93.4877 35.5091,-93.4727 35.5055,-93.4517 35.505,-93.4369 35.5041,-93.4199 35.5012,-93.4058 35.4981,-93.3995 35.4966,-93.3486 35.4787,-93.3086 35.4522,-93.2766 35.4263,-93.2497 35.41,-93.2406 35.4074,-93.2306 35.4059,-93.2206 35.4047,-93.2116 35.4031,-93.1899 35.3978,-93.1664 35.3916,-93.143 35.3848,-93.1221 35.3779,-93.0923 35.3597,-93.0577 35.3314,-93.0246 35.3043,-92.9992 35.2901,-92.9813 35.2845,-92.9611 35.2765,-92.9408 35.2698,-92.9227 35.2678,-92.8985 35.2687,-92.8702 35.2673,-92.8439 35.263,-92.8256 35.2552,-92.8035 35.2379,-92.7812 35.2225,-92.7566 35.2097,-92.7276 35.2006,-92.7174 35.1992,-92.6962 35.1981,-92.6861 35.1966,-92.677 35.1936,-92.6693 35.1897,-92.6609 35.1863,-92.6493 35.1843,-92.6261 35.1849,-92.6018 35.1877,-92.5777 35.1894,-92.5549 35.1872,-92.5254 35.1763,-92.505 35.1632,-92.4919 35.1518,-92.4843 35.1462,-92.4669 35.1432,-92.4488 35.1413,-92.4311 35.1384,-92.4093 35.1185)
+LINESTRING(-117.564 33.8778,-117.514 33.8897,-117.465 33.908,-117.42 33.9312,-117.378 33.9577,-117.378 33.9607,-117.378 33.9637,-117.379 33.9666,-117.379 33.9696,-117.36 33.9886,-117.334 34.0157,-117.31 34.0432)
+LINESTRING(-117.973 33.8566,-117.943 33.8544,-117.914 33.8522,-117.886 33.8494,-117.856 33.8455,-117.852 33.8468,-117.848 33.8481,-117.844 33.8494,-117.839 33.8507,-117.836 33.8492,-117.833 33.8475,-117.83 33.8454,-117.827 33.8432,-117.809 33.8507,-117.792 33.8518,-117.775 33.8551,-117.752 33.8694,-117.744 33.8697,-117.735 33.8687,-117.726 33.8667,-117.719 33.8639,-117.714 33.8644,-117.708 33.8656,-117.702 33.8674,-117.697 33.8699,-117.691 33.8683,-117.684 33.8671,-117.676 33.8666,-117.67 33.8672,-117.648 33.8752,-117.619 33.8793,-117.589 33.88,-117.564 33.8778)
+LINESTRING(-118.092 33.7836,-118.092 33.7867,-118.091 33.7899,-118.09 33.7931,-118.089 33.7963,-118.087 33.7985,-118.085 33.8007,-118.082 33.803,-118.08 33.8052,-118.082 33.8281,-118.095 33.8633,-118.104 33.9039,-118.094 33.9427)
+LINESTRING(-118.466 34.1598,-118.467 34.1476,-118.47 34.1347,-118.474 34.1222,-118.48 34.1109,-118.469 34.0804,-118.451 34.0508,-118.429 34.0229,-118.405 33.9975,-118.396 33.9887,-118.385 33.9796,-118.374 33.9702,-118.367 33.9607,-118.366 33.945,-118.365 33.9292,-118.366 33.9133,-118.366 33.8975,-118.359 33.8897,-118.351 33.8808,-118.342 33.8725,-118.333 33.8663,-118.307 33.858,-118.291 33.8578,-118.274 33.852,-118.247 33.8267,-118.231 33.8256,-118.214 33.8255,-118.198 33.823,-118.185 33.8147,-118.163 33.8121,-118.135 33.8056,-118.109 33.7958,-118.092 33.7836)
+LINESTRING(-105.923 35.6298,-105.928 35.6329,-105.935 35.6357,-105.943 35.6371,-105.95 35.6363,-105.99 35.6222,-106.028 35.6062,-106.063 35.5876,-106.098 35.5655,-106.111 35.5561,-106.125 35.5461,-106.139 35.5366,-106.154 35.5288,-106.172 35.5236,-106.193 35.5209,-106.214 35.5175,-106.234 35.5101,-106.243 35.5045,-106.251 35.498,-106.259 35.4915,-106.268 35.4855,-106.371 35.4139,-106.46 35.3269,-106.532 35.2245,-106.588 35.107)
+LINESTRING(-83.0005 34.4993,-83.0062 34.4978,-83.021 34.492,-83.03 34.4854,-83.0488 34.4779,-83.0677 34.4709,-83.0867 34.4638,-83.1054 34.4563,-83.1439 34.4378,-83.181 34.4174,-83.2179 34.3968,-83.2561 34.3779,-83.2831 34.3667,-83.3112 34.3555,-83.3385 34.3433,-83.3628 34.329,-83.3876 34.3113,-83.4123 34.2933,-83.4368 34.275,-83.4608 34.2564,-83.4912 34.2363,-83.5249 34.2191,-83.5598 34.2033,-83.5937 34.1872,-83.6136 34.1752,-83.6323 34.162,-83.6512 34.149,-83.6716 34.1377,-83.6963 34.1301,-83.7226 34.1263,-83.7505 34.1218,-83.7801 34.112,-83.7978 34.105,-83.8162 34.0996,-83.8351 34.0952,-83.8542 34.0915,-83.8992 34.0812,-83.9454 34.0677,-83.9904 34.0516,-84.0315 34.0337)
+LINESTRING(-83.7964 34.2753,-83.8007 34.2557,-83.811 34.241,-83.8243 34.2275,-83.84 34.2128,-83.8566 34.1976,-83.872 34.1849,-83.8879 34.1727,-83.9062 34.159,-83.9258 34.1451,-83.9435 34.1332,-83.9603 34.1206,-83.9771 34.1049,-83.9862 34.0939,-83.9933 34.0835,-84.0002 34.0729,-84.0092 34.0616,-84.0155 34.055,-84.0213 34.0493,-84.0267 34.0433,-84.0315 34.0337)
+LINESTRING(-89.8351 34.9703,-89.8319 34.9678,-89.8291 34.9646,-89.8262 34.9612,-89.8228 34.9582,-89.8147 34.9512,-89.8074 34.9433,-89.8001 34.9357,-89.792 34.9294,-89.7764 34.9203,-89.762 34.9121,-89.7481 34.9029,-89.7338 34.8911,-89.7274 34.8877,-89.7149 34.8823,-89.7018 34.8771,-89.6936 34.8747,-89.6829 34.8757,-89.6713 34.871,-89.6604 34.8645,-89.6522 34.8596,-89.6092 34.8429,-89.5648 34.8285,-89.5205 34.8135,-89.4778 34.7953,-89.4619 34.7724,-89.4453 34.7495,-89.4251 34.7289,-89.3984 34.7132)
+LINESTRING(-108.741 35.5018,-108.698 35.5078,-108.655 35.5111,-108.615 35.5118,-108.582 35.5099,-108.559 35.5048,-108.535 35.4961,-108.511 35.4867,-108.488 35.4792,-108.476 35.4767,-108.464 35.4746,-108.452 35.472,-108.44 35.468,-108.378 35.4417,-108.335 35.4263,-108.289 35.4143,-108.219 35.3983,-108.166 35.3906,-108.099 35.379,-108.038 35.3623,-108.004 35.3409,-107.998 35.3304,-107.994 35.3208,-107.992 35.3106,-107.99 35.2993,-107.991 35.2825,-107.994 35.2676,-107.997 35.2528,-107.997 35.2359,-107.994 35.2223,-107.986 35.2114,-107.975 35.2013,-107.963 35.1906,-107.946 35.1745,-107.929 35.1583,-107.914 35.143,-107.896 35.1254,-107.87 35.1,-107.845 35.0799,-107.815 35.0648,-107.777 35.0543,-107.762 35.046,-107.748 35.0398,-107.732 35.0362,-107.715 35.0358,-107.69 35.045,-107.671 35.0636,-107.653 35.0849,-107.632 35.102,-107.623 35.1051,-107.614 35.1061,-107.604 35.1061,-107.594 35.1064,-107.572 35.1078,-107.551 35.1075,-107.532 35.1037,-107.513 35.0947,-107.5 35.0772,-107.493 35.0538,-107.487 35.0301,-107.474 35.0119,-107.448 34.9993,-107.419 34.9964,-107.386 35.001,-107.35 35.0112,-107.34 35.0022,-107.332 34.997,-107.324 34.9948,-107.311 34.995,-107.285 34.9968,-107.26 34.9986,-107.234 35.0004,-107.209 35.0022,-107.185 34.9999,-107.165 34.9925,-107.145 34.9851,-107.122 34.9827,-107.095 34.9885,-107.073 34.9988,-107.05 35.0097,-107.023 35.0175,-107.011 35.022,-106.999 35.0271,-106.987 35.032,-106.975 35.036,-106.935 35.0439,-106.862 35.0572,-106.811 35.0662,-106.76 35.0753,-106.743 35.087,-106.726 35.0986,-106.708 35.1103,-106.691 35.122,-106.665 35.1235,-106.638 35.1215,-106.612 35.1159,-106.588 35.107)
+LINESTRING(-98.3309 35.5347,-98.3761 35.5298,-98.4278 35.5294,-98.4799 35.531,-98.5265 35.532,-98.5636 35.5341,-98.6046 35.5379,-98.645 35.5397,-98.6802 35.5357,-98.6834 35.5315,-98.6867 35.5274,-98.69 35.5232,-98.6932 35.519,-98.7129 35.519,-98.7306 35.5213,-98.7481 35.5239,-98.7672 35.5251,-98.7927 35.5245,-98.8172 35.5231,-98.8415 35.5208,-98.8667 35.5175,-98.8766 35.5167,-98.8871 35.5166,-98.8976 35.5163,-98.9074 35.5148,-98.9159 35.5118,-98.9242 35.5078,-98.9324 35.5038,-98.9407 35.5008,-98.9513 35.4989,-98.962 35.4982,-98.9727 35.4978,-98.9831 35.4967,-98.9944 35.4935,-99.0057 35.4891,-99.0172 35.4849,-99.0288 35.4822,-99.0539 35.4805,-99.0794 35.4799,-99.1046 35.4782,-99.1286 35.473,-99.1584 35.4546,-99.1897 35.4372,-99.2228 35.4255,-99.2579 35.4242,-99.2625 35.4263,-99.267 35.4283,-99.2715 35.4303,-99.276 35.4324,-99.2857 35.4309,-99.3062 35.4275,-99.3293 35.4239,-99.3471 35.4217,-99.367 35.4151,-99.3847 35.4023,-99.4053 35.3897,-99.4338 35.3838,-99.4513 35.3835,-99.4688 35.3832,-99.4862 35.3829,-99.5037 35.3826,-99.5179 35.3805,-99.5314 35.3754,-99.544 35.3685,-99.5556 35.3612,-99.5664 35.3544,-99.5771 35.3476,-99.5877 35.3406,-99.5975 35.3331,-99.6109 35.3148,-99.618 35.2939,-99.6273 35.274,-99.6471 35.2584,-99.7091 35.254,-99.747 35.2437,-99.7773 35.2333,-99.8168 35.2288,-99.841 35.2289,-99.8651 35.2291,-99.8893 35.2292,-99.9134 35.2293,-99.997 35.2287,-100.001 35.2287)
+LINESTRING(-100.001 35.2287,-100.08 35.2275,-100.164 35.2275,-100.249 35.2309)
+LINESTRING(-103.042 35.1827,-103.026 35.184,-102.994 35.1867,-102.975 35.1899,-102.94 35.2021,-102.905 35.2142,-102.87 35.2263,-102.834 35.2384,-102.812 35.2455,-102.781 35.2553,-102.751 35.264,-102.735 35.2684,-102.689 35.2739,-102.637 35.2752,-102.585 35.2724,-102.537 35.2656,-102.518 35.2619,-102.499 35.2583,-102.48 35.2544,-102.461 35.2499,-102.455 35.2473,-102.448 35.2436,-102.442 35.2398,-102.435 35.2369,-102.423 35.2347,-102.414 35.2355,-102.405 35.237,-102.396 35.2372,-102.373 35.2334,-102.349 35.2282,-102.326 35.2226,-102.303 35.2177,-102.284 35.215,-102.266 35.2129,-102.247 35.2111,-102.229 35.2092,-102.194 35.2064,-102.171 35.2057,-102.145 35.2025,-102.102 35.1924,-102.065 35.1888,-102.001 35.1863,-101.939 35.1849,-101.904 35.1849,-101.888 35.1871,-101.872 35.1902,-101.856 35.1922,-101.839 35.1909)
+LINESTRING(-101.839 35.1909,-101.806 35.1901,-101.772 35.1883,-101.736 35.1872,-101.699 35.1903)
+LINESTRING(-117.973 33.8566,-117.946 33.8407,-117.929 33.8288,-117.914 33.8147,-117.893 33.7923,-117.889 33.791,-117.886 33.7897,-117.882 33.7884,-117.878 33.7871,-117.872 33.78,-117.866 33.7725,-117.861 33.7649,-117.855 33.7572,-117.849 33.7546,-117.843 33.7494,-117.838 33.7436,-117.832 33.7392,-117.819 33.7329,-117.805 33.7264,-117.793 33.7191,-117.781 33.7102,-117.773 33.701,-117.764 33.6895,-117.757 33.6775,-117.751 33.6666,-117.747 33.6608,-117.742 33.6551,-117.738 33.6493,-117.734 33.6436)
+LINESTRING(-118.092 33.7836,-118.091 33.7812,-118.09 33.7788,-118.088 33.7766,-118.086 33.7744,-118.074 33.7742,-118.062 33.7738,-118.05 33.7736,-118.038 33.7738,-118.013 33.7521,-117.979 33.7251,-117.943 33.7009,-117.912 33.6875,-117.902 33.6867,-117.892 33.6868,-117.882 33.6869,-117.873 33.6856,-117.844 33.6778,-117.815 33.6691,-117.787 33.6597,-117.759 33.6499,-117.753 33.6483,-117.746 33.6467,-117.74 33.6451,-117.734 33.6436)
+LINESTRING(-100.249 35.2309,-100.271 35.229,-100.293 35.2272,-100.315 35.2253,-100.337 35.2234,-100.39 35.2226,-100.453 35.2257,-100.518 35.229,-100.576 35.2288,-100.605 35.227,-100.635 35.2249,-100.664 35.2223,-100.693 35.2191,-100.701 35.2177,-100.708 35.2156,-100.716 35.2135,-100.724 35.2121,-100.734 35.2119,-100.746 35.2126,-100.758 35.2137,-100.769 35.2141,-100.779 35.208,-100.797 35.1979,-100.817 35.1885,-100.832 35.1842,-100.922 35.1838,-100.994 35.1884,-101.066 35.1972,-101.157 35.2091,-101.209 35.2114,-101.261 35.2089,-101.314 35.2064,-101.364 35.2087,-101.371 35.2108,-101.378 35.2141,-101.385 35.2172,-101.394 35.2184,-101.412 35.2177,-101.429 35.217,-101.447 35.2165,-101.464 35.2166,-101.49 35.2186,-101.518 35.2219,-101.546 35.2242,-101.572 35.2234,-101.593 35.2192,-101.602 35.2141,-101.608 35.2091,-101.617 35.2051,-101.636 35.2035,-101.661 35.203,-101.685 35.1999,-101.699 35.1903)
+LINESTRING(-80.548 33.3192,-80.5366 33.3432,-80.5252 33.3671,-80.5138 33.3911,-80.5024 33.415,-80.4928 33.4358,-80.4831 33.4566,-80.4715 33.4811,-80.4656 33.4927,-80.4326 33.5221,-80.4029 33.5477,-80.3709 33.5719,-80.3309 33.5966,-80.3221 33.6041,-80.3059 33.6188,-80.2901 33.6339,-80.282 33.6422,-80.2796 33.65,-80.278 33.6563,-80.2602 33.6808,-80.2387 33.7091,-80.2141 33.7344,-80.1872 33.7498,-80.1583 33.8015,-80.1038 33.881,-80.0477 33.9583,-80.0144 34.0035,-79.9883 34.0345,-79.9567 34.0663,-79.9238 34.0982,-79.8941 34.1293,-79.8821 34.1458,-79.8722 34.163,-79.8618 34.1801,-79.8481 34.1961)
+LINESTRING(-80.548 33.3192,-80.5901 33.3569,-80.6365 33.392,-80.6846 33.4257,-80.7316 33.4595,-80.7568 33.4812,-80.78 33.5061,-80.8024 33.5319,-80.8249 33.5565,-80.8403 33.5747,-80.8526 33.5938,-80.8629 33.6138,-80.8727 33.6348,-80.8859 33.6599,-80.9015 33.6847,-80.9178 33.7094,-80.9332 33.7336,-80.9479 33.7516,-80.9616 33.7604,-80.9746 33.7665,-80.9868 33.7763,-81.0036 33.8007,-81.0164 33.8271,-81.027 33.8542,-81.0371 33.8809,-81.0435 33.8924,-81.051 33.9042,-81.0597 33.9146,-81.0698 33.9218,-81.0703 33.9268,-81.085 33.9432,-81.0966 33.9589,-81.1042 33.9759,-81.107 33.9963,-81.1073 34.0039,-81.1071 34.0122,-81.1048 34.02,-81.0987 34.0263,-81.1037 34.0317,-81.1092 34.0368)
+LINESTRING(-106.588 35.107,-106.547 35.0907,-106.504 35.0734,-106.459 35.0637,-106.416 35.0702,-106.413 35.0723,-106.411 35.0745,-106.408 35.0767,-106.406 35.0788,-106.4 35.079,-106.394 35.0791,-106.388 35.0792,-106.382 35.0794,-106.368 35.0887,-106.353 35.0967,-106.338 35.1052,-106.325 35.1163,-106.314 35.115,-106.304 35.111,-106.295 35.1057,-106.286 35.101,-106.23 35.0785,-106.156 35.0483,-106.085 35.0204,-106.037 35.0051,-105.985 35.0037,-105.883 35.0035,-105.798 35.0037,-105.713 35.0038,-105.711 35.0053,-105.708 35.0068,-105.706 35.0082,-105.703 35.0097,-105.693 35.0093,-105.683 35.009,-105.672 35.0086,-105.662 35.0082)
+LINESTRING(-103.701 35.1577,-103.697 35.1596,-103.686 35.1659,-103.675 35.1724,-103.63 35.1734,-103.585 35.176,-103.54 35.1794,-103.495 35.1828,-103.489 35.1776,-103.484 35.1703,-103.475 35.1617,-103.458 35.1529,-103.429 35.1416,-103.399 35.1303,-103.37 35.1189,-103.34 35.1076,-103.334 35.1061,-103.327 35.1059,-103.32 35.1064,-103.313 35.1073,-103.265 35.1172,-103.218 35.1314,-103.171 35.1476,-103.125 35.1637,-103.115 35.1674,-103.104 35.1719,-103.093 35.176,-103.083 35.1787,-103.059 35.1814,-103.042 35.1827)
+LINESTRING(-81.1092 34.0368,-81.1259 34.0286,-81.1518 34.0142,-81.1769 33.9993,-81.1912 33.9898,-81.1958 33.9852,-81.2002 33.9803,-81.2047 33.9756,-81.2391 33.9536,-81.2701 33.9394,-81.3013 33.9258,-81.3315 33.9104,-81.381 33.8755,-81.4262 33.8354,-81.471 33.7946,-81.5186 33.7574,-81.5475 33.7373,-81.5775 33.716,-81.6081 33.6957,-81.639 33.6781,-81.6546 33.6719,-81.6714 33.6666,-81.688 33.6612,-81.7027 33.6541,-81.7116 33.6489,-81.7205 33.6444,-81.73 33.6407,-81.7406 33.638,-81.7498 33.636,-81.759 33.6338,-81.7682 33.6316,-81.7775 33.6295,-81.7849 33.6286,-81.7925 33.6281,-81.8001 33.6277,-81.8073 33.6266,-81.8286 33.6173,-81.8693 33.5978,-81.9112 33.5773,-81.9361 33.5647,-81.9428 33.5577,-81.9491 33.55,-81.9826 33.5395,-82.0103 33.5293,-82.0129 33.5281)
+LINESTRING(-92.2328 34.7808,-92.1875 34.7814,-92.1431 34.7845,-92.0988 34.7884,-92.0538 34.7914,-92.0438 34.7931,-92.0342 34.7962,-92.0247 34.7993,-92.0152 34.801,-91.9811 34.8033,-91.9419 34.8059,-91.9027 34.8072,-91.8685 34.8059,-91.843 34.803,-91.8184 34.8003,-91.7935 34.7985,-91.7672 34.7985,-91.7529 34.7995,-91.7387 34.8008,-91.7246 34.8019,-91.7101 34.8022,-91.703 34.8015,-91.6961 34.802,-91.684 34.8066,-91.6726 34.8119,-91.6608 34.8163,-91.6479 34.8182,-91.6142 34.8184,-91.5806 34.8186,-91.5367 34.8192,-91.5135 34.8204,-91.491 34.8275,-91.4689 34.8354,-91.4462 34.8424,-91.422 34.8468,-91.4109 34.8472,-91.3992 34.8467,-91.3875 34.846,-91.3761 34.8457,-91.3524 34.8487,-91.328 34.8559,-91.3044 34.8649,-91.2829 34.8733,-91.2369 34.8985,-91.2011 34.9088,-91.1652 34.9152,-91.1186 34.9285,-91.1078 34.9296,-91.0967 34.9301,-91.0596 34.9401,-91.0229 34.9523,-90.9863 34.9644,-90.9492 34.9743,-90.9417 34.9754,-90.934 34.976,-90.9263 34.9766,-90.9189 34.9777,-90.8858 34.9862,-90.8536 34.9964,-90.8221 35.0069,-90.7916 35.0162,-90.7711 35.0183,-90.7504 35.0164,-90.7323 35.0136,-90.7198 35.0131,-90.6774 35.0382,-90.645 35.0587,-90.6147 35.0756,-90.5786 35.0896,-90.5608 35.0955,-90.5424 35.1018,-90.5238 35.1077,-90.5057 35.1123,-90.4716 35.1215,-90.4387 35.1324,-90.4099 35.1413,-90.3884 35.1443,-90.3518 35.1438,-90.2998 35.1469,-90.2428 35.1557,-90.1916 35.1726)
+LINESTRING(-92.2328 34.7808,-92.2157 34.8014,-92.2069 34.8116,-92.1977 34.8213,-92.191 34.8263,-92.1836 34.83,-92.1758 34.8332,-92.168 34.8368,-92.1501 34.8488,-92.1259 34.8679,-92.1026 34.8884,-92.0875 34.9045,-92.085 34.9107,-92.0829 34.9198,-92.0802 34.9358,-92.0718 34.944,-92.041 34.9712,-92.0222 34.9836,-92.0047 34.9932,-91.9782 35.0117,-91.9707 35.0195,-91.9644 35.0289,-91.9581 35.0385,-91.9512 35.0466,-91.9355 35.0586,-91.9177 35.0696,-91.8993 35.0803,-91.8821 35.0911,-91.8209 35.1346,-91.7732 35.1724,-91.7303 35.2115,-91.6836 35.2591,-91.6599 35.2833,-91.6428 35.2972,-91.6235 35.3076,-91.5932 35.3211,-91.5695 35.3196,-91.5577 35.3191,-91.5458 35.3191,-91.4921 35.3715,-91.4602 35.4018,-91.4431 35.4171,-91.3766 35.4514,-91.3325 35.4675,-91.2972 35.4898,-91.2569 35.5425,-91.2468 35.5831)
+LINESTRING(-92.4093 35.1185,-92.4051 35.1143,-92.4009 35.108,-92.3976 35.1014,-92.394 35.094,-92.3871 35.0813,-92.3818 35.0696,-92.3789 35.0576,-92.3787 35.044,-92.3797 35.0338,-92.3807 35.0237,-92.3817 35.0136,-92.3827 35.0035,-92.3825 34.9986,-92.3814 34.9943,-92.3802 34.99,-92.38 34.9851,-92.3817 34.968,-92.3834 34.951,-92.3851 34.9339,-92.3868 34.9169,-92.3861 34.905,-92.3824 34.8947,-92.377 34.8846,-92.3713 34.8734,-92.3644 34.8618,-92.3561 34.853,-92.3468 34.8447,-92.3367 34.8347,-92.3172 34.821,-92.2946 34.8147,-92.2703 34.8097,-92.2459 34.7999,-92.2426 34.7951,-92.2394 34.7903,-92.2361 34.7856,-92.2328 34.7808)
+LINESTRING(-101.839 35.1909,-101.848 35.185,-101.856 35.1793,-101.863 35.1731,-101.87 35.1659,-101.876 35.1591,-101.881 35.1521,-101.887 35.1451,-101.891 35.1393,-101.892 35.1385,-101.893 35.1378,-101.91 35.1214,-101.926 35.0997,-101.937 35.0762,-101.94 35.0528)
+LINESTRING(-97.4956 35.3922,-97.514 35.3943,-97.5332 35.3951,-97.5525 35.3959,-97.5716 35.3977,-97.577 35.3787,-97.5891 35.3383,-97.6016 35.2979,-97.6082 35.2788,-97.6291 35.2687,-97.6646 35.2505,-97.6998 35.2319,-97.7196 35.2206,-97.7757 35.1805,-97.8343 35.1344,-97.8852 35.0838,-97.9181 35.0305,-97.9229 35.0287,-97.9277 35.027,-97.9325 35.0252,-97.9373 35.0234)
+LINESTRING(-104.664 34.9362,-104.658 34.9381,-104.652 34.9393,-104.645 34.9401,-104.639 34.9404,-104.615 34.9554,-104.57 34.9771,-104.522 34.9982,-104.491 35.0117,-104.482 35.0107,-104.469 35.0094,-104.456 35.0089,-104.447 35.0103,-104.397 35.0315,-104.345 35.0499,-104.29 35.0633,-104.234 35.0695,-104.214 35.0679,-104.196 35.0642,-104.178 35.062,-104.158 35.0647,-104.109 35.0803,-104.054 35.0979,-103.998 35.1133,-103.947 35.1225,-103.926 35.1223,-103.904 35.1193,-103.882 35.1154,-103.861 35.1128,-103.849 35.117,-103.839 35.1239,-103.829 35.1315,-103.819 35.1379,-103.795 35.1454,-103.771 35.1478,-103.746 35.1478,-103.72 35.1478,-103.709 35.1536,-103.701 35.1577)
+LINESTRING(-105.662 35.0082,-105.634 35.0063,-105.606 35.0044,-105.578 35.0025,-105.551 35.0006,-105.548 35.0024,-105.546 35.0042,-105.544 35.006,-105.542 35.0078,-105.512 35.0098,-105.48 35.0071,-105.448 35.0025,-105.416 34.9991,-105.353 34.9958,-105.29 34.9933,-105.227 34.991,-105.163 34.988,-105.066 34.9828,-104.97 34.9783,-104.873 34.9749,-104.775 34.9733,-104.747 34.9698,-104.727 34.9614,-104.71 34.9507,-104.691 34.9401,-104.684 34.9403,-104.677 34.9395,-104.67 34.9381,-104.664 34.9362)
+LINESTRING(-82.0129 33.5281,-82.0365 33.517,-82.0653 33.5006,-82.1106 33.487,-82.1686 33.4852,-82.2279 33.4898,-82.2773 33.4953,-82.2869 33.4958,-82.2966 33.4957,-82.3063 33.4958,-82.3158 33.4965,-82.3246 33.4984,-82.3338 33.5012,-82.343 33.5039,-82.3515 33.5053,-82.3889 33.5071,-82.4272 33.5088,-82.4654 33.5109,-82.5029 33.5138)
+LINESTRING(-84.3783 33.8074,-84.3676 33.8098,-84.3552 33.8142,-84.3419 33.8194,-84.3286 33.8241,-84.3247 33.8281,-84.3209 33.8322,-84.317 33.8362,-84.3132 33.8403,-84.2964 33.8472,-84.2785 33.8572,-84.2615 33.8681,-84.2474 33.8778,-84.2315 33.8893,-84.2144 33.9017,-84.1967 33.9139,-84.1784 33.9245,-84.1551 33.9373,-84.1318 33.951,-84.1085 33.9644,-84.085 33.9763,-84.0784 33.9933,-84.0656 34.0095,-84.0492 34.0234,-84.0315 34.0337)
+LINESTRING(-84.3783 33.8074,-84.3874 33.8191,-84.4036 33.8376,-84.4206 33.8569,-84.4319 33.8711,-84.4461 33.8904,-84.4611 33.9067,-84.4772 33.9222,-84.4949 33.9389,-84.4996 33.9456,-84.5021 33.9531,-84.5042 33.9605,-84.5076 33.9669,-84.5238 33.9834,-84.5415 33.9985,-84.5591 34.014,-84.5747 34.0312,-84.5847 34.047,-84.5945 34.0632,-84.6071 34.0782,-84.6258 34.09,-84.6495 34.0954,-84.6724 34.0938,-84.6951 34.0895,-84.7184 34.0869,-84.7262 34.0908,-84.7418 34.1087,-84.7525 34.1173,-84.7597 34.1236,-84.765 34.1342,-84.7718 34.1473,-84.7707 34.1687,-84.7658 34.1909,-84.7616 34.2062,-84.7455 34.2116,-84.7379 34.2142,-84.7352 34.2219,-84.7439 34.2354,-84.7631 34.2409,-84.7862 34.2452,-84.8065 34.2545,-84.8204 34.2705,-84.8285 34.2874,-84.8356 34.3043,-84.8465 34.3204,-84.8634 34.3361,-84.8843 34.3542,-84.9036 34.3723,-84.9155 34.3879,-84.9176 34.3953,-84.9184 34.404,-84.9185 34.4128,-84.9185 34.4205,-84.9167 34.45,-84.9129 34.4831,-84.9119 34.5155,-84.9182 34.5428,-84.9421 34.5695,-84.9623 34.6085,-84.9798 34.6466,-84.9957 34.6705,-84.9981 34.7036,-84.9976 34.7364,-84.9972 34.7692,-85.0002 34.8022,-85.0065 34.8061,-85.0128 34.8101,-85.0133 34.8213,-85.0139 34.8324,-85.0152 34.844,-85.0178 34.8536,-85.0434 34.8781,-85.084 34.8952,-85.1229 34.9076,-85.1434 34.9182,-85.1488 34.9279,-85.1541 34.9375,-85.1725 34.9494,-85.1867 34.9673,-85.1976 34.9867)
+LINESTRING(-92.2328 34.7808,-92.2422 34.7631,-92.2515 34.7453,-92.2608 34.7276,-92.2701 34.7099)
+LINESTRING(-86.0739 34.02,-86.0756 34.0241,-86.0772 34.0282,-86.0536 34.0443,-86.0204 34.0669,-85.9925 34.0896,-85.9847 34.1057,-85.9864 34.1141,-85.9882 34.1224,-85.9899 34.1308,-85.9917 34.1392,-85.9763 34.1629,-85.9416 34.2048,-85.9038 34.248,-85.8796 34.2759,-85.8714 34.2869,-85.8638 34.2983,-85.8563 34.3097,-85.8481 34.3207,-85.838 34.3317,-85.8271 34.3423,-85.8162 34.353,-85.8065 34.3641,-85.8003 34.3735,-85.795 34.3837,-85.7898 34.3938,-85.7839 34.4035,-85.7651 34.4257,-85.7433 34.4472,-85.7209 34.4687,-85.7006 34.4906,-85.6942 34.5038,-85.6923 34.5184,-85.6906 34.5331,-85.6849 34.5468,-85.6763 34.5573,-85.6664 34.5675,-85.6561 34.5775,-85.6465 34.5875,-85.6362 34.6031,-85.6284 34.6205,-85.6202 34.6381,-85.6089 34.6544,-85.5952 34.6694,-85.5815 34.6845,-85.5677 34.6995,-85.554 34.7145,-85.554 34.7145)
+LINESTRING(-84.3783 33.8074,-84.3806 33.7984,-84.383 33.7893,-84.3853 33.7803,-84.3877 33.7712)
+LINESTRING(-95.5319 35.454,-95.5429 35.4415,-95.5491 35.4273,-95.5532 35.4123,-95.5581 35.3975,-95.5762 35.361,-95.5903 35.3331,-95.5978 35.3048,-95.596 35.2671,-95.6019 35.2606,-95.6157 35.2514,-95.6298 35.2421,-95.6364 35.2353,-95.6864 35.1809,-95.7212 35.1353,-95.7489 35.0813,-95.7776 35.0019,-95.7807 34.9663,-95.7867 34.9314,-95.7967 34.8974,-95.8118 34.8646)
+LINESTRING(-95.9677 35.4306,-95.9688 35.4261,-95.9698 35.4217,-95.9709 35.4166,-95.9712 35.4134,-95.97 35.4094,-95.9687 35.4055,-95.9675 35.4015,-95.9662 35.3975,-95.9612 35.3758,-95.9579 35.3531,-95.9549 35.3315,-95.9504 35.3134,-95.9432 35.2983,-95.9344 35.2836,-95.9261 35.2687,-95.9207 35.2531,-95.919 35.2366,-95.9191 35.2195,-95.919 35.2024,-95.9166 35.1863,-95.9115 35.173,-95.9046 35.16,-95.8976 35.147,-95.8923 35.1338,-95.8869 35.1093,-95.8843 35.0845,-95.8829 35.0597,-95.8811 35.035,-95.8802 35.0301,-95.8785 35.0249,-95.8768 35.0199,-95.875 35.0148,-95.8624 34.9842,-95.846 34.954,-95.8305 34.9235,-95.8202 34.892,-95.819 34.8849,-95.8178 34.8784,-95.8157 34.8718,-95.8118 34.8646)
+LINESTRING(-84.3877 33.7712,-84.3877 33.7398)
+LINESTRING(-84.4903 33.7636,-84.4715 33.7576,-84.4443 33.7484,-84.4144 33.7409,-84.3877 33.7398)
+LINESTRING(-117.137 33.4823,-117.132 33.5497,-117.149 33.6838,-117.169 33.7753,-117.199 33.857,-117.235 33.9457,-117.31 34.0432)
+LINESTRING(-117.564 33.8778,-117.564 33.872,-117.565 33.8662,-117.566 33.8604,-117.566 33.8546,-117.526 33.8369,-117.509 33.8165,-117.5 33.7963,-117.484 33.7791,-117.484 33.7749,-117.484 33.7707,-117.484 33.7665,-117.483 33.7623,-117.477 33.7626,-117.471 33.7629,-117.465 33.7633,-117.458 33.7636,-117.44 33.7495,-117.417 33.741,-117.394 33.7342,-117.372 33.7252,-117.333 33.6965,-117.3 33.6621,-117.27 33.6255,-117.24 33.5899,-117.227 33.5777,-117.212 33.5664,-117.196 33.5555,-117.181 33.5446,-117.17 33.5322,-117.157 33.5146,-117.146 33.4965,-117.137 33.4823)
+LINESTRING(-89.1189 34.5588,-89.1082 34.549,-89.0894 34.5373,-89.069 34.5266,-89.0536 34.5197,-89.0376 34.4975,-89.0229 34.484,-89.0045 34.4741,-88.9774 34.4627,-88.9587 34.4423,-88.9252 34.4136,-88.8897 34.3868,-88.865 34.3721,-88.8552 34.3595,-88.8345 34.3437,-88.8124 34.3277,-88.798 34.3142,-88.7946 34.3133,-88.7913 34.3123,-88.788 34.3114,-88.7847 34.3104,-88.7796 34.3122,-88.7619 34.3044,-88.7432 34.2976,-88.7244 34.2908,-88.7061 34.2832)
+LINESTRING(-88.7061 34.2832,-88.6631 34.284,-88.5896 34.2831,-88.5143 34.2756,-88.4659 34.2567,-88.3883 34.2502,-88.274 34.2322,-88.1864 34.213)
+LINESTRING(-84.3877 33.7398,-84.3684 33.7357,-84.3446 33.7281,-84.3231 33.7203,-84.3111 33.7153,-84.2978 33.7111,-84.2856 33.7114,-84.2734 33.7138,-84.2603 33.7163,-84.2385 33.716,-84.2155 33.7117,-84.1923 33.7064,-84.1701 33.7031,-84.1563 33.7032,-84.1425 33.7043,-84.1287 33.7055,-84.115 33.706,-84.109 33.7043,-84.0968 33.7005,-84.0868 33.6973,-84.0767 33.6941,-84.0734 33.6896,-84.068 33.6829,-84.0625 33.6767,-84.0588 33.6733,-84.0537 33.6713,-84.0479 33.67,-84.0421 33.6688,-84.0366 33.6676,-84.0207 33.6614,-84.0061 33.6531,-83.9923 33.6439,-83.9788 33.6349,-83.9735 33.6329,-83.9662 33.6316,-83.9588 33.6306,-83.9529 33.6296,-83.9453 33.627,-83.938 33.6236,-83.9308 33.6201,-83.9235 33.6176,-83.9122 33.6148,-83.901 33.612,-83.8896 33.6095,-83.8782 33.6075,-83.845 33.6132,-83.7894 33.6149,-83.7333 33.6142,-83.6991 33.6124,-83.6852 33.6102,-83.6717 33.6072,-83.6583 33.6037,-83.6449 33.6,-83.6101 33.5903,-83.5492 33.5738,-83.4893 33.5581,-83.4578 33.5513,-83.442 33.5516,-83.4261 33.5518,-83.4103 33.5521,-83.3945 33.5524,-83.3606 33.5493,-83.3331 33.5417,-83.3103 33.534,-83.2903 33.5304,-83.2608 33.5323,-83.2274 33.5367,-83.194 33.5416,-83.1647 33.5452,-83.1401 33.5467,-83.0985 33.5486,-83.058 33.5498,-83.0369 33.5494,-83.0179 33.5437,-82.9984 33.5379,-82.9786 33.5331,-82.9587 33.5303,-82.9296 33.5336,-82.8838 33.525,-82.8402 33.5129,-82.8173 33.5056,-82.8037 33.5031,-82.7887 33.5022,-82.7733 33.5015,-82.7584 33.4996,-82.7422 33.4962,-82.7259 33.4927,-82.7097 33.4893,-82.6935 33.4858,-82.6591 33.4873,-82.6048 33.4961,-82.5472 33.5067,-82.5029 33.5138)
+LINESTRING(-88.1864 34.213,-88.1563 34.2064,-88.0682 34.1765,-88.0581 34.1499,-88.0403 34.1281,-88.0161 34.1106,-87.9867 34.0967)
+LINESTRING(-79.9432 32.795,-79.9489 32.7997,-79.9528 32.8121,-79.9583 32.824,-79.9662 32.8354,-79.9742 32.844,-79.9813 32.8452,-79.9884 32.8464,-79.9929 32.8514,-79.9937 32.8573,-79.998 32.8617,-80.0031 32.8663,-80.0085 32.8706,-80.0137 32.8739,-80.0235 32.8971,-80.0357 32.919,-80.0504 32.9399,-80.0673 32.9604,-80.0678 32.9668,-80.0723 32.976,-80.0731 32.9809,-80.0789 32.9878,-80.0853 32.9924,-80.1092 33.0108,-80.1289 33.0274,-80.1484 33.044,-80.1685 33.06,-80.2131 33.0878,-80.2653 33.1143,-80.3145 33.1385,-80.3505 33.1595,-80.3695 33.1756,-80.3883 33.1938,-80.4074 33.2115,-80.4273 33.2259,-80.4345 33.2289,-80.442 33.2312,-80.4495 33.234,-80.4563 33.2383,-80.4642 33.246,-80.4715 33.2544,-80.4787 33.2628,-80.4863 33.2707,-80.5015 33.2831,-80.5173 33.2942,-80.5331 33.3056,-80.548 33.3192)
+LINESTRING(-97.9373 35.0234,-97.9589 35.0026,-97.9942 34.969,-98.0292 34.9367,-98.0498 34.9195,-98.0817 34.9012,-98.1136 34.883,-98.1454 34.8647,-98.1773 34.8464,-98.1932 34.837,-98.2098 34.8271,-98.2268 34.8179,-98.2437 34.8105,-98.2611 34.8062,-98.2694 34.8063,-98.2812 34.802,-98.3089 34.7846,-98.3313 34.7703)
+LINESTRING(-84.4903 33.7636,-84.5251 33.7715,-84.5593 33.7766,-84.5934 33.7773,-84.628 33.7722,-84.6676 33.76,-84.7157 33.7431,-84.7621 33.7275,-84.7964 33.7192,-84.8152 33.7181,-84.8351 33.7181,-84.8552 33.7186,-84.8743 33.7189,-84.9121 33.7195,-84.9493 33.7205,-84.9864 33.72,-85.0244 33.7159,-85.0377 33.7129,-85.0503 33.7088,-85.0628 33.7042,-85.0753 33.6995,-85.1014 33.692,-85.1284 33.6875,-85.1559 33.6851,-85.1836 33.6839,-85.225 33.6836,-85.2678 33.6837,-85.3104 33.6816,-85.3426 33.6759)
+LINESTRING(-117.734 33.6436,-117.718 33.6286,-117.701 33.6161,-117.683 33.604,-117.668 33.5907,-117.666 33.5784,-117.668 33.5623,-117.672 33.5456,-117.671 33.5316,-117.662 33.5194,-117.649 33.5132,-117.639 33.5066,-117.637 33.4929,-117.635 33.4879,-117.633 33.4828,-117.63 33.4778,-117.628 33.4728,-117.612 33.4554,-117.59 33.4347,-117.567 33.4154,-117.548 33.4018,-117.529 33.3908,-117.509 33.3807,-117.49 33.3701,-117.47 33.3577,-117.467 33.3554,-117.463 33.353,-117.46 33.3507,-117.456 33.3484,-117.443 33.3264,-117.416 33.2933,-117.385 33.2601,-117.362 33.2379,-117.361 33.2342,-117.36 33.2306,-117.359 33.2269,-117.359 33.2232,-117.348 33.2167,-117.342 33.2052,-117.337 33.1921,-117.332 33.1807)
+LINESTRING(-117.295 34.0635,-117.271 34.0636,-117.247 34.066,-117.224 34.0681,-117.199 34.0675,-117.179 34.0578,-117.167 34.0491,-117.157 34.0414,-117.147 34.0347,-117.132 34.0291,-117.107 34.0208,-117.083 34.0129,-117.069 34.0089,-117.063 34.0012,-117.058 33.9932,-117.053 33.9852,-117.047 33.9776,-117.036 33.9685,-117.013 33.9531,-116.989 33.9381,-116.976 33.9301,-116.951 33.9313,-116.927 33.9303,-116.903 33.9285,-116.879 33.9275,-116.864 33.9284,-116.849 33.9307,-116.833 33.9334,-116.818 33.9352,-116.81 33.9292,-116.802 33.9225,-116.774 33.9227,-116.747 33.9251,-116.719 33.9276,-116.692 33.9281,-116.669 33.9259,-116.645 33.9218,-116.622 33.9172,-116.6 33.9131,-116.581 33.911,-116.559 33.909,-116.539 33.9053,-116.522 33.8984,-116.515 33.8934,-116.51 33.8878,-116.504 33.8822,-116.498 33.8773,-116.451 33.8477,-116.388 33.8099,-116.323 33.7755,-116.272 33.7561,-116.243 33.7462,-116.226 33.7403,-116.212 33.7324,-116.192 33.7165,-116.168 33.7134,-116.146 33.7068,-116.124 33.6999,-116.102 33.6957,-116.096 33.6965,-116.09 33.6986,-116.083 33.7005,-116.073 33.7003,-116.047 33.6951,-116.02 33.6887,-115.992 33.6822,-115.964 33.677,-115.821 33.6615,-115.699 33.6617,-115.575 33.6765,-115.427 33.7048,-115.336 33.7027,-115.221 33.6769,-115.109 33.6426,-115.024 33.6152,-114.961 33.606,-114.879 33.6047,-114.796 33.607,-114.726 33.6087,-114.681 33.6086,-114.635 33.6083,-114.589 33.6074)
+LINESTRING(-114.589 33.6074,-114.545 33.6055,-114.538 33.6048,-114.537 33.6047)
+LINESTRING(-114.537 33.6047,-114.531 33.6038,-114.525 33.6028,-114.518 33.6025,-114.498 33.607,-114.461 33.6168,-114.424 33.6273,-114.401 33.6337,-114.393 33.6361,-114.386 33.6395,-114.368 33.6455,-114.351 33.6469,-114.335 33.6466,-114.319 33.6472,-114.299 33.6498,-114.28 33.653,-114.261 33.6564,-114.241 33.6594,-114.235 33.6602,-114.229 33.6611,-114.222 33.662,-114.216 33.6629)
+LINESTRING(-114.216 33.6629,-114.187 33.6668,-114.153 33.6732,-114.12 33.6783,-114.095 33.6783,-114.094 33.679,-114.093 33.6797,-114.092 33.6804,-114.091 33.6811,-114.084 33.6807,-114.076 33.6803,-114.068 33.6793,-114.063 33.6775,-114.062 33.6778,-114.06 33.678,-114.051 33.6736,-114.041 33.6695,-114.031 33.6657,-114.02 33.6624)
+LINESTRING(-85.3426 33.6759,-85.3508 33.6745,-85.3717 33.6685,-85.3988 33.6607,-85.4256 33.6538,-85.4456 33.6505,-85.4582 33.6528,-85.4726 33.6583,-85.487 33.6638,-85.4996 33.6657,-85.5232 33.6606,-85.5464 33.6517,-85.5694 33.6427,-85.5926 33.6374,-85.5975 33.6375,-85.6026 33.6383,-85.6077 33.6391,-85.6125 33.6393,-85.6306 33.6362,-85.6468 33.6308,-85.6628 33.6248,-85.6803 33.6202,-85.7171 33.6244,-85.7546 33.6176,-85.7921 33.6085,-85.8292 33.606)
+LINESTRING(-117.137 33.4823,-117.133 33.4568,-117.146 33.4315,-117.163 33.4065,-117.174 33.382,-117.161 33.3625,-117.157 33.3519,-117.157 33.3402,-117.156 33.3175,-117.15 33.3101,-117.147 33.2996,-117.145 33.2885,-117.145 33.2795,-117.149 33.2761,-117.152 33.2716,-117.155 33.2667,-117.156 33.2624,-117.148 33.2422,-117.129 33.2064,-117.107 33.17,-117.092 33.1482,-117.093 33.1432,-117.094 33.1382,-117.092 33.1337,-117.09 33.1292,-117.088 33.1247,-117.085 33.1203)
+LINESTRING(-117.332 33.1807,-117.312 33.1835,-117.291 33.1876,-117.27 33.1918,-117.25 33.1946,-117.23 33.1806,-117.206 33.1556,-117.178 33.1353,-117.145 33.1352,-117.132 33.1317,-117.12 33.1287,-117.108 33.1249,-117.096 33.1191,-117.093 33.1194,-117.091 33.1197,-117.088 33.12,-117.085 33.1203)
+LINESTRING(-97.4956 35.3922,-97.4948 35.3708,-97.4949 35.3493,-97.4948 35.3278,-97.4939 35.3064,-97.489 35.2786,-97.4813 35.252,-97.4754 35.225,-97.4758 35.1959,-97.4773 35.1876,-97.478 35.1807,-97.4771 35.1737,-97.4736 35.1654,-97.4694 35.1507,-97.4596 35.137,-97.4489 35.1256,-97.4422 35.1177,-97.4416 35.0927,-97.4366 35.0832,-97.4254 35.0709,-97.413 35.0583,-97.4043 35.0477,-97.3968 35.0245,-97.395 34.9981,-97.3924 34.9696,-97.3824 34.9402,-97.3 34.7865,-97.2912 34.7634,-97.2874 34.7409,-97.2853 34.7198,-97.2818 34.7008,-97.2661 34.6488,-97.2483 34.5988,-97.2232 34.5512,-97.1862 34.5062)
+LINESTRING(-92.2701 34.7099,-92.2696 34.6988,-92.2678 34.6881,-92.2656 34.6775,-92.2638 34.6667,-92.2641 34.6585,-92.2659 34.6506,-92.2679 34.6427,-92.2687 34.6349,-92.2685 34.6258,-92.2684 34.6167,-92.2682 34.6077,-92.268 34.5986,-92.2616 34.5658,-92.2468 34.5437,-92.228 34.5232,-92.2097 34.4951,-92.2079 34.4736,-92.1992 34.4422,-92.1886 34.4106,-92.181 34.3884,-92.1783 34.3768,-92.1762 34.3646,-92.1738 34.3527,-92.1698 34.3416,-92.1534 34.3169,-92.1336 34.294,-92.1148 34.2717,-92.1012 34.249,-92.0725 34.2203,-92.0272 34.2011,-91.9854 34.1904,-91.967 34.187)
+LINESTRING(-80.883 32.6304,-80.8827 32.6354,-80.8824 32.6404,-80.8821 32.6454,-80.8819 32.6504,-80.8775 32.6803,-80.8675 32.7053,-80.8512 32.7276,-80.8277 32.7496,-80.814 32.7613,-80.7992 32.7731,-80.7832 32.7835,-80.766 32.791,-80.7567 32.8127,-80.7473 32.8344,-80.738 32.8561,-80.7286 32.8779,-80.7196 32.8934,-80.7076 32.9093,-80.6955 32.926,-80.6857 32.9438,-80.6717 32.9871,-80.6623 33.0316,-80.6537 33.0762,-80.6423 33.1198,-80.6281 33.156,-80.6103 33.1925,-80.5912 33.2285,-80.5731 33.2634,-80.5665 33.2772,-80.5603 33.2912,-80.5542 33.3052,-80.548 33.3192)
+LINESTRING(-86.0739 34.02,-86.0815 34.0032,-86.1017 33.9834,-86.1254 33.9657,-86.1435 33.9548,-86.159 33.9484,-86.1761 33.9422,-86.1926 33.9351,-86.2061 33.9263,-86.2361 33.9019,-86.2669 33.8793,-86.2981 33.8573,-86.3292 33.8342,-86.3519 33.8159,-86.3763 33.7975,-86.4032 33.7825,-86.4338 33.7743,-86.4443 33.7733,-86.4553 33.7715,-86.4654 33.7679,-86.473 33.7616,-86.4895 33.7425,-86.5074 33.7251,-86.5245 33.7075,-86.5385 33.6875,-86.5442 33.6794,-86.5519 33.6725,-86.5663 33.6647,-86.5777 33.6618,-86.5873 33.6605,-86.5966 33.6575,-86.6129 33.6459,-86.6285 33.6303,-86.6428 33.6138,-86.6549 33.5992,-86.6671 33.5898,-86.6801 33.5858,-86.6931 33.5838,-86.7056 33.58,-86.7188 33.5724,-86.7292 33.5645,-86.7387 33.5561,-86.749 33.5472)
+LINESTRING(-86.749 33.5472,-86.7383 33.5433,-86.7257 33.5374,-86.7135 33.5323,-86.7038 33.5309,-86.6763 33.5255,-86.6522 33.5286,-86.6297 33.5362,-86.6069 33.5442,-86.5996 33.5458,-86.5929 33.5468,-86.5866 33.5482,-86.5805 33.551,-86.5539 33.5634,-86.5212 33.5736,-86.4872 33.5829,-86.4565 33.5927,-86.4323 33.6007,-86.4112 33.605,-86.3895 33.6063,-86.3633 33.6053,-86.3606 33.6046,-86.3578 33.6039,-86.3326 33.6077,-86.2945 33.6097,-86.2571 33.6098,-86.2344 33.6081,-86.2196 33.6038,-86.2061 33.5994,-86.1923 33.5956,-86.1765 33.5934,-86.1603 33.5927,-86.1439 33.5924,-86.1276 33.5919,-86.1115 33.5904,-86.078 33.5859,-86.0417 33.5818,-86.0055 33.5794,-85.9721 33.5799,-85.9499 33.5807,-85.9253 33.5808,-85.9012 33.5818,-85.8801 33.5849,-85.867 33.5896,-85.8552 33.5957,-85.8431 33.6017,-85.8292 33.606)
+LINESTRING(-86.826 33.522,-86.8068 33.5283,-86.7875 33.5346,-86.7683 33.5409,-86.749 33.5472)
+LINESTRING(-86.826 33.522,-86.8252 33.5309,-86.8249 33.5379,-86.8263 33.5449,-86.8311 33.5538,-86.8308 33.5564,-86.83 33.5588,-86.8245 33.5833,-86.8264 33.6235,-86.8315 33.6663,-86.8356 33.6984,-86.8347 33.708,-86.8313 33.7167,-86.8274 33.7253,-86.8247 33.7343,-86.825 33.742,-86.8272 33.7499,-86.8297 33.7577,-86.8309 33.7652,-86.8294 33.7836,-86.8261 33.803,-86.8236 33.8224,-86.8246 33.8407,-86.8334 33.8627,-86.847 33.8824,-86.8598 33.8989,-86.8664 33.9115,-86.8691 33.9395,-86.867 33.9554,-86.8632 33.9687,-86.8608 33.9888,-86.8625 33.9994,-86.8666 34.0102,-86.8705 34.0204,-86.8719 34.0293,-86.8698 34.0561,-86.8684 34.0818,-86.8685 34.1076,-86.8708 34.1347,-86.8736 34.1541,-86.8766 34.1737,-86.8783 34.1933,-86.8778 34.2127,-86.8773 34.2167,-86.8769 34.2208,-86.8772 34.2248,-86.8784 34.2288,-86.8868 34.2454,-86.8952 34.2621,-86.904 34.2786,-86.9132 34.295,-86.894 34.3347,-86.8859 34.3659,-86.8858 34.3998,-86.8908 34.4476,-86.891 34.4617,-86.8895 34.4761,-86.8881 34.4906,-86.8883 34.5049,-86.8911 34.518,-86.8957 34.5354,-86.8999 34.5527,-86.9015 34.5652,-86.8998 34.5811,-86.8981 34.5949,-86.8982 34.6097,-86.9022 34.6285,-86.8899 34.6293)
+LINESTRING(-86.8491 33.5214,-86.8434 33.5216,-86.8376 33.5217,-86.8318 33.5218,-86.826 33.522)
+LINESTRING(-106.588 35.107,-106.593 35.0908,-106.596 35.0748,-106.599 35.059,-106.606 35.0438,-106.624 35.0287,-106.645 35.0199,-106.669 35.0127,-106.692 35.0023,-106.716 34.9848,-106.731 34.9645,-106.74 34.9412,-106.748 34.9149,-106.754 34.8905,-106.76 34.8661,-106.766 34.8431,-106.773 34.8175,-106.781 34.783,-106.787 34.752,-106.794 34.7213,-106.807 34.6876,-106.814 34.6804,-106.817 34.6733,-106.819 34.6659,-106.817 34.6583,-106.815 34.6517,-106.812 34.6451,-106.811 34.6375,-106.814 34.6155,-106.827 34.5975,-106.841 34.5795,-106.852 34.5578,-106.873 34.4888,-106.89 34.4281,-106.908 34.3678,-106.932 34.2997,-106.944 34.2653,-106.954 34.2343,-106.959 34.2028,-106.959 34.167,-106.956 34.1422,-106.953 34.1209,-106.95 34.0998,-106.947 34.0756,-106.947 34.0562,-106.947 34.0392,-106.947 34.0221,-106.945 34.0037)
+LINESTRING(-111.663 35.1739,-111.671 35.1636,-111.68 35.1511,-111.684 35.1381,-111.681 35.1263,-111.682 35.1191,-111.684 35.1118,-111.688 35.0808,-111.688 35.0402,-111.686 34.9991,-111.683 34.9665,-111.655 34.9444,-111.645 34.923,-111.642 34.8997,-111.633 34.8724,-111.626 34.8673,-111.619 34.8623,-111.61 34.8569,-111.603 34.8499,-111.602 34.8412,-111.607 34.8314,-111.61 34.8177,-111.604 34.8097,-111.597 34.803,-111.589 34.7982,-111.59 34.7891,-111.602 34.7874,-111.61 34.7862,-111.641 34.7715,-111.666 34.7567,-111.69 34.7409,-111.714 34.7241,-111.722 34.7164,-111.731 34.7079,-111.74 34.6997,-111.749 34.6928,-111.756 34.6893,-111.763 34.6863,-111.77 34.6833,-111.778 34.6802,-111.786 34.6726,-111.792 34.6647,-111.804 34.6583,-111.815 34.6521,-111.834 34.6361,-111.852 34.6189,-111.868 34.6011,-111.884 34.5831,-111.896 34.5719,-111.902 34.5666,-111.909 34.5613,-111.91 34.5514,-111.91 34.5413,-111.923 34.5384,-111.935 34.5358,-111.948 34.534,-111.962 34.5335,-111.97 34.5336,-111.979 34.5318,-111.99 34.5199,-112 34.508,-112.011 34.4961,-112.021 34.4841,-112.028 34.4717,-112.033 34.4579,-112.038 34.4441,-112.047 34.4314,-112.055 34.428,-112.063 34.4246,-112.074 34.4054,-112.091 34.3896,-112.107 34.3786,-112.114 34.3737,-112.116 34.3529,-112.12 34.3324,-112.125 34.3116,-112.126 34.2896,-112.111 34.2701,-112.105 34.2512,-112.106 34.231,-112.114 34.2074,-112.121 34.2049,-112.127 34.2024,-112.134 34.1858,-112.139 34.1677,-112.144 34.1493,-112.152 34.1314,-112.149 34.1163,-112.146 34.1009,-112.143 34.0854,-112.139 34.0705,-112.145 34.0582,-112.148 34.0448,-112.148 34.0309,-112.149 34.0173,-112.143 34.0102,-112.141 34.0035,-112.14 33.9967,-112.139 33.9892,-112.133 33.9593,-112.136 33.9441,-112.142 33.93,-112.148 33.9032,-112.148 33.8862,-112.148 33.8625,-112.146 33.8394,-112.144 33.8241,-112.14 33.8175,-112.137 33.811,-112.131 33.7794,-112.125 33.7478,-112.119 33.7162,-112.113 33.6846,-112.113 33.6556,-112.117 33.6221,-112.115 33.591,-112.098 33.5695,-112.098 33.5539,-112.098 33.5383,-112.098 33.5226,-112.099 33.507)
+LINESTRING(-117.332 33.1807,-117.317 33.1582,-117.302 33.1335,-117.288 33.1082,-117.277 33.084,-117.274 33.0745,-117.272 33.0643,-117.27 33.0542,-117.267 33.0452,-117.26 33.0326,-117.251 33.0209,-117.244 33.0088,-117.238 32.995,-117.235 32.9794,-117.23 32.9566,-117.225 32.9353,-117.222 32.9241,-117.212 32.9052,-117.201 32.8847,-117.189 32.8639,-117.176 32.8439,-117.166 32.8261,-117.156 32.8051,-117.144 32.7853,-117.131 32.771)
+LINESTRING(-117.238 32.7545,-117.211 32.7578,-117.184 32.7608,-117.157 32.7648,-117.131 32.771)
+LINESTRING(-112.099 33.507,-112.2 33.5039,-112.3 33.4986,-112.4 33.4934,-112.502 33.4908,-112.524 33.482,-112.553 33.4622,-112.583 33.4411,-112.607 33.4283)
+LINESTRING(-114.02 33.6624,-113.979 33.6544,-113.937 33.6504,-113.895 33.6483,-113.853 33.6456,-113.797 33.6398,-113.741 33.6326,-113.685 33.6248,-113.629 33.6172,-113.56 33.6068,-113.491 33.595,-113.423 33.5824,-113.354 33.5698,-113.246 33.5514,-113.138 33.5336,-113.03 33.5151,-112.923 33.4945,-112.844 33.478,-112.765 33.4615,-112.686 33.4449,-112.607 33.4283)
+LINESTRING(-84.4903 33.7636,-84.4961 33.7446,-84.4974 33.7331,-84.4955 33.7224,-84.4914 33.7058,-84.4905 33.6938,-84.4918 33.6804,-84.4938 33.6669,-84.4954 33.6548,-84.4934 33.6439,-84.4885 33.633,-84.4853 33.6204,-84.4884 33.604,-84.5038 33.5919,-84.52 33.5797,-84.5368 33.5682,-84.5542 33.5581,-84.5693 33.5511,-84.5846 33.5448,-84.5996 33.538,-84.6136 33.5295,-84.6325 33.5122,-84.6492 33.4919,-84.6652 33.4708,-84.6819 33.4512,-84.7126 33.4256,-84.7327 33.4133,-84.7466 33.3961,-84.7584 33.3558,-84.7664 33.3369,-84.7788 33.3188,-84.7917 33.3002,-84.8007 33.2796,-84.8034 33.2638,-84.8052 33.2483,-84.8084 33.2332,-84.8157 33.2184,-84.8267 33.2057,-84.84 33.1938,-84.8542 33.1825,-84.8678 33.1716,-84.8804 33.1532,-84.8935 33.1253,-84.9126 33.0931,-84.943 33.062)
+LINESTRING(-83.6784 32.8492,-83.6885 32.8611,-83.6971 32.8722,-83.7143 32.8962,-83.7228 32.9077,-83.7311 32.9165,-83.7414 32.9233,-83.756 32.9288,-83.7678 32.9323,-83.7768 32.9357,-83.7848 32.9404,-83.7936 32.9475,-83.8021 32.9513,-83.8161 32.9553,-83.8292 32.9585,-83.8728 32.9945,-83.9145 33.0257,-83.9539 33.0565,-83.9852 33.0902,-84.0187 33.1228,-84.0422 33.1544,-84.0672 33.1869,-84.0912 33.2199,-84.1113 33.2531,-84.1216 33.2823,-84.1287 33.3149,-84.1374 33.3467,-84.1526 33.3737,-84.1702 33.393,-84.1883 33.412,-84.2055 33.4315,-84.2208 33.4521,-84.2314 33.4753,-84.2341 33.4906,-84.243 33.5071,-84.2725 33.5339,-84.3008 33.5515,-84.3343 33.5678,-84.3632 33.5804,-84.3778 33.5871,-84.3866 33.5961,-84.3921 33.6063,-84.3962 33.6171,-84.4006 33.6278,-84.396 33.6435,-84.3943 33.6642,-84.3967 33.6841,-84.4046 33.6973,-84.4011 33.7068,-84.3989 33.7165,-84.3911 33.7273,-84.3877 33.7398)
+LINESTRING(-83.6561 32.8119,-83.6554 32.823,-83.6607 32.8316,-83.6691 32.8396,-83.6784 32.8492)
+LINESTRING(-88.2787 33.4915,-88.2929 33.4942,-88.3096 33.493,-88.3262 33.4917,-88.3399 33.4938,-88.3737 33.5076,-88.4007 33.5134,-88.4279 33.5105,-88.4625 33.4977,-88.4651 33.4948,-88.4672 33.4915,-88.4691 33.4881,-88.4705 33.4847,-88.5068 33.4797,-88.5436 33.479,-88.5807 33.4802,-88.6175 33.4811,-88.6201 33.4832,-88.6227 33.4854,-88.6253 33.4876,-88.6278 33.4898,-88.6361 33.4899,-88.6443 33.49,-88.6526 33.4901,-88.6609 33.4902)
+LINESTRING(-98.3313 34.7703,-98.3544 34.7561,-98.3771 34.7415,-98.3978 34.7261,-98.3981 34.7141,-98.3942 34.7019,-98.3887 34.6898,-98.3842 34.6783,-98.3831 34.6645,-98.3854 34.6491,-98.3884 34.6333,-98.3897 34.6184,-98.3835 34.6152,-98.3774 34.6119,-98.3775 34.5965,-98.3897 34.5769,-98.4045 34.5575,-98.4126 34.5426,-98.4132 34.5303,-98.4119 34.5186,-98.4097 34.5072,-98.4074 34.4954,-98.4047 34.4672,-98.4049 34.4376,-98.406 34.408,-98.4066 34.3795,-98.4087 34.351,-98.415 34.3153,-98.4249 34.2804,-98.4376 34.2542,-98.4569 34.2298,-98.477 34.2059,-98.4955 34.1812,-98.5099 34.1541,-98.5121 34.1462,-98.5131 34.1382,-98.5139 34.1302,-98.5156 34.1223,-98.5248 34.1163,-98.5334 34.1097,-98.5384 34.1058)
+LINESTRING(-112.099 33.507,-112.101 33.4398,-112.06 33.4394,-112.018 33.4332,-111.986 33.4229,-111.972 33.4103,-111.971 33.4023,-111.97 33.3915,-111.968 33.3799)
+LINESTRING(-95.8118 34.8646,-95.8077 34.8586,-95.8021 34.8531,-95.7965 34.8477,-95.7926 34.8418,-95.7854 34.8223,-95.779 34.8019,-95.7727 34.7815,-95.7662 34.7615,-95.7631 34.7475,-95.7616 34.7328,-95.7598 34.7183,-95.7557 34.7049,-95.7476 34.6911,-95.7381 34.6779,-95.7299 34.6643,-95.7256 34.6495,-95.7308 34.62,-95.7456 34.5927,-95.7606 34.5701,-95.7659 34.5547,-95.7606 34.5435,-95.752 34.5336,-95.7422 34.5244,-95.7336 34.5147,-95.7325 34.5103,-95.7313 34.5059,-95.7276 34.4929,-95.7233 34.4791,-95.7195 34.4654,-95.7172 34.4525,-95.7174 34.425,-95.72 34.3868,-95.7229 34.3528,-95.7243 34.3381,-95.7114 34.317,-95.6928 34.2976,-95.673 34.2788,-95.6564 34.2593,-95.6404 34.2359,-95.6177 34.2029,-95.5965 34.1711,-95.585 34.1513,-95.583 34.143,-95.5822 34.1341,-95.5812 34.1253,-95.5787 34.117,-95.5681 34.0981,-95.553 34.0734,-95.5388 34.0486,-95.531 34.0296,-95.5306 34.0239,-95.5308 34.0177,-95.5307 34.0116,-95.5293 34.0059,-95.526 34.0012,-95.5206 33.9958,-95.5146 33.9907,-95.5096 33.9871)
+LINESTRING(-88.6609 33.4902,-88.6779 33.4906,-88.7044 33.4911,-88.7307 33.4905,-88.7473 33.488,-88.7516 33.483,-88.7574 33.4776,-88.761 33.4745,-88.7646 33.4714,-88.7735 33.47,-88.7824 33.4686,-88.7915 33.4676,-88.8005 33.4672)
+LINESTRING(-111.491 33.3815,-111.61 33.3811,-111.729 33.3806,-111.848 33.3801,-111.968 33.3799)
+LINESTRING(-90.0058 34.9964,-90.0056 34.9885,-90.0012 34.9648,-89.9953 34.9416,-89.99 34.9164,-89.9886 34.9028,-89.9883 34.8889,-89.9883 34.8751,-89.9877 34.8614,-89.9835 34.8476,-89.9755 34.8331,-89.9673 34.8186,-89.9625 34.8047,-89.9611 34.7735,-89.9626 34.7421,-89.9638 34.7107,-89.9615 34.6798,-89.9502 34.6233,-89.936 34.5671,-89.9194 34.5114,-89.9009 34.4562,-89.898 34.4151,-89.9068 34.3634,-89.9183 34.3104,-89.9239 34.2654,-89.9238 34.2472,-89.9236 34.2291,-89.9235 34.2109,-89.9234 34.1927,-89.9217 34.1779,-89.9176 34.1632,-89.9122 34.1487,-89.9068 34.1345,-89.8977 34.1068,-89.8906 34.079,-89.8849 34.051,-89.8804 34.0227,-89.8798 34.0141,-89.8798 34.005,-89.8796 33.9961,-89.8782 33.9877,-89.875 33.9799,-89.8708 33.9722,-89.867 33.9645,-89.8649 33.9563,-89.8646 33.947,-89.8649 33.9377,-89.8648 33.9284,-89.8634 33.919,-89.8546 33.8938,-89.8446 33.8708,-89.8372 33.8472,-89.8359 33.8199,-89.8367 33.8113,-89.8376 33.8028,-89.8384 33.7943,-89.8393 33.7858,-89.8362 33.7379,-89.8216 33.6898,-89.8014 33.6423,-89.7812 33.5965,-89.7759 33.5751,-89.7706 33.543,-89.766 33.5103,-89.7628 33.4868)
+LINESTRING(-81.1521 32.213,-81.1427 32.2187,-81.1198 32.2349,-81.101 32.2534,-81.0824 32.2716,-81.0602 32.2869,-81.0429 32.3401,-81.0193 32.3876,-80.9939 32.4325,-80.9712 32.4778,-80.9705 32.4827,-80.9707 32.4888,-80.9711 32.4943,-80.9712 32.497,-80.9619 32.5171,-80.9524 32.5379,-80.9423 32.5584,-80.9309 32.5776,-80.92 32.5898,-80.907 32.6007,-80.8941 32.6132,-80.883 32.6304)
+LINESTRING(-117.071 32.5244,-117.079 32.5271,-117.092 32.5296,-117.105 32.5284,-117.107 32.5242,-117.107 32.521)
+LINESTRING(-117.131 32.771,-117.121 32.7459,-117.116 32.7338,-117.116 32.721,-117.122 32.6939,-117.117 32.687,-117.113 32.6801,-117.108 32.6732,-117.104 32.6661,-117.106 32.6566,-117.103 32.6469,-117.099 32.6374,-117.094 32.6286,-117.089 32.6052,-117.087 32.5861,-117.079 32.5696,-117.055 32.5539,-117.047 32.5505,-117.04 32.5471,-117.032 32.5435,-117.02 32.5292)
+LINESTRING(-115.568 32.7732,-115.551 32.7731,-115.534 32.7729,-115.517 32.7727,-115.5 32.7728,-115.465 32.774)
+LINESTRING(-98.5384 34.1058,-98.5419 34.103,-98.5506 34.0965,-98.5575 34.061,-98.5491 34.02,-98.5341 33.9789,-98.5213 33.943)
+LINESTRING(-116.875 32.5426,-116.855 32.5462,-116.83 32.5548,-116.806 32.5642,-116.786 32.5706,-116.783 32.5698,-116.78 32.569,-116.778 32.5683,-116.775 32.5675,-116.767 32.56,-116.749 32.5561,-116.738 32.555)
+LINESTRING(-86.8491 33.5214,-86.8707 33.5148,-86.8842 33.5101,-86.8972 33.504,-86.9167 33.4935,-86.9222 33.4804,-86.934 33.4691,-86.9477 33.4585,-86.9588 33.4473,-86.958 33.4425,-86.9571 33.4376,-86.9563 33.4327,-86.9554 33.4278,-86.9705 33.4132,-86.9815 33.398,-86.9914 33.3823,-87.0029 33.3662,-87.0127 33.3558,-87.0238 33.3461,-87.0353 33.3366,-87.046 33.3269,-87.0833 33.2914,-87.123 33.2588,-87.1671 33.231,-87.2174 33.2099,-87.2282 33.2053,-87.2383 33.1996,-87.2486 33.1942,-87.26 33.1905,-87.2764 33.1886,-87.2921 33.1888,-87.3075 33.1892,-87.3229 33.1881,-87.3446 33.1847,-87.3664 33.1813,-87.3927 33.1773,-87.4052 33.1758,-87.4117 33.1712,-87.4353 33.173,-87.4685 33.1744,-87.5011 33.1742,-87.523 33.1712)
+LINESTRING(-117.085 33.1203,-117.082 33.1142,-117.077 33.107,-117.072 33.1,-117.069 33.0944,-117.068 33.0716,-117.072 33.0386,-117.078 33.0054,-117.084 32.9818,-117.092 32.9641,-117.102 32.948,-117.111 32.931,-117.117 32.9101,-117.118 32.8942,-117.117 32.8762,-117.117 32.8588,-117.121 32.8446,-117.117 32.8329,-117.114 32.8133,-117.113 32.7923,-117.111 32.7765,-117.089 32.7781,-117.066 32.7756,-117.045 32.7728,-117.029 32.7734,-117.021 32.7696,-117.016 32.7713,-117.011 32.773,-117.006 32.7747,-117 32.7764,-116.996 32.782,-116.992 32.7876,-116.987 32.793,-116.983 32.7984,-116.968 32.8017,-116.952 32.8017,-116.936 32.8012,-116.924 32.803,-116.916 32.8091,-116.904 32.821,-116.892 32.8339,-116.882 32.843,-116.877 32.8438,-116.873 32.8446,-116.868 32.8486,-116.864 32.8526,-116.851 32.8539,-116.836 32.8552,-116.821 32.8553,-116.809 32.8532,-116.796 32.8416,-116.77 32.8342,-116.741 32.8306,-116.721 32.8305,-116.693 32.8349,-116.664 32.8377,-116.637 32.8347,-116.612 32.8215,-116.589 32.8203,-116.567 32.8187,-116.545 32.8165,-116.522 32.8137,-116.517 32.8123,-116.512 32.8101,-116.506 32.8081,-116.493 32.7913,-116.484 32.7691,-116.479 32.7462,-116.478 32.7282,-116.474 32.7229,-116.47 32.7175,-116.465 32.717,-116.46 32.7166,-116.455 32.7161,-116.449 32.7156,-116.432 32.7227,-116.41 32.7219,-116.388 32.7151,-116.375 32.704,-116.36 32.7027,-116.346 32.7015,-116.331 32.6995,-116.319 32.697,-116.31 32.6933,-116.303 32.6885,-116.295 32.6836,-116.287 32.6792,-116.266 32.671,-116.247 32.6657,-116.228 32.6619,-116.207 32.6583,-116.184 32.6506,-116.162 32.6405,-116.138 32.6341,-116.11 32.6376,-116.106 32.643,-116.103 32.6477,-116.1 32.6522,-116.098 32.6565,-116.095 32.6604,-116.096 32.6647,-116.099 32.6687,-116.101 32.6727,-116.103 32.6771,-116.098 32.6794,-116.093 32.6818,-116.091 32.686,-116.088 32.6898,-116.082 32.6969,-116.072 32.7007,-116.068 32.707,-116.068 32.7149,-116.067 32.7234,-116.062 32.725,-116.056 32.7267,-116.047 32.726,-116.038 32.7262,-116.029 32.7263,-116.02 32.7256,-115.979 32.7369,-115.902 32.7522,-115.824 32.7659,-115.778 32.7726,-115.758 32.7736,-115.738 32.7737,-115.717 32.7733,-115.697 32.7731,-115.665 32.7732,-115.633 32.7732,-115.601 32.7732,-115.568 32.7732)
+LINESTRING(-83.6784 32.8492,-83.6648 32.8533,-83.6507 32.8548,-83.6366 32.8534,-83.6224 32.8492,-83.6081 32.8349,-83.5879 32.8178,-83.5692 32.8021,-83.5592 32.7922,-83.5542 32.7808,-83.5505 32.769,-83.547 32.7571,-83.542 32.7458,-83.5367 32.7353,-83.5302 32.7223,-83.5237 32.7099,-83.5177 32.7013,-83.4927 32.685,-83.4483 32.662,-83.4014 32.6392,-83.3686 32.6235,-83.3212 32.6027,-83.2728 32.5848,-83.2234 32.5688,-83.173 32.5539,-83.156 32.547,-83.1397 32.5382,-83.1232 32.5294,-83.1055 32.5225,-83.0839 32.5172,-83.0594 32.5121,-83.0345 32.5077,-83.012 32.5043,-82.992 32.5011,-82.9724 32.4972,-82.9529 32.4932,-82.9332 32.4897,-82.9039 32.4861,-82.8742 32.483,-82.8447 32.4793,-82.8158 32.4737,-82.787 32.4654,-82.7588 32.4558,-82.7307 32.4459,-82.7024 32.4365,-82.6916 32.4402,-82.6794 32.4435,-82.6669 32.4461,-82.6557 32.4473,-82.6326 32.4458,-82.6078 32.441,-82.5828 32.4352,-82.5591 32.431,-82.5375 32.4298,-82.5171 32.4303,-82.4968 32.4314,-82.476 32.4316,-82.4532 32.4293,-82.4307 32.425,-82.4083 32.4205,-82.3859 32.4175,-82.3646 32.4159,-82.34 32.4126,-82.317 32.4058,-82.3009 32.3937,-82.2689 32.3868,-82.2337 32.3817,-82.1985 32.3779,-82.1664 32.3746,-82.1195 32.3721,-82.0765 32.3718,-82.034 32.3677,-81.9887 32.354,-81.9656 32.3438,-81.9295 32.3281,-81.8943 32.3135,-81.8738 32.3069)
+LINESTRING(-84.943 33.062,-84.9592 33.0426,-84.972 33.0168,-84.9838 32.9922,-84.9968 32.9766,-85.0143 32.9665,-85.0312 32.9565,-85.0478 32.9456,-85.0645 32.9329,-85.0774 32.9186,-85.0869 32.9029,-85.096 32.8871,-85.1077 32.8724,-85.1576 32.8301)
+LINESTRING(-98.5213 33.943,-98.5159 33.9388,-98.5141 33.931,-98.5115 33.9227,-98.5075 33.9151,-98.4978 33.9013)
+LINESTRING(-96.5001 33.8959,-96.5256 33.8733,-96.5348 33.8406,-96.5371 33.806)
+LINESTRING(-115.465 32.774,-115.464 32.6761,-115.464 32.6729,-115.458 32.6625)
+LINESTRING(-81.2487 32.0747,-81.2356 32.1263,-81.2192 32.1614,-81.1911 32.1892,-81.1521 32.213)
+LINESTRING(-81.2487 32.0747,-81.3064 32.0916,-81.3559 32.1134,-81.4025 32.1406,-81.4512 32.1738,-81.4587 32.1797,-81.466 32.1861,-81.4733 32.1924,-81.481 32.1984,-81.4888 32.2024,-81.4982 32.2057,-81.5081 32.2086,-81.5171 32.2116,-81.5369 32.2192,-81.5583 32.2262,-81.5804 32.2308,-81.6023 32.2314,-81.6111 32.2304,-81.6191 32.2293,-81.6272 32.2288,-81.6365 32.2295,-81.6506 32.2327,-81.6636 32.2372,-81.6763 32.2425,-81.6893 32.2479,-81.713 32.257,-81.7367 32.2655,-81.7605 32.2738,-81.7841 32.2823,-81.796 32.2869,-81.8082 32.2917,-81.8205 32.2963,-81.8327 32.3001,-81.8428 32.3018,-81.8534 32.3026,-81.8639 32.3039,-81.8738 32.3069)
+LINESTRING(-81.2487 32.0747,-81.2152 32.0661,-81.182 32.0602,-81.1464 32.0598,-81.1061 32.0673)
+LINESTRING(-115.465 32.774,-115.453 32.7744,-115.391 32.7768,-115.331 32.7776,-115.286 32.7746,-115.281 32.7724,-115.271 32.7679,-115.261 32.7632,-115.255 32.7602,-115.22 32.7491,-115.184 32.74,-115.148 32.7308,-115.113 32.7198,-115.107 32.7166,-115.101 32.7134,-115.093 32.7096,-115.089 32.7079,-115.06 32.7122,-115.032 32.7164,-115.002 32.7166,-114.973 32.7176,-114.955 32.7186,-114.941 32.7208,-114.927 32.7228,-114.913 32.7251,-114.893 32.7364,-114.864 32.751,-114.836 32.76,-114.817 32.7545,-114.793 32.7517,-114.759 32.7458,-114.726 32.7426,-114.703 32.7479,-114.7 32.7479,-114.698 32.7479,-114.695 32.7479,-114.692 32.7479,-114.678 32.7413,-114.658 32.7386,-114.637 32.7371,-114.62 32.7339,-114.612 32.7274,-114.612 32.7257)
+LINESTRING(-97.1862 34.5062,-97.1761 34.4837,-97.1614 34.4635,-97.1463 34.4437,-97.1352 34.4227,-97.1418 34.4089,-97.1523 34.3968,-97.163 34.3849,-97.1699 34.3714,-97.1722 34.349,-97.1707 34.3243,-97.1681 34.2993,-97.1671 34.2759,-97.1681 34.2255,-97.168 34.1752,-97.1672 34.125,-97.1663 34.0745,-97.1662 34.0548,-97.1663 34.0351,-97.1657 34.0155,-97.1636 33.9958,-97.1612 33.9814,-97.1585 33.9671,-97.1552 33.9528,-97.1513 33.9387,-97.1451 33.915,-97.1414 33.8921,-97.1402 33.87,-97.1413 33.8486,-97.1413 33.8406,-97.14 33.8315,-97.1383 33.8231,-97.1366 33.8147,-97.1405 33.802,-97.1424 33.7851,-97.142 33.7679,-97.1392 33.7543,-97.146 33.7442,-97.1517 33.7368,-97.1521 33.7364)
+LINESTRING(-114.612 32.7257,-114.609 32.7183,-114.608 32.7081,-114.605 32.6987)
+LINESTRING(-96.5371 33.806,-96.5374 33.8017,-96.5381 33.7636,-96.5385 33.7538,-96.5397 33.7454,-96.543 33.738,-96.5495 33.731,-96.5552 33.7275,-96.5613 33.7258,-96.568 33.7256,-96.5757 33.7267,-96.581 33.728,-96.584 33.729,-96.5862 33.7294,-96.5891 33.7288,-96.5929 33.7253,-96.5943 33.7198,-96.5944 33.7149,-96.5942 33.7127,-96.6082 33.6688)
+LINESTRING(-85.1576 32.8301,-85.1761 32.8144,-85.2403 32.7669,-85.2992 32.7151,-85.3521 32.6441)
+LINESTRING(-97.1521 33.7364,-97.1587 33.7301,-97.1695 33.7224,-97.1711 33.7081,-97.1701 33.691,-97.1661 33.6743,-97.1585 33.661,-97.1608 33.6543,-97.1621 33.6474,-97.1629 33.6403,-97.163 33.6392)
+LINESTRING(-84.9608 32.5443,-84.9655 32.5718,-84.9712 32.6081,-84.9756 32.6439,-84.9764 32.6703,-84.9868 32.6784,-84.9946 32.689,-85.0006 32.7006,-85.0056 32.7118,-85.0125 32.7294,-85.0153 32.7433,-85.0156 32.7572,-85.0151 32.7748,-85.0153 32.7841,-85.0158 32.7944,-85.0157 32.8047,-85.0139 32.8135,-85.0014 32.8323,-84.9831 32.8521,-84.9648 32.8801,-84.9522 32.9235,-84.95 32.9579,-84.9507 32.9928,-84.9499 33.0276,-84.943 33.062)
+LINESTRING(-92.2701 34.7099,-92.2822 34.6967,-92.291 34.6882,-92.3003 34.6818,-92.314 34.6747,-92.3239 34.6735,-92.3347 34.6725,-92.3456 34.672,-92.3556 34.6722,-92.3713 34.6666,-92.3864 34.6623,-92.4013 34.6579,-92.4163 34.6522,-92.4506 34.638,-92.4859 34.625,-92.5214 34.6121,-92.5561 34.5985,-92.5692 34.5904,-92.593 34.5745,-92.6167 34.5577,-92.6294 34.5472,-92.6401 34.5445,-92.6494 34.5418,-92.6591 34.5401,-92.6712 34.5402,-92.6805 34.5314,-92.6979 34.5127,-92.7161 34.4928,-92.7279 34.4808,-92.7445 34.4668,-92.7613 34.453,-92.7783 34.4396,-92.7955 34.4263,-92.8015 34.4205,-92.8067 34.414,-92.8122 34.4075,-92.8187 34.402,-92.8284 34.398,-92.8386 34.3937,-92.8462 34.3877,-92.853 34.3804,-92.86 34.3729,-92.8678 34.3662,-92.8811 34.3581,-92.8964 34.3498,-92.9112 34.3412,-92.9231 34.3322,-92.9312 34.3233,-92.9383 34.3139,-92.9451 34.3042,-92.9521 34.2947,-92.9779 34.2649,-93.0073 34.2361,-93.0393 34.2093,-93.0724 34.1855,-93.0784 34.1645,-93.0842 34.1453,-93.0916 34.1263,-93.1024 34.1061,-93.1125 34.0894,-93.1227 34.0727,-93.1329 34.056,-93.143 34.0393,-93.2151 33.9682,-93.3421 33.8693,-93.4753 33.7747,-93.5667 33.7166,-93.5807 33.7078,-93.5945 33.6973,-93.6078 33.6864,-93.6205 33.6762,-93.6469 33.6611,-93.6817 33.647,-93.7183 33.6354,-93.7502 33.628,-93.7591 33.6274,-93.7685 33.6275,-93.7776 33.6264,-93.7859 33.6224,-93.8036 33.6007,-93.8173 33.5765,-93.8352 33.5578,-93.8653 33.5525,-93.9051 33.5435,-93.9383 33.5211,-93.9708 33.4952,-94.0083 33.4759,-94.0175 33.4738,-94.0273 33.4723,-94.0372 33.4709,-94.0445 33.4692)
+LINESTRING(-94.0445 33.4692,-94.0468 33.4687)
+LINESTRING(-114.605 32.6987,-114.603 32.6905,-114.602 32.6791,-114.6 32.6685,-114.596 32.6632,-114.566 32.658,-114.536 32.6529,-114.495 32.6461,-114.475 32.643,-114.458 32.6429,-114.439 32.6417,-114.42 32.6398,-114.404 32.6372,-114.392 32.6356,-114.38 32.6347,-114.368 32.634,-114.356 32.6332,-114.346 32.6349,-114.334 32.6397,-114.323 32.6446,-114.312 32.6468,-114.287 32.6442,-114.263 32.6392,-114.239 32.6348,-114.213 32.6339,-114.197 32.6347,-114.178 32.6355,-114.16 32.6365,-114.144 32.6384,-114.042 32.6582,-113.941 32.6815,-113.84 32.705,-113.738 32.7253,-113.728 32.7327,-113.709 32.7397,-113.689 32.7458,-113.674 32.7505,-113.628 32.7691,-113.581 32.7894,-113.533 32.8084,-113.485 32.8227,-113.413 32.8357,-113.333 32.8454,-113.253 32.8544,-113.178 32.8654,-113.124 32.8771,-113.07 32.8908,-113.016 32.9045,-112.962 32.9162,-112.908 32.9249,-112.853 32.9322,-112.799 32.9389,-112.745 32.946)
+LINESTRING(-94.0682 33.4548,-94.0624 33.4582,-94.0572 33.4617,-94.052 33.4652,-94.0468 33.4687)
+LINESTRING(-101.94 35.0528,-101.929 35.0402,-101.914 35.0231,-101.901 35.0059,-101.892 34.993,-101.866 34.9296,-101.856 34.8633,-101.852 34.7954,-101.846 34.7276,-101.835 34.6838,-101.817 34.6372,-101.797 34.5911,-101.777 34.5487,-101.774 34.5451,-101.772 34.5433,-101.77 34.5416,-101.773 34.5387,-101.775 34.5358,-101.778 34.5329,-101.781 34.53,-101.777 34.482,-101.768 34.4339,-101.756 34.3861,-101.745 34.3388,-101.738 34.3179,-101.729 34.2971,-101.719 34.2764,-101.71 34.2557,-101.71 34.2482,-101.712 34.241,-101.715 34.234,-101.716 34.227,-101.724 34.2207,-101.733 34.2139,-101.741 34.2068,-101.748 34.1993,-101.748 34.1829,-101.746 34.1661,-101.746 34.1495,-101.748 34.1338,-101.767 34.118,-101.787 34.1043,-101.808 34.0921,-101.83 34.0803,-101.836 34.0749,-101.841 34.0667,-101.844 34.0578,-101.845 34.0505,-101.84 33.9679,-101.825 33.8855,-101.809 33.8031,-101.801 33.7207,-101.8 33.7113,-101.797 33.7026,-101.795 33.6941,-101.793 33.6852,-101.794 33.6674,-101.798 33.6482,-101.803 33.6289,-101.806 33.611)
+LINESTRING(-84.9248 32.4051,-84.9294 32.444,-84.9432 32.485,-84.9568 32.5208,-84.9608 32.5443)
+LINESTRING(-111.968 33.3799,-111.969 33.3622,-111.972 33.3412,-111.974 33.3208,-111.972 33.3044,-111.914 33.2132,-111.82 33.0919,-111.732 32.9836,-111.693 32.9317,-111.691 32.904,-111.69 32.8759,-111.689 32.8481,-111.686 32.821)
+LINESTRING(-112.745 32.946,-112.726 32.9419,-112.707 32.938,-112.689 32.934,-112.671 32.9296,-112.649 32.9237,-112.626 32.9177,-112.603 32.9125,-112.58 32.9087,-112.57 32.9082,-112.559 32.9085,-112.549 32.9088,-112.539 32.9085,-112.504 32.8993,-112.458 32.8819,-112.407 32.8639,-112.359 32.8527,-112.209 32.8395,-112.059 32.8332,-111.908 32.8309,-111.757 32.8294,-111.753 32.8294,-111.749 32.8293,-111.745 32.8293,-111.741 32.8293,-111.735 32.833,-111.727 32.8357,-111.718 32.8372,-111.711 32.8375,-111.704 32.8333,-111.698 32.8292,-111.692 32.8251,-111.686 32.821)
+LINESTRING(-81.3826 31.7633,-81.3798 31.7736,-81.3785 31.7842,-81.3776 31.7948,-81.3758 31.8052,-81.3671 31.8296,-81.3542 31.8545,-81.3399 31.8791,-81.3269 31.9025,-81.3258 31.9146,-81.3299 31.9284,-81.3341 31.9422,-81.3334 31.9546,-81.3221 31.9696,-81.3055 31.9826,-81.2883 31.9952,-81.275 32.0089,-81.2669 32.0242,-81.2605 32.0414,-81.2547 32.0587,-81.2487 32.0747)
+LINESTRING(-94.9983 33.171,-94.9799 33.1768,-94.9616 33.1824,-94.9437 33.1886,-94.927 33.1961,-94.8917 33.2178,-94.8576 33.2424,-94.8232 33.2661,-94.7871 33.2851,-94.7592 33.2932,-94.7318 33.2976,-94.7032 33.3038,-94.6716 33.3176,-94.6477 33.3321,-94.6206 33.3501,-94.5953 33.3694,-94.5766 33.3879,-94.5736 33.3926,-94.5711 33.3978,-94.5687 33.403,-94.5658 33.4079,-94.5454 33.423,-94.5073 33.445,-94.4671 33.465,-94.4405 33.4743,-94.4281 33.4742,-94.4151 33.4728,-94.4019 33.4712,-94.389 33.4704,-94.3571 33.4706,-94.3254 33.4709,-94.2938 33.4717,-94.262 33.4733,-94.2193 33.4691,-94.1619 33.4587,-94.106 33.451,-94.0682 33.4548)
+LINESTRING(-85.3521 32.6441,-85.4088 32.6051,-85.5203 32.5689,-85.5947 32.5435,-85.6372 32.5004,-85.696 32.4531,-85.7827 32.4229,-85.8737 32.3899,-85.99 32.3669,-86.1429 32.3555,-86.2402 32.3284)
+LINESTRING(-86.2402 32.3284,-86.2636 32.3276,-86.2876 32.3268,-86.3116 32.3267,-86.3352 32.3281)
+LINESTRING(-86.826 33.522,-86.8199 33.5108,-86.8138 33.4997,-86.8175 33.4944,-86.8214 33.4892,-86.825 33.4839,-86.828 33.4783,-86.8272 33.4726,-86.8252 33.4662,-86.8223 33.4599,-86.8202 33.4498,-86.8218 33.4444,-86.8235 33.4391,-86.8251 33.4337,-86.8154 33.4242,-86.8066 33.4163,-86.7968 33.408,-86.787 33.3997,-86.7832 33.3798,-86.7808 33.3657,-86.78 33.3508,-86.7807 33.3287,-86.7846 33.3224,-86.7911 33.3094,-86.7963 33.2986,-86.8014 33.2877,-86.7981 33.274,-86.7981 33.2598,-86.8016 33.246,-86.8089 33.2336,-86.8032 33.2198,-86.7899 33.1944,-86.7764 33.1695,-86.7697 33.1577,-86.7582 33.148,-86.7515 33.1432,-86.7406 33.1197,-86.7345 33.0881,-86.7281 33.0547,-86.7217 33.0317,-86.6974 32.9892,-86.6685 32.9502,-86.6387 32.9126,-86.612 32.8748,-86.5993 32.8497,-86.5895 32.8235,-86.58 32.7975,-86.5682 32.7724,-86.5605 32.7602,-86.552 32.7482,-86.5434 32.7363,-86.5355 32.7241,-86.5129 32.6841,-86.4924 32.6437,-86.4738 32.6028,-86.4572 32.5609,-86.4506 32.5526,-86.4431 32.5454,-86.4373 32.5335,-86.4342 32.5275,-86.4194 32.5136,-86.4092 32.5068,-86.3994 32.4995,-86.3902 32.4897,-86.3805 32.4751,-86.3713 32.4599,-86.3616 32.4451,-86.3501 32.4313,-86.3413 32.4179,-86.3315 32.3975,-86.3234 32.3777,-86.3198 32.366,-86.3237 32.3566,-86.3275 32.3471,-86.3313 32.3376,-86.3352 32.3281)
+LINESTRING(-97.1574 33.6391,-97.1632 33.6169,-97.1702 33.5992,-97.1802 33.5823,-97.1923 33.5638,-97.1957 33.5559,-97.1965 33.5485,-97.1966 33.5407,-97.1976 33.5319,-97.2006 33.5113,-97.2009 33.495,-97.2023 33.4791,-97.2086 33.4594,-97.2152 33.4356,-97.2164 33.4113,-97.2153 33.3863,-97.2148 33.3601,-97.2144 33.3426,-97.2106 33.311,-97.2093 33.2636,-97.2046 33.2347,-97.1957 33.2058,-97.1823 33.1762)
+LINESTRING(-88.4035 32.4497,-88.3918 32.4551,-88.3618 32.4766,-88.3122 32.5167,-88.2627 32.5587,-88.2332 32.5856,-88.2244 32.5979,-88.217 32.6121,-88.2098 32.6267,-88.2018 32.64,-88.1793 32.6676,-88.1548 32.6922,-88.1283 32.7155,-88.0997 32.7393,-88.0817 32.755,-88.0636 32.771,-88.0452 32.7866,-88.0257 32.8009,-87.998 32.8188,-87.9718 32.836,-87.9468 32.8543,-87.9228 32.8755,-87.9089 32.8871,-87.8952 32.8966,-87.8829 32.9048,-87.8737 32.9126,-87.8652 32.9228,-87.8569 32.9337,-87.8482 32.9443,-87.8383 32.9535,-87.8232 32.9637,-87.8066 32.9734,-87.7902 32.9835,-87.7756 32.9947,-87.7447 33.0234,-87.714 33.0525,-87.6842 33.0822,-87.6559 33.1125,-87.6293 33.1366,-87.5984 33.1543,-87.563 33.1657,-87.523 33.1712)
+LINESTRING(-88.4457 32.4262,-88.4325 32.4355,-88.4196 32.4424,-88.4062 32.4485,-88.4035 32.4497)
+LINESTRING(-88.6344 32.3844,-88.6325 32.3846,-88.6306 32.3848,-88.6066 32.3885,-88.5842 32.3944,-88.5622 32.4012,-88.5395 32.4074,-88.5229 32.4096,-88.5062 32.4096,-88.4896 32.4095,-88.4732 32.4111,-88.4653 32.4133,-88.458 32.4167,-88.4514 32.4211,-88.4457 32.4262)
+LINESTRING(-88.6344 32.3844,-88.6451 32.3818,-88.6525 32.3775,-88.659 32.372,-88.6667 32.3661,-88.6927 32.3512,-88.7058 32.3479,-88.7182 32.3489)
+LINESTRING(-88.7182 32.3489,-88.7419 32.3469,-88.7479 32.3455,-88.7538 32.3437,-88.7598 32.3421,-88.7659 32.3413)
+LINESTRING(-81.3826 31.7633,-81.3866 31.7385,-81.3906 31.7137,-81.3946 31.6889,-81.3986 31.6641,-81.4071 31.6307,-81.4197 31.5976,-81.4335 31.5647,-81.4453 31.5319,-81.4493 31.5073,-81.4482 31.4831,-81.4451 31.4589,-81.4428 31.4342,-81.4448 31.4138,-81.4503 31.3924,-81.4571 31.3709,-81.4627 31.35,-81.4742 31.3232,-81.4833 31.2958,-81.4929 31.2687,-81.5054 31.2424,-81.5131 31.2312,-81.5222 31.2203,-81.5314 31.2092,-81.538 31.2)
+LINESTRING(-94.9983 33.171,-95.0195 33.1637,-95.0353 33.1586,-95.052 33.156,-95.0761 33.1561,-95.1499 33.1601,-95.224 33.1635,-95.2982 33.1648,-95.3721 33.1626,-95.3962 33.1597,-95.4201 33.155,-95.444 33.1504,-95.4684 33.1473,-95.4924 33.1471,-95.5171 33.1483,-95.5416 33.1482,-95.5651 33.1447,-95.5728 33.1383,-95.5792 33.1307,-95.5861 33.1231,-95.5952 33.1167,-95.6348 33.1204,-95.6744 33.1211,-95.7142 33.1215,-95.7544 33.1246,-95.8083 33.1289,-95.8641 33.1294,-95.9201 33.1283,-95.9746 33.128,-95.9987 33.1289,-96.0227 33.1303,-96.0468 33.1317,-96.0709 33.1322,-96.0772 33.1303,-96.0847 33.1257,-96.092 33.1204,-96.0975 33.1163,-96.0985 33.1095,-96.0997 33.1044,-96.1024 33.1,-96.1079 33.0952,-96.1392 33.0712,-96.1705 33.0462,-96.2022 33.0217,-96.2347 32.9993,-96.2575 32.9886,-96.2834 32.9808,-96.3097 32.9735,-96.3337 32.9642,-96.3454 32.9571,-96.3562 32.9485,-96.3667 32.9397,-96.3774 32.9315,-96.3931 32.9236,-96.4113 32.9179,-96.4303 32.9128,-96.4479 32.9068,-96.5051 32.8815,-96.5608 32.8552,-96.6159 32.828,-96.6711 32.8001)
+LINESTRING(-96.7909 32.7935,-96.7834 32.8114,-96.7764 32.8307,-96.7708 32.8503,-96.7676 32.8689,-96.7672 32.8827,-96.7676 32.8964,-96.7676 32.9102,-96.7659 32.924,-96.749 32.9387,-96.7313 32.9633,-96.716 32.9896,-96.7061 33.0088,-96.7076 33.0166,-96.7083 33.0246,-96.708 33.0325,-96.7064 33.0403,-96.7007 33.0593,-96.6941 33.079,-96.6866 33.0984,-96.678 33.1164,-96.669 33.1286,-96.656 33.1429,-96.6441 33.1558,-96.6382 33.1635,-96.6358 33.1824,-96.6352 33.2055,-96.6336 33.2279,-96.6282 33.2447,-96.6173 33.2528,-96.6045 33.2607,-96.5914 33.2684,-96.5796 33.2761,-96.5697 33.2967,-96.5611 33.319,-96.555 33.3418,-96.5521 33.364,-96.5671 33.393,-96.5898 33.4371,-96.6105 33.4803,-96.6197 33.5062,-96.6145 33.5134,-96.6116 33.5219,-96.61 33.5309,-96.6089 33.5393,-96.6066 33.5513,-96.6042 33.5629,-96.6024 33.5745,-96.6019 33.5867,-96.6053 33.6094,-96.6106 33.6271,-96.6132 33.6451,-96.6082 33.6688)
+LINESTRING(-81.5498 31.1797,-81.5562 31.1677,-81.5642 31.1527,-81.5725 31.1378)
+LINESTRING(-96.7909 32.7935,-96.796 32.7823)
+LINESTRING(-97.1823 33.1762,-97.1548 33.1778,-97.1366 33.1747,-97.1194 33.1689,-97.1018 33.1597,-97.083 33.1404,-97.0764 33.1174,-97.0731 33.0919,-97.0643 33.0654,-97.0512 33.0473,-97.0349 33.034,-97.0161 33.0225,-96.995 33.0098,-96.9776 32.9996,-96.9615 32.9914,-96.9456 32.983,-96.9291 32.9724,-96.9031 32.9491,-96.8857 32.9245,-96.8742 32.8969,-96.866 32.865,-96.8614 32.8497,-96.8558 32.8363,-96.8507 32.8229,-96.8479 32.8074,-96.796 32.7823)
+LINESTRING(-96.6711 32.8001,-96.6916 32.7967,-96.7127 32.7927,-96.7339 32.7905,-96.7549 32.7925,-96.7598 32.7897,-96.7644 32.7866,-96.7689 32.7834,-96.7734 32.7803)
+LINESTRING(-96.7734 32.7803,-96.7761 32.7811,-96.7788 32.782,-96.7815 32.7829,-96.7842 32.7838,-96.7861 32.7861,-96.7879 32.7885,-96.7894 32.791,-96.7909 32.7935)
+LINESTRING(-83.53 31.4512,-83.5262 31.4646,-83.5199 31.4766,-83.5138 31.4886,-83.5106 31.5019,-83.5175 31.5281,-83.5358 31.5579,-83.5574 31.5866,-83.5742 31.6097,-83.5753 31.6174,-83.5756 31.6219,-83.5817 31.6328,-83.5881 31.6404,-83.5948 31.6479,-83.6008 31.6552,-83.628 31.6929,-83.6601 31.7408,-83.6903 31.7886,-83.7115 31.8261,-83.7234 31.8534,-83.7353 31.8858,-83.7458 31.9186,-83.7536 31.9471,-83.7552 31.9574,-83.7555 31.9677,-83.7554 31.9779,-83.7556 31.9882,-83.7592 32.0348,-83.7609 32.0716,-83.7594 32.1083,-83.7534 32.1541,-83.7491 32.1756,-83.7442 32.1984,-83.7405 32.2214,-83.7402 32.2435,-83.7618 32.287,-83.767 32.3415,-83.7616 32.3965,-83.7513 32.4417,-83.7413 32.5076,-83.7421 32.5752,-83.743 32.6409,-83.7335 32.701,-83.727 32.7171,-83.7189 32.7326,-83.71 32.7478,-83.7014 32.7632,-83.6999 32.7672,-83.6986 32.771,-83.6934 32.7772,-83.6809 32.7844,-83.6697 32.7918,-83.661 32.8006,-83.6561 32.8119)
+LINESTRING(-92.0503 32.4961,-92.0484 32.4959)
+LINESTRING(-111.686 32.821,-111.607 32.7797,-111.513 32.7295,-111.423 32.6775,-111.358 32.6305,-111.327 32.5979,-111.297 32.563,-111.267 32.5278,-111.235 32.4946,-111.215 32.4769,-111.193 32.4599,-111.171 32.4435,-111.149 32.4277,-111.14 32.4223,-111.13 32.4173,-111.12 32.4121,-111.112 32.4063,-111.077 32.375,-111.039 32.3386,-111.004 32.3014,-110.976 32.2677,-110.961 32.2461,-110.954 32.2301,-110.953 32.2152,-110.958 32.1966)
+LINESTRING(-92.0484 32.4959,-91.9908 32.4917,-91.9272 32.4867,-91.8682 32.4806,-91.8223 32.4728,-91.7597 32.4607,-91.7145 32.4577,-91.6706 32.4582,-91.612 32.4563,-91.5294 32.4486,-91.4467 32.4383,-91.3642 32.4273,-91.2818 32.4174,-91.2613 32.4146,-91.2397 32.4098,-91.219 32.4029,-91.2015 32.3936)
+LINESTRING(-96.796 32.7823,-96.8109 32.7746,-96.8262 32.7673,-96.8419 32.761,-96.8601 32.7551,-96.8732 32.7494,-96.8842 32.7425,-96.8955 32.7368,-96.9094 32.7347,-96.9185 32.735,-96.9276 32.7352,-96.9367 32.7355,-96.9458 32.7358,-96.9586 32.7355,-96.9697 32.7342,-96.9809 32.733,-96.9936 32.7327,-97.0241 32.7381,-97.0497 32.7489,-97.0753 32.7597,-97.1059 32.7651,-97.1226 32.7664,-97.1374 32.7682,-97.1521 32.769,-97.1686 32.7673,-97.2105 32.7592,-97.2481 32.7508,-97.2839 32.7405,-97.3191 32.7269)
+LINESTRING(-97.3191 32.7269,-97.3193 32.7287,-97.3187 32.7475,-97.3199 32.7588,-97.3215 32.7724,-97.3224 32.7857,-97.3214 32.7963,-97.3182 32.8073,-97.3151 32.8178,-97.3129 32.8286,-97.3122 32.8407,-97.3134 32.9017,-97.3093 32.9381,-97.296 32.9722,-97.2693 33.026,-97.2602 33.0463,-97.2516 33.0672,-97.2422 33.0879,-97.2308 33.1075,-97.2184 33.1253,-97.2061 33.1424,-97.1941 33.1592,-97.1823 33.1762)
+LINESTRING(-89.7628 33.4868,-89.7607 33.45,-89.7655 33.4099,-89.7727 33.3695,-89.7779 33.3317,-89.7815 33.3026,-89.7883 33.2718,-89.7992 33.2421,-89.8147 33.2162,-89.8235 33.2067,-89.8332 33.1976,-89.8422 33.1881,-89.8487 33.1771,-89.8519 33.167,-89.856 33.1525,-89.8607 33.1385,-89.8658 33.1298,-89.8717 33.1255,-89.8777 33.1212,-89.8845 33.1162,-89.8883 33.113,-89.8928 33.1035,-89.8942 33.0941,-89.8953 33.0848,-89.8988 33.0753,-89.9079 33.0645,-89.9213 33.052,-89.934 33.0401,-89.9409 33.0311,-89.9426 33.0248,-89.9437 33.0184,-89.9446 33.0119,-89.9459 33.0057,-89.9514 32.9908,-89.9589 32.9753,-89.967 32.9599,-89.9744 32.9451,-89.9875 32.9278,-90.0135 32.8962,-90.0394 32.8646,-90.0525 32.8472,-90.0529 32.8447,-90.0532 32.8405,-90.0535 32.8368,-90.0537 32.8331,-90.0546 32.8182,-90.0549 32.801,-90.056 32.7839,-90.0589 32.7694,-90.0603 32.7665,-90.0623 32.7629,-90.0641 32.7593,-90.0649 32.7566,-90.0635 32.7479,-90.0601 32.7397,-90.0568 32.7318,-90.0556 32.7238,-90.0579 32.6998,-90.061 32.6754,-90.0646 32.6513,-90.0681 32.6273,-90.0708 32.6112,-90.0745 32.5941,-90.0795 32.5773,-90.086 32.5621,-90.0892 32.5578,-90.0935 32.5536,-90.0977 32.5493,-90.1007 32.5448,-90.1023 32.5388,-90.103 32.5324,-90.1039 32.5259,-90.1061 32.5197,-90.1168 32.5037,-90.1294 32.488,-90.141 32.4717,-90.1489 32.4536,-90.1497 32.4463,-90.1491 32.4384,-90.1486 32.4303,-90.1494 32.4226,-90.1511 32.4184,-90.1534 32.4146,-90.1553 32.4103,-90.1559 32.4049,-90.1547 32.3989,-90.1529 32.393,-90.1512 32.387,-90.1504 32.3807,-90.1539 32.3595,-90.1621 32.3291,-90.1714 32.2987,-90.1784 32.2772)
+LINESTRING(-88.7659 32.3413,-88.7884 32.3409,-88.8063 32.3473,-88.8206 32.354,-88.8324 32.3543,-88.8712 32.348,-88.9348 32.3452,-89.0002 32.3444,-89.0441 32.344,-89.0501 32.3448,-89.0562 32.3469,-89.0624 32.3489,-89.0685 32.3496,-89.0831 32.3474,-89.0985 32.3434,-89.1135 32.3396,-89.1272 32.3378,-89.1328 32.3383,-89.1385 32.3396,-89.1442 32.3406,-89.15 32.3407,-89.1562 32.3396,-89.1624 32.3381,-89.1686 32.3369,-89.175 32.3363,-89.2008 32.3376,-89.227 32.34,-89.2532 32.3417,-89.2791 32.3412,-89.286 32.3393,-89.2914 32.3357,-89.296 32.3311,-89.3004 32.3263,-89.3274 32.3231,-89.3535 32.3247,-89.3793 32.327,-89.4051 32.3258,-89.4129 32.3243,-89.4209 32.3228,-89.429 32.322,-89.4371 32.3225,-89.4496 32.3248,-89.4619 32.3276,-89.4741 32.3309,-89.4864 32.3341,-89.4955 32.3364,-89.5076 32.339,-89.5196 32.3405,-89.5286 32.3397,-89.5815 32.3236,-89.6353 32.3112,-89.6899 32.3015,-89.7452 32.2935,-89.762 32.2929,-89.7788 32.2942,-89.7956 32.2954,-89.8119 32.2945,-89.8268 32.2906,-89.8426 32.2848,-89.8573 32.2795,-89.8689 32.2768,-89.8854 32.2766,-89.9005 32.2769,-89.9161 32.2765,-89.9339 32.2742,-89.9368 32.2737,-89.9396 32.2732,-89.9424 32.273,-89.9453 32.2728,-89.9553 32.2739,-89.9647 32.2759,-89.9742 32.2778,-89.9847 32.2784,-89.9897 32.2778,-89.9941 32.2756,-90.0021 32.275,-90.0091 32.2767,-90.0157 32.279,-90.0228 32.2801,-90.0278 32.2793,-90.0325 32.2774,-90.0371 32.2752,-90.042 32.2736,-90.0735 32.2686,-90.1064 32.2674,-90.1412 32.2701,-90.1784 32.2772)
+LINESTRING(-90.2125 32.2749,-90.204 32.2755,-90.1955 32.2761,-90.1869 32.2767,-90.1784 32.2772)
+LINESTRING(-90.2125 32.2749,-90.2226 32.2798,-90.2272 32.2836,-90.2362 32.2877,-90.2592 32.2935,-90.2905 32.3051,-90.3187 32.3223,-90.3462 32.3399,-90.3755 32.3529,-90.4139 32.3649,-90.4632 32.3796,-90.5123 32.39,-90.5496 32.3894,-90.5602 32.3855,-90.5705 32.3808,-90.5808 32.3762,-90.5913 32.3724,-90.6038 32.3747,-90.6294 32.3811,-90.6583 32.388,-90.6806 32.3916,-90.7064 32.3901,-90.7334 32.384,-90.76 32.375,-90.7843 32.3652,-90.7925 32.3616,-90.8011 32.3567,-90.8099 32.3506,-90.8189 32.3433)
+LINESTRING(-90.9379 32.2939,-90.9496 32.2965,-90.9964 32.3096,-91.0431 32.3241,-91.0767 32.3359,-91.0916 32.3426,-91.1061 32.3501,-91.1208 32.3573,-91.1362 32.3635,-91.1529 32.3705,-91.1682 32.3789,-91.1832 32.3879,-91.1989 32.3967)
+LINESTRING(-90.8189 32.3433,-90.823 32.3395,-90.8272 32.3357,-90.8314 32.3315,-90.8356 32.3272,-90.8477 32.3102,-90.8685 32.2973,-90.8929 32.2899,-90.9156 32.289,-90.9379 32.2939)
+LINESTRING(-93.7472 32.4965,-93.7369 32.5014,-93.7218 32.5117,-93.7083 32.5219,-93.7024 32.5266,-93.684 32.5289,-93.6658 32.5327,-93.6476 32.5369,-93.6293 32.5403,-93.5829 32.543,-93.5486 32.5428,-93.5177 32.5505,-93.4817 32.5767,-93.4807 32.5785,-93.4341 32.5822,-93.3831 32.5893,-93.3334 32.5944,-93.2911 32.5921,-93.2607 32.5847,-93.2258 32.5757,-93.191 32.5681,-93.161 32.5649,-93.1275 32.5643,-93.09 32.5629,-93.0532 32.5617,-93.0222 32.5619,-93.0043 32.5634,-92.9863 32.5658,-92.9684 32.5682,-92.9505 32.5696,-92.9206 32.5676,-92.8912 32.5615,-92.8621 32.5547,-92.8332 32.5506,-92.7849 32.5477,-92.7366 32.5449,-92.6883 32.5427,-92.64 32.5413,-92.6068 32.5413,-92.5739 32.5418,-92.541 32.5417,-92.5078 32.5403,-92.4682 32.536,-92.4365 32.531,-92.4037 32.5266,-92.3608 32.5242,-92.345 32.5225,-92.3306 32.5192,-92.3165 32.5153,-92.3014 32.5123,-92.2684 32.5107,-92.2343 32.5121,-92.2004 32.5134,-92.1682 32.5109,-92.1606 32.5084,-92.1528 32.5047,-92.1452 32.5017,-92.1382 32.5012,-92.1334 32.5033,-92.1268 32.5047,-92.1199 32.5057,-92.1143 32.5066,-92.1076 32.5031,-92.1002 32.5015,-92.0923 32.5006,-92.0844 32.4991,-92.0759 32.4983,-92.0674 32.4976,-92.0588 32.4968,-92.0503 32.4961)
+LINESTRING(-108.947 32.2359,-108.91 32.2578,-108.874 32.2789,-108.838 32.301,-108.804 32.3257,-108.779 32.3252,-108.753 32.3251,-108.728 32.3243,-108.704 32.3217)
+LINESTRING(-94.3574 32.4907,-94.2945 32.493,-94.2191 32.4918,-94.1438 32.4858,-94.0815 32.4739,-94.0726 32.4704,-94.0641 32.4657,-94.0559 32.4606,-94.0476 32.456,-94.0443 32.455)
+LINESTRING(-98.1111 32.6113,-98.0842 32.6293,-98.052 32.6521,-98.0198 32.6737,-97.9927 32.6876,-97.9648 32.6975,-97.9369 32.7073,-97.9089 32.7172,-97.881 32.727,-97.8552 32.7316,-97.8269 32.7315,-97.7976 32.7313,-97.769 32.7358,-97.7505 32.7415,-97.732 32.7472,-97.7095 32.7538,-97.698 32.7563,-97.6853 32.7523,-97.673 32.7478,-97.6608 32.7431,-97.6484 32.7388,-97.6173 32.7309,-97.5866 32.7259,-97.5555 32.7227,-97.5235 32.7198,-97.5208 32.7211,-97.518 32.7224,-97.4717 32.7322,-97.437 32.733,-97.4053 32.7309,-97.3677 32.7318,-97.3556 32.7349,-97.3462 32.7399,-97.3373 32.745,-97.3268 32.7481)
+LINESTRING(-94.0443 32.455,-94.0312 32.4508,-94.0154 32.4498,-93.9992 32.4502,-93.9818 32.4489)
+LINESTRING(-93.7472 32.4965,-93.7603 32.499,-93.7655 32.4942,-93.7695 32.4878,-93.7738 32.4816,-93.7798 32.4772,-93.8412 32.4532,-93.881 32.443,-93.9206 32.4427,-93.9818 32.4489)
+LINESTRING(-109.048 32.2212,-109.048 32.2212,-109.021 32.2196,-108.995 32.2218,-108.971 32.2274,-108.947 32.2359)
+LINESTRING(-106.945 34.0037,-106.945 34.0027,-106.94 33.9761,-106.934 33.9532,-106.931 33.9359,-106.93 33.9269,-106.965 33.8538,-107.011 33.7703,-107.066 33.6933,-107.126 33.6396,-107.161 33.5912,-107.213 33.4982,-107.262 33.4008,-107.288 33.3395,-107.289 33.3292,-107.288 33.3192,-107.284 33.3095,-107.281 33.3,-107.272 33.2813,-107.264 33.2655,-107.259 33.2493,-107.256 33.2296,-107.263 33.1794,-107.281 33.1581,-107.306 33.1418,-107.329 33.1064,-107.335 33.088,-107.346 33.0429,-107.356 32.9855,-107.356 32.9304,-107.341 32.9116,-107.31 32.8854,-107.279 32.8564,-107.265 32.8285,-107.264 32.8178,-107.264 32.8064,-107.261 32.7953,-107.256 32.7854,-107.237 32.7605,-107.219 32.7418,-107.199 32.7237,-107.176 32.7006,-107.153 32.6876,-107.122 32.6823,-107.09 32.6813,-107.061 32.6808,-106.984 32.6615,-106.931 32.6198,-106.891 32.5649,-106.854 32.5058,-106.827 32.4675,-106.799 32.4299,-106.771 32.3928,-106.741 32.3562)
+LINESTRING(-96.6711 32.8001,-96.648 32.7957,-96.6274 32.7946,-96.609 32.7942,-96.5923 32.7923,-96.5609 32.7854,-96.5295 32.7785,-96.4982 32.7717,-96.4668 32.7648,-96.4636 32.7621,-96.4604 32.7591,-96.4576 32.7559,-96.4554 32.7526,-96.4319 32.7483,-96.4082 32.7452,-96.3844 32.7429,-96.3604 32.7409,-96.298 32.7099,-96.1953 32.6779,-96.0882 32.6504,-96.0128 32.6331,-95.9887 32.6264,-95.9658 32.618,-95.9434 32.6088,-95.9208 32.5997,-95.9018 32.5932,-95.882 32.5872,-95.862 32.5813,-95.8425 32.575,-95.7966 32.5575,-95.7448 32.5365,-95.6928 32.5168,-95.6466 32.5029,-95.6171 32.4981,-95.5864 32.4955,-95.5554 32.493,-95.525 32.4886,-95.4899 32.4805,-95.4574 32.4732,-95.4243 32.469,-95.3873 32.4703)
+LINESTRING(-94.3574 32.4907,-94.4278 32.4885,-94.5281 32.4793,-94.6281 32.4667,-94.6974 32.4542,-94.7193 32.4474,-94.741 32.4399,-94.7633 32.4338,-94.787 32.4314,-94.7975 32.4319,-94.8079 32.4329,-94.8185 32.4337,-94.8293 32.4338)
+LINESTRING(-94.8293 32.4338,-94.8528 32.433,-94.8781 32.4325,-94.9035 32.4328,-94.9271 32.4342,-94.9489 32.4366,-94.9714 32.4393,-94.994 32.4415,-95.0158 32.4422,-95.0383 32.4411,-95.0608 32.4393,-95.0833 32.4379,-95.1058 32.4379,-95.127 32.4404,-95.1475 32.4444,-95.168 32.4481,-95.1894 32.4497,-95.2398 32.4522,-95.2888 32.4581,-95.3376 32.465,-95.3873 32.4703)
+LINESTRING(-108.704 32.3217,-108.683 32.3193,-108.662 32.317,-108.64 32.3154,-108.619 32.3147,-108.568 32.2847,-108.517 32.2552,-108.466 32.2253,-108.416 32.1943,-108.407 32.1892,-108.394 32.1833,-108.381 32.178,-108.371 32.1747,-108.223 32.197,-108.076 32.219,-107.865 32.2501,-107.751 32.2663)
+LINESTRING(-110.958 32.1966,-110.944 32.1856,-110.928 32.1722,-110.911 32.159,-110.894 32.1486,-110.89 32.1426,-110.886 32.1366,-110.882 32.1307,-110.877 32.1247,-110.832 32.1037,-110.772 32.0632,-110.71 32.0215,-110.657 31.9969,-110.612 31.9956,-110.551 31.9844,-110.489 31.9713,-110.442 31.9641,-110.419 31.9639,-110.396 31.9637,-110.365 31.9637,-110.349 31.9641,-110.34 31.966,-110.332 31.9673,-110.324 31.9689,-110.314 31.9718)
+LINESTRING(-110.314 31.9718,-110.285 31.9785,-110.278 31.9783,-110.274 31.9776,-110.267 31.9683,-110.239 31.9746,-110.191 31.9891,-110.144 32.005,-110.118 32.0157,-110.104 32.0305,-110.086 32.0518,-110.067 32.0719,-110.05 32.0834,-110.038 32.1013,-110.023 32.1185,-110.008 32.1357,-109.996 32.1535,-109.933 32.1859,-109.885 32.2197,-109.843 32.2593,-109.797 32.3089,-109.759 32.3399,-109.721 32.3552,-109.678 32.3611,-109.624 32.3642,-109.619 32.363,-109.614 32.3613,-109.604 32.3497,-109.597 32.3475,-109.59 32.3458,-109.574 32.3431,-109.468 32.3215,-109.291 32.2838,-109.124 32.2451,-109.048 32.2212)
+LINESTRING(-106.741 32.3562,-106.737 32.3295,-106.729 32.3058,-106.718 32.2835,-106.705 32.2613)
+LINESTRING(-107.751 32.2663,-107.712 32.2717,-107.672 32.2776,-107.632 32.2827,-107.593 32.2859,-107.555 32.2792,-107.488 32.2631,-107.42 32.2457,-107.382 32.2354,-107.368 32.2416,-107.354 32.2446,-107.339 32.2454,-107.323 32.2452,-107.286 32.244,-107.248 32.2424,-107.21 32.2414,-107.173 32.2418,-107.13 32.2456,-107.087 32.2523,-107.045 32.26,-107.002 32.2667,-106.968 32.2709,-106.934 32.2745,-106.9 32.278,-106.866 32.2815,-106.825 32.2781,-106.784 32.2662,-106.744 32.2569,-106.705 32.2613)
+LINESTRING(-100.502 32.4468,-100.492 32.4481,-100.483 32.4502,-100.474 32.4521,-100.464 32.4529,-100.431 32.4499,-100.406 32.4482,-100.383 32.4566,-100.36 32.4843,-100.34 32.4869,-100.321 32.4903,-100.301 32.4932,-100.28 32.4945,-100.258 32.494,-100.235 32.4927,-100.212 32.4912,-100.189 32.4902,-100.173 32.491,-100.157 32.4932,-100.141 32.4949,-100.125 32.4943,-100.058 32.4853,-99.9917 32.4765,-99.9253 32.468,-99.8588 32.4597,-99.8373 32.4621,-99.8138 32.4703,-99.7906 32.4791,-99.7702 32.4828)
+LINESTRING(-81.5725 31.1378,-81.5894 31.1176,-81.6079 31.0992,-81.6266 31.0812,-81.6443 31.062,-81.6509 31.0497,-81.6579 31.0312,-81.6641 31.0125,-81.6683 30.9994,-81.6838 30.9309,-81.6821 30.8742,-81.6699 30.8177,-81.6538 30.7504,-81.657 30.7391,-81.6633 30.7293)
+LINESTRING(-99.7702 32.4828,-99.7569 32.4864,-99.7477 32.4887,-99.738 32.4899,-99.7234 32.49,-99.7021 32.4744,-99.6784 32.4582,-99.6537 32.4444,-99.6291 32.4364,-99.5764 32.4285,-99.5235 32.4219,-99.4708 32.4152,-99.4186 32.4073,-99.3706 32.3987,-99.3218 32.39,-99.2727 32.382,-99.224 32.3756,-99.1609 32.3716,-99.0972 32.3718,-99.0333 32.3732,-98.97 32.3731,-98.9365 32.3716,-98.8996 32.3701,-98.8629 32.3706,-98.8299 32.3749,-98.821 32.3806,-98.8089 32.3878,-98.7975 32.3949,-98.791 32.4,-98.7856 32.4,-98.7736 32.4064,-98.7575 32.4117,-98.7408 32.4165,-98.7266 32.4212,-98.7045 32.4316,-98.6825 32.4437,-98.661 32.4564,-98.6405 32.4685,-98.6186 32.4758,-98.5799 32.4858,-98.5408 32.4944,-98.5177 32.4975,-98.493 32.5026,-98.4475 32.5044,-98.3995 32.5073,-98.3673 32.5159,-98.3636 32.5163,-98.3239 32.528,-98.2881 32.54,-98.253 32.5534,-98.2171 32.5688,-98.2053 32.5712,-98.1902 32.5716,-98.1752 32.5725,-98.1637 32.5761,-98.1505 32.5849,-98.1374 32.5937,-98.1243 32.6025,-98.1111 32.6113)
+LINESTRING(-100.502 32.4468,-100.544 32.4307,-100.591 32.4207,-100.639 32.4136,-100.685 32.4067,-100.696 32.4098,-100.707 32.4126,-100.719 32.4143,-100.73 32.4141,-100.754 32.41,-100.777 32.4059,-100.8 32.4017,-100.823 32.3976,-100.848 32.411,-100.869 32.4086,-100.889 32.3991,-100.909 32.391,-100.938 32.3942,-100.968 32.3833,-100.996 32.3673,-101.024 32.3554,-101.053 32.3503,-101.082 32.3479,-101.111 32.3458,-101.14 32.342,-101.155 32.3387,-101.17 32.3349,-101.184 32.3311,-101.199 32.3272,-101.203 32.3263,-101.206 32.3253,-101.209 32.3244,-101.213 32.3234,-101.213 32.32,-101.212 32.3166,-101.212 32.3132,-101.212 32.3098,-101.271 32.2963,-101.331 32.2832,-101.39 32.2705,-101.45 32.2586,-101.454 32.262,-101.458 32.2654,-101.466 32.2665,-101.474 32.2661,-101.482 32.265,-101.49 32.2636)
+LINESTRING(-83.2936 30.8292,-83.304 30.8466,-83.3153 30.863,-83.3261 30.8796,-83.3348 30.8974,-83.3511 30.9295,-83.3717 30.9621,-83.3911 30.995,-83.4035 31.0279,-83.4036 31.0347,-83.4023 31.042,-83.401 31.0493,-83.4015 31.0563,-83.4093 31.0759,-83.4196 31.0955,-83.43 31.1151,-83.4383 31.1351,-83.4578 31.2044,-83.474 31.2742,-83.4892 31.3441,-83.5057 31.4138,-83.5111 31.424,-83.5197 31.4347,-83.5275 31.4443,-83.53 31.4512)
+LINESTRING(-106.705 32.2613,-106.701 32.2552,-106.697 32.2491,-106.693 32.243,-106.689 32.2369,-106.674 32.2134,-106.661 32.1925,-106.647 32.1722,-106.629 32.1505,-106.609 32.1279,-106.594 32.1064,-106.583 32.0832,-106.578 32.0558,-106.577 32.0412,-106.575 32.0285,-106.573 32.0157,-106.572 32.0016)
+LINESTRING(-96.796 32.7823,-96.8005 32.7723,-96.8058 32.7591,-96.8079 32.7507,-96.811 32.749,-96.8141 32.7472,-96.8172 32.7455,-96.8202 32.7438,-96.8225 32.7354,-96.8247 32.727,-96.827 32.7187,-96.8292 32.7103,-96.8272 32.7077,-96.8203 32.6568,-96.819 32.6051,-96.821 32.5532,-96.8249 32.5033,-96.838 32.4748,-96.8602 32.4376,-96.8723 32.3979,-96.855 32.3619,-96.8738 32.2463,-96.9123 32.1713,-96.9822 32.1154,-97.0952 32.0568)
+LINESTRING(-97.0952 32.0568,-97.1068 32.0833,-97.1153 32.1109,-97.1227 32.1389,-97.1307 32.1663,-97.1433 32.2001,-97.157 32.2339,-97.1702 32.2678,-97.1812 32.3016,-97.1855 32.3207,-97.1888 32.3397,-97.1933 32.3586,-97.2008 32.3773,-97.2264 32.4145,-97.2663 32.467,-97.303 32.5185,-97.3187 32.5529,-97.3174 32.5826,-97.3158 32.6124,-97.3144 32.6421,-97.3136 32.6717,-97.3147 32.6907,-97.3173 32.7097,-97.3191 32.7269)
+LINESTRING(-83.1634 30.6244,-83.1765 30.6384,-83.189 30.6546,-83.201 30.6712,-83.2128 30.6863,-83.2362 30.7198,-83.2557 30.7562,-83.2739 30.7935,-83.2936 30.8292)
+LINESTRING(-81.6633 30.7293,-81.666 30.725,-81.6742 30.7094,-81.6749 30.6936,-81.6687 30.6753,-81.6624 30.6569,-81.6562 30.6386,-81.6499 30.6203,-81.646 30.6047,-81.6438 30.5882,-81.6422 30.5713,-81.6401 30.5547,-81.6383 30.5454,-81.6362 30.5354,-81.6345 30.5254,-81.6338 30.5162,-81.6373 30.4986,-81.6452 30.4626,-81.6514 30.4352,-81.6576 30.4078,-81.6592 30.4054,-81.663 30.3995,-81.6671 30.3916,-81.6699 30.3835,-81.6703 30.3762,-81.6693 30.3694,-81.6681 30.363,-81.668 30.3568,-81.668 30.3524,-81.668 30.348,-81.6681 30.3436,-81.6681 30.3392)
+LINESTRING(-81.6734 30.3183,-81.6665 30.318,-81.6468 30.3208)
+LINESTRING(-106.572 32.0016,-106.572 32.0013,-106.57 31.9806,-106.568 31.96,-106.566 31.9394,-106.564 31.9188,-106.56 31.8951,-106.55 31.8754,-106.535 31.8572,-106.517 31.8381,-106.509 31.8287,-106.503 31.82,-106.496 31.812,-106.486 31.8044)
+LINESTRING(-81.4147 30.2575,-81.4113 30.2572,-81.3999 30.2563,-81.3885 30.2571)
+LINESTRING(-90.2125 32.2749,-90.2243 32.2663,-90.2361 32.2577,-90.2533 32.2444,-90.2635 32.2355,-90.2688 32.2278,-90.2742 32.2185,-90.2793 32.2088,-90.2842 32.2002,-90.3001 32.1712,-90.3155 32.1401,-90.3318 32.1098,-90.3503 32.0833,-90.3577 32.0752,-90.3651 32.0675,-90.372 32.0594,-90.3778 32.0504,-90.3938 32.0176,-90.409 31.9841,-90.4238 31.9505,-90.4386 31.9174,-90.4398 31.9074,-90.44 31.89,-90.44 31.8717,-90.4408 31.8589,-90.4458 31.8408,-90.4525 31.8239,-90.4596 31.8075,-90.4654 31.7905,-90.4692 31.7733,-90.4721 31.7556,-90.4747 31.7377,-90.478 31.7202,-90.479 31.7154,-90.48 31.7105,-90.4808 31.7055,-90.4816 31.7006,-90.4831 31.6611,-90.4808 31.6219,-90.4782 31.5826,-90.4786 31.5431)
+LINESTRING(-106.486 31.8044,-106.48 31.7913,-106.469 31.7818,-106.454 31.7764,-106.437 31.7753,-106.43 31.7761,-106.427 31.7768,-106.423 31.7779)
+LINESTRING(-81.5821 30.2497,-81.576 30.2503,-81.5698 30.2507,-81.5626 30.2507,-81.5297 30.2503,-81.4978 30.2512,-81.4662 30.2537,-81.4344 30.2577,-81.4311 30.2579)
+LINESTRING(-81.5821 30.2497,-81.6024 30.2711,-81.6243 30.2926,-81.6495 30.3104,-81.6734 30.3183)
+LINESTRING(-110.958 32.1966,-110.965 32.1854,-110.972 32.1741,-110.979 32.1629,-110.985 32.1516,-110.987 32.1329,-110.989 32.118,-110.992 32.1033,-110.994 32.0851,-110.994 32.0625,-110.995 32.0387,-110.995 32.015,-110.994 31.9927,-110.988 31.9658,-110.978 31.9319,-110.969 31.8979,-110.965 31.8711,-110.968 31.8364,-110.98 31.8029,-110.996 31.7706,-111.013 31.7397,-111.016 31.731,-111.018 31.7198,-111.02 31.7087,-111.022 31.7001,-111.031 31.6606,-111.039 31.6022,-111.046 31.5477,-111.049 31.5201,-111.049 31.5098,-111.047 31.4987,-111.044 31.4875,-111.04 31.4765,-111.031 31.464,-111.017 31.4489,-111.001 31.4351,-110.986 31.4264,-110.978 31.4047,-110.966 31.3763,-110.943 31.3385)
+LINESTRING(-88.7659 32.3413,-88.7668 32.3356,-88.7677 32.3299,-88.7733 32.3236,-88.7807 32.318,-88.7886 32.313,-88.7962 32.3083,-88.7999 32.3002,-88.8005 32.2952,-88.8026 32.2784,-88.8079 32.2671,-88.8148 32.2564,-88.8215 32.2448,-88.8251 32.2356,-88.828 32.226,-88.8314 32.2164,-88.8362 32.2076,-88.8422 32.201,-88.849 32.1951,-88.8556 32.1888,-88.8607 32.1811,-88.8628 32.1767,-88.8648 32.1723,-88.8701 32.1459,-88.8728 32.1323,-88.8772 32.1189,-88.8876 32.0932,-88.889 32.0879,-88.8898 32.0821,-88.8906 32.0764,-88.8922 32.0714,-88.8971 32.0653,-88.9036 32.0598,-88.91 32.0543,-88.9142 32.0483,-88.9162 32.0398,-88.9171 32.0307,-88.9182 32.0216,-88.9211 32.0133,-88.9266 32.0063,-88.9339 31.9999,-88.9419 31.9939,-88.949 31.988,-88.9677 31.9671,-88.9991 31.93,-89.029 31.8933,-89.0433 31.8739,-89.0488 31.8483,-89.0508 31.8213,-89.0528 31.7945,-89.0585 31.7696,-89.0652 31.7592,-89.0751 31.7503,-89.0858 31.742,-89.095 31.733,-89.1039 31.7188,-89.114 31.7021,-89.1262 31.6887,-89.1418 31.6845,-89.1512 31.6797,-89.1597 31.6737,-89.1656 31.6527,-89.1797 31.6357,-89.1978 31.6206,-89.2158 31.6052,-89.2348 31.5857,-89.2517 31.5663,-89.2676 31.5462,-89.2832 31.5244,-89.2918 31.5151,-89.3016 31.5082,-89.3113 31.5017,-89.3199 31.4936,-89.3224 31.4767,-89.3215 31.446,-89.3194 31.4143,-89.3181 31.3941,-89.3217 31.3843,-89.3305 31.3755,-89.3411 31.3674,-89.35 31.3601)
+LINESTRING(-101.49 32.2636,-101.501 32.2605,-101.51 32.2542,-101.518 32.2467,-101.527 32.2399,-101.54 32.233,-101.554 32.2278,-101.569 32.2229,-101.583 32.2172,-101.627 32.197,-101.669 32.1788,-101.713 32.1618,-101.759 32.1453,-101.777 32.1414,-101.79 32.141,-101.804 32.1371,-101.827 32.1229,-101.832 32.1191,-101.87 32.1058,-101.906 32.09,-101.941 32.0725,-101.975 32.0542,-101.981 32.0345,-101.998 32.0145,-102.018 31.9966,-102.037 31.9828,-102.057 31.9741,-102.079 31.969,-102.103 31.965,-102.124 31.9593,-102.157 31.9437,-102.211 31.9154,-102.266 31.8857,-102.301 31.866,-102.314 31.8564,-102.326 31.846,-102.339 31.8363,-102.354 31.8289)
+LINESTRING(-82.7542 30.2665,-82.761 30.2776,-82.7709 30.288,-82.7819 30.2975,-82.7923 30.3062,-82.8205 30.3327,-82.8477 30.3606,-82.8738 30.3892,-82.8987 30.4181,-82.9031 30.4239,-82.9076 30.4297,-82.9129 30.4366,-82.9318 30.4512,-82.9512 30.4629,-82.9711 30.4738,-82.9885 30.4825,-83.0015 30.4871,-83.0148 30.4906,-83.0279 30.495,-83.0402 30.5022,-83.057 30.5188,-83.0702 30.537,-83.0827 30.5557,-83.0972 30.5735,-83.1066 30.5827,-83.1164 30.5917,-83.1263 30.6006,-83.1361 30.6095,-83.1422 30.6135,-83.1496 30.6168,-83.1571 30.6202,-83.1632 30.6242,-83.1634 30.6244)
+LINESTRING(-83.8903 30.4766,-83.8469 30.4745,-83.813 30.4682,-83.781 30.4589,-83.7436 30.448,-83.7268 30.4454,-83.7088 30.4449,-83.6907 30.4453,-83.6736 30.445,-83.6659 30.4438,-83.6585 30.4415,-83.6512 30.4388,-83.644 30.4363,-83.6136 30.4317,-83.5763 30.432,-83.5396 30.4348,-83.5115 30.438,-83.4836 30.4385,-83.4657 30.4331,-83.4517 30.4248,-83.4354 30.4162,-83.4169 30.4099,-83.397 30.4048,-83.3767 30.4005,-83.3571 30.3965,-83.2996 30.3844,-83.2418 30.3713,-83.1844 30.3573,-83.1278 30.3423,-83.0988 30.3411,-83.0678 30.3474,-83.0318 30.3527,-82.988 30.348,-82.975 30.341,-82.9532 30.3271,-82.9297 30.3121,-82.9119 30.302,-82.8811 30.2922,-82.8364 30.282,-82.7901 30.2729,-82.7542 30.2665)
+LINESTRING(-82.7542 30.2665,-82.7341 30.2623,-82.7156 30.2554,-82.6969 30.2487,-82.6763 30.245,-82.65 30.2432,-82.6237 30.2417,-82.5974 30.2412,-82.5712 30.2427,-82.5472 30.2465,-82.5231 30.2515,-82.499 30.2561,-82.4746 30.2588,-82.4703 30.2588,-82.4665 30.2584,-82.4624 30.2579,-82.4583 30.2574,-82.4273 30.2561,-82.3957 30.2565,-82.3643 30.2566,-82.3341 30.2545,-82.3225 30.2502,-82.3092 30.2425,-82.2964 30.2355,-82.2864 30.2332,-82.261 30.2384,-82.2354 30.2448,-82.2097 30.2515,-82.1844 30.2576,-82.1656 30.2597,-82.1475 30.2592,-82.1297 30.2585,-82.1119 30.26,-82.0919 30.2652,-82.0723 30.2717,-82.0512 30.2785,-82.0267 30.2842,-81.9711 30.2931,-81.8918 30.3043,-81.8061 30.3148,-81.731 30.3214,-81.7106 30.3209,-81.6885 30.3189,-81.6734 30.3183)
+LINESTRING(-84.2477 30.5033,-84.2299 30.5025,-84.2119 30.5028,-84.1939 30.5032,-84.1761 30.5029,-84.1655 30.4944,-84.1536 30.488,-84.1404 30.484,-84.1258 30.4828,-84.0853 30.4929,-84.0436 30.5017,-84.0035 30.5049,-83.9673 30.4982,-83.9628 30.4951,-83.9547 30.489,-83.9462 30.4829,-83.9407 30.4798,-83.927 30.478,-83.9109 30.4771,-83.9006 30.4768,-83.8903 30.4766)
+LINESTRING(-85.382 30.7542,-85.3624 30.7565,-85.3428 30.7581,-85.3232 30.7592,-85.3034 30.7597,-85.2948 30.7594,-85.2863 30.7583,-85.278 30.7565,-85.2698 30.7542,-85.2485 30.7462,-85.2289 30.7377,-85.2084 30.7296,-85.1842 30.7226,-85.1804 30.7221,-85.1757 30.7215,-85.171 30.7209,-85.1677 30.7201,-85.1255 30.7007,-85.0824 30.6785,-85.0388 30.6574,-84.995 30.6413,-84.978 30.6394,-84.9554 30.6395,-84.9323 30.6398,-84.9137 30.6388,-84.8956 30.6353,-84.8776 30.6308,-84.8599 30.6261,-84.8423 30.622,-84.8268 30.6209,-84.8112 30.6222,-84.7957 30.6238,-84.7807 30.6234,-84.7589 30.6167,-84.7409 30.606,-84.7242 30.5941,-84.7066 30.5836,-84.6935 30.5787,-84.6796 30.5748,-84.6656 30.5711,-84.6523 30.5666,-84.6382 30.5602,-84.6247 30.5534,-84.611 30.5467,-84.5964 30.5408,-84.5839 30.538,-84.5673 30.5356,-84.5523 30.5337,-84.5449 30.5324,-84.5171 30.5245,-84.4892 30.5142,-84.4637 30.5036,-84.4433 30.4949,-84.4263 30.4914,-84.3935 30.4859,-84.3606 30.4807,-84.343 30.4784,-84.3199 30.481,-84.296 30.4876,-84.2726 30.496,-84.2509 30.5038,-84.2493 30.5035,-84.2477 30.5033)
+LINESTRING(-97.1081 31.6024,-97.1028 31.608,-97.1036 31.6342,-97.1044 31.6603,-97.1052 31.6865,-97.106 31.7126,-97.1069 31.7274,-97.1083 31.7426,-97.1093 31.7577,-97.1093 31.7721,-97.1038 31.7969,-97.0945 31.8236,-97.0869 31.8537,-97.0867 31.889,-97.0928 31.9071,-97.1038 31.9309,-97.1141 31.9526,-97.118 31.9639,-97.1071 31.9905,-97.0994 32.0072,-97.0953 32.0255,-97.0952 32.0568)
+LINESTRING(-93.7472 32.4965,-93.7461 32.4724,-93.7451 32.4483,-93.744 32.4241,-93.7429 32.4,-93.7405 32.367,-93.7381 32.3341,-93.7357 32.3012,-93.7333 32.2682,-93.726 32.2584,-93.7186 32.2486,-93.7113 32.2387,-93.7039 32.2289,-93.6668 32.1881,-93.6297 32.1474,-93.5926 32.1066,-93.5556 32.0657,-93.4529 31.9836,-93.3504 31.9013,-93.2481 31.8189,-93.1459 31.7364,-93.1255 31.7019,-93.1051 31.6674,-93.0847 31.633,-93.0643 31.5985,-93.0388 31.5776,-93.0133 31.5567,-92.9878 31.5359,-92.9623 31.515,-92.9068 31.4824,-92.8514 31.4498,-92.796 31.4171,-92.7407 31.3844,-92.7284 31.3767,-92.716 31.3689,-92.7037 31.3612,-92.6914 31.3535,-92.6269 31.3376,-92.5624 31.3218,-92.498 31.3058,-92.4335 31.2899)
+LINESTRING(-96.7734 32.7803,-96.7713 32.7746,-96.769 32.7677,-96.7674 32.7617,-96.7658 32.7556,-96.7597 32.7356,-96.7507 32.7169,-96.7397 32.6987,-96.7279 32.6805,-96.7202 32.6703,-96.7109 32.6596,-96.7024 32.6495,-96.6968 32.6409,-96.6673 32.5728,-96.6564 32.5352,-96.6556 32.4921,-96.6565 32.4077,-96.6506 32.3954,-96.6373 32.3717,-96.6262 32.3528,-96.6151 32.334,-96.5995 32.317,-96.5788 32.3046,-96.5554 32.2943,-96.5321 32.284,-96.5031 32.2602,-96.484 32.2268,-96.4727 32.1897,-96.4672 32.1552,-96.4621 32.142,-96.4523 32.1272,-96.4429 32.1125,-96.4388 32.0996,-96.4407 32.0912,-96.4412 32.0828,-96.4472 32.0735,-96.4523 32.064,-96.443 32.0405,-96.4338 32.0168,-96.4242 31.9932,-96.4138 31.9701,-96.4164 31.96,-96.4189 31.9499,-96.4211 31.9389,-96.4215 31.9302,-96.4046 31.9177,-96.3833 31.9045,-96.3614 31.8914,-96.3423 31.8793,-96.3215 31.8636,-96.304 31.848,-96.2874 31.8314,-96.2693 31.813,-96.2414 31.7901,-96.2154 31.7719,-96.1926 31.75,-96.1741 31.7157,-96.1657 31.687,-96.1599 31.6572,-96.1554 31.6271,-96.1507 31.5976,-96.1394 31.5675,-96.1173 31.5221,-96.0925 31.4778,-96.0733 31.451)
+LINESTRING(-103.482 31.4018,-103.47 31.4041,-103.459 31.4065,-103.447 31.4088,-103.435 31.4111,-103.405 31.4224,-103.38 31.4399,-103.355 31.4579,-103.327 31.471,-103.265 31.4877,-103.196 31.5055,-103.155 31.5155,-103.115 31.5255,-103.068 31.5373,-103.02 31.5495,-102.972 31.5609,-102.924 31.5699,-102.888 31.5775,-102.873 31.5848,-102.863 31.593,-102.843 31.603,-102.822 31.6107,-102.802 31.6172,-102.783 31.6248,-102.763 31.6356,-102.716 31.6641,-102.669 31.6921,-102.622 31.7196,-102.574 31.7469,-102.54 31.7646,-102.504 31.7813,-102.468 31.7982,-102.433 31.8167,-102.414 31.8133,-102.391 31.8161,-102.37 31.8222,-102.354 31.8289)
+LINESTRING(-90.4786 31.5431,-90.4816 31.5144,-90.4811 31.4852,-90.4794 31.456,-90.4785 31.4271,-90.4791 31.3927,-90.4803 31.3582,-90.4817 31.3237,-90.483 31.2893,-90.4842 31.265,-90.4857 31.2406,-90.4866 31.2163,-90.4863 31.192,-90.4846 31.1808,-90.4817 31.1701,-90.4793 31.1595,-90.479 31.1482,-90.4821 31.1284,-90.4863 31.1087,-90.4906 31.0889,-90.494 31.0691,-90.4953 31.0547,-90.4961 31.0402,-90.4968 31.0256,-90.4979 31.0111,-90.5023 30.996,-90.5074 30.9872)
+LINESTRING(-87.9413 30.6685,-87.9615 30.6706,-87.9972 30.6797,-88.0016 30.684,-88.0092 30.6884,-88.0175 30.6923,-88.024 30.6949,-88.0293 30.6935,-88.0345 30.6919,-88.0361 30.6913)
+LINESTRING(-87.1136 30.5335,-87.1043 30.5357,-87.0847 30.5383,-87.0554 30.5546,-87.0382 30.5678,-87.021 30.5811,-87.0039 30.5944,-86.9867 30.6077,-86.9717 30.6171,-86.9544 30.6244,-86.9365 30.631,-86.9196 30.638,-86.87 30.6604,-86.8153 30.682,-86.7591 30.7005,-86.7049 30.7137,-86.6826 30.7159,-86.6603 30.7156,-86.6385 30.7151,-86.6173 30.7167,-86.6104 30.7185,-86.6036 30.7208,-86.5968 30.7233,-86.5899 30.7252,-86.5682 30.7281,-86.5458 30.7289,-86.5232 30.7288,-86.5012 30.7286,-86.4904 30.7273,-86.4793 30.7243,-86.4682 30.7212,-86.4573 30.7195,-86.4309 30.7216,-86.3899 30.7275,-86.3485 30.7347,-86.3207 30.7407,-86.3014 30.7459,-86.2846 30.7489,-86.2668 30.7495,-86.2448 30.7473,-86.2359 30.744,-86.2265 30.7409,-86.2159 30.7327,-86.21 30.7292,-86.2038 30.7267,-86.1767 30.7154,-86.1578 30.7045,-86.1372 30.6963,-86.105 30.6929,-86.028 30.6945,-85.9725 30.702,-85.9231 30.7195,-85.8645 30.7508,-85.8243 30.759,-85.7581 30.7624,-85.6897 30.7629,-85.6429 30.762,-85.6207 30.7601,-85.5975 30.7563,-85.5741 30.7521,-85.5516 30.7487,-85.5273 30.7467,-85.5027 30.7461,-85.4782 30.746,-85.4537 30.7459,-85.4355 30.747,-85.4176 30.7496,-85.3999 30.7525,-85.382 30.7542)
+LINESTRING(-87.4133 30.5744,-87.4273 30.5781,-87.4523 30.5785,-87.4771 30.5795,-87.5018 30.5812,-87.5267 30.584,-87.5432 30.5961,-87.5627 30.6087,-87.5833 30.6197,-87.6031 30.6272,-87.6068 30.6281,-87.6101 30.6286,-87.6136 30.6291,-87.6172 30.6297,-87.633 30.632,-87.6489 30.6339,-87.6647 30.6358,-87.6803 30.6383,-87.6931 30.6416,-87.706 30.6459,-87.7192 30.65,-87.7326 30.6528,-87.746 30.6536,-87.76 30.6534,-87.7741 30.653,-87.7879 30.6536,-87.803 30.656,-87.8182 30.6595,-87.8334 30.6628,-87.8486 30.6647,-87.8851 30.6656,-87.9235 30.6667,-87.9413 30.6685)
+LINESTRING(-88.0361 30.6913,-88.0395 30.69,-88.0446 30.6882,-88.0569 30.6711,-88.0794 30.6617,-88.1064 30.6571,-88.1233 30.6551)
+LINESTRING(-88.1233 30.6551,-88.1257 30.6774,-88.1254 30.7006,-88.1235 30.7264,-88.1194 30.735,-88.1112 30.7413,-88.1026 30.7478,-88.097 30.7569,-88.0968 30.7701,-88.1002 30.7837,-88.1041 30.7954,-88.1054 30.803,-88.0718 30.8587,-88.0117 30.8977,-87.9397 30.9252,-87.8709 30.9464,-87.8378 30.9541,-87.804 30.9587,-87.7706 30.9632,-87.7385 30.9708,-87.7252 30.9758,-87.7137 30.9814,-87.7031 30.9881,-87.6923 30.9963,-87.6486 31.0274,-87.6013 31.0556,-87.5529 31.0828,-87.5061 31.1108,-87.4981 31.1149,-87.4887 31.1185,-87.4801 31.1218,-87.4637 31.1296,-87.4549 31.1317,-87.448 31.1327,-87.3815 31.1708,-87.3221 31.2083,-87.2638 31.247,-87.2052 31.2874,-87.1501 31.3231,-87.1046 31.3493,-87.0604 31.3774,-87.0198 31.4095,-87.009 31.4182,-86.9696 31.4531,-86.9348 31.4916,-86.9004 31.5301,-86.8622 31.5652,-86.8349 31.5883,-86.8032 31.6184,-86.7734 31.6503,-86.7518 31.6787,-86.7399 31.6998,-86.7285 31.7216,-86.7168 31.7431,-86.7036 31.7636,-86.6982 31.7693,-86.6914 31.7747,-86.6847 31.7802,-86.68 31.786,-86.6753 31.7971,-86.6717 31.8089,-86.6677 31.8206,-86.6623 31.8312,-86.6537 31.8409,-86.6435 31.8494,-86.6331 31.8577,-86.6241 31.8668,-86.6052 31.8889,-86.5777 31.92,-86.5519 31.9493,-86.5384 31.9663,-86.5296 31.9869,-86.5226 32.009,-86.5148 32.0308,-86.5038 32.0507,-86.4894 32.0703,-86.4696 32.0979,-86.4509 32.1253,-86.44 32.1441,-86.4361 32.1551,-86.4327 32.1658,-86.4288 32.1763,-86.4233 32.1868,-86.4042 32.212,-86.3827 32.2354,-86.3618 32.259,-86.3445 32.2849,-86.3403 32.2951,-86.3376 32.3061,-86.3361 32.3173,-86.3352 32.3281)
+LINESTRING(-87.2223 30.5063,-87.2081 30.506,-87.1939 30.5056,-87.1797 30.5057,-87.1655 30.5057,-87.1596 30.5095)
+LINESTRING(-87.2223 30.5063,-87.2964 30.5145,-87.342 30.5392,-87.379 30.5655,-87.4133 30.5744)
+LINESTRING(-104.051 31.0911,-104.039 31.1166,-104.026 31.1277,-104.013 31.1328,-103.999 31.1405,-103.942 31.1899,-103.879 31.2435,-103.813 31.2936,-103.748 31.332,-103.705 31.3502,-103.65 31.3707,-103.594 31.3904,-103.544 31.4067,-103.535 31.4051,-103.521 31.4004,-103.502 31.3977,-103.482 31.4018)
+LINESTRING(-88.1233 30.6551,-88.1325 30.6541,-88.1402 30.6397,-88.149 30.6256,-88.1592 30.6125,-88.1709 30.6009,-88.1842 30.5904,-88.1988 30.58,-88.2139 30.5702,-88.2284 30.5612,-88.2849 30.528,-88.3201 30.5094,-88.3537 30.4952,-88.4022 30.4763)
+LINESTRING(-104.825 31.0363,-104.837 31.034,-104.85 31.0333,-104.863 31.0329,-104.875 31.0319,-104.887 31.0363,-104.898 31.0407,-104.91 31.0456,-104.921 31.0509,-104.998 31.0632,-105.137 31.0953,-105.275 31.1302,-105.353 31.1511,-105.373 31.1563,-105.394 31.1606,-105.414 31.1651,-105.434 31.1705,-105.449 31.1774,-105.463 31.1865,-105.475 31.1952,-105.487 31.2013,-105.512 31.1881,-105.533 31.1794,-105.557 31.1768,-105.588 31.1821,-105.601 31.1782,-105.618 31.1741,-105.634 31.1706,-105.645 31.1688,-105.68 31.1711,-105.714 31.183,-105.745 31.2011,-105.77 31.2223,-105.782 31.2303,-105.794 31.2384,-105.796 31.2507,-105.802 31.2793,-105.813 31.3118,-105.83 31.3356,-105.848 31.3521,-105.872 31.3741,-105.896 31.3955,-105.917 31.4103,-105.929 31.4161,-105.942 31.4213,-105.956 31.4267,-105.968 31.4327,-106 31.451,-106.031 31.4705,-106.062 31.4898,-106.094 31.508,-106.103 31.5116,-106.111 31.5164,-106.137 31.5484,-106.163 31.5832,-106.187 31.6187,-106.211 31.6527,-106.224 31.6688,-106.238 31.6852,-106.253 31.7009,-106.268 31.7153,-106.296 31.7355,-106.339 31.7599,-106.386 31.7777,-106.423 31.7779)
+LINESTRING(-104.051 31.0911,-104.065 31.0842,-104.073 31.0828,-104.083 31.0837,-104.097 31.0834,-104.114 31.0791,-104.129 31.0717,-104.145 31.0639,-104.163 31.0586,-104.215 31.0584,-104.305 31.0628,-104.392 31.0683,-104.441 31.0716,-104.452 31.0707,-104.464 31.068,-104.477 31.0648,-104.488 31.0628,-104.572 31.0555,-104.656 31.0484,-104.741 31.042,-104.825 31.0363)
+LINESTRING(-97.4693 31.0303,-97.4306 31.0388,-97.3943 31.0615,-97.3609 31.093,-97.3311 31.1278,-97.3186 31.1707,-97.3005 31.2132,-97.2794 31.2547,-97.2575 31.2946,-97.249 31.3059,-97.2384 31.3162,-97.2283 31.3269,-97.2212 31.3389,-97.2065 31.3768,-97.1912 31.4118,-97.1745 31.4463,-97.1556 31.4825,-97.1453 31.5017,-97.1353 31.5218,-97.1273 31.5422,-97.1227 31.5624,-97.1168 31.5698,-97.1123 31.5752,-97.1091 31.5804,-97.1083 31.5871,-97.1089 31.595,-97.1081 31.6024)
+LINESTRING(-88.4022 30.4763,-88.4054 30.475,-88.4323 30.4654,-88.4548 30.4622,-88.4733 30.461,-88.4884 30.4579,-88.4993 30.4528,-88.5099 30.4475,-88.5209 30.443,-88.5333 30.4402,-88.5717 30.4367,-88.6188 30.4339,-88.6656 30.4322,-88.703 30.4323,-88.7197 30.4362,-88.7426 30.4443,-88.7656 30.4528,-88.7826 30.4579,-88.8024 30.4585,-88.8292 30.4568,-88.8564 30.4542,-88.8776 30.4525,-88.889 30.4513,-88.9008 30.4494,-88.9126 30.4478,-88.9237 30.4475,-88.9343 30.4503,-88.9445 30.4557,-88.9548 30.4605,-88.9654 30.4616,-88.9978 30.4557,-89.0303 30.4491,-89.063 30.4424,-89.0956 30.4367)
+LINESTRING(-89.35 31.3601,-89.3544 31.3451,-89.3557 31.3203,-89.3554 31.2964,-89.3549 31.2839,-89.3534 31.2803,-89.3499 31.2761,-89.3466 31.2727,-89.3432 31.2692,-89.337 31.2607,-89.3315 31.2515,-89.3266 31.2422,-89.3221 31.233,-89.3232 31.228,-89.3343 31.2016,-89.3446 31.1749,-89.3548 31.1483,-89.3658 31.1223,-89.3703 31.1141,-89.3755 31.1059,-89.3806 31.0978,-89.3847 31.0895,-89.3885 31.0767,-89.391 31.0633,-89.3937 31.0499,-89.3979 31.037,-89.4012 31.0297,-89.4045 31.0225,-89.4077 31.0152,-89.411 31.0079,-89.4335 30.9666,-89.4615 30.9197,-89.4847 30.8725,-89.4926 30.8305,-89.4964 30.8247,-89.5009 30.8192,-89.5056 30.814,-89.5103 30.8087,-89.5177 30.7943,-89.5197 30.7784,-89.5208 30.763,-89.5256 30.7503,-89.5316 30.7436,-89.5385 30.7374,-89.5453 30.7312,-89.5513 30.7243,-89.5625 30.704,-89.5715 30.6815,-89.58 30.6586,-89.59 30.6371,-89.6009 30.6202,-89.6132 30.6038,-89.6257 30.5875,-89.637 30.5706,-89.6448 30.5577,-89.6525 30.5448,-89.6597 30.5316,-89.6659 30.5181,-89.6687 30.5089,-89.6709 30.4991,-89.6736 30.4895,-89.6777 30.4811,-89.6855 30.4696)
+LINESTRING(-81.5821 30.2497,-81.5698 30.2375,-81.5579 30.2275,-81.5464 30.2174,-81.5356 30.2064,-81.5364 30.2005,-81.5377 30.1939,-81.5389 30.1874,-81.5395 30.1816,-81.5334 30.1645,-81.5183 30.1462,-81.4988 30.1259,-81.4796 30.1029,-81.4773 30.087,-81.4831 30.0666,-81.4897 30.0456,-81.4897 30.028,-81.4789 30.006,-81.4659 29.9868,-81.4532 29.9706,-81.4433 29.9576,-81.435 29.9474,-81.4257 29.9376,-81.4168 29.9277,-81.4097 29.917,-81.4049 29.9035,-81.4015 29.8879,-81.3983 29.8721,-81.3942 29.8575,-81.3908 29.8495,-81.3868 29.8417,-81.3826 29.8338,-81.3789 29.826,-81.3652 29.7908,-81.3509 29.7526,-81.3355 29.7148,-81.3184 29.6806,-81.3069 29.6746,-81.295 29.6678,-81.2837 29.6603,-81.2742 29.652,-81.2705 29.6417,-81.2649 29.6316,-81.2515 29.6089,-81.2374 29.5865,-81.2232 29.5643,-81.2096 29.5417,-81.1914 29.5036,-81.167 29.4459,-81.1441 29.3878,-81.1303 29.3485,-81.129 29.3376,-81.1299 29.3261,-81.1311 29.3145,-81.1308 29.3035,-81.1281 29.2925,-81.1242 29.2806,-81.1156 29.2577,-81.1072 29.232,-81.0984 29.206,-81.0879 29.1806,-81.0742 29.1565,-81.0933 29.1473)
+LINESTRING(-102.908 30.902,-102.986 30.8965,-103.129 30.9117,-103.276 30.9332,-103.365 30.9467,-103.398 30.9526,-103.432 30.9607,-103.465 30.9684,-103.498 30.9732,-103.544 30.9773,-103.59 30.9825,-103.637 30.9886,-103.682 30.9956,-103.703 30.9999,-103.723 31.0052,-103.744 31.0098,-103.766 31.012,-103.786 31.0118,-103.807 31.0106,-103.828 31.0088,-103.848 31.0068,-103.869 31.0166,-103.891 31.0271,-103.913 31.037,-103.935 31.0449,-103.944 31.0467,-103.955 31.0475,-103.965 31.0486,-103.974 31.0513,-103.981 31.0559,-103.987 31.0617,-103.993 31.0678,-104 31.0728,-104.012 31.0785,-104.025 31.083,-104.038 31.0869,-104.051 31.0911)
+LINESTRING(-90.5074 30.9872,-90.51 30.9827,-90.5181 30.9697,-90.5237 30.9553,-90.5311 30.9015,-90.534 30.8414,-90.5342 30.7814,-90.5338 30.7278,-90.5336 30.6874,-90.5309 30.6592,-90.5228 30.6309,-90.5063 30.5899,-90.5027 30.5633,-90.5054 30.5336,-90.5046 30.5049,-90.4906 30.4809)
+LINESTRING(-90.4906 30.4809,-90.3345 30.4826,-90.2611 30.4817,-90.2009 30.4676,-90.0838 30.4298)
+LINESTRING(-102.645 30.8779,-102.67 30.8805,-102.694 30.8847,-102.718 30.8889,-102.742 30.8911,-102.764 30.8908,-102.792 30.8899,-102.819 30.89,-102.84 30.8928,-102.859 30.8987,-102.874 30.9037,-102.889 30.9055,-102.908 30.902)
+LINESTRING(-89.6238 30.3079,-89.6103 30.3124,-89.5793 30.323,-89.5587 30.3297,-89.5479 30.3317,-89.5375 30.3323,-89.5273 30.3326,-89.5169 30.3341,-89.4605 30.3502,-89.4048 30.3692,-89.3492 30.3884,-89.293 30.4047,-89.2822 30.4064,-89.2713 30.4069,-89.2604 30.407,-89.2495 30.4076,-89.2392 30.4096,-89.229 30.4128,-89.219 30.4165,-89.2091 30.4197,-89.1958 30.4218,-89.1804 30.4223,-89.1647 30.4224,-89.151 30.4231,-89.1478 30.4234,-89.1446 30.4237,-89.1414 30.4241,-89.1382 30.4244,-89.1344 30.4254,-89.1306 30.4264,-89.1262 30.4277,-89.1218 30.4289,-89.1174 30.4302,-89.1129 30.4315,-89.1085 30.4326,-89.1041 30.4337,-89.0995 30.435,-89.0956 30.4367)
+LINESTRING(-89.6855 30.4696,-89.6953 30.4552,-89.7107 30.4312,-89.7253 30.4063,-89.7405 30.3777,-89.7418 30.3656,-89.7394 30.3492,-89.7381 30.3297,-89.7425 30.3082)
+LINESTRING(-90.0838 30.4298,-90.0661 30.4271,-90.0498 30.4202,-90.0345 30.4112,-90.0196 30.4024,-89.9751 30.3791,-89.9186 30.3515,-89.8623 30.3267,-89.8181 30.3122,-89.7999 30.3104,-89.7809 30.3107,-89.7615 30.3108,-89.7425 30.3082)
+LINESTRING(-89.7425 30.3082,-89.7218 30.3023,-89.6993 30.2989,-89.6765 30.2976,-89.6549 30.2981,-89.6395 30.3026,-89.6238 30.3079)
+LINESTRING(-91.1218 30.3911,-91.1146 30.3989,-91.1041 30.4083,-91.0938 30.4164,-91.0874 30.4203,-91.0778 30.4235,-91.0682 30.4275,-91.0585 30.4315,-91.0486 30.4348,-90.9975 30.4478,-90.9466 30.4585,-90.895 30.4669,-90.8422 30.4731,-90.8356 30.4735,-90.8289 30.4739,-90.8223 30.4743,-90.8157 30.4748,-90.7759 30.4757,-90.7365 30.4759,-90.6972 30.4758,-90.6577 30.4759,-90.6159 30.4773,-90.5742 30.4794,-90.5325 30.481,-90.4906 30.4809)
+LINESTRING(-91.1515 30.4047,-91.1441 30.4013,-91.1367 30.3979,-91.1292 30.3945,-91.1218 30.3911)
+LINESTRING(-91.1515 30.4047,-91.1725 30.4129,-91.1931 30.4204,-91.2106 30.4266,-91.2225 30.431,-91.2439 30.4398,-91.2647 30.4477,-91.2845 30.453,-91.3028 30.4542,-91.3384 30.4485,-91.3764 30.4387,-91.414 30.4275,-91.4487 30.4174,-91.5256 30.3968,-91.6026 30.3763,-91.6795 30.3556,-91.7562 30.3343,-91.7869 30.3269,-91.818 30.3211,-91.8489 30.3152,-91.8794 30.3079,-91.8977 30.302,-91.9152 30.2955,-91.9325 30.2886,-91.9501 30.282,-91.9664 30.2769,-91.983 30.2723,-91.9994 30.2672,-92.0145 30.2609)
+LINESTRING(-92.0145 30.2609,-92.0264 30.2965,-92.0421 30.3426,-92.0533 30.3874,-92.052 30.4197,-92.0676 30.4465,-92.0741 30.4672,-92.0739 30.4896,-92.0697 30.5217,-92.0688 30.5283,-92.0671 30.5357,-92.0636 30.5424,-92.0577 30.5468,-92.054 30.5655,-92.0501 30.5846,-92.0472 30.6038,-92.0465 30.6228,-92.0498 30.6365,-92.0568 30.6474,-92.0652 30.6575,-92.0729 30.6688,-92.0769 30.6779,-92.0802 30.6869,-92.0842 30.6956,-92.0901 30.7039,-92.1214 30.7301,-92.1668 30.764,-92.208 30.7989,-92.2268 30.8283,-92.2277 30.8449,-92.2287 30.8614,-92.2296 30.878,-92.2306 30.8946,-92.2635 30.9348,-92.2916 30.9669,-92.326 30.9919,-92.3778 31.0109,-92.3912 31.0264,-92.4046 31.042,-92.418 31.0575,-92.4314 31.0731,-92.4299 31.0945,-92.4282 31.1189,-92.426 31.1768,-92.427 31.2371,-92.4335 31.2899)
+LINESTRING(-100.643 30.5781,-100.662 30.5842,-100.695 30.5965,-100.728 30.6093,-100.75 30.6172,-100.771 30.6213,-100.791 30.6206,-100.809 30.619,-100.824 30.6199,-100.855 30.6294,-100.888 30.6415,-100.92 30.6544,-100.951 30.6664,-100.977 30.6729,-101.008 30.677,-101.038 30.6801,-101.065 30.6837,-101.091 30.6894,-101.116 30.6964,-101.14 30.7036,-101.165 30.7101,-101.173 30.7073,-101.182 30.7059,-101.192 30.705,-101.2 30.7038,-101.214 30.7001,-101.228 30.6953,-101.242 30.6905,-101.256 30.6867,-101.323 30.679,-101.387 30.6818,-101.451 30.6917,-101.516 30.7049,-101.538 30.7109,-101.56 30.7185,-101.582 30.7256,-101.604 30.7297,-101.621 30.7303,-101.638 30.7295,-101.655 30.7281,-101.671 30.7269,-101.732 30.7266,-101.796 30.7314,-101.859 30.7415,-101.917 30.7572,-101.935 30.7674,-101.951 30.7815,-101.966 30.7966,-101.982 30.8095,-102.024 30.834,-102.073 30.8595,-102.124 30.8817,-102.171 30.896,-102.265 30.9037,-102.362 30.8952,-102.459 30.8799,-102.553 30.8669,-102.576 30.8675,-102.599 30.8719,-102.622 30.8765,-102.645 30.8779)
+LINESTRING(-90.4392 30.0887,-90.4483 30.1046,-90.4537 30.1177,-90.4558 30.1311,-90.4554 30.1442,-90.4535 30.1562,-90.4507 30.1673,-90.4472 30.1782,-90.4436 30.1886,-90.44 30.198,-90.4372 30.2043,-90.434 30.2102,-90.4304 30.2156,-90.4266 30.2205,-90.4195 30.229,-90.4121 30.2372,-90.4046 30.2478,-90.3972 30.2612,-90.3914 30.2739,-90.389 30.282,-90.3905 30.303,-90.3973 30.3324,-90.4101 30.3647,-90.4295 30.3943,-90.4906 30.4809)
+LINESTRING(-91.1218 30.3911,-91.1043 30.3826,-91.0875 30.3736,-91.0727 30.3643,-91.0612 30.3551,-91.0505 30.3441,-91.0347 30.3267,-91.0195 30.3081,-91.0107 30.2937,-91.0013 30.2744,-90.9892 30.257,-90.9758 30.2398,-90.9626 30.2209,-90.927 30.1864,-90.8805 30.1691,-90.8285 30.16,-90.7767 30.1501,-90.7568 30.1442,-90.7367 30.1375,-90.7166 30.1312,-90.6966 30.1262,-90.6518 30.1197,-90.6048 30.1157,-90.5576 30.1129,-90.5121 30.1096,-90.4971 30.1067,-90.4755 30.1009,-90.4541 30.0941,-90.4392 30.0887)
+LINESTRING(-97.6873 30.5201,-97.6923 30.5409,-97.6903 30.5624,-97.686 30.5841,-97.6843 30.6055,-97.6871 30.6168,-97.6907 30.6293,-97.6899 30.6412,-97.6793 30.6502,-97.6765 30.663,-97.668 30.6759,-97.658 30.6889,-97.6508 30.7018,-97.6388 30.7375,-97.625 30.7779,-97.6098 30.8178,-97.5937 30.8519,-97.5821 30.8695,-97.5689 30.8864,-97.5559 30.9032,-97.5447 30.9207,-97.5398 30.932,-97.5358 30.9435,-97.5314 30.955,-97.5252 30.966,-97.5179 30.9747,-97.5092 30.9828,-97.5005 30.9908,-97.4927 30.9991,-97.4869 31.0065,-97.481 31.0139,-97.4736 31.0238,-97.4693 31.0303)
+LINESTRING(-92.9719 30.2671,-92.9155 30.2635,-92.8156 30.2629,-92.7132 30.2638,-92.6493 30.2645,-92.6359 30.2622,-92.6255 30.2568,-92.6153 30.2509,-92.6027 30.2471,-92.5729 30.2428,-92.5432 30.2385,-92.5074 30.2338,-92.4879 30.2323,-92.4497 30.2353,-92.4109 30.2348,-92.3732 30.2342,-92.3384 30.2372,-92.3217 30.2418,-92.3057 30.2478,-92.289 30.2532,-92.2704 30.2555,-92.2062 30.2525,-92.1408 30.2473,-92.0764 30.2476,-92.0145 30.2609)
+LINESTRING(-82.7542 30.2665,-82.7444 30.2485,-82.7323 30.2379,-82.7194 30.2296,-82.7074 30.2183,-82.6834 30.1775,-82.6525 30.1156,-82.6239 30.0542,-82.6067 30.0148,-82.602 30.0077,-82.5953 30.0015,-82.5884 29.9955,-82.5829 29.9893,-82.5707 29.9621,-82.5567 29.9219,-82.5445 29.882,-82.5373 29.8559,-82.5329 29.8457,-82.5257 29.8349,-82.5184 29.8234,-82.5134 29.8116,-82.5127 29.8035,-82.5133 29.7953,-82.5131 29.787,-82.5098 29.7786,-82.5024 29.7686,-82.4946 29.7597,-82.4867 29.7512,-82.4789 29.742,-82.4723 29.7314,-82.4669 29.7198,-82.4615 29.708,-82.455 29.6972,-82.4471 29.6878,-82.4377 29.6786,-82.4282 29.6694,-82.4195 29.66,-82.4027 29.6396,-82.3858 29.6192,-82.3692 29.5986,-82.3529 29.5779,-82.3411 29.5599,-82.3294 29.5467,-82.3197 29.5371,-82.3135 29.5301,-82.3026 29.5134,-82.2911 29.4959,-82.28 29.4784,-82.2709 29.4616,-82.2681 29.454,-82.2662 29.4459,-82.2645 29.4376,-82.2621 29.4298,-82.2543 29.4149,-82.2439 29.4,-82.2336 29.3851,-82.2257 29.3701,-82.2213 29.3574,-82.2176 29.3442,-82.2141 29.331,-82.2106 29.318,-82.1961 29.2682,-82.1882 29.2347,-82.1849 29.201,-82.1844 29.1506,-82.1845 29.1344,-82.1846 29.1183,-82.1847 29.1021,-82.1848 29.0859,-82.1824 29.0762,-82.1766 29.0652,-82.17 29.0544,-82.1648 29.0452,-82.1616 29.0368,-82.159 29.0281,-82.1563 29.0195,-82.1531 29.011,-82.1448 28.9946,-82.1354 28.9785,-82.126 28.9625,-82.1176 28.9462,-82.1109 28.9273,-82.1021 28.8985,-82.0939 28.8712,-82.0889 28.8571)
+LINESTRING(-90.0838 30.4298,-90.0845 30.416,-90.0867 30.4019,-90.0895 30.3878,-90.0922 30.3741,-90.1494 30.0504,-90.1542 30.0245,-90.1559 30.0114,-90.1707 29.907)
+LINESTRING(-89.7425 30.3082,-89.7479 30.2907,-89.7541 30.2718,-89.7612 30.2534,-89.7694 30.2373,-89.7734 30.2329,-89.781 30.2255,-89.7874 30.2194,-89.7939 30.2134,-89.8104 30.1981,-89.8272 30.183,-89.8437 30.1676,-89.8595 30.1518,-89.8785 30.1293,-89.8971 30.1048,-89.9167 30.0814,-89.9387 30.0618,-89.9613 30.0463,-89.9812 30.0333,-89.9998 30.0209,-90.0189 30.0072,-90.0377 29.9961,-90.0539 29.984,-90.0676 29.9697,-90.0793 29.9519,-90.0788 29.9495,-90.0784 29.947,-90.0779 29.9446,-90.0774 29.9421,-90.0746 29.9398,-90.0713 29.9376,-90.0678 29.9359,-90.0643 29.9346,-90.0562 29.9366,-90.0489 29.9361,-90.0421 29.9334,-90.0357 29.9285,-90.036 29.9266,-90.0363 29.9246,-90.0362 29.9226,-90.0358 29.9207,-90.0568 29.9018,-90.0789 29.8886,-90.1035 29.882,-90.1318 29.883)
+LINESTRING(-90.1318 29.883,-90.299 29.9837,-90.3534 30.0151,-90.3725 30.0265,-90.3909 30.0381,-90.4072 30.0494,-90.4198 30.0597,-90.4224 30.063,-90.4274 30.0706,-90.4349 30.0836,-90.4392 30.0887)
+LINESTRING(-93.684 30.1369,-93.6822 30.1377,-93.5905 30.1754,-93.5141 30.1996,-93.4322 30.213,-93.3238 30.2184,-93.315 30.2231,-93.306 30.2271,-93.2968 30.2311,-93.2877 30.2354,-93.2619 30.2369,-93.2343 30.2405,-93.2067 30.2442,-93.1808 30.2459,-93.1746 30.256,-93.1696 30.2612,-93.1535 30.2641,-93.1416 30.263,-93.1298 30.262,-93.1183 30.2618,-93.1119 30.2628,-93.1053 30.2644,-93.0987 30.266,-93.0924 30.2668,-93.0623 30.2669,-93.0322 30.2669,-93.002 30.267,-92.9719 30.2671)
+LINESTRING(-80.8333 28.4483,-80.8341 28.4556,-80.8342 28.4638,-80.8343 28.472,-80.8352 28.4801,-80.8596 28.5126,-80.8746 28.5415,-80.882 28.5724,-80.8838 28.6112,-80.8868 28.6313,-80.8939 28.66,-80.9026 28.6884,-80.91 28.7076,-80.9098 28.7431,-80.9209 28.798,-80.9365 28.8539,-80.9495 28.8925,-80.9612 28.9209,-80.9738 28.9477,-80.9878 28.9739,-81.0039 29.0005,-81.0094 29.0084,-81.016 29.0174,-81.0218 29.0266,-81.0251 29.0346,-81.0303 29.0517,-81.0382 29.0717,-81.0455 29.0899,-81.0488 29.1019,-81.0609 29.1136,-81.0739 29.1233,-81.0859 29.1345,-81.0933 29.1473)
+LINESTRING(-80.7224 28.4068,-80.7173 28.4076,-80.6853 28.4082,-80.664 28.4076)
+LINESTRING(-80.7467 28.403,-80.7224 28.4068)
+LINESTRING(-80.8196 28.4134,-80.8032 28.4111,-80.7814 28.407,-80.7605 28.4034,-80.747 28.403,-80.7467 28.403)
+LINESTRING(-80.8196 28.4134,-80.8236 28.4218,-80.8275 28.4302,-80.8308 28.4386,-80.8333 28.4483)
+LINESTRING(-81.0933 29.1473,-81.1201 29.1344,-81.1664 29.0981,-81.2087 29.0572,-81.2424 29.0213,-81.2677 28.9812,-81.2832 28.9373,-81.3055 28.89,-81.3505 28.8399,-81.3573 28.8149,-81.3739 28.7713,-81.3915 28.7259,-81.4011 28.6951,-81.4005 28.6726,-81.3948 28.6473,-81.388 28.622,-81.3835 28.5992,-81.3753 28.5849,-81.3769 28.5688,-81.3822 28.5521,-81.3901 28.536,-81.3942 28.5351,-81.3986 28.5349,-81.403 28.5351,-81.4072 28.5359,-81.4292 28.5465,-81.467 28.5494,-81.5046 28.5483,-81.5256 28.5471,-81.5379 28.5454,-81.5774 28.5383,-81.6143 28.5303,-81.6475 28.5255,-81.6757 28.5278,-81.6816 28.5333,-81.6888 28.5379,-81.6962 28.5425,-81.7026 28.5481,-81.7303 28.5803,-81.739 28.59,-81.7631 28.6116,-81.7936 28.6343,-81.8249 28.6561,-81.8517 28.6753,-81.8647 28.6864,-81.8774 28.699,-81.8898 28.7119,-81.9019 28.7241,-81.9236 28.7428,-81.9467 28.7603,-81.9702 28.7773,-81.9931 28.7947,-82.002 28.8025,-82.0188 28.8188,-82.0277 28.8266,-82.0425 28.8349,-82.0599 28.8414,-82.0765 28.8482,-82.0889 28.8571)
+LINESTRING(-97.7524 30.2139,-97.7446 30.2302,-97.7403 30.2447,-97.7377 30.2565,-97.7352 30.2644,-97.7274 30.281,-97.7188 30.3021,-97.7104 30.3228,-97.703 30.3378,-97.6956 30.3496,-97.6882 30.3614,-97.6814 30.3735,-97.6752 30.3858,-97.6737 30.3922,-97.674 30.3991,-97.6748 30.4062,-97.6749 30.4128,-97.6727 30.4319,-97.6708 30.4502,-97.6709 30.4686,-97.6749 30.4882,-97.6781 30.496,-97.6818 30.5037,-97.6853 30.5116,-97.6873 30.5201)
+LINESTRING(-80.8333 28.4483,-80.8535 28.453,-80.8884 28.4544,-80.9294 28.4541,-80.9691 28.4539,-81.0404 28.4543,-81.1115 28.4538,-81.1796 28.4529,-81.2421 28.4523,-81.2684 28.4522,-81.2947 28.4522,-81.3213 28.4519,-81.3477 28.4513,-81.3613 28.4496,-81.3797 28.4456,-81.3971 28.44,-81.4078 28.4334)
+LINESTRING(-81.4078 28.4334,-81.4105 28.4303,-81.414 28.4274,-81.4177 28.4249,-81.4215 28.4227,-81.4341 28.422,-81.4469 28.4214,-81.4597 28.4213,-81.4722 28.4221)
+LINESTRING(-81.4722 28.4221,-81.4738 28.4403,-81.4742 28.4495,-81.4737 28.4585,-81.4642 28.4689,-81.452 28.4796,-81.439 28.4902,-81.4274 28.5003,-81.4252 28.5028,-81.423 28.5055,-81.4207 28.5081,-81.4178 28.51,-81.4095 28.5099,-81.4013 28.5107,-81.3935 28.5129,-81.3865 28.5166,-81.3857 28.5267)
+LINESTRING(-95.377 29.8118,-95.3844 29.8284,-95.3937 29.8445,-95.4034 29.8604,-95.4124 29.8765,-95.414 29.8878,-95.4141 29.8936,-95.4142 29.8994,-95.4177 29.9291,-95.4243 29.9584,-95.4313 29.9879,-95.4356 30.0178,-95.4425 30.0875,-95.4516 30.1569,-95.4601 30.2263,-95.4652 30.2957,-95.4705 30.319,-95.482 30.3588,-95.4939 30.3991,-95.5005 30.424,-95.5018 30.4398,-95.5012 30.4561,-95.5003 30.4723,-95.5007 30.4881,-95.5043 30.5702,-95.5075 30.6281,-95.5297 30.6779,-95.5904 30.7357,-95.6104 30.7521,-95.63 30.7689,-95.6494 30.7857,-95.6694 30.802,-95.6858 30.8139,-95.7032 30.8258,-95.7203 30.838,-95.7356 30.8507,-95.7513 30.8671,-95.7664 30.885,-95.781 30.9033,-95.7954 30.9207,-95.8152 30.9329,-95.846 30.9455,-95.8833 30.9683,-95.9232 31.011,-95.9283 31.018,-95.9334 31.025,-95.9385 31.0321,-95.9431 31.0392,-95.9467 31.0468,-95.9502 31.0544,-95.9537 31.0618,-95.9557 31.0687,-95.9586 31.08,-95.961 31.0916,-95.9637 31.1031,-95.9672 31.1141,-95.9758 31.132,-95.9851 31.1481,-95.9938 31.1648,-96.0001 31.1848,-96.001 31.2085,-95.9973 31.2323,-95.9933 31.2558,-95.9938 31.2787,-95.9964 31.2882,-95.9999 31.2979,-96.0035 31.3077,-96.0064 31.3175,-96.0081 31.328,-96.0093 31.3387,-96.0105 31.3492,-96.0124 31.3593,-96.0225 31.384,-96.0382 31.4073,-96.0561 31.4296,-96.0733 31.451)
+LINESTRING(-95.377 29.8118,-95.3751 29.8037,-95.3732 29.7956,-95.3712 29.7875,-95.3693 29.7794)
+LINESTRING(-95.3473 29.7692,-95.3303 29.7701,-95.3143 29.7732,-95.2986 29.7763,-95.2826 29.777,-95.2665 29.7753,-95.2497 29.773,-95.2331 29.7712,-95.2172 29.7709,-95.1979 29.771,-95.176 29.7704,-95.1543 29.7705,-95.1355 29.7728,-95.1149 29.7806,-95.0947 29.7899,-95.074 29.7948,-95.0519 29.7893,-95.0414 29.7908,-95.0334 29.7941,-95.0261 29.7983,-95.0179 29.8028,-95.0072 29.804,-94.9843 29.8061,-94.9648 29.8079,-94.9454 29.8096,-94.8525 29.8264,-94.6765 29.8321,-94.4972 29.8308,-94.3948 29.8272,-94.3308 29.8724,-94.2643 29.9306,-94.201 29.9921,-94.1464 30.0471,-94.1386 30.0586,-94.1361 30.0705,-94.1364 30.0832,-94.137 30.0971,-94.1003 30.0977,-94.0757 30.0985,-94.0503 30.1069,-94.0114 30.1302,-93.9547 30.1312,-93.9091 30.1319,-93.8656 30.1275,-93.8153 30.1138,-93.8057 30.1138,-93.7973 30.1121,-93.789 30.11,-93.7798 30.1085,-93.7522 30.11,-93.7284 30.1168,-93.7058 30.1268,-93.684 30.1369)
+LINESTRING(-95.3473 29.7692,-95.3462 29.7726,-95.3452 29.776,-95.3442 29.7794,-95.3431 29.7829,-95.3349 29.8015,-95.3285 29.8286,-95.3248 29.856,-95.3248 29.8756,-95.3092 29.906,-95.2949 29.9439,-95.2812 29.9832,-95.267 30.018,-95.2546 30.0471,-95.2444 30.0766,-95.2353 30.1066,-95.2264 30.1368,-95.2024 30.1917,-95.1675 30.2473,-95.1283 30.3013,-95.0915 30.3512)
+LINESTRING(-95.3693 29.7794,-95.3638 29.7768,-95.3583 29.7743,-95.3528 29.7718,-95.3473 29.7692)
+LINESTRING(-95.3645 29.7434,-95.3602 29.7498,-95.3559 29.7563,-95.3516 29.7628,-95.3473 29.7692)
+LINESTRING(-95.3693 29.7794,-95.3873 29.7804,-95.4199 29.7809,-95.4469 29.7809,-95.474 29.781,-95.5183 29.7809,-95.5627 29.7806,-95.6071 29.7803,-95.6513 29.7804,-95.6845 29.781,-95.7179 29.7818,-95.7514 29.7819,-95.7845 29.7806,-95.7937 29.7794,-95.8029 29.7776,-95.8123 29.7759,-95.8221 29.7752,-95.8547 29.7761,-95.8879 29.7776,-95.9211 29.7784,-95.9535 29.7769,-95.9755 29.7738,-95.9981 29.7695,-96.0206 29.7657,-96.0425 29.7637,-96.0658 29.7649,-96.0922 29.7682,-96.1206 29.7714,-96.15 29.7726,-96.2093 29.7636,-96.3143 29.7443,-96.4157 29.7247,-96.4643 29.7152,-96.4785 29.712,-96.4924 29.7074,-96.5062 29.7015,-96.5198 29.6946)
+LINESTRING(-81.9698 28.0846,-81.9553 28.0979,-81.9407 28.1121,-81.9256 28.1255,-81.9097 28.1363,-81.8942 28.1414,-81.8667 28.1487,-81.8394 28.1552,-81.8246 28.1581,-81.8136 28.1582,-81.8035 28.1583,-81.7934 28.159,-81.7823 28.1614,-81.7739 28.167,-81.7695 28.1706,-81.7246 28.1919,-81.6834 28.2115,-81.6448 28.2345,-81.6118 28.263,-81.5836 28.2935,-81.5552 28.3238,-81.5269 28.3541,-81.4987 28.3846,-81.4909 28.3927,-81.4819 28.4023,-81.4748 28.4125,-81.4722 28.4221)
+LINESTRING(-96.5198 29.6946,-96.5266 29.691,-96.5361 29.684,-96.5459 29.6771,-96.5535 29.6737,-96.5645 29.6728,-96.5756 29.6719,-96.5867 29.671,-96.5977 29.6701,-96.6501 29.6659,-96.7039 29.6633,-96.7564 29.6652,-96.8047 29.6742,-96.8164 29.6784,-96.8312 29.6841,-96.8456 29.6896,-96.8561 29.6929,-96.8678 29.6949,-96.8788 29.6959,-96.8899 29.6962,-96.9018 29.6962)
+LINESTRING(-81.9698 28.0846,-81.9784 28.0796,-81.9873 28.0754,-81.996 28.0711,-82.0044 28.0658,-82.0135 28.0588,-82.0226 28.0518,-82.0329 28.0447,-82.0406 28.0412,-82.0595 28.0408,-82.0797 28.0424,-82.0998 28.0436,-82.1183 28.0421,-82.1263 28.04,-82.1341 28.0374,-82.1417 28.0346,-82.1494 28.0321,-82.1641 28.03,-82.1836 28.0293,-82.2034 28.0291,-82.2193 28.0283,-82.2467 28.0234,-82.2734 28.0159,-82.3002 28.0081,-82.3279 28.002)
+LINESTRING(-82.0889 28.8571,-82.0872 28.8367,-82.0906 28.8142,-82.095 28.7935,-82.0967 28.7784,-82.1029 28.7702,-82.1092 28.7613,-82.1148 28.7521,-82.1188 28.743,-82.1266 28.7166,-82.1345 28.6904,-82.1451 28.6654,-82.1608 28.6425,-82.1695 28.6343,-82.182 28.6236,-82.1935 28.6138,-82.1993 28.6082,-82.2072 28.5953,-82.2156 28.5845,-82.2253 28.5746,-82.237 28.5647,-82.2385 28.5393,-82.2407 28.5218,-82.2441 28.5051,-82.2496 28.4822,-82.2564 28.4776,-82.2632 28.473,-82.27 28.4684,-82.2769 28.4638,-82.2775 28.4542,-82.2788 28.4446,-82.2805 28.4349,-82.2823 28.4253,-82.2914 28.4188,-82.3004 28.4118,-82.3092 28.4048,-82.318 28.3978,-82.3208 28.3673,-82.3232 28.3371,-82.3249 28.3068,-82.3256 28.2761,-82.3339 28.264,-82.3528 28.2368,-82.3737 28.2061,-82.3878 28.1838,-82.391 28.1779,-82.3942 28.1721,-82.3974 28.1663,-82.4006 28.1605,-82.3704 28.1142,-82.3506 28.0811,-82.3377 28.048,-82.3279 28.002)
+LINESTRING(-95.8534 29.5166,-95.8398 29.5179,-95.8208 29.5219,-95.802 29.5267,-95.7888 29.5304,-95.7388 29.5444,-95.7022 29.5548,-95.6751 29.5638,-95.6539 29.5735,-95.6366 29.5848,-95.6182 29.6,-95.5961 29.6209,-95.5673 29.6491,-95.5476 29.6681,-95.5278 29.6872,-95.5084 29.7066,-95.4901 29.7266,-95.46 29.7294,-95.4299 29.7323,-95.3998 29.735,-95.3696 29.7372,-95.3672 29.7404,-95.3645 29.7434)
+LINESTRING(-82.5399 27.9627,-82.5332 27.9648,-82.5226 27.9675,-82.5165 27.9689,-82.5104 27.9703,-82.4974 27.9754,-82.4777 27.9812,-82.4597 27.986,-82.4519 27.988,-82.4288 27.9904,-82.4061 27.992,-82.3844 27.9933,-82.3641 27.9952,-82.3545 27.9956,-82.3453 27.9962,-82.3364 27.998,-82.3279 28.002)
+LINESTRING(-97.7524 30.2139,-97.7609 30.2025,-97.769 30.1907,-97.7767 30.1786,-97.7838 30.1665,-97.7943 30.1447,-97.8028 30.1217,-97.8113 30.0987,-97.8216 30.0771,-97.8342 30.0563,-97.8475 30.0346,-97.8599 30.0126,-97.8697 29.991,-97.8726 29.9822,-97.8743 29.9729,-97.8746 29.9635,-97.8728 29.9545,-97.8804 29.9418,-97.8877 29.9283,-97.8954 29.9151,-97.9041 29.9033,-97.9487 29.8583,-98.0058 29.8028,-98.0585 29.7471,-98.0899 29.701,-98.1035 29.6944,-98.1179 29.69,-98.1321 29.686,-98.1455 29.6805,-98.1629 29.671,-98.1803 29.6616,-98.1976 29.652,-98.2146 29.6422,-98.2323 29.6322,-98.2505 29.6225,-98.2684 29.6127,-98.2858 29.6026,-98.3118 29.5853,-98.3316 29.5706,-98.3519 29.5568,-98.3793 29.5421,-98.3915 29.5293,-98.3936 29.5122,-98.3997 29.4917,-98.4243 29.4684,-98.4382 29.4607,-98.4522 29.453,-98.4649 29.446,-98.4776 29.439)
+LINESTRING(-82.6435 27.8995,-82.643 27.9001,-82.6088 27.927,-82.5715 27.9488,-82.5425 27.9619,-82.5399 27.9627)
+LINESTRING(-94.9131 29.3093,-94.9243 29.3173,-94.9322 29.3285,-94.9635 29.3493,-94.9944 29.3708,-95.0234 29.3939,-95.0493 29.4198,-95.0791 29.4573,-95.1109 29.5002,-95.1426 29.5416,-95.1723 29.5749,-95.1914 29.5922,-95.2117 29.6095,-95.2314 29.6271,-95.2491 29.6453,-95.2649 29.664,-95.2811 29.6827,-95.2986 29.7005,-95.3182 29.7162,-95.3296 29.7227,-95.3426 29.729,-95.3549 29.7357,-95.3645 29.7434)
+LINESTRING(-98.4776 29.439,-98.4826 29.4357,-98.4876 29.4323,-98.4925 29.4289,-98.4975 29.4256)
+LINESTRING(-100.643 30.5781,-100.619 30.5738,-100.594 30.5723,-100.569 30.5719,-100.544 30.5709,-100.512 30.5636,-100.478 30.5493,-100.446 30.5321,-100.417 30.5161,-100.382 30.4981,-100.347 30.4816,-100.31 30.4655,-100.268 30.4488,-100.242 30.4378,-100.23 30.4335,-100.221 30.4309,-100.146 30.4218,-100.085 30.4233,-100.026 30.4344,-99.9569 30.4543,-99.9276 30.4649,-99.9 30.4758,-99.8694 30.4842,-99.8314 30.4875,-99.7974 30.4811,-99.7659 30.4659,-99.7363 30.4481,-99.7081 30.4337,-99.6878 30.4255,-99.6625 30.4163,-99.6367 30.405,-99.615 30.3909,-99.598 30.3716,-99.5836 30.3496,-99.5694 30.328,-99.5525 30.3097,-99.5208 30.2887,-99.4708 30.259,-99.42 30.2299,-99.3855 30.211,-99.3599 30.2012,-99.3313 30.1944,-99.3032 30.1875,-99.2785 30.1778,-99.2632 30.1672,-99.2491 30.1546,-99.2354 30.1419,-99.2209 30.1312,-99.1936 30.1157,-99.1661 30.1018,-99.1375 30.0894,-99.1069 30.0782,-99.0944 30.0754,-99.0807 30.074,-99.0666 30.0725,-99.0532 30.0695,-99.0221 30.0555,-98.9743 30.031,-98.9279 30.0054,-98.9013 29.9884,-98.8911 29.9764,-98.8818 29.9613,-98.8726 29.9458,-98.8625 29.9322,-98.8492 29.9189,-98.8345 29.906,-98.8198 29.8931,-98.8059 29.8798,-98.8003 29.8727,-98.7957 29.8648,-98.7911 29.8569,-98.7858 29.8498,-98.7786 29.8427,-98.7704 29.8353,-98.7541 29.8211,-98.7552 29.798,-98.7478 29.7866,-98.7339 29.7788,-98.7155 29.7661,-98.6996 29.7518,-98.6835 29.7365,-98.6688 29.7202,-98.6571 29.7031,-98.6352 29.6636,-98.6149 29.6249,-98.5972 29.5857,-98.5832 29.5441,-98.5624 29.5243,-98.5505 29.5065,-98.5396 29.4919,-98.5219 29.4818,-98.5181 29.4729,-98.5155 29.4634,-98.5139 29.4537,-98.5126 29.4442,-98.5103 29.4418,-98.5068 29.4376,-98.4975 29.4256)
+LINESTRING(-94.8255 29.2822,-94.8368 29.2825,-94.8514 29.2841,-94.86 29.2856)
+LINESTRING(-96.9018 29.6962,-96.9387 29.6942,-96.979 29.6941,-97.0193 29.6956,-97.0562 29.6986,-97.0691 29.7005,-97.0819 29.7027,-97.0948 29.7045,-97.108 29.7051,-97.1348 29.7042,-97.162 29.7029,-97.189 29.7012,-97.2159 29.6992,-97.2344 29.6958,-97.253 29.6898,-97.2714 29.6829,-97.2896 29.6767,-97.319 29.6696,-97.3519 29.6638,-97.3854 29.6597,-97.4163 29.6578,-97.468 29.6574,-97.5422 29.657,-97.614 29.6552,-97.6585 29.6509,-97.7121 29.6371,-97.7878 29.6191,-97.8644 29.6042,-97.9209 29.5998,-97.9265 29.6004,-97.9331 29.6011,-97.9396 29.6011,-97.9443 29.5999,-97.9722 29.5989,-98.006 29.5818,-98.037 29.5602,-98.0563 29.546,-98.0634 29.5437,-98.0705 29.5415,-98.0777 29.5393,-98.0848 29.537,-98.1333 29.5205,-98.1819 29.5039,-98.2302 29.487,-98.2786 29.4695,-98.2844 29.4678,-98.2902 29.4661,-98.3218 29.4575,-98.3541 29.449,-98.3862 29.44,-98.4171 29.4299,-98.4266 29.4227,-98.4386 29.4112,-98.4543 29.4008,-98.4753 29.3973)
+LINESTRING(-98.4975 29.4256,-98.4907 29.4165,-98.4838 29.4075,-98.4785 29.4008,-98.4753 29.3973)
+LINESTRING(-98.4975 29.4256,-98.5011 29.4182,-98.5047 29.4108,-98.5083 29.4034,-98.5119 29.396)
+LINESTRING(-80.8196 28.4134,-80.8114 28.3809,-80.7959 28.3388,-80.7775 28.3007,-80.7606 28.2801,-80.7385 28.2226,-80.7217 28.1864,-80.7104 28.1526,-80.705 28.1023,-80.7049 28.0944,-80.7049 28.0865,-80.7042 28.0779,-80.702 28.0713,-80.6944 28.0645,-80.6822 28.0571,-80.6699 28.0499,-80.6619 28.0433,-80.647 28.0224,-80.6321 28.0015,-80.6233 27.9882,-80.6171 27.9767,-80.6119 27.9632,-80.6071 27.9457,-80.6012 27.9209,-80.5925 27.8855,-80.5921 27.8761,-80.5923 27.8662,-80.5525 27.8172,-80.5471 27.7919,-80.5521 27.7662,-80.5438 27.7163,-80.5372 27.6986,-80.5293 27.6794,-80.5221 27.6601,-80.5176 27.6421,-80.5171 27.6359,-80.5165 27.6296,-80.5158 27.6224,-80.5133 27.6143,-80.5094 27.6076,-80.4936 27.583,-80.4781 27.5631,-80.4585 27.5452,-80.4433 27.5263,-80.4369 27.5127,-80.4319 27.5001,-80.4274 27.4889,-80.4224 27.4796,-80.4129 27.4736,-80.4026 27.4681,-80.3914 27.4589,-80.3849 27.446,-80.3834 27.4279,-80.3863 27.4141,-80.3935 27.3992)
+LINESTRING(-80.3935 27.3992,-80.4104 27.4197,-80.4288 27.442,-80.4493 27.4646,-80.4678 27.4862,-80.489 27.4878,-80.5183 27.4871,-80.5525 27.4881,-80.5709 27.4909,-80.5912 27.514,-80.6051 27.5282,-80.6198 27.5414,-80.6428 27.5614,-80.7708 27.5645,-80.7859 27.5671,-80.7968 27.5735,-80.8054 27.5827,-80.8137 27.5939,-80.8324 27.6184,-80.8497 27.6396,-80.8679 27.6598,-80.8895 27.6814,-80.8944 27.6901,-80.8956 27.6998,-80.8973 27.7102,-80.904 27.7205,-80.928 27.742,-80.9536 27.7637,-80.9784 27.7859,-81 27.8091,-81.005 27.8208,-81.0065 27.835,-81.0078 27.8498,-81.0124 27.8633,-81.0204 27.8724,-81.0288 27.8808,-81.0647 27.9274,-81.0796 27.9444,-81.0969 27.9612,-81.1147 27.9777,-81.1314 27.9937,-81.1439 28.0027,-81.1594 28.0104,-81.176 28.0185,-81.192 28.0289,-81.2759 28.0941,-81.2866 28.1234,-81.2945 28.1523,-81.301 28.1815,-81.3072 28.2116,-81.3161 28.2222,-81.3239 28.2363,-81.3291 28.2512,-81.3303 28.2642,-81.335 28.2723,-81.337 28.2813,-81.3511 28.2959,-81.3612 28.306,-81.3675 28.3138,-81.381 28.3405,-81.3886 28.3596,-81.3921 28.379,-81.3933 28.4069,-81.395 28.4128,-81.3989 28.4208,-81.4078 28.4334)
+LINESTRING(-82.6593 27.7775,-82.6604 27.7901,-82.6627 27.8026,-82.6651 27.8149,-82.6663 27.8269,-82.6656 27.8378,-82.664 27.8485,-82.6627 27.8596,-82.663 27.8715,-82.6435 27.8995)
+LINESTRING(-82.6778 27.6997,-82.6779 27.7046,-82.6758 27.7066,-82.6738 27.7087,-82.6723 27.7214,-82.6708 27.7342,-82.6693 27.7469,-82.6678 27.7597,-82.6659 27.7615,-82.6639 27.7633,-82.662 27.7651,-82.66 27.767,-82.6593 27.7695,-82.6591 27.7722,-82.6592 27.7749,-82.6593 27.7775)
+LINESTRING(-82.3279 28.002,-82.3266 27.9781,-82.3281 27.9527,-82.3333 27.9281,-82.3432 27.9066,-82.3448 27.9033,-82.3464 27.8999,-82.348 27.8966,-82.3496 27.8933,-82.348 27.8627,-82.3482 27.831,-82.3522 27.7999,-82.3622 27.7711,-82.3718 27.7562,-82.379 27.7476,-82.3834 27.7369,-82.3843 27.7157,-82.3914 27.7092,-82.3998 27.7047,-82.4084 27.7008,-82.4165 27.6959,-82.4234 27.6881,-82.4294 27.6776,-82.4352 27.6669,-82.4413 27.6581,-82.4455 27.6548,-82.4508 27.6523,-82.4561 27.65,-82.4605 27.6473,-82.4751 27.6346,-82.4907 27.6203,-82.5047 27.605,-82.5148 27.5896)
+LINESTRING(-82.5148 27.5896,-82.5315 27.5887,-82.5487 27.5876,-82.5657 27.5868,-82.5798 27.5868)
+LINESTRING(-82.5798 27.5868,-82.5824 27.5868,-82.61 27.5891,-82.6305 27.5953,-82.6471 27.6084,-82.6632 27.6313,-82.6675 27.6383,-82.6718 27.6454,-82.6754 27.6527,-82.6776 27.6604,-82.6774 27.6672,-82.6774 27.6818,-82.6777 27.6932,-82.6778 27.6997)
+LINESTRING(-80.3935 27.3992,-80.388 27.3882,-80.3818 27.3764,-80.3763 27.3646,-80.3729 27.3537,-80.3725 27.3417,-80.3735 27.3268,-80.3742 27.3122,-80.3726 27.3012,-80.369 27.2898,-80.3663 27.2778,-80.3634 27.2658,-80.3597 27.2542,-80.3415 27.2136,-80.326 27.1889,-80.3075 27.1654,-80.2805 27.1281,-80.2669 27.1032,-80.2614 27.0848,-80.2588 27.0638,-80.2541 27.0314,-80.2418 27.0202,-80.2288 27.0094,-80.2162 26.9982,-80.2051 26.9862,-80.1881 26.9626,-80.1761 26.9414,-80.1683 26.9219,-80.164 26.9032)
+LINESTRING(-80.164 26.9032,-80.1348 26.8478,-80.1163 26.7922,-80.105 26.7358,-80.098 26.6784)
+LINESTRING(-80.164 26.9032,-80.1625 26.8804,-80.1635 26.8561,-80.1659 26.8289,-80.1683 26.7972,-80.1709 26.742,-80.1736 26.7221,-80.1822 26.7108,-80.2029 26.6811)
+LINESTRING(-82.0365 26.9751,-82.0378 26.9792,-82.0393 26.9928,-82.042 27.0066,-82.0493 27.0209,-82.0685 27.0452,-82.093 27.0709,-82.1216 27.0913,-82.153 27.0998,-82.1863 27.0999,-82.2197 27.1,-82.2625 27.1004,-82.2859 27.1016,-82.2947 27.1047,-82.3035 27.1088,-82.3126 27.1125,-82.3218 27.1142,-82.3421 27.1125,-82.3627 27.1102,-82.382 27.1125,-82.3985 27.1246,-82.4074 27.1358,-82.4168 27.1472,-82.4259 27.1588,-82.4338 27.1704,-82.4387 27.184,-82.4417 27.2007,-82.446 27.2169,-82.4547 27.2292,-82.4537 27.2363,-82.4521 27.243,-82.4504 27.2497,-82.4486 27.2563,-82.4468 27.2715,-82.447 27.2884,-82.448 27.3055,-82.4484 27.3213,-82.4475 27.3374,-82.446 27.3544,-82.4455 27.3714,-82.4472 27.3872,-82.45 27.3965,-82.4533 27.4056,-82.4566 27.4148,-82.4588 27.4243,-82.4594 27.4352,-82.4588 27.4475,-82.4586 27.4596,-82.4601 27.4695,-82.4729 27.4929,-82.4889 27.509,-82.503 27.5229,-82.51 27.5393,-82.5112 27.5519,-82.5124 27.5644,-82.5136 27.577,-82.5148 27.5896)
+LINESTRING(-82.0258 26.945,-82.0278 26.9511,-82.0338 26.9657,-82.0365 26.9751)
+LINESTRING(-98.4753 29.3973,-98.4685 29.3845,-98.4572 29.3747,-98.4436 29.3662,-98.43 29.3577,-98.4228 29.3472,-98.4166 29.3313,-98.4096 29.3156,-98.4001 29.3059,-98.4056 29.2675,-98.4128 29.2159,-98.4232 29.1673,-98.4383 29.1376,-98.4393 29.1102,-98.4373 29.0828,-98.4349 29.0555,-98.4346 29.0284,-98.4369 28.9979,-98.4393 28.9678,-98.4406 28.9377,-98.4394 28.9068,-98.4098 28.8869,-98.3892 28.8601,-98.3715 28.831,-98.3509 28.804,-98.3382 28.7941,-98.324 28.786,-98.3105 28.7776,-98.2997 28.767,-98.2905 28.7477,-98.2839 28.7243,-98.2781 28.7,-98.2709 28.6779,-98.2659 28.6701,-98.2593 28.6639,-98.2523 28.6581,-98.2461 28.6513,-98.2425 28.6446,-98.2403 28.6378,-98.2384 28.6311,-98.2357 28.6245,-98.2264 28.6119,-98.2144 28.5999,-98.203 28.5878,-98.1953 28.5746,-98.1917 28.5617,-98.189 28.5481,-98.1866 28.5345,-98.1835 28.5211,-98.1744 28.5127,-98.1652 28.5043,-98.1561 28.4959,-98.147 28.4874,-98.137 28.4775,-98.1276 28.4677,-98.1175 28.4583,-98.1053 28.4499,-98.0986 28.4473,-98.0926 28.4428,-98.0735 28.4181,-98.0529 28.3911,-98.0341 28.3629,-98.0206 28.3344)
+LINESTRING(-80.098 26.6784,-80.0977 26.6764,-80.098 26.6558,-80.0983 26.6292,-80.1004 26.6041,-80.1058 26.5879,-80.1093 26.5879,-80.1128 26.5878,-80.1163 26.5878,-80.1198 26.5877,-80.1201 26.5804,-80.1204 26.5732,-80.1208 26.5659,-80.1211 26.5586,-80.122 26.5558,-80.123 26.5529,-80.124 26.55,-80.1249 26.5471,-80.1254 26.5289,-80.1253 26.5109,-80.1246 26.4929,-80.1233 26.4747,-80.1222 26.4495,-80.1221 26.4243,-80.1222 26.3993,-80.1213 26.3743,-80.1195 26.36,-80.1171 26.3456,-80.1152 26.331,-80.1153 26.3162,-80.1175 26.3025,-80.122 26.2849,-80.128 26.2678,-80.1351 26.2554,-80.1346 26.2441,-80.1347 26.2328,-80.135 26.2214,-80.1351 26.2101,-80.1529 26.1862,-80.1639 26.1523,-80.1688 26.116,-80.1684 26.0853)
+LINESTRING(-80.2465 26.0952,-80.227 26.0927,-80.2075 26.0903,-80.1879 26.0878,-80.1684 26.0853)
+LINESTRING(-80.2465 26.0952,-80.2493 26.1234,-80.2507 26.1531,-80.2469 26.1816,-80.2342 26.2058,-80.2247 26.2163,-80.2127 26.2298,-80.2019 26.2436,-80.1957 26.2553,-80.1966 26.2677,-80.1974 26.2801,-80.198 26.2925,-80.1986 26.305,-80.2001 26.3667,-80.2012 26.4281,-80.2022 26.4894,-80.2035 26.5507,-80.2038 26.5853,-80.2036 26.6267,-80.2032 26.6539,-80.2029 26.6811)
+LINESTRING(-80.4419 26.1461,-80.393 26.1334,-80.3442 26.1207,-80.2954 26.108,-80.2465 26.0952)
+LINESTRING(-80.2308 25.9383,-80.2419 25.9586,-80.2488 25.9805,-80.2499 26.0002,-80.2435 26.0141,-80.2442 26.0343,-80.245 26.0546,-80.2458 26.0749,-80.2465 26.0952)
+LINESTRING(-80.1684 26.0853,-80.1676 26.0658,-80.1672 26.0495,-80.1683 26.0328,-80.172 26.012,-80.1731 25.9985,-80.172 25.9843,-80.1707 25.9698,-80.1715 25.9559,-80.1769 25.9523,-80.1837 25.9471,-80.1898 25.9412,-80.193 25.9358,-80.1994 25.9331,-80.2055 25.9296,-80.2113 25.9256,-80.2157 25.9223)
+LINESTRING(-80.2157 25.9223,-80.2194 25.9252,-80.2233 25.929,-80.2271 25.9334,-80.2308 25.9383)
+LINESTRING(-97.6306 27.9023,-97.6409 27.9212,-97.6525 27.9424,-97.6651 27.9629,-97.6784 27.9797,-97.7046 28.003,-97.7331 28.0245,-97.7614 28.0464,-97.7867 28.0709,-97.7945 28.0814,-97.8014 28.0928,-97.8082 28.1041,-97.816 28.1143,-97.8253 28.1235,-97.8355 28.1323,-97.8456 28.1411,-97.8547 28.1505,-97.8727 28.1739,-97.8878 28.198,-97.9019 28.2223,-97.9168 28.2464,-97.9392 28.2697,-97.9681 28.2902,-97.9972 28.3108,-98.0206 28.3344)
+LINESTRING(-97.291 27.9273,-97.3006 27.9123,-97.31 27.8974,-97.3203 27.8831,-97.3223 27.881)
+LINESTRING(-81.6722 26.1552,-81.6325 26.1544,-81.5928 26.1535,-81.5531 26.1529,-81.5135 26.1529,-81.4634 26.1542,-81.3848 26.1564,-81.3075 26.1575,-81.2615 26.1558,-81.2564 26.1582,-81.2515 26.1609,-81.2467 26.1639,-81.2425 26.1673,-81.1876 26.1673,-81.1328 26.1678,-81.078 26.1686,-81.0232 26.1697,-80.9846 26.1705,-80.946 26.1713,-80.9074 26.1721,-80.8688 26.1729,-80.8257 26.1679,-80.7821 26.1597,-80.7386 26.1514,-80.6954 26.1462,-80.6326 26.144,-80.5687 26.1443,-80.5048 26.1454,-80.4419 26.1461)
+LINESTRING(-81.6722 26.1552,-81.6866 26.1603,-81.6997 26.1629,-81.7127 26.1645,-81.7268 26.1666,-81.7324 26.1707,-81.7361 26.1967,-81.7378 26.2177,-81.7401 26.2379,-81.7436 26.259,-81.7446 26.2718,-81.7441 26.2852,-81.7436 26.2986,-81.7447 26.3117,-81.7471 26.3207,-81.7501 26.3293,-81.7525 26.338,-81.7534 26.3475,-81.7584 26.3537,-81.7641 26.3616,-81.7695 26.3696,-81.7734 26.3762,-81.7734 26.3831,-81.7735 26.39,-81.7757 26.4113,-81.7807 26.4311,-81.7868 26.4507,-81.7922 26.4713,-81.7952 26.4943,-81.7956 26.5175,-81.7946 26.5407,-81.7933 26.5638,-81.7951 26.5803,-81.7998 26.5964,-81.8043 26.6119,-81.8054 26.6269,-81.8031 26.6436,-81.8008 26.66,-81.7993 26.6766,-81.7995 26.6942,-81.8072 26.712,-81.8171 26.7202,-81.8288 26.725,-81.8418 26.7329,-81.8584 26.7477,-81.8743 26.7628,-81.8898 26.7781,-81.9052 26.7938,-81.9157 26.8027,-81.9283 26.8115,-81.9414 26.8204,-81.9531 26.8295,-81.9612 26.8366,-81.9685 26.8444,-81.9705 26.8504,-81.972 26.8565,-81.9735 26.8626,-81.9755 26.8686,-81.981 26.8752,-81.9912 26.8853,-82.0023 26.8966,-82.0102 26.9066,-82.0172 26.9209,-82.0227 26.9359,-82.0258 26.945)
+LINESTRING(-97.6229 27.8662,-97.6255 27.8742,-97.6269 27.8836,-97.6282 27.8933,-97.6306 27.9023)
+LINESTRING(-97.3223 27.881,-97.3329 27.8699,-97.3537 27.8553,-97.3754 27.841,-97.3917 27.8228,-97.3925 27.8184)
+LINESTRING(-80.2157 25.9223,-80.2167 25.9214,-80.216 25.8877,-80.2159 25.8526,-80.2142 25.8175,-80.2091 25.784)
+LINESTRING(-80.3463 25.7817,-80.339 25.7816,-80.3318 25.7815,-80.3263 25.7813,-80.3207 25.7811,-80.296 25.7839,-80.2709 25.7855,-80.2457 25.785,-80.2208 25.7816,-80.2179 25.7822,-80.2149 25.7828,-80.212 25.7834,-80.2091 25.784)
+LINESTRING(-80.2308 25.9383,-80.2609 25.9382,-80.291 25.9381,-80.3211 25.9381,-80.3513 25.938,-80.3529 25.9363,-80.3546 25.9346,-80.3517 25.897,-80.3493 25.8582,-80.3475 25.8194,-80.3463 25.7817)
+LINESTRING(-80.3852 25.7755,-80.3782 25.7786,-80.3687 25.7805,-80.3577 25.7814,-80.3463 25.7817)
+LINESTRING(-99.4427 27.7668,-99.4299 27.7701,-99.4223 27.7727,-99.3902 27.8921,-99.3601 28.0086,-99.3276 28.1246,-99.2935 28.2405,-99.2874 28.2603,-99.2811 28.28,-99.2753 28.2998,-99.2706 28.3199,-99.2802 28.3477,-99.2724 28.3832,-99.2576 28.4193,-99.2461 28.4487,-99.2453 28.4542,-99.2446 28.4597,-99.2439 28.4651,-99.2431 28.4706,-99.2425 28.4761,-99.2419 28.4816,-99.2402 28.4925,-99.2377 28.5011,-99.2347 28.5096,-99.2259 28.5362,-99.2172 28.5631,-99.2092 28.5901,-99.2028 28.6172,-99.2017 28.6293,-99.2019 28.6417,-99.201 28.6541,-99.1966 28.6658,-99.1877 28.6778,-99.1791 28.6873,-99.1711 28.6982,-99.164 28.7143,-99.1527 28.7486,-99.1414 28.783,-99.1302 28.8173,-99.1189 28.8516,-99.1168 28.8643,-99.1178 28.8753,-99.1193 28.8861,-99.1184 28.898,-99.1124 28.9124,-99.1029 28.9261,-99.0927 28.9396,-99.0845 28.9537,-99.0764 28.9721,-99.0682 28.9905,-99.0601 29.0089,-99.0519 29.0273,-99.0206 29.044,-98.9872 29.0591,-98.9547 29.0753,-98.9262 29.0949,-98.9127 29.0958,-98.9011 29.0999,-98.8909 29.1063,-98.8816 29.1142,-98.8566 29.1355,-98.8184 29.1663,-98.7805 29.1954,-98.7562 29.2115,-98.7258 29.2232,-98.6942 29.2331,-98.6628 29.2436,-98.6328 29.2568,-98.6197 29.2658,-98.6087 29.2763,-98.5982 29.2866,-98.5867 29.2952,-98.5696 29.3087,-98.5559 29.3254,-98.5424 29.3429,-98.5262 29.359,-98.5195 29.3666,-98.5151 29.3761,-98.5128 29.3863,-98.5119 29.396)
+LINESTRING(-99.4788 27.5302,-99.4769 27.5486,-99.4768 27.5653,-99.4789 27.5797,-99.4838 27.5914,-99.4882 27.5953,-99.4926 27.5992,-99.497 27.6031,-99.5015 27.607,-99.5002 27.6611,-99.4824 27.6991,-99.4596 27.7309,-99.4427 27.7668)
+LINESTRING(-97.7192 26.1891,-97.7166 26.2308,-97.7184 26.2666,-97.7293 26.2947,-97.754 26.3136)
+LINESTRING(-98.249 26.1865,-98.2576 26.1877,-98.2818 26.1909,-98.3061 26.1942,-98.3304 26.1975,-98.3369 26.2033,-98.3432 26.2093,-98.3494 26.2154,-98.3556 26.2215)
+LINESTRING(-98.1805 26.2075,-98.1962 26.2045,-98.2066 26.1955,-98.2171 26.1867,-98.2333 26.1844,-98.249 26.1865)
+LINESTRING(-97.7192 26.1891,-97.7352 26.1894,-97.7544 26.1902,-97.7735 26.1907,-97.7892 26.1897,-97.7911 26.1891,-97.7926 26.1883,-97.7941 26.1872,-97.7957 26.1861,-97.8083 26.1798,-97.818 26.1763,-97.8281 26.1739,-97.8416 26.1709,-97.8436 26.17,-97.846 26.1685,-97.8484 26.1671,-97.8503 26.1665,-97.8734 26.1662,-97.8974 26.1659,-97.9212 26.164,-97.9437 26.1591,-97.9504 26.1628,-97.9572 26.1665,-97.9655 26.1706,-97.971 26.1726,-98.0237 26.1788,-98.0731 26.187,-98.1222 26.1968,-98.1739 26.2078,-98.1754 26.208,-98.1772 26.2078,-98.1788 26.2077,-98.1805 26.2075)
+LINESTRING(-65.6912 18.316,-65.6918 18.317,-65.6925 18.3181,-65.6931 18.3191,-65.6938 18.3201,-65.6993 18.328,-65.7056 18.3368,-65.7128 18.3448,-65.7209 18.3501,-65.7408 18.3559,-65.7623 18.3597,-65.7839 18.3623,-65.8044 18.3643,-65.8164 18.3655,-65.8284 18.3666,-65.8404 18.3678,-65.8524 18.3689,-65.8549 18.3692,-65.8574 18.3694,-65.8599 18.3696,-65.8625 18.3699,-65.8787 18.3707,-65.895 18.3715,-65.9113 18.3723,-65.9275 18.3731)
+LINESTRING(-66.0832 18.3799,-66.0856 18.3613,-66.0877 18.3452,-66.083 18.3315,-66.0647 18.3202,-66.0585 18.312,-66.0562 18.2975,-66.0565 18.2815,-66.0581 18.269)
+LINESTRING(-66.4942 18.4194,-66.4642 18.4264,-66.4281 18.4347,-66.3919 18.4394,-66.3618 18.4358,-66.3553 18.431,-66.3474 18.4224,-66.3388 18.413,-66.3305 18.4056)
+LINESTRING(-65.8567 18.1457,-65.8675 18.1566,-65.8789 18.165,-65.8909 18.1726,-65.9036 18.1811,-65.9178 18.1916,-65.928 18.2005,-65.936 18.2114,-65.944 18.2278,-65.9458 18.2316,-65.9471 18.234,-65.9489 18.236,-65.9523 18.2387,-65.9547 18.2402,-65.9571 18.2418,-65.9595 18.2434,-65.962 18.245,-65.9924 18.2502,-66.0126 18.2462,-66.0315 18.2476,-66.0581 18.269)
+LINESTRING(-66.2977 18.0013,-66.2684 18.0065,-66.2572 18.0165,-66.2545 18.0325,-66.2503 18.0562,-66.2467 18.0625,-66.2412 18.0676,-66.2363 18.0709,-66.2341 18.0721,-66.2246 18.0827,-66.2064 18.0942,-66.1868 18.1048,-66.173 18.1131,-66.1583 18.1229,-66.1452 18.134,-66.1326 18.1455,-66.1191 18.1562,-66.1041 18.1653,-66.0898 18.1741,-66.0779 18.1849,-66.07 18.2002,-66.0695 18.2021,-66.0691 18.204,-66.0687 18.2059,-66.0682 18.2079,-66.0674 18.211,-66.0667 18.2142,-66.0659 18.2174,-66.0651 18.2205,-66.0643 18.2238,-66.0635 18.227,-66.063 18.2303,-66.0625 18.2337,-66.0614 18.2425,-66.0603 18.2513,-66.0592 18.2602,-66.0581 18.269)
+LINESTRING(-66.2977 18.0013,-66.3024 18.0016,-66.3066 18.0032,-66.3108 18.0055,-66.3153 18.0075,-66.3276 18.0123,-66.34 18.017,-66.3524 18.0217,-66.3648 18.0264,-66.3986 18.0378,-66.4338 18.047,-66.4692 18.0536,-66.5039 18.0571,-66.526 18.0553,-66.5468 18.0489,-66.5646 18.0377,-66.5778 18.0213,-66.5845 18.0202,-66.5911 18.0192,-66.5978 18.0181,-66.6045 18.017,-66.608 18.0164,-66.6115 18.0159,-66.615 18.0153,-66.6185 18.0147,-66.6327 18.0067,-66.647 17.9975,-66.6623 17.9914,-66.6793 17.9929,-66.7014 18.0025,-66.7308 18.017,-66.7593 18.0329,-66.7787 18.0466,-66.7929 18.0481,-66.8062 18.0468,-66.8189 18.0432,-66.8317 18.038,-66.8373 18.0353,-66.843 18.0326,-66.8487 18.03,-66.8544 18.0273,-66.8698 18.0205,-66.8847 18.0161,-66.9003 18.0154,-66.9178 18.0195,-66.9442 18.0337,-66.9662 18.0524,-66.9881 18.0724,-67.0141 18.0905,-67.0175 18.0923,-67.0209 18.0941,-67.0244 18.0959,-67.0278 18.0976,-67.0488 18.1082,-67.068 18.1186,-67.0864 18.1305,-67.105 18.1452,-67.1138 18.1638,-67.1144 18.1768,-67.1106 18.1891,-67.1061 18.2055,-67.1065 18.2129,-67.1098 18.219,-67.1149 18.2245,-67.1209 18.2298,-67.1234 18.2353,-67.1247 18.239,-67.125 18.2426,-67.1246 18.2483)
+LINESTRING(-89.0047 40.5367,-89.0074 40.5726,-89.0076 40.6107,-89.0138 40.6478,-89.0346 40.6806,-89.0342 40.7277,-89.0363 40.7747,-89.039 40.8218,-89.0407 40.8689,-89.0435 40.8708,-89.0464 40.8727,-89.0493 40.8747,-89.0522 40.8766,-89.053 40.9149,-89.0543 40.9531,-89.0564 40.9914,-89.0597 41.0295,-89.0618 41.0308,-89.064 41.0321,-89.0661 41.0333,-89.0682 41.0346,-89.0735 41.103,-89.0806 41.1743,-89.0857 41.245,-89.0855 41.3114,-89.0851 41.313,-89.0846 41.3146,-89.0842 41.3162,-89.0838 41.3178,-89.081 41.3238,-89.0758 41.3291,-89.0701 41.3342,-89.0657 41.3395,-89.0633 41.3457,-89.0619 41.3526,-89.0605 41.3596,-89.0582 41.3662)
+LINESTRING(-88.1968 41.487,-88.1969 41.4445,-88.192 41.4004,-88.1885 41.3567,-88.1926 41.3149,-88.2229 41.2992,-88.2367 41.2805,-88.2437 41.2618,-88.2538 41.2461,-88.2694 41.2334,-88.286 41.2211,-88.3024 41.2087,-88.3176 41.1954,-88.3214 41.1908,-88.3247 41.1857,-88.3319 41.176,-88.3511 41.1594,-88.3725 41.1427,-88.3948 41.1265,-88.4165 41.1115,-88.4294 41.1103,-88.4378 41.105,-88.4426 41.0969,-88.4449 41.0872,-88.4635 41.0712,-88.4816 41.0552,-88.4993 41.0389,-88.5221 41.0178,-88.5349 41.0103,-88.5393 41.0054,-88.5405 40.9997,-88.5419 40.9945,-88.5666 40.9692,-88.5863 40.9518,-88.6092 40.9369,-88.6432 40.9194,-88.6698 40.9016,-88.6752 40.8859,-88.6741 40.8681,-88.6812 40.8439,-88.6919 40.8222,-88.7021 40.7996,-88.7138 40.7776,-88.7289 40.758,-88.7383 40.7452,-88.7398 40.736,-88.7393 40.7275,-88.7427 40.7164,-88.7505 40.7028,-88.7594 40.6889,-88.7695 40.6746,-88.7809 40.6595,-88.7881 40.659,-88.7964 40.6577,-88.8106 40.6528,-88.8153 40.6447,-88.8184 40.6357,-88.8215 40.6269,-88.8261 40.6193,-88.8388 40.6084,-88.8578 40.5958,-88.8781 40.5847,-88.8949 40.578,-88.9058 40.5665,-88.9178 40.5566,-88.9309 40.5475,-88.9454 40.5387,-88.9602 40.5381,-88.9751 40.5377,-88.9899 40.5374,-89.0271 40.5359)
+LINESTRING(-76.0036 44.3458,-75.9982 44.3216,-75.9866 44.3056)
+LINESTRING(-70.776 43.0827,-70.7629 43.0942,-70.7622 43.0946)
+LINESTRING(-70.8583 42.9591,-70.8512 42.9927,-70.8275 43.0301,-70.7954 43.0657,-70.776 43.0827)
+LINESTRING(-71.4081 41.8176,-71.3989 41.8197,-71.3777 41.8176,-71.3736 41.8166)
+LINESTRING(-71.1643 41.7023,-71.1401 41.6824,-71.1092 41.6647,-71.0539 41.6518,-71.0344 41.6501,-70.9849 41.6475,-70.9434 41.6508,-70.9177 41.6561,-70.886 41.6613,-70.8478 41.6772,-70.8016 41.7035,-70.7841 41.7186,-70.7704 41.7352,-70.7553 41.7547,-70.7387 41.7739,-70.7366 41.7762,-70.7346 41.7786,-70.7326 41.781,-70.7306 41.7833)
+LINESTRING(-73.8874 40.6257,-73.8915 40.6196,-73.8918 40.619,-73.8972 40.6135,-73.9097 40.603,-73.9292 40.5903,-73.9433 40.5863,-73.9494 40.5852,-73.9497 40.5852,-73.976 40.5841,-73.9908 40.5907,-74.0091 40.5997,-74.0201 40.6054,-74.021 40.6058)
+LINESTRING(-74.0268 40.6161,-74.0252 40.6178,-74.0206 40.6254,-74.0188 40.6333,-74.0215 40.6413,-74.0133 40.6472,-74.0057 40.6526,-73.9997 40.6589,-73.9961 40.6669,-73.9913 40.6783,-73.9795 40.6949,-73.9896 40.7086,-73.9982 40.7168)
+LINESTRING(-73.9605 40.7661,-73.9789 40.7501,-73.9806 40.7484)
+LINESTRING(-73.9806 40.7484,-74.0085 40.7227)
+LINESTRING(-73.97 40.7447,-73.9806 40.7484)
+LINESTRING(-73.7215 41.0234,-73.7236 40.9975,-73.7337 40.9755,-73.7507 40.9557,-73.7695 40.9367,-73.779 40.9274,-73.7946 40.9142,-73.8115 40.9032,-73.825 40.9005,-73.8379 40.8818,-73.8616 40.8619,-73.8842 40.846,-73.8944 40.8395,-73.905 40.8301,-73.9165 40.8172,-73.9257 40.8058,-73.9295 40.8008,-73.9605 40.7661)
+LINESTRING(-74.2488 40.5247,-74.2334 40.5223,-74.2071 40.5215)
+LINESTRING(-74.1629 40.6155,-74.1535 40.6115,-74.1296 40.608,-74.0937 40.6066,-74.0571 40.6075,-74.047 40.6089)
+LINESTRING(-74.2071 40.5215,-74.2035 40.532,-74.1994 40.5415,-74.1899 40.5487,-74.1817 40.561,-74.1779 40.5783,-74.1721 40.6017,-74.1629 40.6155)
+LINESTRING(-76.5621 39.2702,-76.5628 39.2696,-76.5725 39.2577,-76.5809 39.2447,-76.5877 39.2336,-76.5912 39.234)
+LINESTRING(-74.9263 38.9691,-74.907 38.9949,-74.8907 39.0146,-74.874 39.034,-74.8574 39.0537,-74.825 39.0981,-74.7906 39.1395,-74.754 39.1795,-74.7151 39.2194,-74.6924 39.2408,-74.6673 39.2658,-74.6515 39.2871)
+LINESTRING(-122.333 37.8205,-122.322 37.8241,-122.308 37.8261,-122.294 37.8314)
+LINESTRING(-81.538 31.2,-81.5397 31.1975,-81.5482 31.1827,-81.5498 31.1797)
+LINESTRING(-87.1596 30.5095,-87.127 30.5303,-87.1136 30.5335)
+LINESTRING(-81.4311 30.2579,-81.4228 30.2582,-81.4147 30.2575)
+LINESTRING(-94.86 29.2856,-94.8659 29.2867,-94.877 29.2896,-94.8896 29.2954,-94.9077 29.3054,-94.9131 29.3093)
+LINESTRING(-80.6027 28.4059,-80.6529 28.4072,-80.664 28.4076)
+LINESTRING(-97.3925 27.8184,-97.408 27.792,-97.4181 27.791,-97.4311 27.7895,-97.4455 27.7893,-97.4612 27.7903,-97.4781 27.7924,-97.5141 27.8054,-97.5548 27.8249,-97.5934 27.8467,-97.6229 27.8662)
+LINESTRING(-84.3439 46.5063,-84.3438 46.5045)
+LINESTRING(-97.5019 25.8768,-97.4959 25.9305,-97.5024 25.9511,-97.5104 25.9807,-97.5169 26.011,-97.522 26.0417,-97.533 26.0591,-97.5568 26.0793,-97.5858 26.1001,-97.6122 26.1196,-97.6386 26.1268,-97.6688 26.1469,-97.6974 26.1708,-97.7192 26.1891)
diff --git a/libs/geometry/example/data/world.wkt b/libs/geometry/example/data/world.wkt
new file mode 100644
index 000000000..baec1fb25
--- /dev/null
+++ b/libs/geometry/example/data/world.wkt
@@ -0,0 +1,203 @@
+MULTIPOLYGON(((20.61688 41.83297,20.76739 41.90526,20.76739 42.06565,21.10499 42.15466,21.30066 42.11898,21.47828 42.33228,21.6559 42.26132,21.92253 42.33228,22.37164 42.32233,22.8776 42.02653,22.94867 41.34562,22.72656 41.14888,21.00006 40.86164,20.53307 41.23506,20.61688 41.83297)),((1.439922 42.60649,1.72351 42.50385,1.464789 42.44115,1.439922 42.60649)))
+MULTIPOLYGON(((56.08878 26.07641,56.2636 25.63005,56.37507 24.97792,56.11956 24.73428,56.01702 24.96965,55.81068 24.87648,55.7797 24.23422,56.02393 24.07637,55.48066 23.9653,55.21152 22.69804,55.00691 22.49706,52.0006 23.00111,51.75201 23.86324,51.11637 24.26911,51.11311 24.48294,51.26202 24.6087,51.51158 24.56832,51.30591 24.28478,51.6072 24.37317,51.93002 23.94947,52.60069 24.18971,53.88236 24.05914,54.19826 24.19694,54.13523 24.32686,54.42883 24.28546,54.70065 24.80842,55.31879 25.23269,56.08878 26.07641)))
+MULTIPOLYGON(((65.64548 37.38977,65.76604 37.54458,66.31045 37.32011,67.62237 37.22717,67.75214 37.21798,68.00586 36.92937,68.89037 37.32844,69.25591 37.09871,69.53245 37.59031,70.1679 37.52888,70.30613 37.69593,70.17991 37.94419,70.98909 38.48343,71.36493 38.24717,71.24846 37.9254,71.58373 37.91962,71.4258 37.06402,71.66684 36.67787,73.30843 37.46241,73.76276 37.43214,73.65158 37.23478,74.356 37.41876,74.87856 37.23569,74.48911 37.24192,74.57156 37.03444,74.05276 36.82872,72.6316 36.84843,71.85727 36.39943,71.63596 36.47205,71.20142 36.03578,71.54667 35.72023,71.6749 35.19654,70.99556 34.55477,71.17126 34.35826,71.06528 34.05179,69.89754 34.02774,70.32659 33.34047,69.5071 33.02904,69.2407 32.46139,69.31762 31.92807,68.91688 31.60471,68.16888 31.83424,67.55399 31.5288,67.76277 31.32756,66.73107 31.21251,66.38657 30.93392,66.23059 29.84671,64.10529 29.37748,62.45577 29.38897,60.8786 29.86178,61.8457 31.04082,61.71288 31.37597,60.8569 31.49167,60.87726 32.19884,60.58612 33.14312,60.94499 33.49451,60.64322 33.56461,60.47844 34.07925,60.91771 34.30145,60.74568 34.52298,60.99798 34.63269,61.27663 35.61316,62.0574 35.43748,62.30208 35.14109,62.74783 35.26518,63.09636 35.42773,63.24798 35.69232,63.12922 35.86929,64.44881 36.237,64.75661 37.10646,65.52431 37.23418,65.64548 37.38977)))
+MULTIPOLYGON(((-61.87162 17.12554,-61.68788 17.02532,-61.87162 16.9251,-61.87162 17.12554)))
+MULTIPOLYGON(((-63.0576 18.26141,-62.95737 18.26141,-63.12442 18.16119,-63.15783 18.2113,-63.0576 18.26141)))
+MULTIPOLYGON(((19.37668 41.85016,19.29396 42.18192,19.66689 42.62945,20.16859 42.51689,20.63682 41.97525,20.61688 41.83297,20.53307 41.23506,21.00006 40.86164,21.05243 40.57025,20.69255 40.11284,20.30562 39.98825,20.25783 39.67355,20.00683 39.69328,19.87255 40.04107,19.30259 40.42855,19.49517 40.35749,19.32162 40.65578,19.43578 40.93272,19.40092 41.41341,19.61718 41.61703,19.60125 41.81387,19.37668 41.85016)))
+MULTIPOLYGON(((42.85301 41.56945,44.5701 41.55434,45.86707 41.55434,46.70084 41.43105,46.48491 40.53529,46.79348 40.34929,46.42291 40.04073,46.95339 39.10436,46.53373 38.86489,46 38.82019,45.44402 38.99178,44.82024 39.62525,44.41919 40,43.65548 40.11077,43.67179 40.93345,42.85301 41.56945)))
+MULTIPOLYGON(((12.65399 -6.037013,12.96863 -5.906919,16.59974 -5.918555,16.95371 -7.203343,17.58297 -8.129065,18.53232 -7.920376,19.3744 -8,19.54379 -6.999425,20.62715 -6.913397,20.54168 -7.28143,21.78059 -7.283893,21.74475 -7.932942,21.95976 -8.496954,21.79289 -9.420432,22.32795 -10.38512,22.27194 -11.24606,22.56217 -11.03055,23.08404 -11.12396,23.9957 -10.89157,24.07812 -12.36638,23.9036 -12.83371,24.04029 -12.99056,21.9999 -13.00472,21.99966 -16.19787,23.42815 -17.63928,20.81847 -18.04176,18.91064 -17.8228,18.42207 -17.39404,13.95689 -17.43337,13.37857 -16.97535,11.75755 -17.25208,11.74717 -16.6881,11.73233 -15.88144,12.15138 -15.18429,12.53412 -13.4128,12.94115 -12.83112,13.467 -12.5137,13.79342 -11.80745,13.85923 -10.97377,13.02756 -9.002469,13.40002 -8.745378,13.39898 -8.403039,12.28803 -6.113584,12.63508 -6.050797,12.65399 -6.037013)),((12.01273 -5.028313,12.75132 -4.372592,13.1025 -4.646508,12.47494 -5.075711,12.5351 -5.733854,12.20663 -5.769247,12.01273 -5.028313)))
+MULTIPOLYGON(((-147.5728 -77.41933,-146.9314 -77.26492,-146.0174 -77.41646,-145.8275 -77.32224,-146.1909 -77.19681,-145.9868 -77.11285,-146.3534 -77.03259,-145.3482 -77.092,-146.1951 -76.88565,-145.5312 -76.78005,-146.9839 -76.49876,-149.5277 -76.36947,-148.281 -76.123,-146.7817 -76.33167,-146.7433 -76.34364,-146.7307 -76.33876,-145.6279 -76.49223,-145.4614 -76.35822,-146.4002 -76.08617,-145 -75.91054,-142.5825 -75.52001,-141.8391 -75.70647,-140.5461 -75.55716,-139.8635 -75.1922,-137.3887 -75.14377,-136.718 -74.95844,-137.16 -74.72287,-135.5306 -74.49046,-134.2872 -74.53017,-134.2444 -74.82861,-134.0197 -74.85934,-132.7386 -74.73093,-129.7287 -74.86763,-126.852 -74.64171,-126.0899 -74.76897,-118.6806 -74.52064,-117.8101 -74.2263,-117.0412 -74.51672,-114.682 -74.48839,-114.8884 -74.0795,-113.9766 -73.84374,-113.6018 -73.91348,-114.2086 -74.1787,-113.222 -74.02512,-113.1076 -74.11888,-113.6062 -74.37547,-112.9866 -74.41528,-112.8163 -74.52793,-112.9526 -74.66494,-112.653 -74.67432,-112.759 -74.87855,-111.2249 -74.71639,-111.7395 -74.57491,-111.3477 -74.44996,-111.6424 -74.24312,-111.3317 -74.19423,-110.2559 -74.25336,-109.9251 -74.61841,-109.2242 -74.59337,-109.0429 -74.66589,-109.3077 -74.72726,-108.7616 -74.80927,-107.3295 -74.56448,-107.1918 -74.75031,-106.5581 -74.80162,-106.7394 -75.28212,-105.278 -75.15098,-105.3028 -74.94767,-104.9805 -74.68797,-103.0581 -74.76038,-102.073 -75.03714,-101.9929 -75.26157,-101.0923 -75.20399,-100.4025 -75.11072,-101.7179 -74.48742,-100.5283 -74.32193,-100.467 -74.15931,-101.0017 -73.87003,-102.0246 -73.84728,-102.2851 -73.56465,-100.3858 -73.60537,-100.0153 -73.51032,-99.98972 -73.33138,-100.9725 -73.11209,-102.6611 -73.38333,-103.5061 -72.95382,-103.1021 -72.78841,-99.97404 -73.17883,-97.9697 -72.91085,-95.96609 -73.3474,-94.42165 -73.15022,-94.42994 -72.89843,-93.66614 -73.22129,-90.94019 -73.29758,-90 -73.15421,-90.4012 -72.95483,-90 -72.8713,-89.962 -72.47079,-88.26778 -72.68866,-88.12673 -72.81371,-88.60003 -73.05901,-86.87103 -73.32407,-85.79853 -72.99453,-85.38904 -73.42181,-83.37257 -73.52801,-82.01028 -73.93527,-80.82079 -73.76456,-81.09064 -73.31288,-80.08873 -73.38499,-80.3499 -73.12941,-80.19923 -73.0058,-78.60605 -73.37926,-78.57241 -73.64366,-76.75238 -73.52545,-76.59073 -73.59186,-76.99323 -73.88334,-75.21279 -73.6545,-73.98232 -73.71864,-68.58909 -73.05271,-67.59163 -72.84678,-66.86262 -72.41231,-66.91649 -71.88332,-67.66322 -71.41415,-67.40353 -71.00305,-67.98428 -70.27345,-68.43533 -70.11948,-68.3597 -69.6742,-68.86506 -69.41468,-68.25706 -69.27932,-67.35022 -69.34709,-66.76933 -69.0435,-67.5133 -68.8274,-66.93756 -68.77835,-67.2028 -68.52607,-66.97169 -68.33936,-67.18924 -68.28534,-66.63203 -68.24282,-67.33577 -67.96159,-66.87568 -67.90828,-66.81796 -67.77625,-67.13553 -67.75828,-66.52871 -67.48795,-67.04088 -67.51513,-67.62241 -67.546,-67.51044 -67.04943,-66.93105 -66.92978,-66.87534 -67.18613,-66.48825 -67.3066,-66.59651 -66.64635,-65.78734 -66.68829,-65.61314 -66.39616,-65.89759 -66.32666,-65.71958 -66.13799,-65.16219 -66.17399,-65.33278 -65.97628,-64.99884 -65.92052,-64.56108 -66.00523,-64.69849 -65.72955,-63.66611 -65.50052,-64.08839 -65.41027,-63.97317 -65.08804,-63.12215 -65.1503,-63.01684 -65.02059,-63.26606 -64.94816,-62.39233 -64.86849,-62.70923 -64.75967,-62.55341 -64.58768,-62.21902 -64.76328,-61.82244 -64.49062,-61.61133 -64.6512,-61.48842 -64.35381,-60.93779 -64.29189,-60.97498 -64.04292,-60.01381 -63.9524,-59.92006 -63.77994,-59.49873 -63.90261,-59.40754 -63.71262,-58.99091 -63.66924,-57.3187 -63.2212,-56.77402 -63.59177,-57.40773 -63.47425,-58.08009 -63.66578,-58.68206 -64.00797,-58.94403 -64.36893,-58.83054 -64.52641,-59.67423 -64.32935,-61.05989 -65.0194,-62.20528 -65.32352,-61.69928 -65.53353,-62.36173 -65.77531,-62.34217 -65.96835,-61.91059 -66.17244,-61.34767 -66.07581,-61.34012 -65.92807,-60.65046 -65.92867,-60.93151 -66.25571,-61.13863 -66.33443,-61.44387 -66.1122,-61.70694 -66.25465,-61.68738 -66.46681,-61.89595 -66.202,-62.91435 -66.26334,-62.42487 -66.43945,-62.69852 -66.54893,-62.41847 -66.64384,-62.61674 -66.74141,-63.56338 -66.15765,-63.79447 -66.32298,-63.58502 -66.37685,-63.90477 -66.38157,-63.81412 -66.59188,-64.13767 -66.60095,-64.18324 -66.77244,-63.71266 -66.86559,-64.86923 -66.95708,-64.73378 -67.08302,-65.03812 -67.34045,-65.55116 -67.36085,-65.38097 -67.65559,-65.74351 -67.87952,-65.33723 -67.97603,-65.67077 -68.15653,-64.79382 -68.09529,-65.52914 -68.32217,-64.98169 -68.40441,-65.35143 -68.51173,-65.22174 -68.63541,-64.16667 -68.79305,-64.0137 -68.754,-64.2501 -68.58929,-63.79322 -68.45882,-62.94085 -68.47106,-63.88078 -68.67364,-63.22372 -68.83101,-63.82441 -69.02592,-63.34288 -69.04276,-63.58084 -69.1996,-62.42803 -69.50658,-62.42072 -69.74123,-62.67359 -69.81426,-61.88752 -70.20612,-62.39297 -70.47464,-61.42079 -70.5108,-62.11673 -70.90354,-61.3151 -70.8662,-61.44621 -71.04655,-60.93929 -71.18828,-61.4011 -71.23296,-60.99498 -71.36226,-61.56833 -71.46904,-60.7638 -71.74326,-61.92571 -72.0224,-60.74674 -71.98843,-61.06091 -72.16923,-60.68889 -72.32858,-61.03845 -72.36711,-60.64115 -72.39993,-61.43761 -72.41726,-61.57085 -72.50953,-61.3608 -72.61472,-61.56639 -72.66229,-60.53943 -72.68136,-60.49797 -72.85863,-60.9557 -73.06677,-59.7777 -72.95154,-59.90271 -73.26619,-60.57046 -73.18784,-60.78634 -73.54672,-60.68141 -73.73476,-61.04305 -73.94541,-60.75034 -74.10011,-61.68134 -74.30824,-60.75232 -74.27431,-61.10506 -74.41919,-60.95983 -74.48443,-61.93676 -74.58352,-62.10286 -74.6641,-61.97239 -74.86247,-62.84492 -75.13849,-64.39689 -75.26897,-63.14361 -75.3409,-64.04523 -75.6248,-69.87975 -76.43345,-67.64175 -76.88115,-67.64221 -77.62765,-69.1323 -78.09476,-73.90698 -77.80989,-75.78711 -77.13175,-75.7566 -76.64487,-80.99268 -76.96474,-80.85527 -77.16985,-81.36038 -77.46996,-81.95492 -77.08365,-83.21609 -77.15144,-82.71931 -77.26604,-81.99026 -77.89556,-81.93612 -78.0342,-82.38802 -78.12708,-81.87347 -78.19384,-82.04189 -78.38471,-81.07503 -78.65464,-81.42198 -78.87599,-81.03156 -79.07471,-81.55747 -79.18211,-81.14625 -79.45135,-80.33558 -79.74485,-79.99423 -79.57108,-80.35086 -79.30121,-79.45218 -79.31159,-77.33015 -79.98404,-80.04183 -79.9687,-76.91351 -80.17494,-75.47997 -80.59967,-72.32603 -80.77515,-60.02951 -80.17545,-59.03929 -79.63911,-54.20277 -79.23016,-53.14785 -78.66412,-49.07594 -77.73048,-46.18996 -78,-44.90673 -78.53878,-48.46818 -78.91118,-44.49999 -78.79726,-44.20585 -78.862,-44.12358 -79.09916,-46.44064 -79.25513,-46.34858 -79.43591,-42.89036 -79.39927,-43.132 -79.70922,-42.97097 -79.90626,-44.90707 -79.87933,-44.273 -80.17167,-45.48098 -80.4883,-51.10136 -80.72634,-54.79165 -79.97941,-58.43475 -80.4541,-60.77186 -81.03344,-71.7254 -81.43987,-72.05063 -81.6597,-71.52993 -81.92525,-69.77004 -82.21433,-65.79501 -82.50506,-60.184 -82.42217,-59.0042 -82.646,-59.34418 -82.92903,-59.19208 -82.9997,-58.28839 -83.00181,-55.70493 -82.35511,-51.64454 -81.83927,-42.93808 -81.53368,-34.58165 -80.20743,-31.9802 -80.08701,-31.84765 -80.13922,-32.05788 -80.39796,-30.6669 -80.42556,-30.78801 -80.30796,-30.07994 -80.04109,-30.76914 -79.5375,-29.96069 -79.28139,-36.14171 -78.89499,-36.53619 -78.70159,-36.43656 -78.39095,-35.61145 -78.1042,-35.47655 -77.84616,-31.45897 -77.21949,-31.77299 -77.08531,-31.36195 -77.15858,-31.46373 -77.02705,-31.03682 -77.08697,-28.52219 -76.46471,-28.85636 -76.32193,-24.76731 -75.75751,-23.4526 -75.2246,-22.72079 -74.62666,-18.40745 -73.53629,-15.10938 -72.90343,-13.74999 -72.90005,-12.08424 -72.57872,-11.42006 -72.30421,-11.08251 -71.90502,-12.00747 -71.66534,-12.32292 -71.35822,-11.6453 -71.26801,-11.68905 -71.43419,-10.99034 -71.72793,-10.09897 -71.12045,-10.47855 -70.96667,-9.517255 -70.93051,-9.690064 -71.03048,-9.013316 -71.202,-8.728431 -71.72924,-8.451492 -71.82283,-7.395785 -71.69027,-7.769455 -71.44356,-7.29634 -71.0847,-7.682946 -70.86235,-6.962509 -70.69255,-5.81931 -70.71194,-5.688478 -70.97182,-6.210674 -71.33774,-5.95564 -71.42253,-3.036795 -71.27336,-3.734743 -71.1056,-3.384041 -70.86763,-3.545782 -70.66454,-3.428405 -70.4242,-2.988321 -70.29671,-2.691787 -70.42541,-3.175043 -70.65756,-2.000521 -70.82707,-2.567526 -70.99836,-2.208274 -71.47318,-1.019805 -71.29742,-0.836051 -71.39875,-0.968873 -71.59109,-0.456557 -71.67822,0.529507 -71.25839,2.305984 -70.89809,3.014672 -70.49787,4.436982 -70.25055,5.670681 -70.4614,7.833029 -70.18001,9.494116 -70.19629,11.7798 -70.62699,12.39532 -70.31272,16.21163 -70.18961,23.41115 -70.5189,31.72936 -69.628,33.06709 -69.69125,33.48785 -69.48714,33.37331 -69.29433,33.59489 -69.16609,33.21576 -69.04489,33.26189 -68.75616,34.23629 -68.59197,35.79956 -69.3579,36.90151 -69.56645,37.15831 -69.84441,37.80981 -69.66705,38.67226 -70.07151,38.58318 -69.9601,38.9083 -70.02296,39.23177 -69.74181,39.80762 -69.63715,39.62285 -69.4534,39.95324 -69.40948,39.73758 -69.20739,39.99142 -68.87428,42.81926 -68.07922,45.81517 -67.77689,46.40792 -67.60997,46.28537 -67.36136,46.49178 -67.29949,47.48447 -67.41605,47.25159 -67.63833,47.45211 -67.63939,47.5349 -67.63982,47.98007 -67.59997,47.87607 -67.57869,49.4569 -67.29541,48.34365 -67.09341,49.3224 -66.80885,50.00279 -67.08418,49.80191 -67.26958,50.91731 -67.18555,50.51878 -67.06622,50.85866 -66.78371,50.35193 -66.75648,50.3709 -66.45477,52.27291 -65.93916,55.38184 -65.91651,57.39758 -66.60725,56.32425 -66.83919,56.67126 -66.81158,56.49264 -66.86327,56.98476 -67.07581,58.90776 -67.18205,59.13305 -67.30628,58.64329 -67.32986,59.1706 -67.45032,60.60191 -67.3499,62.76725 -67.65801,63.66072 -67.5055,68.45863 -67.9194,69.87563 -67.78748,70.11676 -68.7112,69.15128 -68.9537,70.04378 -68.92805,69.07282 -69.11681,69.86195 -69.26615,68.69155 -69.29709,68.9686 -69.41339,68.47423 -69.63497,69.23495 -69.84467,68.36102 -69.89578,68.08611 -70.26635,69.15845 -70.33264,69.284 -70.79163,71.40216 -71.43564,72.36285 -70.91404,72.50028 -70.65328,73.28226 -70.44197,72.86921 -70.08109,74.26321 -69.72987,75.91163 -69.72246,76.36084 -69.39919,78.14053 -69.10808,78.30648 -68.77959,78.08856 -68.70493,78.46104 -68.59782,78.1698 -68.60279,78.79246 -68.5162,78.31927 -68.48941,81.67205 -67.79097,83.61402 -67.45132,84.6001 -67.06803,85.9603 -67.1938,88.10524 -66.69263,89.89406 -66.81253,91.87505 -66.47141,93.71259 -66.63811,98.82478 -66.47701,98.99207 -66.40373,98.72893 -66.36834,99.03833 -66.32893,99.05618 -66.15019,98.73563 -65.74736,99.53096 -65.88039,99.54245 -65.70877,100.2154 -65.66605,100.6863 -65.38854,101.2088 -65.52851,100.2486 -65.67573,100.1351 -66.09203,100.3285 -66.19418,100.8398 -65.97073,100.6665 -66.12186,101.0506 -66.11575,100.6814 -66.19862,101.0122 -66.24654,101.5474 -66.0193,101.3692 -65.94209,102.9815 -65.83827,106.5823 -66.3073,108.8386 -66.92116,109.3091 -66.87197,109.4749 -66.60022,110.2998 -66.6193,110.8931 -66.04882,113.2011 -65.70032,114.5305 -66.18295,114.5185 -66.44607,116.1025 -66.36686,117.1731 -66.87701,118.2123 -67.023,121.1011 -66.78055,121.1265 -67.10377,124.6841 -66.65664,126.148 -66.26966,127.4321 -66.59846,127.9185 -67.02029,129.304 -67.02381,129.6118 -66.92625,129.6243 -66.57887,130.0063 -66.23624,129.4954 -65.94498,131.664 -66.21098,134.1377 -66.21222,134.6561 -65.98722,134.5516 -65.9004,134.7616 -65.79397,134.4632 -65.56325,134.5461 -65.32607,134.867 -65.27472,135.4795 -65.6518,135.1459 -66.00288,136.0647 -66.13612,136.4369 -66.39406,141.8895 -66.79362,142.5231 -67.0338,143.3853 -66.86347,144.5772 -67.17476,145.5483 -66.82233,146.4588 -66.84972,146.8305 -67.02197,146.6762 -67.2179,145.2431 -67.6058,146.0246 -67.60463,147.0567 -67.92679,148.4443 -67.81563,148.605 -68.2843,147.8668 -68.40709,149.6341 -68.35247,151.0027 -68.31017,151.0526 -68.64378,151.3749 -68.73972,153.821 -68.33959,154.6931 -68.58529,154.424 -68.64033,154.635 -68.73774,154.4506 -68.81104,154.8658 -69.035,155.4362 -68.91848,156.7822 -69.22552,157.1035 -69.20149,157.0791 -69.00245,157.3781 -69.23898,158.8946 -69.33869,159.7298 -69.78117,160.4875 -69.91448,160.2974 -70.06155,160.9778 -70.33642,161.5367 -70.25034,161.7135 -70.45775,161.8595 -70.25493,161.8945 -70.46589,162.5891 -70.31775,163.4853 -70.71352,163.6991 -70.66218,163.479 -70.51976,164.125 -70.52856,167.6969 -70.82607,168.0675 -71.18837,170.1368 -71.70781,170.2349 -71.3571,170.9236 -71.87417,169.7586 -72.25951,169.9705 -72.33115,169.8099 -72.41871,170.2306 -72.34328,170.2555 -72.60704,169.8266 -72.71067,169.613 -73.09855,168.9938 -73.20042,169.1598 -73.30328,168.9369 -73.30568,169.0139 -73.47444,166.4648 -73.62717,166.6773 -73.73735,165.587 -73.95702,166.229 -74.13102,164.7455 -74.15847,165.3993 -74.5546,165.3334 -74.69353,164.2539 -74.57372,163.8123 -74.94694,163.6224 -74.77486,163.9435 -74.6445,163.4471 -74.52147,163.0902 -74.64754,163.2143 -74.73726,162.584 -74.79971,162.8241 -74.97465,162.414 -74.94543,162.7377 -75.03963,162.4285 -75.14815,162.5589 -75.25808,164.2032 -75.24989,164.2856 -75.4393,164.668 -75.43253,164.5858 -75.58115,162.6921 -75.47926,162.8512 -75.59428,162.4975 -75.71823,162.9669 -75.78131,162.6532 -75.938,162.9795 -75.97341,162.2323 -76.16073,162.6884 -76.29354,162.6117 -76.59978,162.7705 -76.62653,162.5243 -76.69476,162.8759 -76.76836,162.2711 -77.06906,163.0521 -77.0862,163.7231 -77.45632,163.3826 -77.60658,163.5875 -77.66483,163.4315 -77.74576,164.423 -77.79288,164.2696 -78.13965,163.2988 -78.32821,164.5751 -78.37548,165.3374 -78.05782,165.4823 -78.17262,165.2273 -78.24527,165.6399 -78.4621,167.1327 -78.70752,164.2644 -78.63433,162.6158 -78.88318,162.4938 -79.11423,160.8867 -79.10896,160.2669 -79.24658,160.5073 -79.32079,160.0142 -79.60326,160.1582 -79.93282,160.3885 -80.01711,159.987 -80.18458,160.7754 -80.54825,159.6631 -80.68921,160.9685 -80.70805,160.0746 -80.90494,160.6584 -80.97607,160.3304 -81.02613,160.5971 -81.14688,160.4303 -81.25339,160.7851 -81.27731,160.4414 -81.40389,163.7532 -82.24459,161.3385 -82.38057,161.6653 -82.54998,163.1775 -82.68518,163.3479 -82.58295,163.1544 -82.48756,164.6994 -82.42028,165.3371 -82.51988,164.7892 -82.68946,168.3345 -83.08816,168.5695 -83.20914,167.7549 -83.32128,167.5719 -83.45518,167.6987 -83.50731,171.6197 -83.56647,171.935 -83.63277,171.2699 -83.84739,171.5889 -83.89169,172.7756 -83.75088,173.4915 -83.82764,172.9185 -83.93702,174.8425 -83.90095,180 -84.42592,180 -90,-180 -90,-180 -84.42873,-178.2959 -84.35055,-179.0668 -84.25339,-167.0431 -84.79213,-165.9325 -85.0291,-162.9406 -85.16615,-161.8117 -85.44962,-160.4957 -85.39356,-161.026 -85.49464,-151.476 -85.58276,-148.2741 -85.15272,-139.3479 -85.2896,-137.4463 -85.06761,-146.0752 -84.8842,-151.1268 -84.45387,-153.2165 -83.86245,-152.8448 -83.71663,-152.8648 -83.35514,-154.1623 -82.75488,-154.1538 -82.22446,-155.0297 -81.77632,-154.7962 -81.56052,-153.3934 -81.21027,-145.2031 -80.70447,-147.8717 -80.29346,-151.1926 -80.24664,-153.9755 -79.40808,-157.5723 -78.76943,-157.7191 -78.5678,-156.8064 -78.41953,-157.008 -78.26968,-156.7668 -78.14735,-158.4707 -78.18495,-158.0243 -78.02477,-158.2086 -77.90778,-157.7493 -77.61858,-157.991 -77.36395,-157.7951 -77.12065,-156.6954 -77.41307,-155.8544 -77.11487,-153.3442 -77.30086,-153.0636 -77.40474,-153.4772 -77.49279,-152.4204 -77.51863,-152.0616 -77.34062,-149.6266 -77.82256,-148.9874 -77.73803,-149.4907 -77.62564,-148.7133 -77.69389,-147.6885 -77.44719,-148.1964 -77.46984,-148.8712 -77.22492,-147.7076 -77.23919,-147.5728 -77.41933),(-146.7817 -76.33167,-146.7307 -76.33876,-146.6022 -76.28893,-146.8358 -76.12966,-147.4025 -76.13773,-146.7817 -76.33167)),((-72.0526 -69.04539,-70.1859 -68.83833,-70.1087 -69.25607,-69.71538 -69.27843,-69.09383 -70.18921,-68.41619 -70.64532,-68.11154 -71.64629,-68.4998 -71.97771,-68.44913 -72.26418,-69.01806 -72.31477,-69.11895 -72.45484,-68.88744 -72.44739,-69.64333 -72.66664,-71.97277 -72.69437,-72.68424 -72.4633,-72.34042 -72.27847,-70.60326 -72.24277,-71.04533 -72.13254,-70.68277 -71.98978,-71.78941 -71.63515,-72.43605 -71.57677,-72.37437 -71.86303,-73.38788 -71.76559,-72.97045 -71.91033,-73.57765 -72.16489,-75.51772 -71.66758,-75.71548 -71.41877,-75.45765 -71.34412,-74.68185 -71.60888,-74.98726 -71.23129,-73.50524 -71.55373,-74.12457 -71.19611,-72.98431 -71.34515,-72.35819 -71.24561,-73.22094 -71.10751,-72.81709 -70.94792,-71.32877 -70.79364,-70.67202 -70.92309,-71.55853 -70.54302,-71.56237 -70.37491,-70.02051 -70.22272,-71.92459 -69.78998,-71.95126 -69.50468,-71.68019 -69.27412,-72.1918 -69.1181,-72.0526 -69.04539)),((-79.58303 -77.24992,-78.04823 -77.05433,-76.8585 -77.15038,-76.92802 -77.28667,-76.5863 -77.42095,-76.73336 -77.65762,-75.70747 -78.05892,-77.65456 -78.19331,-79.79225 -78.05751,-80.74554 -77.75739,-79.86858 -77.51847,-79.58303 -77.24992)),((-163.6036 -78.83811,-161.4224 -78.85066,-159.1478 -79.70826,-161.0139 -79.90076,-163.4663 -79.57716,-164.3637 -79.16306,-163.6036 -78.83811)),((-98.55214 -71.66763,-98.12888 -71.76827,-98.49451 -71.86636,-98.47515 -72.08824,-97.9698 -72.09177,-98.02152 -71.81902,-97.87325 -71.78709,-97.45589 -71.94469,-97.71951 -72.03629,-97.44469 -72.1617,-97.0216 -71.74893,-96.10952 -71.80008,-97.08627 -72.13387,-95.62218 -72.00095,-95.49735 -72.1116,-95.67108 -72.17345,-96.46546 -72.2283,-95.41721 -72.29886,-96.40557 -72.38291,-95.96152 -72.42532,-96.04736 -72.5324,-98.59394 -72.51672,-102.4134 -72.11128,-100.423 -71.77707,-100.1679 -71.86201,-100.6113 -71.98118,-99.74869 -71.84312,-98.77071 -72.03275,-99.23086 -71.77925,-98.55214 -71.66763)),((-121.796 -73.59129,-118.6296 -73.79707,-120.2779 -74.31898,-121.946 -74.31485,-122.613 -74.23581,-122.4615 -74.10719,-122.6064 -74.00391,-122.2748 -73.83063,-122.8737 -73.73671,-121.796 -73.59129)),((-125.3644 -73.17935,-124.6479 -73.53107,-125.0987 -73.66828,-124.9696 -73.74028,-123.9798 -73.60165,-123.382 -73.97388,-123.5475 -74.12675,-124.3815 -74.09237,-125.716 -73.81211,-126.1862 -73.44826,-126.7121 -73.55973,-126.6023 -73.44232,-126.9187 -73.37045,-126.768 -73.14906,-125.3644 -73.17935)),((-68.52562 -78.58097,-65.46762 -78.40364,-69.40013 -79.20899,-70.83311 -79.14777,-68.52562 -78.58097)),((-75.45554 -73.01366,-75.82319 -72.94495,-75.29984 -72.81456,-74.32782 -72.97176,-74.61892 -73.32809,-74.37962 -73.54627,-74.66709 -73.65527,-76.10168 -73.30847,-76.16866 -73.12941,-75.45554 -73.01366)),((-68.00626 -66.67634,-67.6729 -66.6468,-67.99707 -66.93274,-67.68823 -67.14931,-68.20452 -67.3452,-67.97286 -67.39326,-68.13316 -67.56461,-68.61757 -67.75422,-69.20239 -67.59001,-68.47512 -66.82755,-68.00626 -66.67634)),((169.2601 -77.52044,166.5901 -77.88824,166.7761 -77.72889,165.9984 -77.57982,166.4998 -77.43961,166.2326 -77.31303,166.5663 -77.21448,167.3681 -77.4474,169.2601 -77.52044)),((121.3173 -66.69778,121.7549 -66.45598,121.2224 -66.22855,121.4709 -66.04633,121.1836 -65.9185,121.3297 -65.64651,122.5503 -66.56289,121.3173 -66.69778)),((-74.84757 -69.53473,-74.45148 -69.79233,-74.69836 -69.98404,-75.93615 -69.92476,-76.09235 -69.66798,-74.84757 -69.53473)),((-78.07573 -72.64796,-77.23979 -72.70985,-77.39474 -72.94318,-78.58921 -73.19484,-79.07538 -73.02606,-78.26971 -72.89185,-78.07573 -72.64796)),((-57.36388 -64.31935,-58.22072 -64.40555,-58.07511 -64.12164,-58.46537 -64.06358,-57.80148 -63.77441,-57.84019 -64.09006,-57.4918 -63.91711,-57.06267 -64.16769,-57.36388 -64.31935)),((-63.71189 -64.84069,-64.3112 -64.6825,-63.56023 -64.2682,-63.20474 -64.29337,-63.39188 -64.43457,-63.17106 -64.40388,-63.29947 -64.57651,-62.84572 -64.55225,-63.71189 -64.84069)),((-74.2181 -70.51205,-73.74133 -70.64433,-74.36571 -70.81686,-75.55737 -70.7342,-74.2181 -70.51205)),((-90.87988 -72.64127,-90.99516 -72.79259,-90.85046 -72.9045,-91.33047 -73.17935,-91.5123 -73.11709,-91.34204 -72.7998,-91.67634 -72.6086,-90.87988 -72.64127)),((-56.41531 -63.43903,-56.56045 -63.33496,-56.04965 -63.13462,-55.02081 -63.30928,-56.41531 -63.43903)),((-60.29945 -62.757,-61.24283 -62.59126,-60.15171 -62.45975,-59.82209 -62.60682,-60.29945 -62.757)),((-127.2717 -74.60647,-127.8218 -74.44791,-127.8742 -74.25546,-126.8852 -74.38795,-127.2717 -74.60647)),((-58.65427 -62.25686,-59.01677 -62.20316,-58.4412 -61.93731,-57.60457 -62.02293,-58.25566 -62.18198,-58.43576 -62.05663,-58.65427 -62.25686)),((-62.0629 -69.72955,-62.60696 -69.20187,-62.22961 -69.16122,-61.94405 -69.38932,-62.0629 -69.72955)),((-131.9041 -74.30228,-130.7346 -74.41314,-131.1382 -74.55045,-131.9033 -74.4631,-131.9041 -74.30228)),((-115.8807 -73.88317,-116.575 -74.15652,-117.7219 -74.17339,-115.8807 -73.88317)),((-62.64101 -64.51308,-62.82548 -64.49399,-62.48399 -64.23106,-62.561 -64.04622,-62.04785 -64.13434,-62.64101 -64.51308)),((167.2993 -78.30534,166.7438 -78.26464,167.3865 -78.04678,167.5394 -78.16717,167.2993 -78.30534)),((-72.5708 -69.52946,-72.85082 -69.45647,-72.5686 -69.30872,-72.09885 -69.53014,-72.5708 -69.52946)),((-148.705 -76.86867,-149.2135 -76.78181,-148.9665 -76.71465,-148.1698 -76.79898,-148.705 -76.86867)),((-55.1548 -61.22437,-55.30748 -61.00346,-54.59457 -61.05054,-55.1548 -61.22437)),((96.47849 -66.23496,96.25699 -66.18226,96.40884 -66.03873,96.99506 -66.15076,96.47849 -66.23496)),((-66.17471 -65.87418,-66.00462 -65.54506,-65.67765 -65.5135,-65.93126 -65.67324,-65.84351 -65.82101,-66.17471 -65.87418)),((-77.95332 -73.41058,-78.12079 -73.29176,-77.93359 -73.22186,-77.4177 -73.32956,-77.95332 -73.41058)),((-56.33197 -63.1843,-56.62877 -63.05325,-56.49831 -62.97749,-56.01629 -63.03848,-56.33197 -63.1843)),((166.1538 -78.35339,165.9238 -78.16309,166.6582 -78.26231,166.1538 -78.35339)),((-145.7229 -75.55936,-145.1527 -75.74972,-145.813 -75.6778,-145.9611 -75.59669,-145.7229 -75.55936)),((-94.952 -72.50469,-94.43655 -72.60088,-95.28873 -72.64246,-94.952 -72.50469)),((-146.8169 -77.01942,-146.9574 -76.86395,-146.2917 -76.90291,-146.8169 -77.01942)),((-67.53762 -67.79745,-67.83548 -67.67426,-67.15509 -67.63554,-67.53762 -67.79745)),((169.4168 -73.57291,169.72 -73.35628,169.8466 -73.57433,169.4168 -73.57291)),((-73.61285 -73.17296,-73.85072 -73.40416,-74.18481 -73.33899,-73.61285 -73.17296)),((103.0362 -65.16444,103.4796 -65.45354,102.8312 -65.22557,103.0362 -65.16444)),((-146.8622 -76.75887,-147.3378 -76.59945,-146.8588 -76.59675,-146.8622 -76.75887)),((-55.96684 -63.57532,-56.22236 -63.43515,-55.6869 -63.42879,-55.96684 -63.57532)))
+MULTIPOLYGON(((-67.1775 -22.80469,-66.73935 -22.23658,-66.2907 -22.08444,-66.22161 -21.78128,-65.75531 -22.10854,-64.6478 -22.1946,-64.32063 -22.86866,-63.93525 -22.00273,-62.80806 -22.00444,-62.64708 -22.24563,-60.98194 -23.81165,-60.04662 -24.01213,-57.66761 -25.27694,-57.56323 -25.55561,-58.15548 -26.18055,-58.18894 -26.64248,-58.59655 -27.30121,-58.00693 -27.26365,-56.85005 -27.60421,-56.59883 -27.44798,-56.37604 -27.60447,-56.11202 -27.30512,-55.7326 -27.4448,-55.42037 -26.99908,-54.80127 -26.65639,-54.59636 -25.59497,-54.43019 -25.70594,-54.11059 -25.5044,-53.84392 -25.68932,-53.59184 -26.26489,-53.7986 -27.14745,-54.80873 -27.5359,-55.77309 -28.24701,-55.69562 -28.4253,-55.87476 -28.36226,-57.61797 -30.17916,-57.87759 -30.51556,-57.79935 -30.8506,-58.20473 -31.87094,-58.1342 -33.02597,-58.43176 -33.09301,-58.55584 -33.72223,-58.37045 -34.11233,-58.55108 -34.4315,-57.19667 -35.30555,-57.37623 -35.97168,-56.93692 -36.3834,-56.71917 -36.35655,-56.67129 -36.90549,-57.55159 -38.10962,-58.13091 -38.41871,-60.85211 -38.98208,-61.8046 -38.99224,-62.40413 -38.75271,-62.32888 -39.25965,-62.01193 -39.36519,-62.31648 -39.29819,-62.03953 -39.44709,-62.49056 -40.31401,-62.17091 -40.63277,-62.32671 -40.88292,-63.80169 -41.16122,-64.89481 -40.83786,-64.808 -40.73302,-65.11484 -40.8338,-65.01897 -42.0984,-64.47105 -42.24342,-64.62181 -42.40866,-64.47688 -42.44341,-64.12061 -42.43194,-64.0796 -42.26264,-64.38059 -42.2414,-63.76488 -42.07257,-63.58712 -42.60842,-64.14539 -42.87541,-64.34579 -42.53803,-64.94518 -42.63102,-65.03279 -42.77519,-64.31453 -42.97735,-64.95638 -43.24234,-65.32807 -43.64673,-65.21431 -44.36818,-65.6827 -44.72032,-65.52219 -44.93477,-66.94747 -45.26959,-67.61881 -46.05798,-67.38772 -46.58865,-66.73991 -47.03672,-65.75169 -47.20084,-65.8941 -47.76728,-65.76698 -47.91746,-67.41094 -48.90168,-67.77747 -49.89847,-68.3317 -50.12669,-68.60137 -49.86246,-68.3556 -50.16536,-69.07726 -50.56383,-69.21799 -50.97392,-68.94093 -51.54959,-69.22515 -51.6956,-68.95716 -51.637,-68.43986 -52.40015,-69.22569 -52.20016,-70.01936 -51.99819,-71.93159 -51.99528,-72.43781 -51.56912,-72.27752 -50.65468,-73.15174 -50.76809,-73.52998 -50.14991,-73.42122 -49.79916,-73.57778 -49.54358,-72.54967 -48.79079,-72.59288 -48.47141,-72.2951 -48.35757,-72.52264 -47.90715,-72.32291 -47.43373,-71.84908 -47.21814,-71.92654 -46.80474,-71.64585 -46.68254,-71.89174 -46.14821,-71.59829 -45.97458,-71.75804 -45.56223,-71.29688 -45.29317,-72.06971 -44.76825,-71.30264 -44.80802,-71.11016 -44.52303,-71.83199 -44.38578,-71.58262 -43.66576,-71.93305 -43.45695,-71.73962 -43.17142,-72.13357 -43.01638,-72.12493 -42.30677,-71.72849 -42.11539,-71.94669 -40.73969,-71.65408 -40.36865,-71.83086 -40.22242,-71.58906 -39.89707,-71.71897 -39.6377,-71.48103 -39.59019,-71.42781 -38.92983,-70.83273 -38.57305,-71.20322 -37.6801,-71.1721 -36.84647,-71.03448 -36.46488,-70.42343 -36.15309,-70.32522 -35.81524,-70.57765 -35.25788,-70.36263 -35.14241,-70.04218 -34.28701,-69.81541 -34.22364,-69.74717 -33.40779,-69.88811 -33.22215,-70.02461 -33.31369,-69.99737 -32.9016,-70.38564 -32.05095,-70.20244 -31.97015,-70.53893 -31.60142,-70.50563 -31.14843,-69.8166 -30.21648,-70.00744 -29.35628,-69.7677 -29.12587,-69.64111 -28.37884,-69.11214 -27.89204,-68.83334 -27.04887,-68.27213 -26.9169,-68.5877 -26.50918,-68.39045 -26.19049,-68.58668 -25.20431,-68.35064 -25.10669,-68.56738 -24.74768,-68.39136 -24.47407,-67.33754 -24.0342,-66.98794 -22.9924,-67.1775 -22.80469)),((-68.60475 -52.66537,-68.1955 -53.12925,-68.36179 -53.02316,-68.52022 -53.25929,-68.13199 -53.32545,-67.69617 -53.79746,-66.00002 -54.61374,-65.11077 -54.65778,-66.51212 -55.06131,-67.0083 -55.0222,-67.20625 -55.0066,-68.26682 -54.9196,-68.26516 -54.92312,-68.61058 -54.89589,-68.60475 -52.66537)),((-64.67084 -54.90871,-64.56756 -54.71271,-63.80831 -54.72062,-64.67084 -54.90871)))
+MULTIPOLYGON(((13.84239 48.77366,14.31861 48.54292,14.98922 48.76698,15.02669 49.01706,16.53641 48.80704,16.92182 48.69472,16.84774 48.37205,17.16273 48.00808,17.09076 47.71126,16.44964 47.69149,16.71279 47.53454,16.44933 47.40102,16.51555 47.00671,16.11189 46.87151,16.03466 46.6609,15.03901 46.65263,14.56157 46.37804,13.71563 46.52403,12.43604 46.69191,12.18404 47.09521,11.16155 46.96649,11.01477 46.77032,10.47005 46.86188,9.603659 47.06155,9.535914 47.27354,9.672874 47.38769,9.544334 47.54256,9.970167 47.55003,10.1776 47.27579,10.43452 47.58615,11.26402 47.40426,12.26024 47.74409,13.01005 47.4729,13.09669 47.64745,12.75725 48.12494,13.32995 48.32526,13.50247 48.59414,13.7241 48.51663,13.84239 48.77366)))
+MULTIPOLYGON(((151.1082 -23.67241,151.3314 -23.96753,151.7671 -24.01801,152.5719 -25.18659,152.9069 -25.28642,152.8776 -25.69229,153.0163 -25.99169,153.0525 -25.81284,153.2 -25.93735,153.0388 -26.37094,153.1388 -26.83153,153.1335 -26.83862,153.0184 -27.29772,153.5562 -28.20489,153.6071 -28.85146,153.2702 -29.38704,152.9848 -30.68061,153.0728 -31.05367,152.7566 -31.84962,152.389 -32.19935,152.5246 -32.31677,152.153 -32.67678,151.9661 -32.54739,151.9244 -32.7889,152.1687 -32.76987,151.7859 -32.92263,151.5545 -33.24315,151.2371 -33.52746,151.1819 -33.53236,151.1806 -33.63742,151.2147 -33.63214,151.2992 -33.8309,151.0599 -33.83002,151.282 -33.84256,151.2492 -34.00505,151.0008 -33.98333,151.2265 -34.03266,150.7183 -34.89363,150.7558 -35.17306,150.4502 -35.23199,150.1717 -35.70893,149.8772 -36.88865,149.9798 -37.504,149.6812 -37.46145,149.49 -37.77309,147.651 -37.84713,147.4542 -38.08467,147.9371 -37.90533,146.7988 -38.63347,146.7959 -38.63742,146.2136 -38.69617,146.2977 -38.90679,146.4786 -38.79554,146.3758 -39.13894,146.1645 -38.81575,145.9241 -38.91,145.8236 -38.64722,145.3757 -38.53807,145.411 -38.39565,145.4274 -38.32978,145.3125 -38.2919,145.3012 -38.29755,144.8947 -38.49966,144.6536 -38.31044,144.8817 -38.36496,145.1252 -38.12079,144.9319 -37.81201,144.3627 -38.11053,144.6839 -38.11992,144.6616 -38.27836,143.5556 -38.85681,142.3862 -38.35413,141.4049 -38.3992,140.392 -37.92358,139.8253 -37.30661,139.7004 -36.30559,138.9085 -35.58389,138.0914 -35.62812,138.4367 -35.35149,138.5573 -34.81263,138.0991 -34.14187,137.7563 -35.11504,136.8215 -35.24552,137.0112 -34.89704,137.448 -34.91169,137.4451 -34.14328,137.9714 -33.55882,137.8084 -33.27885,138.0428 -33.09461,137.7523 -32.42775,137.7839 -33.00387,137.4452 -33.14289,137.21 -33.66787,136.5912 -33.90289,135.931 -34.53521,135.7855 -34.81306,135.9934 -34.73018,136.002 -34.98735,135.1102 -34.59377,135.2154 -34.4367,135.4086 -34.5429,134.7038 -33.18215,134.3555 -33.16018,134.0604 -32.91077,134.2645 -32.57745,133.8494 -32.54741,133.9488 -32.39925,133.6485 -32.10089,133.1248 -32.21086,132.7416 -31.94971,132.1988 -32.02856,131.1501 -31.46841,129.3651 -31.64174,127.2668 -32.27406,126.0324 -32.27488,124.2384 -33.02344,123.527 -33.94466,120.0352 -33.92232,119.638 -34.09865,119.577 -34.38853,118.9028 -34.47012,118.4022 -34.92164,117.8532 -35.03323,118.0216 -35.10872,117.3391 -35.02494,116.4808 -35.01508,115.0253 -34.25426,115.0042 -33.5369,115.3656 -33.64424,115.6637 -33.32426,115.7524 -31.90021,115.0532 -30.51018,114.8653 -29.11643,114.166 -28.11618,113.8107 -26.98724,113.1493 -26.15357,113.2695 -26.24968,113.3002 -26.02671,113.3795 -26.43909,113.36 -26.02205,113.6508 -26.67277,113.8768 -26.36396,113.7412 -26.17003,113.892 -25.9595,114.076 -26.47389,114.2747 -26.00367,113.3805 -24.23071,113.7822 -23.46454,113.6558 -22.58013,114.0273 -21.85242,114.1938 -21.81702,114.1318 -22.48988,114.3544 -22.4952,114.6441 -21.84849,115.5039 -21.51101,116.2051 -20.8369,116.8159 -20.53016,116.8994 -20.72457,117.7831 -20.67538,119.1679 -20.00292,120.2323 -19.90876,121.2349 -19.44454,121.8143 -18.45387,122.3734 -18.10803,122.1713 -17.97735,122.17 -17.2685,122.5889 -16.95817,122.5706 -16.77079,122.8301 -16.78805,122.9217 -16.39615,123.5656 -17.63133,123.6897 -17.06268,123.9427 -17.28489,123.7924 -17.01186,123.9225 -17.10269,123.9518 -16.82112,123.7764 -16.90512,123.4223 -16.50671,123.5934 -16.51287,123.5017 -16.38424,123.7076 -16.33925,123.5543 -16.18025,123.7049 -16.13271,123.8672 -16.45177,123.9077 -16.21568,124.3087 -16.4566,124.9464 -16.38397,124.3778 -16.28192,124.7505 -15.80893,124.491 -16.00236,124.3617 -15.67157,124.6811 -15.48736,124.6775 -15.25406,124.8332 -15.32694,125.2936 -15.60703,125.106 -15.27117,124.8768 -15.30982,125.0527 -15.164,124.8338 -15.16299,125.016 -14.98069,125.3612 -15.11136,125.4878 -14.9903,125.1821 -14.96114,125.2548 -14.59409,125.5987 -14.55916,125.6003 -14.23088,125.6474 -14.65057,125.7347 -14.40692,125.9257 -14.64833,126.1592 -14.15074,126.0084 -13.92399,126.2194 -13.98457,126.2228 -14.26576,126.5658 -13.93898,126.4495 -14.09294,126.6118 -14.24444,126.7012 -13.97512,126.9269 -14.00033,126.7457 -13.78815,126.9587 -13.7349,128.2336 -14.73633,127.8699 -15.65046,128.1228 -15.18894,128.3421 -15.4926,128.2005 -15.06218,128.4328 -15.03927,128.4419 -15.04551,128.521 -14.76564,129.0758 -14.89008,129.1279 -15.28106,129.2603 -15.10386,129.2993 -14.85676,129.5981 -15.22134,129.6784 -14.90574,129.8024 -14.52369,129.3542 -14.41678,129.5842 -14.10074,129.8126 -13.50029,130.2728 -13.33018,130.1371 -12.92859,130.4366 -12.63457,130.624 -12.72983,130.7094 -12.71735,130.5784 -12.40634,130.9685 -12.67362,130.818 -12.40404,131.2986 -12.04239,131.4632 -12.28321,132.7747 -12.16209,132.6253 -11.72357,132.6344 -11.71094,132.526 -11.43523,132.0759 -11.52932,131.7556 -11.30089,131.9929 -11.12303,132.2021 -11.41214,132.1377 -11.12279,132.2815 -11.27042,132.3405 -11.11712,132.6554 -11.50677,132.9156 -11.33348,133.5054 -11.8822,133.9112 -11.74105,133.8299 -11.86276,134.124 -11.90073,134.177 -12.13673,134.7489 -11.95177,135.2503 -12.32984,135.5948 -12.04499,135.9102 -11.95826,135.646 -12.19998,136.0388 -12.06723,136.0172 -12.49509,136.3054 -12.39344,136.3891 -12.24506,136.1641 -12.16665,136.5587 -11.87812,136.4419 -11.99225,136.6612 -12.28144,136.9232 -12.28423,136.6158 -12.84248,136.4644 -12.77563,136.6594 -13.00559,136.4563 -12.97658,136.4673 -13.24467,136.3401 -13.32411,136.3342 -13.04918,136.1769 -13.28319,136.1367 -13.1295,135.9104 -13.27552,135.8732 -13.71035,136.0776 -13.65999,135.9001 -14.19353,135.32 -14.73736,135.6902 -15.11134,135.6341 -15.19089,135.4144 -15.34214,135.741 -15.11962,136.5388 -15.74217,136.7209 -15.69851,136.4449 -15.90838,137.0079 -15.89278,138.1774 -16.68902,139.0133 -16.89407,139.2394 -17.32325,140.0025 -17.7154,140.5957 -17.59815,141.2988 -16.48848,141.5774 -15.20735,141.7487 -15.23109,141.5938 -15.19851,141.5363 -13.57201,141.7849 -13.37148,141.586 -12.99449,141.8202 -12.67224,141.9456 -12.8935,142.0227 -12.72291,141.8275 -12.64872,141.976 -12.58115,141.7229 -12.38515,141.5926 -12.55694,141.8823 -11.95632,141.9295 -12.25757,142.0624 -11.98718,142.1285 -10.98328,142.5364 -10.69383,142.5026 -10.94977,142.6663 -10.99097,142.8572 -11.84996,143.246 -11.97608,143.08 -12.33769,143.4408 -12.61134,143.352 -12.8936,143.5451 -12.84207,143.5352 -13.76332,143.8042 -14.42536,143.9498 -14.51724,144.5196 -14.1698,144.6828 -14.5512,145.3472 -14.94608,145.2173 -15.45711,145.4762 -16.07886,145.4141 -16.46722,145.7763 -16.99296,145.9595 -16.89581,146.1464 -17.65281,146.0168 -18.24553,146.3341 -18.53351,146.2616 -18.86672,146.823 -19.28863,147.0196 -19.18341,147.126 -19.4455,147.4507 -19.38767,147.559 -19.6046,147.6565 -19.82311,147.8214 -19.70989,148.7623 -20.23579,148.927 -20.53556,148.6679 -20.44393,148.6923 -20.69207,149.2031 -21.1497,149.186 -21.21486,149.484 -21.5755,149.6165 -22.3648,149.6308 -22.58933,149.8073 -22.38585,150.0585 -22.65808,149.9103 -22.34991,150.0378 -22.13089,150.627 -22.66296,150.6669 -22.35275,150.8708 -23.48707,150.6397 -23.4833,150.7117 -23.54112,150.6909 -23.57003,150.6862 -23.57644,150.7156 -23.56973,150.7155 -23.60209,150.9423 -23.6101,150.9531 -23.59446,151.0979 -23.66216,150.9751 -23.4967,151.2367 -23.4906,151.3136 -23.75998,151.1082 -23.67241)),((145.4553 -42.44371,144.7447 -41.42496,144.7217 -40.64587,144.9141 -40.71412,146.3787 -41.23373,146.7636 -41.08134,147.1181 -41.41112,146.7858 -41.05701,147.9369 -40.74318,148.3456 -40.99535,148.3522 -42.19884,148.1547 -42.00274,147.8778 -42.84887,147.6017 -42.84795,147.4072 -43.0464,147.484 -42.91708,147.1572 -42.75444,147.3398 -43.05286,147.1644 -43.2831,147.029 -43.05572,146.8687 -43.63766,146.029 -43.57027,145.9288 -43.37072,146.2272 -43.32574,145.9237 -43.21409,145.8371 -43.31503,145.2639 -42.63265,145.1648 -42.19845,145.4553 -42.44371)),((130.4518 -11.5365,130.3587 -11.24776,130.8159 -11.53686,130.6956 -11.39614,130.8962 -11.30636,131.0241 -11.47866,131.1439 -11.24723,131.2501 -11.47,131.2553 -11.18953,131.4385 -11.31093,131.4706 -11.60843,130.9573 -11.94351,130.5251 -11.67711,130.6062 -11.83248,130.0278 -11.81299,130.2997 -11.71565,130.2335 -11.40581,130.3363 -11.31485,130.4518 -11.5365)),((137.4212 -35.59309,137.6296 -35.56724,137.7512 -35.84631,138.0396 -35.74517,138.0408 -35.90743,137.7416 -35.85561,137.4596 -36.07764,136.7021 -36.06597,136.5385 -35.902,137.4212 -35.59309)),((136.563 -13.81999,136.6924 -13.65382,136.7269 -13.84458,136.9052 -13.7685,136.6962 -14.12127,136.9472 -14.30985,136.3236 -14.24752,136.563 -13.81999)),((153.2266 -25,153.1238 -24.81661,153.2742 -24.70381,153.3676 -25.00854,153.0468 -25.79978,152.9939 -25.22204,153.2266 -25)),((148.2793 -40,148.3331 -40.21474,148.0882 -40.27396,147.7497 -39.8752,147.9441 -39.72156,148.2793 -40)),((144.1067 -39.81976,143.9201 -40.15881,143.8458 -39.71451,144.0009 -39.60104,144.1067 -39.81976)),((147.8619 -42.94779,147.9913 -42.91217,147.9953 -43.23017,147.6199 -43.06626,147.8619 -42.94779)),((139.1832 -16.6805,139.307 -16.46286,139.6892 -16.45211,139.1872 -16.68674,139.1832 -16.6805)),((113.6772 -26.07854,113.4052 -25.68978,113.5007 -25.51634,113.6772 -26.07854)),((148.3302 -40.29791,148.3961 -40.49413,147.9851 -40.42483,148.3302 -40.29791)))
+MULTIPOLYGON(((-70.07329 12.54865,-70.03988 12.59876,-69.92295 12.49854,-69.88954 12.39831,-69.95635 12.46513,-70.05658 12.51524,-70.07329 12.54865)))
+MULTIPOLYGON(((47.19468 41.89426,48.75009 41.69004,48.97988 41.47123,49.54342 40.63153,50.35502 40.36194,50.36355 40.19574,49.83642 40.36721,49.47114 40.17324,49.2779 39.49604,49.43929 39.2739,49.25684 39.31741,49.16844 39.10341,48.94538 39.15733,48.87941 38.437,48.63203 38.40241,48.01774 38.84517,48.36908 39.01485,48.13177 39.26484,48.37463 39.37077,47.99076 39.69632,46.95339 39.10436,46.42291 40.04073,46.79348 40.34929,46.48491 40.53529,46.70084 41.43105,47.19468 41.89426)))
+MULTIPOLYGON(((19.08731 44.85201,19.07898 44.84029,19.3452 44.87598,19.23896 44.60893,19.14994 44.37799,19.20327 44.23565,19.38089 44.16427,19.62988 44.02193,19.4699 43.93332,19.22091 43.98665,19.54087 43.68433,19.41658 43.54198,19.29187 43.631,19.11425 43.54198,18.97232 43.52393,19.11425 43.31063,19.02565 43.22161,18.88331 43.36395,18.72333 43.31063,18.59903 43.16829,18.68764 43.06163,18.45669 42.95498,18.52766 42.77695,18.58098 42.6703,18.52357 42.584,18.38573 42.61697,18.13673 42.70598,17.85246 42.90165,17.69248 42.97262,17.39015 43.2573,17.24822 43.47061,16.89257 43.66628,16.59066 43.89763,16.21737 44.23565,16.07503 44.57365,15.91505 44.73363,15.80839 44.73363,15.75507 44.87598,15.73743 45.1783,16.00406 45.24927,16.07503 45.12497,16.3593 44.98263,16.46596 45.21399,16.82161 45.21399,16.92826 45.23163,17.2835 45.1783,17.69248 45.14261,17.79913 45.03596,18.03008 45.14261,18.43905 45.10733,18.65236 45.07165,18.84762 44.87598,19.08731 44.85201)),((14.60021 45.2305,14.81975 44.97352,14.43313 45.07368,14.60021 45.2305)))
+MULTIPOLYGON(((-59.66669 13.31703,-59.44955 13.14998,-59.66669 13.01636,-59.66669 13.31703)))
+MULTIPOLYGON(((90.81133 22.22115,90.71954 22.05296,90.61105 22.15818,90.65922 22.78461,90.88893 22.44499,90.81133 22.22115)))
+MULTIPOLYGON(((3.369472 51.37461,3.31712 51.33633,3.338228 51.27769,3.476597 51.23314,3.474252 51.2988,3.553989 51.3246,3.720502 51.27535,3.753336 51.2261,3.887015 51.21203,3.983169 51.25659,4.123883 51.28942,4.222384 51.33163,4.311502 51.38792,4.442835 51.35274,4.38655 51.46297,4.541337 51.4747,4.517883 51.40903,4.67267 51.42075,4.759444 51.48642,4.848564 51.48642,4.771171 51.3973,4.968171 51.3973,5.022111 51.48642,5.099504 51.44186,5.06667 51.36447,5.132337 51.26597,5.20973 51.33163,5.219111 51.22141,5.448946 51.26597,5.514612 51.31991,5.592005 51.27769,5.570898 51.21203,5.711612 51.18858,5.800732 51.16747,5.878123 51.13464,5.800732 51.05724,5.767898 50.93763,5.645946 50.86024,5.678778 50.76174,5.821838 50.76174,6.025336 50.75425,6.403867 50.32674,6.13802 50.1329,5.73455 49.89968,5.816617 49.54663,5.477649 49.49361,4.856486 49.79186,4.877701 50.15532,4.148557 49.97853,4.206795 50.27324,3.694881 50.31094,3.139944 50.79072,2.795442 50.72651,2.546947 51.09281,3.369472 51.37461)))
+MULTIPOLYGON(((0.229351 14.98967,0.167995 14.52335,0.398786 14.02787,1.280971 13.35863,0.991821 13.37092,0.992786 13.05922,1.570111 12.6313,2.098688 12.72653,2.274273 12.42838,2.059467 12.35238,2.405395 11.90161,2.019249 11.42771,1.434505 11.47221,0.912155 10.99649,-0.142005 11.13898,-0.621151 10.90218,-2.834325 11.00416,-2.945597 10.62952,-2.689926 9.488792,-3.209423 9.924427,-3.900427 9.900578,-4.318694 9.599602,-4.6924 9.677105,-5.152773 10.32246,-5.518916 10.43326,-5.496531 11.06307,-5.199527 11.43251,-5.409314 11.83188,-4.569054 12.1346,-4.489498 12.71048,-4.228288 12.77813,-4.355398 13.13399,-3.984532 13.49584,-3.433222 13.16286,-3.237766 13.30563,-3.279644 13.71579,-2.911576 13.64737,-2.852649 13.99764,-2.147321 14.24911,-1.991972 14.58708,-0.7192 15.08039,0.229351 14.98967)))
+MULTIPOLYGON(((22.68183 44.21765,23.04128 44.08787,22.88669 43.84492,24.18021 43.68976,25.5627 43.64891,26.13661 43.98953,27.03238 44.15238,28.58377 43.73735,28.46886 43.36409,28.1502 43.40705,27.90702 43.19363,27.90702 42.70922,27.45765 42.4894,28.03134 41.98704,27.08228 42.09672,26.36189 41.71968,26.06927 41.71579,26.13499 41.36612,25.33353 41.24466,24.5423 41.57489,22.94867 41.34562,22.8776 42.02653,22.37164 42.32233,22.56844 42.48317,22.44953 42.83245,23.0071 43.19424,22.37304 43.81076,22.68183 44.21765)),((90.31396 23.0658,90.35698 22.97843,90.39146 22.83909,90.43008 22.82998,90.51941 22.17456,90.51005 22.16134,90.41635 22.19499,90.26651 21.9347,90.25928 21.89232,90.15397 21.88538,90.12435 21.91242,90.10071 21.89571,90.09218 21.92318,90.2271 22.18465,90.05339 21.97147,90.03577 22.12167,89.95785 21.97894,89.89097 22.20993,89.71237 21.76619,89.56026 21.99107,89.39063 21.70843,89.38985 21.90211,89.21927 21.75718,89.08354 21.93857,88.86646 22.9578,88.99747 23.19974,88.72794 23.2574,88.80328 23.48974,88.57062 23.6455,88.73291 24.26673,88.02834 24.68834,88.4422 25.20072,89.0113 25.29883,88.10567 25.82449,88.18036 26.14472,88.52641 26.37258,88.39457 26.62918,88.66698 26.2735,89.10016 26.39598,89.35738 26.00834,89.55626 25.96017,89.67532 26.22877,89.88033 25.9313,89.84493 25.28913,92.41306 25.02052,92.48511 24.86508,92.26034 24.83023,91.9061 24.14516,91.38819 24.1085,91.15093 23.64115,91.34951 23.08543,91.42766 23.25905,91.61399 22.92959,91.82832 23.09429,91.95375 23.72646,92.28809 23.69794,92.60881 21.97587,92.67366 21.29128,92.36672 21.47219,92.19804 21.15457,92.32608 20.74335,92.04735 21.17658,91.8118 22.19048,91.99925 22.41232,91.78563 22.22937,91.48845 22.9029,91.40863 22.76092,90.73324 22.88753,90.65673 23.32542,90.75747 23.63916,90.75493 23.64277,90.48831 23.59008,90.4809 23.59268,90.46096 23.63227,90.45624 23.64163,90.3849 23.69919,90.31414 23.75628,90.2522 23.7467,90.2309 23.72915,90.25223 23.6991,90.52809 23.39069,89.72082 24,89.77084 23.8359,89.54674 23.8241,89.06078 23.98389,90.12556 23.54546,90.15361 23.3245,90.12689 23.31145,90.1179 23.30705,90.10226 23.28774,90.11904 23.25971,90.16079 23.24258,90.3161 23.07075,90.17214 23.26201,90.48385 23.29943,90.44595 23.02246,90.31396 23.0658)))
+MULTIPOLYGON(((29.03217 -2.749662,29.07672 -2.592048,29.36887 -2.840679,29.86715 -2.76578,29.95822 -2.325547,30.56441 -2.417881,30.40339 -2.860481,30.84607 -2.977164,30.83693 -3.25414,30.0348 -4.273422,29.39148 -4.44525,29.24615 -3.070362,29.03217 -2.749662)))
+MULTIPOLYGON(((2.405395 11.90161,2.387346 12.24222,2.805825 12.41742,3.605074 11.69697,3.495874 11.29233,3.850976 10.59981,3.088169 9.101578,2.780915 9.065207,2.709604 6.36882,1.627816 6.225748,1.806693 6.28424,1.57392 6.688242,1.624833 9.042293,1.341589 9.54626,1.355205 10,0.774575 10.38476,0.912155 10.99649,1.434505 11.47221,2.019249 11.42771,2.405395 11.90161)))
+MULTIPOLYGON(((92.60881 21.97587,92.70662 22.15061,93.00166 21.98413,93.19876 22.25992,93.09991 22.7794,93.1313 23.04397,93.38774 23.13586,93.33115 24.07977,94.15455 23.8483,94.72583 25,94.582 25.24725,95.18343 26.06357,95.14398 26.61056,96.60806 27.36686,97.14354 27.09397,96.88756 27.60774,97.37821 27.8962,97.34721 28.21058,97.55236 28.53457,97.90508 28.3721,98.32202 27.53787,98.42828 27.68903,98.70368 27.56615,98.76456 27.05228,98.73453 26.18707,98.57286 26.11908,98.70353 25.85471,97.84502 25.26789,97.78796 24.84673,97.55451 24.74129,97.75788 24.16994,97.53503 23.93779,98.88095 24.15503,98.67962 23.96499,98.88978 23.18311,99.56421 22.9258,99.32204 22.7415,99.16896 22.15524,99.9706 22.05203,100.2026 21.43935,101.1177 21.77615,101.1547 21.56387,100.727 21.31212,100.5156 20.89783,100.6474 20.87555,100.2595 20.74696,100.0931 20.35574,99.46452 20.38927,99.53727 20.14476,99.07542 20.09255,98.92458 19.74414,98.04517 19.80859,97.67117 18.94544,97.76765 18.57921,97.34662 18.57051,97.6436 18.28764,97.69774 17.8203,98.50951 16.94456,98.68119 16.26792,98.9175 16.39474,98.84703 16.14147,98.56137 16.05271,98.58364 15.36202,98.1906 15.11106,98.61044 14.31464,99.11597 13.89081,99.10999 13.06757,99.66872 11.81529,98.77948 10.67773,98.68176 10.17759,98.5319 10,98.45467 10.68943,98.78153 10.98869,98.6548 11.12695,98.84052 11.68118,98.62184 11.78567,98.63331 11.92195,98.66819 11.93257,98.52191 12.25829,98.67622 12.99231,98.24451 13.81278,98.12527 13.54714,97.61571 16.07418,97.62534 16.50003,97.79173 16.34585,97.62139 16.64326,97.36294 16.47897,97.26455 17.10355,96.83478 17.40438,96.79061 17.48162,96.64977 17.33832,96.91109 17.32145,96.80129 16.73966,96.59639 16.53656,96.28638 16.58571,96.22281 16.75418,96.51187 16.8882,96.19852 16.76851,96.18707 16.47177,95.91209 16.41091,95.77855 16.12915,95.70959 16.27312,95.42638 15.72129,95.28683 15.7187,95.38594 15.87744,95.33962 15.98329,95.34706 16.00374,95.39066 16.23959,95.31509 16.06776,95.3014 16.04461,95.1768 15.7679,95.1907 16.04383,95.20765 16.09386,95.14078 16.2315,94.98206 15.76001,94.83425 15.78081,94.94432 15.95355,94.83636 15.85843,94.83456 15.88112,95.10056 16.30059,94.68565 15.83711,94.85285 16.2398,94.56961 15.92896,94.70086 16.21161,94.72485 16.63121,94.68309 16.68635,94.65501 16.35236,94.63886 16.33919,94.61512 16.31985,94.61045 16.30802,94.29451 15.99343,94.28742 15.98753,94.26152 16.5308,94.61115 17.55011,94.1409 18.73599,94.28001 18.73507,94.03092 18.86327,94.06857 19.3853,93.93727 18.8473,93.67422 19.01024,93.48414 19.40915,93.80901 19.22632,94.01077 19.381,93.77513 19.30105,93.68749 19.56537,93.99709 19.45255,93.72203 19.62648,93.79333 19.91599,93.41602 19.97076,93.32242 20.30786,93.30818 20.3201,93.28751 20.21659,93.24567 20.25241,93.2234 20.23547,93.25119 20.4261,93.12595 20.32796,93.12486 20.33121,93.0958 20.40571,93.10008 20.46338,93.07664 20.57224,92.8966 20.10944,92.76945 20.19339,92.90755 20.38484,92.7924 20.48871,92.7771 20.48516,92.61235 20.67968,92.61049 20.6864,92.60686 20.68616,92.61235 20.67968,92.72845 20.25999,92.33392 20.991,92.3291 20.99236,92.19804 21.15457,92.36672 21.47219,92.67366 21.29128,92.60881 21.97587)))
+MULTIPOLYGON(((114.0715 4.588868,115.0549 5.047173,115.0064 4.891522,114.7719 4.728659,114.8755 4.359025,114.6437 4.006352,114.0715 4.588868)),((115.0336 4.797955,115.1529 4.908361,115.3376 4.305109,115.0898 4.385616,115.0336 4.797955)))
+MULTIPOLYGON(((-69.46265 -17.50755,-69.64076 -17.28202,-68.81416 -16.33753,-69.23594 -16.14303,-69.41386 -15.62077,-69.12598 -15.25612,-69.3628 -14.80396,-68.84068 -14.21027,-69.07586 -13.6541,-68.96119 -12.85152,-68.6793 -12.49715,-69.56644 -10.95666,-68.58749 -11.11032,-66.61626 -9.89316,-65.37914 -9.697423,-65.38455 -11.26927,-64.993 -11.99937,-64.27783 -12.51148,-63.08235 -12.65285,-62.76447 -13.02264,-62.10852 -13.14852,-61.82428 -13.53925,-61.06904 -13.46343,-60.46772 -13.80096,-60.33445 -14.50884,-60.38313 -15.1052,-60.5653 -15.10499,-60.23581 -15.47606,-60.17298 -16.26463,-58.30934 -16.26969,-58.39461 -17.197,-57.77334 -17.55281,-57.4581 -18.22818,-58.13403 -19.76053,-57.87358 -19.98538,-58.16346 -20.16246,-58.1924 -19.79767,-59.11981 -19.34715,-59.98358 -19.29404,-61.7347 -19.62802,-62.27002 -20.56706,-62.64708 -22.24563,-62.80806 -22.00444,-63.93525 -22.00273,-64.32063 -22.86866,-64.6478 -22.1946,-65.75531 -22.10854,-66.22161 -21.78128,-66.2907 -22.08444,-66.73935 -22.23658,-67.1775 -22.80469,-67.87513 -22.8258,-68.17242 -21.29667,-68.54726 -20.87996,-68.43936 -20.6324,-68.75569 -20.39242,-68.78046 -20.08205,-68.52397 -19.92741,-68.69057 -19.73909,-68.40726 -19.4076,-68.95712 -18.94081,-69.06861 -18.0672,-69.46265 -17.50755)))
+MULTIPOLYGON(((-54.52573 2.303486,-54.1146 2.127094,-53.78421 2.36406,-52.90534 2.189559,-51.61506 4.190925,-51.54459 4.396619,-51.20151 4.083854,-51.17274 3.766992,-51.08532 3.895347,-50.68165 2.137318,-50.47079 1.819995,-49.97104 1.657724,-50.01251 1.026816,-50.18824 0.845562,-50.70216 0.315456,-51.41934 -0.412021,-51.12468 -0.140907,-51.39903 -0.472508,-51.25976 -0.50003,-50.95959 -0.065808,-50.66278 0,-50.75057 -0.428578,-51.05093 -0.68197,-50.68434 -0.604112,-50.65222 -0.275707,-50.32945 -0.085205,-49.63085 -0.247299,-49.00004 -0.13924,-48.36641 -0.373186,-48.90458 -1.505262,-50.38137 -1.938749,-49.28593 -1.704642,-49.38261 -2.158832,-48.60114 -1.305875,-48.49585 -1.552548,-48.31873 -1.478195,-48.50538 -1.470624,-48.4786 -1.149023,-47.89947 -0.558959,-47.40634 -0.763861,-47.46553 -0.593707,-47.2976 -0.588874,-47.16048 -0.814573,-47.07706 -0.663258,-47.05518 -0.867923,-46.82608 -0.708367,-46.41338 -1.084126,-46.17887 -0.913831,-46.14482 -1.257475,-45.99024 -1.076045,-45.82584 -1.2394,-45.70231 -1.149633,-45.69042 -1.347267,-45.68893 -1.368566,-45.6895 -1.378696,-45.41734 -1.289758,-45.46293 -1.547559,-45.32345 -1.319209,-45.39185 -1.553046,-45.33771 -1.753466,-45.08317 -1.474162,-44.97945 -1.607043,-44.86608 -1.423055,-44.96828 -1.661565,-44.78315 -1.724905,-44.70116 -1.800982,-44.69297 -1.803213,-44.47177 -2.035491,-44.76423 -2.264556,-44.55345 -2.221581,-44.35778 -2.334604,-44.49757 -2.442367,-44.51086 -2.480514,-44.77902 -3.312406,-44.56086 -2.961123,-44.36917 -2.652451,-44.02117 -2.398679,-44.34119 -2.783974,-44.20816 -2.856943,-43.72867 -2.481327,-43.45839 -2.59554,-43.37791 -2.329287,-42.22842 -2.817891,-42.23304 -2.673932,-41.43734 -2.938721,-39.88791 -2.885612,-38.47274 -3.699807,-37.1498 -4.943036,-35.48149 -5.161574,-34.8233 -7.001977,-34.82721 -8.003979,-35.30216 -9.193793,-36.41692 -10.51059,-37.02728 -10.94227,-38.32528 -12.9416,-38.5321 -13.0167,-38.49805 -12.72199,-38.71762 -12.6273,-38.76933 -12.99508,-38.58959 -12.9721,-38.93288 -13.22948,-38.88331 -13.62918,-39.07525 -13.88656,-38.92039 -13.94445,-39.06145 -14.71554,-38.85707 -15.86002,-39.21211 -17.15461,-39.13535 -17.69114,-39.56293 -18.09085,-39.69177 -19.35342,-40.35189 -20.31977,-41.0706 -21.50746,-40.99014 -22.01388,-41.96181 -22.53823,-42.01799 -22.99797,-43.04995 -22.98193,-43.08371 -22.67972,-43.2872 -22.80633,-43.18703 -22.99548,-43.54939 -23.08072,-44.40698 -22.94505,-44.66341 -23.05743,-44.58301 -23.36653,-44.9049 -23.33899,-45.40392 -23.6257,-45.41194 -23.82464,-45.93429 -23.77109,-46.81634 -24.20527,-48.25321 -25.43574,-48.25317 -25.43114,-48.12101 -25.26685,-48.41291 -25.22891,-48.44543 -25.389,-48.73886 -25.37393,-48.34996 -25.58059,-48.76333 -26.1993,-48.63543 -26.3741,-48.4933 -26.22403,-48.69536 -26.65774,-48.46946 -27.14774,-48.76078 -28.53476,-49.82983 -29.4736,-50.7809 -31.13062,-52.08659 -32.13484,-52.63416 -33.12595,-53.37161 -33.75053,-53.52446 -33.68903,-53.51495 -33.16332,-53.07554 -32.73903,-53.59493 -32.43153,-53.71415 -32.10408,-54.52603 -31.50096,-55.2451 -31.25673,-55.62381 -30.8503,-56.00782 -31.06264,-56.0214 -30.78441,-56.83579 -30.0911,-57.22708 -30.28558,-57.61797 -30.17916,-55.87476 -28.36226,-55.69562 -28.4253,-55.77309 -28.24701,-54.80873 -27.5359,-53.7986 -27.14745,-53.59184 -26.26489,-53.84392 -25.68932,-54.11059 -25.5044,-54.43019 -25.70594,-54.59636 -25.59497,-54.31655 -24.01433,-54.66784 -23.81538,-55.39753 -23.9739,-55.6128 -22.65852,-55.86168 -22.2791,-56.40335 -22.07751,-56.83665 -22.30044,-57.98896 -22.08457,-57.82151 -20.94222,-58.16346 -20.16246,-57.87358 -19.98538,-58.13403 -19.76053,-57.4581 -18.22818,-57.77334 -17.55281,-58.39461 -17.197,-58.30934 -16.26969,-60.17298 -16.26463,-60.23581 -15.47606,-60.5653 -15.10499,-60.38313 -15.1052,-60.33445 -14.50884,-60.46772 -13.80096,-61.06904 -13.46343,-61.82428 -13.53925,-62.10852 -13.14852,-62.76447 -13.02264,-63.08235 -12.65285,-64.27783 -12.51148,-64.993 -11.99937,-65.38455 -11.26927,-65.37914 -9.697423,-66.61626 -9.89316,-68.58749 -11.11032,-69.56644 -10.95666,-70.61765 -11.00737,-70.4999 -9.431578,-71.28828 -9.995796,-72.16473 -10.00232,-72.36356 -9.490671,-73.19613 -9.418253,-72.94584 -8.990152,-73.98156 -7.553418,-73.9537 -7.348258,-73.69297 -7.315934,-73.74282 -6.897146,-73.16131 -6.48023,-72.89562 -5.136259,-72.34502 -4.773405,-71.10893 -4.372511,-69.95342 -4.230484,-69.36835 -1.333702,-69.5933 -0.516707,-70 -0.20092,-70.06187 0,-70.03735 0.553025,-69.46821 0.734351,-69.11382 0.634123,-69.32924 1.062455,-69.85407 1.069752,-69.85519 1.714919,-68.12775 1.730217,-68.20544 2.037632,-67.95162 1.746852,-67.44616 2.141113,-67.11682 1.732161,-67.09666 1.170079,-66.86983 1.225646,-66.31854 0.743681,-65.38742 0.863895,-64.39851 1.539462,-64.34303 1.39162,-64.04498 2.034915,-63.41759 2.133158,-63.37712 2.423593,-63.81604 2.314885,-64.24787 2.527704,-64.29391 3.170593,-64.08481 3.603836,-64.61086 4.251375,-62.7561 3.674234,-62.73957 4.032468,-61.93494 4.116556,-61.34529 4.530355,-60.97837 4.522421,-60.59009 4.941295,-60.73177 5.19614,-60.12056 5.243235,-59.96942 5.073079,-60.16332 4.52116,-59.67398 4.381637,-59.51631 3.939903,-59.8651 3.560974,-59.99205 2.726567,-59.72432 2.276611,-59.7539 1.860766,-59.25275 1.397388,-58.80411 1.17508,-58.32467 1.590138,-58.00851 1.500673,-58 1.665301,-57.55563 1.695373,-57.3024 1.990075,-56.48025 1.941472,-55.91082 1.882989,-56.13354 2.256321,-55.94821 2.532005,-55.37018 2.407456,-54.93989 2.632479,-54.52573 2.303486),(-52.08681 -32.13097,-52.0918 -31.83675,-51.23351 -31.45783,-51.16632 -31.06297,-50.70461 -30.75599,-50.60135 -30.19411,-50.89063 -30.44112,-51.29451 -30.0068,-51.29333 -30.29492,-51.09238 -30.37138,-51.28168 -30.81134,-51.37454 -30.63546,-51.43591 -31.08794,-51.94927 -31.34798,-52.19708 -31.72896,-52.10632 -31.95207,-52.26282 -32.06171,-52.08681 -32.13097)),((-50.19813 0.265829,-50 0.309631,-49.60857 0.311495,-49.8603 0.008283,-50.35073 0.043637,-50.39441 0.222437,-50.19813 0.265829)))
+MULTIPOLYGON(((-78.17474 25.19393,-77.71301 24.48749,-78.04403 24.27788,-78.12514 24.51678,-78.44704 24.60538,-78.17474 25.19393)),((-73.65738 20.91607,-73.67854 21.10629,-73.00998 21.32986,-73.15784 20.97089,-73.65738 20.91607)),((-77.54922 26.87074,-77.03242 26.55475,-77.21186 25.84782,-77.39642 26.02855,-77.14205 26.56961,-77.54922 26.87074)),((-77.89266 26.64635,-77.9213 26.63776,-78.71546 26.48987,-78.99591 26.69455,-78.75601 26.52026,-78.57582 26.79688,-77.89266 26.64635)),((-76.14482 25,-76.32014 25.26903,-76.10857 25.12107,-76.16878 24.63396,-76.34193 24.83279,-76.14482 25)))
+MULTIPOLYGON(((88.92725 27.28978,89.35764 27.96391,90.00265 28.32378,90.38075 28.248,90.39165 28.07166,91.32251 28.08927,91.66819 27.94326,91.6572 27.76037,91.63419 27.53725,92.12455 27.28041,92.11964 26.92154,91.91294 26.80428,90.41105 26.90381,89.62505 26.72416,88.87685 26.94915,88.75972 27.11429,88.92725 27.28978)))
+MULTIPOLYGON(((25.2567 -17.78792,25.27033 -17.79891,26.16599 -19.54607,27.20168 -20.08701,27.28722 -20.49983,27.72207 -20.51928,27.68603 -21.06585,28.01623 -21.57341,29 -21.77173,29.36078 -22.19663,28.34627 -22.57694,27.74442 -23.23639,27.00567 -23.64784,26.8654 -24.26007,26.42155 -24.63555,25.87019 -24.75385,25.58393 -25.63317,24.65421 -25.81951,23.90865 -25.62613,23.46499 -25.27447,23.01187 -25.29341,22.56291 -26.22073,21.69972 -26.86086,20.69333 -26.90725,20.61319 -26.47431,20.83805 -25.95612,20.67549 -25.45156,20.00024 -24.75299,20 -22.00178,21.00174 -22.00384,20.99883 -18.31788,23.29662 -17.99752,23.61286 -18.50405,24.19486 -18.01912,25.2567 -17.78792)))
+MULTIPOLYGON(((26.61967 55.67435,27.60297 55.78648,28.24113 56.27555,28.58053 55.8454,31.23648 55.46122,31.10284 54.37546,32.32224 53.49015,31.85452 53.12265,31.90463 52.23735,31.65407 52.23735,31.06944 52.02019,30.48478 51.76965,30.48478 51.35204,28.07942 51.85316,26.19187 51.93666,24.52147 51.93666,23.65413 52.07933,23.17688 52.28258,23.91802 52.67258,23.92022 53.15824,23.50595 53.96659,24.76473 53.96052,25.51306 54.31833,25.79186 54.16851,25.55723 54.33265,25.75194 54.8152,26.87194 55.28482,26.44965 55.35035,26.61967 55.67435)))
+MULTIPOLYGON(((-89.14696 17.8095,-89.0387 18.00308,-88.84317 17.8665,-88.51293 18.46227,-88.3055 18.48507,-88.36373 18.29552,-88.09531 18.37731,-88.08086 18.20452,-88.28183 17.64348,-88.24293 16.80161,-88.93882 15.89004,-89.22346 15.89967,-89.14696 17.8095)))
+MULTIPOLYGON(((-75 44.97811,-76.13676 44.30282,-76.27047 44.26953,-76.42081 44.18601,-76.75488 44.1526,-76.88852 43.91876,-77.28941 43.85195,-77.38964 43.96888,-77.57337 43.96888,-77.59008 44.01899,-79.09344 43.75172,-79.46093 43.60138,-79.79501 43.3007,-79.34401 43.20047,-79.07674 43.23388,-79.07674 43.11695,-79.02663 43.06686,-79.00992 42.98334,-78.92641 42.91652,-79.02663 42.86641,-79.51104 42.833,-80.24602 42.79959,-80.39636 42.58244,-80.17921 42.51562,-80.51328 42.56573,-81.29838 42.64925,-81.79949 42.38198,-81.86631 42.26505,-82.46765 42.09803,-82.51776 41.94769,-82.71822 42.01451,-82.93536 41.96439,-83.18593 42.01451,-83.13581 42.24835,-82.91866 42.33187,-82.45094 42.29846,-82.45094 42.4488,-82.6681 42.53232,-82.50106 42.64925,-82.37823 42.95786,-81.69927 43.36752,-81.78279 44.10249,-81.28167 44.60362,-81.39859 44.95441,-81.63245 45.22166,-81.28167 45.22166,-81.28167 45.10473,-81.16474 44.93771,-80.94759 44.95441,-80.93088 44.73726,-80.64691 44.70385,-80.51328 44.57021,-80.04557 44.46999,-80.01216 44.62033,-80.09568 44.80407,-79.92865 44.83748,-79.92865 44.95441,-80.44646 45.48893,-80.69703 45.92324,-81.432 45.90654,-81.69927 46.00677,-82.16698 46.12368,-83.00217 46.17379,-83.68704 46.25731,-84.10887 46.51847,-84.32179 46.52458,-84.53895 46.5914,-84.50554 46.79185,-84.72269 46.94219,-84.63918 47.25955,-84.97325 47.61034,-84.88972 47.92773,-85.80845 48.01123,-86.45991 48.74622,-87.2617 48.77963,-88.11361 48.99676,-88.23052 48.94665,-88.16372 48.6794,-88.28064 48.52906,-88.63143 48.46224,-89.01562 48.22838,-89.56577 47.99149,-90.75883 48.08698,-90.86729 48.24529,-91.58295 48.04938,-92.08531 48.36502,-92.37912 48.23077,-92.98031 48.63298,-93.76878 48.51838,-94.59069 48.72066,-94.82763 49.31594,-95.16843 49.38861,-95.16467 48.99572,-122.7561 49.00119,-123.034 49.00134,-123.0919 49.00121,-122.9675 49.15862,-122.9294 49.17823,-122.8746 49.20648,-122.9278 49.1922,-123.0098 49.18598,-123.2609 49.26229,-122.8331 49.28077,-122.8838 49.47029,-122.9563 49.30083,-123.2639 49.32918,-123.1923 49.79649,-123.5146 49.38487,-123.7497 49.48208,-123.5294 49.70382,-123.9231 49.82747,-124.5173 49.80653,-124.8407 50.06272,-124.6724 49.97048,-124.7338 50.3232,-124.3182 50.50993,-125.0921 50.34944,-124.8548 50.5947,-124.915 50.80025,-124.6572 50.85981,-124.8811 50.94513,-125.1015 50.43336,-125.3219 50.43977,-125.5918 50.44762,-125.4833 50.68161,-125.6663 50.42501,-126.0816 50.48991,-126.2111 50.50215,-125.6832 50.38641,-125.4414 50.33339,-124.7904 49.46021,-123.8085 49.12729,-123.3852 48.42591,-123.7148 48.35976,-124.8465 48.67947,-125.2094 48.79484,-124.9149 48.98592,-125.0295 48.97424,-125.1991 49.09264,-125.5376 48.92008,-125.7788 49.18309,-125.7767 49.37007,-125.9794 49.22705,-125.9066 49.42902,-126.5368 49.37806,-126.5331 49.60481,-126.5319 49.60563,-126.1128 49.68929,-126.6522 49.76529,-126.7143 49.83463,-126.8491 49.9851,-127.1554 49.85764,-127.0897 50.13697,-127.3054 50.19187,-127.3473 50.01732,-127.6518 50.18264,-127.9165 50.11016,-127.7258 50.2939,-127.9739 50.321,-127.9345 50.46085,-127.4354 50.33154,-127.6056 50.51783,-127.42 50.60348,-127.7818 50.60365,-127.5609 50.55173,-128.048 50.44314,-128.4285 50.78627,-127.876 50.86717,-126.3616 50.53514,-126.2655 50.51407,-125.7277 50.65529,-125.501 50.93761,-125.6335 51.08655,-125.7107 50.71496,-126.1819 50.66846,-126.0215 50.81202,-126.5836 50.84942,-126.1865 50.95654,-126.5136 51.05704,-126.6618 50.86448,-126.7967 50.95782,-127.0703 51.00972,-127.1878 50.92647,-127.0184 50.81645,-127.5167 51.09131,-126.704 50.99166,-126.6644 51.19911,-127.1683 51.06207,-127.5478 51.12278,-126.9147 51.18697,-127.7825 51.15929,-127.0635 51.3476,-127.7845 51.35867,-127.3076 51.41555,-127.5585 51.46945,-127.5067 51.61805,-126.5954 51.61751,-126.6658 51.84129,-126.6951 51.66187,-127.4322 51.65166,-127.3597 51.86919,-127.6653 51.51414,-127.7655 51.64287,-127.8813 51.89525,-127.7116 52.03467,-127.8958 51.93128,-127.774 52.23319,-127.9189 52.34659,-128.092 52.5385,-128.3473 52.26048,-128.1203 52.75221,-127.891 52.74167,-128.1302 52.76873,-127.9719 52.92192,-128.4336 52.8109,-128.4314 53.0962,-128.9548 53.51012,-128.9442 53.5169,-128.47 53.31591,-128.1483 53.44825,-127.8232 53.0728,-127.5445 53.09444,-128.0513 53.37825,-127.9931 53.5199,-128.753 53.53412,-128.8073 53.7656,-128.4736 53.80376,-128.7106 53.87881,-128.524 54.25859,-128.812 53.85264,-129.3591 53.64951,-129.2852 53.3564,-129.6461 53.56383,-129.4206 53.40829,-129.5982 53.21214,-130.287 53.81858,-129.6737 53.58293,-130.1015 53.93475,-129.9532 54.15805,-129.7349 53.96415,-129.9383 54.17885,-129.2504 54.31887,-130.1249 54.14739,-130.2386 54.39596,-130.4865 54.36218,-130.4296 54.6297,-130.0623 54.35767,-129.9853 54.50495,-130.3549 54.63238,-129.8866 54.61713,-130.2147 54.71887,-130.1667 54.85464,-129.4075 55.11374,-130.0046 55.00305,-129.4587 55.46355,-129.7006 55.4039,-129.8097 55.62306,-129.7705 55.35984,-130.1191 54.98964,-129.9442 55.28502,-130.1438 55.73757,-130.0106 55.903,-130.1073 56.12453,-131.8436 56.64807,-131.8473 56.66231,-133.3731 58.42699,-134.96 59.2839,-135.0289 59.56924,-135.4831 59.80002,-136.3462 59.60201,-136.2238 59.54335,-136.5758 59.17006,-137.0295 59.04845,-137.0443 59.04448,-137.5208 58.91674,-137.5982 59.24158,-139.1862 60.09261,-139.069 60.35199,-139.9773 60.18466,-141 60.32135,-140.9922 69.64477,-139.1001 69.5027,-138.6087 69.23388,-135.2956 68.63409,-135.804 68.97524,-135.5454 69.01839,-135.9859 69.16249,-135.9875 69.16516,-135.1566 69.24895,-135.3124 69.40022,-135.1534 69.46591,-134.5387 69.41145,-134.4618 69.70893,-134.4218 69.70735,-133.872 69.567,-134.0692 69.25402,-131.3651 69.97023,-131.2122 69.81791,-130.9424 70.0942,-130.0771 70.06848,-130.0208 70.05245,-129.6703 70.25343,-129.3721 70.10094,-129.4845 70.01009,-131.074502 69.500741,-131.1414 69.29657,-130.9571 69.49844,-131.0408 69.12592,-130.8994 69.08076,-130.8847 69.32905,-130.344 69.68072,-128.9038 69.96047,-129.1892 69.70356,-128.9572 69.65469,-128.2186 69.91087,-128.3289 70.12772,-127.5049 70.20448,-128.1946 70.37044,-128.0385 70.57615,-127.4997 70.40517,-126.779 69.96833,-127.0353 69.91087,-125.4372 69.30676,-125.0982 69.43823,-125.6362 69.41277,-125.1403 69.47845,-125.5029 69.58787,-125.3704 69.69109,-124.7863 69.70212,-125.297 69.81142,-124.6281 69.97943,-125.1991 70.0145,-124.4508 70.03142,-124.6693 70.13815,-124.3363 70.04842,-124.4997 69.72333,-124.031 69.67475,-124.5382 69.39407,-123.8123 69.35184,-123.8097 69.35294,-123.1662 69.48947,-123.0368 69.81123,-121.8782 69.81344,-117.8693 68.99815,-114.9718 68.87074,-113.8886 68.40495,-114.0004 68.24091,-115.2444 68.19066,-115.0871 68.0095,-115.7488 67.91255,-115.1552 67.78632,-111.8819 67.67841,-110.0463 68.00929,-109.7139 67.72414,-109.0319 67.72794,-108.8335 67.35497,-108.5836 67.61952,-108.4539 67.35005,-107.9571 67.28417,-107.8487 67.04201,-108.6045 67.1551,-107.2212 66.35226,-107.7891 66.7728,-107.6314 67.07805,-107.5525 66.8394,-107.3817 66.97335,-107.0614 66.8162,-107.4214 67.05916,-107.0876 67.14344,-107.5168 67.20586,-107.7037 67.40512,-107.5659 67.5038,-108.0287 67.78281,-107.7093 68.02925,-107.704 68.03272,-106.323 68.18652,-106.4232 68.32474,-105.7389 68.41523,-105.6279 68.63642,-106.5783 68.52766,-106.3836 68.50646,-106.6225 68.47303,-106.5353 68.28894,-106.8862 68.36946,-106.9236 68.36829,-108.3777 68.11349,-108.3707 68.30072,-108.7383 68.34247,-108.2764 68.62838,-106.2007 68.94273,-105.4351 68.73598,-105.2795 68.4587,-105.535 68.40827,-104.5818 68.26037,-104.4886 68.02329,-104.0165 68.05297,-104.108 67.8829,-103.3922 68.16615,-103.0833 67.89893,-102.1296 67.67853,-100.6579 67.85955,-99.35172 67.77045,-98.3962 67.75763,-98.74615 68.05382,-98.29169 68.18349,-98.68971 68.40847,-97.69131 68.36664,-97.91167 68.56834,-96.57774 68.18755,-96.38296 68.32576,-96.71906 68.02126,-95.87786 68.30016,-96.20416 67.83835,-96.14408 67.62604,-96.30278 67.71399,-96.45303 67.46732,-96.08569 67.4841,-96.23621 67.24819,-96.09553 67.2233,-95.5507 67.39514,-95.8355 67.16297,-95.36604 67.15414,-95.11701 67.26289,-95.69269 67.74054,-95.46625 68.06966,-94.73415 68.05049,-93.32501 68.64629,-93.74701 68.62115,-93.56546 68.84476,-93.79462 69.08199,-94.0721 68.76642,-94.61455 68.75719,-94.57383 68.98434,-93.98794 69.16463,-94.29529 69.16582,-94.26258 69.32861,-93.54497 69.4435,-94.24697 69.44011,-94.5994 69.68726,-94.83006 69.56587,-95.9286 69.78378,-96.54889 70.25035,-96.21748 70.57755,-95.77225 70.53983,-96.04289 70.64789,-96.59743 70.814,-96.32858 71.0992,-96.53364 71.14194,-96.3423 71.15806,-96.47265 71.2814,-95.51697 71.29825,-95.49366 71.47686,-95.17489 71.52966,-95.88683 71.61687,-95.33151 71.76401,-95.0028 71.8511,-95.19084 71.95008,-94.63256 71.98933,-95.17501 71.97736,-95.11719 72.46407,-95.82698 72.85519,-95.63171 73.05653,-95.84602 73.14024,-95.53402 73.2322,-95.69366 73.68533,-94.6054 73.65302,-95.29697 73.98781,-93.32892 74.17175,-92.32559 73.94334,-90.15958 73.89754,-92.05442 72.75126,-94.28864 72.7699,-93.74217 72.7442,-93.44041 72.4575,-94.01038 72.00307,-94.4872 71.99255,-94.59119 71.86899,-94.32972 71.81612,-94.38658 71.67585,-93.68156 71.77267,-93.78529 71.657,-92.94928 71.35866,-92.81886 70.8683,-93.0009 70.85027,-92.14626 70.6054,-92.29051 70.50468,-92.07778 70.31825,-91.7265 70.37842,-91.51353 70.15752,-92.27831 70.28892,-92.5812 70.09193,-91.93058 70.02628,-92.99538 69.68998,-91.75511 69.48267,-91.19774 69.65306,-91.61312 69.52323,-90.63249 69.54817,-90.34602 69.45638,-90.76047 69.34503,-90.76376 69.33858,-91.42982 69.3632,-91.03319 69.24515,-91.02219 69.24187,-90.42717 68.88723,-90.59467 68.45854,-90.28441 68.37635,-90.59347 68.32227,-90.25544 68.24567,-89.75011 68.55257,-89.92817 68.62914,-89.73455 68.62405,-89.73733 68.97742,-89.37035 69.23206,-88.96773 69.25272,-88.05195 68.84465,-87.77516 68.31964,-88.37009 68.29033,-88.38001 67.98549,-87.33322 67.26902,-87.4866 67.11502,-87.24123 67.10143,-86.85229 67.17263,-87.00607 67.35979,-86.50747 67.33333,-86.49989 67.6897,-85.8651 68.05265,-85.63544 68.72397,-84.70601 68.73039,-85.12582 68.96409,-84.49545 69.02047,-85.44105 69.26222,-85.30013 69.4435,-85.51321 69.4903,-85.33549 69.57285,-85.49 69.77242,-85.1561 69.79155,-85.53936 69.8643,-83.71136 69.73965,-82.20935 69.63722,-83.24606 69.53812,-81.31645 69.19946,-81.23459 69.08636,-82.02563 68.88731,-81.31788 68.86902,-81.23434 68.6358,-81.92306 68.41135,-82.62427 68.44984,-81.99102 68.34766,-82.47884 68.31741,-82.22408 68.29284,-82.23102 68.12622,-81.95097 68.20844,-82.07736 67.911,-81.18546 67.46371,-81.39223 67.05808,-83.33627 66.34932,-83.95309 66.5972,-83.89772 66.92111,-84.00141 66.77145,-84.0043 66.7655,-84.72528 67.01403,-84.7317 67.01469,-84.8369 66.97414,-85.19254 66.87957,-84.55842 66.93622,-84.74583 66.90669,-84.48369 66.82855,-84.67268 66.8423,-84.10635 66.69222,-83.65919 66.2196,-84.55658 66.31937,-84.54868 66.31811,-84.32761 66.15912,-85.23753 66.27431,-85.41751 66.60213,-86.74689 66.53934,-86.59143 66.30985,-85.85161 66.16231,-87.3362 65.3207,-88.00572 65.34389,-88.83847 65.64796,-88.38457 65.63202,-89.81829 65.99384,-89.99532 65.93768,-89.73255 65.82664,-90.40662 65.87976,-89.03951 65.32479,-87.00521 65.23821,-86.96278 65.05343,-88.15434 64.29144,-88.03313 64.17556,-89.55719 63.98312,-89.77947 64.24969,-89.98738 64.20982,-90.09883 64.13517,-89.83656 63.92487,-90.22067 64,-89.97548 63.80347,-90.26727 63.60639,-90.79945 63.64837,-90.9349 63.57028,-90.64909 63.45958,-91.43768 63.76025,-93.08154 63.88984,-94.08669 63.96908,-92.24731 63.74968,-92.12867 63.64141,-92.47374 63.51673,-91.74611 63.71773,-90.69578 63.36351,-90.64087 63.09034,-91.36649 62.79967,-92.40672 62.84426,-91.8439 62.61996,-92.66149 62.6268,-92.14264 62.36467,-92.74367 62.48783,-92.54189 62.17306,-93.0718 62.33585,-92.73743 62.22551,-93.21292 62.20827,-92.97182 62.10959,-93.45991 62.05332,-93.29552 61.89162,-93.88383 61.9498,-93.27151 61.73639,-94.29131 61.40294,-93.8085 61.33755,-94.11243 61.31532,-93.98612 61.09594,-94.69445 60.45749,-94.84469 59.97152,-94.66818 59.35824,-94.8395 59.39122,-94.79692 59.08936,-95.02884 59.05895,-94.42935 58.71201,-93.18522 58.75551,-92.8473 57.82377,-92.43536 57.36339,-92.7354 56.92532,-90.61557 57.22998,-88.87547 56.85758,-87.96927 56.45853,-87.6161 55.98876,-85.90997 55.64656,-85.11507 55.25528,-82.35637 55.15685,-82.20412 54.80194,-82.46147 54.20195,-82.13016 53.81188,-82.29672 52.94795,-81.39362 52.11588,-80.67103 51.79826,-80.41902 51.33051,-79.81666 51.16312,-79.35505 51.66524,-78.86868 51.16614,-78.89952 51.39488,-78.68147 51.48997,-79.04461 51.76928,-78.45495 52.25507,-78.87654 52.73593,-78.70328 52.76521,-78.91798 52.91173,-78.78487 52.96339,-78.99019 53.01143,-78.89085 53.39813,-79.12489 53.4878,-78.8924 53.54769,-79.15621 53.68871,-78.95544 53.98975,-79.24315 54.16706,-79.75098 54.64175,-77.7693 55.26558,-76.71653 55.99261,-76.53454 56.37706,-76.58003 57.18884,-77.2084 58.00447,-76.99876 58.02364,-78.59483 58.65078,-78.57996 58.79597,-78.35629 58.71128,-78.55256 58.94977,-77.65475 59.37566,-77.96641 59.41412,-77.72179 59.55027,-77.82116 59.71626,-77.29651 59.80495,-77.48444 59.92154,-77.25406 59.99731,-77.65455 60.06463,-77.44888 60.11739,-77.78645 60.3961,-77.35775 60.5153,-77.84747 60.64655,-77.52276 60.84299,-78.23283 60.786,-77.7188 61.17718,-77.8229 61.45991,-77.49185 61.53091,-77.80447 61.70193,-78.01528 61.70924,-78.20424 62.25844,-77.52173 62.58499,-75.54941 62.27531,-75.88232 62.16849,-75.70893 62.08677,-75.36375 62.31903,-74.53571 62.10228,-74.70074 62.25795,-73.66656 62.47773,-72.60026 62.11346,-72.79279 61.82505,-72.19405 61.8673,-71.98133 61.66349,-72.26591 61.56703,-71.58022 61.632,-71.92908 61.44765,-71.56721 61.40466,-71.91061 61.39143,-71.62191 61.15356,-70.13313 61.09244,-70.14154 60.88103,-69.90303 60.79889,-69.49925 61.06556,-69.36131 60.81696,-69.81999 60.507,-69.62328 60.07256,-70.99586 60.08541,-69.72512 59.96646,-69.50762 59.63753,-69.75881 59.31074,-69.24852 59.33216,-69.53496 59.14359,-69.09587 59.05722,-69.34735 58.94014,-69.2908 59.09465,-69.48775 59.07932,-69.65952 58.79082,-69.84766 59.06273,-69.79144 58.83199,-70.29556 58.75962,-69.90928 58.78429,-69.81096 58.58174,-69.25824 58.90374,-68.35146 58.78123,-68.18862 58.5476,-68.33429 58.124,-69.41737 57.73291,-68.31128 58.09055,-68.01222 58.5827,-67.86809 58.33539,-67.74801 58.46358,-67.72518 57.92027,-67.46124 58.29366,-66.93604 58.51204,-66.51944 58.44284,-66.66404 58.54295,-66.45104 58.83094,-65.9258 58.61475,-66.02736 58.30462,-65.81712 58.5732,-66.08871 58.81678,-65.76555 58.83728,-65.99887 58.91339,-65.28447 59.04015,-65.5942 59.19307,-65.46886 59.14086,-65.56644 59.38555,-65.32336 59.24308,-65.52029 59.4798,-65.30608 59.4934,-65.48491 59.67002,-65 59.89758,-65.13273 60.05421,-64.67062 60.34659,-64.37997 60.23697,-64.74168 60.23514,-64.3593 60.17064,-64.69978 60.02381,-64.36559 60.13277,-64.5246 59.89762,-64.15212 60.01294,-64.30019 59.94469,-64.17535 59.7893,-63.9383 59.75893,-64.27118 59.78283,-63.91124 59.66231,-64.13061 59.51973,-63.72141 59.49353,-64.06448 59.38152,-63.37615 59.2677,-63.44973 59.09938,-64.05538 59.01992,-63.13515 59.05141,-63.34988 59.02545,-63.15535 58.8252,-62.89383 58.78299,-63.08622 58.66003,-62.90741 58.59315,-63.45332 58.54805,-63.32288 58.46318,-63.59982 58.28629,-62.56951 58.48663,-62.95313 58.19325,-62.58707 58.20253,-63.34994 57.97277,-62.50548 58.17508,-62.31678 58.02004,-62.6784 57.92881,-62.32626 57.91307,-61.88671 57.87132,-62.16 57.83049,-61.89939 57.60931,-62.55563 57.50223,-61.80781 57.37111,-62.01731 57.2262,-61.63529 57.23204,-61.3487 56.94438,-61.93456 56.80064,-61.6816 56.61314,-62.4519 56.75256,-61.65628 56.53774,-62.22871 56.45635,-61.58287 56.27827,-62.05095 56.21871,-61.34473 56.23223,-61.50194 56.06536,-61.24988 56.05794,-61.54337 56.01181,-60.95689 55.88713,-60.83663 55.86156,-60.93666 55.72396,-60.57506 55.80717,-60.6682 55.539,-60.30577 55.7728,-60.49441 55.33541,-60.17463 55.42584,-60.68043 54.98783,-60.21658 55.27921,-60.282 55.11107,-60.05479 55.24825,-60.30552 54.98354,-59.75761 55.33323,-59.97087 55.11024,-59.39874 55.15994,-59.91409 54.73906,-59.14868 55.22765,-59.38556 54.966,-58.94065 55.12924,-58.88161 54.85222,-59.10656 54.82042,-58.38875 54.72534,-57.94385 54.92255,-57.82427 54.81707,-58.1796 54.73762,-57.42859 54.64676,-57.36839 54.49819,-57.6861 54.45768,-57.50814 54.45702,-57.78081 54.36654,-57.78536 54.36642,-59.58337 54.03247,-58.44033 54.14395,-60.13058 53.77576,-60.01348 53.43372,-59.09501 53.67419,-58.83869 53.95044,-57.76866 54.06944,-58.35691 54.10599,-57.34674 54.13845,-57.05706 53.80972,-57.51561 53.57732,-57.29442 53.45132,-56.9548 53.72853,-56.46534 53.78222,-56.6997 53.68789,-56.22675 53.52377,-55.73884 53.13808,-56.17245 53.03307,-55.80016 52.83341,-56.1972 52.83873,-55.79918 52.65574,-56.53207 52.60164,-55.6188 52.44056,-56.23322 52.44659,-55.61524 52.21017,-55.89048 51.95683,-56.96179 51.41772,-57.68928 51.41149,-57.67268 51.60893,-57.76857 51.3907,-58.26172 51.31403,-58.5904 51.22453,-58.88981 50.97351,-58.89126 50.97338,-59.00827 50.73263,-59.07204 50.88222,-59.42444 50.66204,-59.59283 50.47704,-59.96666 50.2895,-60.8252 50.23673,-60.9648 50.23227,-61.7451 50.08135,-61.58482 50.1871,-62.34949 50.28849,-63.7628 50.304,-66.45371 50.26146,-67.13618 49.80164,-67.37097 49.31466,-68.04184 49.2999,-69.07185 48.76894,-69.90295 47.77265,-71.17139 46.82405,-70.49103 47.01621,-68.82513 48.37036,-66.24691 49.18906,-64.9535 49.20143,-64.21242 48.85229,-64.63388 48.82677,-64.17631 48.61745,-64.32932 48.41,-65.25108 48.00405,-65.9118 48.19959,-66.78469 47.98643,-66.36907 48.06531,-65.61979 47.64543,-64.74488 47.76628,-64.97902 47.28011,-65.36513 47.09086,-64.80652 47.07615,-64.91228 46.88135,-64.56149 46.21244,-63.79509 46.13371,-64.10583 46.01532,-63.25583 45.73671,-62.68547 45.7608,-62.5066 45.58865,-61.91117 45.87936,-61.86677 45.68111,-61.49866 45.70008,-61.23976 45.4885,-61.49364 45.38461,-60.98605 45.27863,-61.69363 45.16757,-62.47809 44.8524,-62.49819 44.88583,-63.612 44.67433,-63.65039 44.43065,-63.93682 44.50154,-63.91249 44.68487,-64.08931 44.46818,-64.30708 44.56729,-64.23368 44.2896,-64.40664 44.22847,-65.07163 43.69117,-65.38692 43.74115,-65.47486 43.45284,-65.73166 43.49458,-65.8624 43.81212,-66.12601 43.7404,-66.21465 44.09741,-65.85098 44.56831,-66.11064 44.49644,-64.50256 45.33141,-64.20509 44.94878,-64.16921 45.19009,-63.34638 45.36783,-64.94868 45.32487,-64.28714 45.79143,-64.55496 45.72178,-64.55752 45.9754,-64.78236 45.59124,-65.5782 45.3001,-67.09035 45.07576,-67.46207 45.24411,-67.4472 45.60041,-67.81347 45.68372,-67.78654 47.06619,-68.2367 47.3573,-68.89502 47.17887,-69.22559 47.45865,-69.98644 46.6995,-70.30109 46.19219,-70.25917 45.88986,-70.86777 45.23078,-71.2938 45.29987,-71.53727 45,-74.66793 45.0026,-75 44.97811),(-127.5208 52.14182,-126.9952 52.29173,-126.6705 51.95804,-126.9596 52.30944,-126.309 52.43107,-127.1635 52.33678,-127.206054 52.525647,-127.6317 52.6021,-127.5017 52.3382,-127.4443 52.35879,-127.2122 52.3151,-127.5208 52.14182),(-131.258349 69.516869,-131.882663 69.405321,-131.499649 69.42548,-131.5992 69.28653,-131.334952 69.47655,-131.377 69.2889,-131.258349 69.516869),(-131.9452 69.38998,-131.9477 69.39596,-131.9452 69.38998),(-123.921 49.8327,-123.9231 49.82747,-123.921 49.8327),(-131.2312 69.52977,-131.2344 69.52972,-131.2312 69.52977),(-131.112 69.53172,-131.1049 69.53184,-131.112 69.53172),(-93.55222 69.41476,-93.54497 69.4435,-93.55222 69.41476)),((-121.9422 49.25759,-121.8597 49.3837,-121.9422 49.25759)),((-64.5199 63.68056,-64.6731 63.68548,-64.45908 63.44946,-64.70481 63.38692,-64.51477 63.24119,-64.9769 63.5677,-64.99326 63.55076,-65.13944 63.39942,-64.87598 63.23276,-65.05095 63.31309,-64.9246 63.21321,-65.06152 63.1652,-64.59206 62.91599,-65.26785 63.02649,-64.92731 62.65748,-65.31199 62.69165,-65.29322 62.93619,-65.53734 62.79973,-65.68414 63.04811,-65.7615 62.8777,-66.23787 63.22181,-66.056 62.94187,-66.39428 63.01326,-66.66677 63.29911,-66.5191 63.40867,-66.68747 63.29752,-66.53225 63.001,-66.78832 63.28839,-66.79892 63.1499,-67.00606 63.24693,-66.91729 63.39692,-67.14238 63.27811,-67.89263 63.77288,-67.68774 63.3704,-68.40948 63.72571,-68.97713 63.74998,-68.86382 63.60463,-67.04703 62.75028,-66.33638 62.43639,-66.49679 62.33883,-66.32441 62.25582,-65.88769 62.20542,-66.23204 62.08253,-65.94785 61.87126,-66.27477 61.85809,-68.60662 62.26283,-68.8373 62.59862,-68.9708 62.36065,-69.23489 62.64098,-69.58691 62.65485,-69.37595 62.76188,-69.81245 62.82139,-70.15999 62.7381,-70.99393 62.94806,-70.81835 63.0583,-71.11793 62.99168,-70.85942 63.15988,-71.17903 62.99736,-71.37985 63.11783,-71.63625 63.13517,-71.74288 63.37787,-72.11536 63.43977,-71.19482 63.59259,-71.54689 63.56866,-71.47861 63.71214,-71.90572 63.86594,-71.90208 63.63464,-72.10548 63.71165,-72.10667 63.71275,-72.31856 63.71335,-72.24088 63.94717,-72.4859 63.77544,-73.04372 64.23251,-73.46371 64.39129,-73.68146 64.54728,-73.4259 64.6016,-73.93095 64.60274,-73.76268 64.46763,-74.11595 64.32616,-74.13318 64.53938,-73.94047 64.5136,-74.16122 64.56799,-73.98009 64.5607,-74.02942 64.72514,-74.38348 64.56538,-74.68639 64.71782,-74.46143 64.83041,-74.64029 64.89792,-74.97359 64.7701,-74.4437 64.56133,-74.69894 64.54548,-74.46016 64.38638,-75.8646 64.61923,-75.60648 64.44343,-75.90182 64.42695,-75.69151 64.3655,-76.64567 64.18736,-77.88824 64.3711,-78.29413 64.69967,-77.96453 65.04658,-77.30958 65.17905,-77.52541 65.3187,-77.31705 65.48144,-76.00956 65.25232,-74.52949 65.32627,-74.13007 65.53614,-73.46538 65.4482,-74.45757 66.15591,-72.99874 66.7122,-72.80652 67.02031,-72.15702 67.26558,-72.93243 67.9282,-72.99319 68.23821,-73.50298 68.27742,-73.20325 68.37621,-73.64925 68.25051,-73.96282 68.41727,-73.65117 68.6616,-74.19792 68.7291,-73.88392 68.55865,-74.23353 68.51638,-74.64902 68.79345,-75.4688 69.02628,-76.62923 68.69081,-76.61549 69.02504,-75.60004 69.07727,-75.59758 69.24265,-76.65012 69.54085,-76.18031 69.67326,-77.1913 69.64409,-76.68973 69.84872,-77.30827 69.83691,-76.9656 70.00124,-77.5873 69.74413,-77.64282 70.17577,-77.88632 70.2459,-79.05778 70.47508,-78.70623 70.54786,-78.87183 70.63687,-79.38031 70.52818,-79.60027 70.37154,-78.94543 70.32769,-78.65893 69.97462,-79.63122 69.86477,-81.7291 70.13999,-80.76743 69.79851,-80.92403 69.72294,-82.08414 70.22441,-83.02024 70.31941,-81.71169 69.95527,-82.12012 69.79416,-83.03744 70.02144,-85.83322 70.01758,-86.55068 70.2476,-86.3586 70.52974,-86.64453 70.32373,-86.97366 70.47256,-87.24086 70.3921,-86.97721 70.29262,-87.87707 70.25062,-88.77643 70.50388,-89.52448 71.09993,-86.98323 71.00665,-87.82109 71.27393,-89.98872 71.4647,-89.76058 71.77264,-90.10643 71.93687,-90.02966 72.06528,-89.5676 72.16036,-89.88557 72.19007,-89.91465 72.42513,-89.46223 72.66122,-89.57243 72.79729,-89.23199 72.78493,-89.40664 72.82606,-89.30318 73.05638,-88.27144 73.57001,-87.22573 73.79201,-84.82253 73.74149,-86.02046 73.3125,-86.73479 72.72504,-86.22977 72.41372,-86.39201 72.01264,-84.83014 71.27882,-86.79687 70.99731,-84.95172 71.20235,-84.85992 71.0804,-85.14844 71.09446,-84.75906 70.94001,-84.63252 71.22581,-84.77496 71.37484,-84.43948 71.65023,-85.27711 71.68404,-85.93666 71.99365,-85.50518 72.06039,-85.47314 72.2691,-84.36124 72.07504,-85.7007 72.6496,-85.56317 72.97138,-84.49556 72.87536,-85.46214 73.11748,-84.09555 73.06042,-85.1182 73.31747,-84.31102 73.2275,-84.63196 73.40574,-83.64307 73.3846,-84.00085 73.51431,-82.85393 73.73848,-81.60035 73.73363,-81.17266 73.48571,-81.17345 73.25952,-80.57674 73.15323,-80.63028 72.93019,-80.22767 72.7339,-80.90268 72.46136,-80.46852 72.46114,-80.89397 72.18871,-80.53792 72.06955,-81.07833 72.05807,-80.77258 72.02274,-80.94498 71.89096,-80.32227 72.0722,-80.48262 72.18927,-79.91238 72.46537,-79.9051 72.46395,-78.93256 72.27471,-79.17982 71.96439,-78.4974 71.87194,-78.92414 72.01812,-78.84425 72.17764,-77.72746 71.74634,-78.81512 72.31867,-77.65176 72.20636,-78.54666 72.50015,-76.91398 72.74686,-75.16029 72.49182,-75.31162 72.4254,-74.92292 72.24818,-75.4702 72.13573,-75.22668 72.05851,-76.07014 71.69533,-75.02431 72.12353,-74.2076 72.0635,-74.23416 71.8191,-75.34546 71.69349,-74.90122 71.66085,-75.37881 71.50887,-74.60366 71.65986,-75.11955 71.46165,-74.68015 71.39552,-75.0396 71.17955,-74.61527 71.37473,-74.74006 71.5229,-74.52367 71.65266,-74.13819 71.64744,-73.57227 71.75566,-74.29495 71.41213,-74.0061 71.43981,-74.22076 71.20027,-73.54733 71.55042,-73.61479 71.36303,-73.3652 71.39869,-73.85559 71.0473,-73.31864 71.35014,-73.03032 71.27985,-73.3468 70.96989,-72.82279 71.43418,-73.02835 71.29661,-73.3783 71.51764,-73.06453 71.51721,-72.80716 71.44804,-72.57671 71.65223,-71.28671 71.38203,-71.13108 71.26434,-71.65172 71.0304,-71.83311 71.05367,-72.22227 70.92384,-72.77285 70.82101,-72.16936 70.84051,-72.55479 70.61366,-70.59946 71.06287,-70.50176 70.92359,-70.75528 70.75151,-71.39559 70.57114,-71.15383 70.54086,-71.52436 70.02307,-70.99262 70.62998,-69.87016 70.8803,-70.60933 70.45492,-69.43354 70.79012,-68.34855 70.57866,-68.42438 70.37559,-70.01765 70.00737,-68.6702 70.20808,-69.98078 69.6114,-68.21177 70.10079,-68.3568 70.16833,-68.04906 70.32941,-67.4357 70.10075,-67.11507 69.729,-67.8113 69.68356,-67.91944 69.51966,-68.30367 69.58353,-68.02643 69.66953,-70.04547 69.53774,-67.20722 69.46412,-66.65708 69.19048,-69.25535 69.26143,-68.06551 69.22046,-68.97076 69.23002,-68.49039 69.20726,-69.06793 69.11143,-68.90739 69.10326,-69.0004 68.97631,-68.18236 69.1513,-67.69398 69.02041,-68.50322 68.89843,-67.75414 68.78375,-68.44744 68.79404,-69.38037 68.80787,-68.04383 68.68188,-68.88731 68.59787,-67.92183 68.55628,-67.93865 68.39909,-67.65853 68.56757,-67.4933 68.54217,-67.60394 68.38265,-66.6525 68.44458,-67.86531 68.26816,-66.99524 68.32909,-67.5807 68.16842,-66.76453 68.2455,-67.03475 67.99461,-66.28909 68.12518,-66.50656 68.07533,-66.1591 68.01035,-66.40572 67.8495,-66.76086 67.87523,-66.36202 67.76746,-66.11081 67.91632,-65.91558 67.87624,-66.02255 67.59163,-65.77993 67.97449,-65.44707 67.99043,-65.61334 67.7757,-65.33123 67.58582,-65.56064 67.78049,-65.40871 67.91799,-64.71049 67.98351,-65.08299 67.91933,-64.91044 67.91611,-65.15208 67.66167,-64.67509 67.82375,-64.39319 67.69953,-64.05017 67.52406,-64.45733 67.47048,-63.9405 67.34055,-64.78137 67.36322,-64.21751 67.29491,-64.80341 67.20451,-63.94788 67.26331,-64.69962 67.00661,-63.50244 67.23297,-63.8172 66.89641,-63.12547 67.32937,-62.95602 67.22375,-63.28617 67.10887,-63.23744 66.9572,-63.82985 66.81631,-63.43379 66.91014,-63.38131 66.70958,-63.33656 66.89101,-62.82937 66.95953,-62.92754 66.63628,-62.7666 66.93456,-62.33494 66.71593,-62.41642 66.93049,-61.97283 67.04003,-62.08302 66.89506,-61.82057 66.9626,-61.99643 66.85711,-61.27528 66.66946,-61.42581 66.53002,-62.18172 66.62165,-61.55994 66.48399,-61.9856 66.39886,-61.46335 66.34919,-62.56998 66.39443,-62.31822 66.28976,-62.79379 66.22718,-61.92661 66.00426,-63.04427 66.10685,-62.27991 65.79621,-62.84642 65.90812,-62.56051 65.73254,-62.84472 65.75732,-62.60973 65.67207,-62.83963 65.60577,-62.84605 65.60982,-63.24118 65.63394,-63.49438 65.93543,-63.34795 65.6569,-63.73732 65.67088,-63.36761 65.62336,-63.68722 65.55659,-63.29044 65.41809,-63.74046 65.47494,-63.31228 65.17876,-63.51014 65.19384,-63.32775 65.13807,-63.57963 65.04398,-63.54018 64.88314,-63.84431 64.97144,-63.72885 65.0556,-64.24858 65.08219,-64.11594 65.24751,-64.32615 65.13333,-64.20824 65.43948,-64.55044 65.07452,-64.8968 65.25972,-64.68507 65.33454,-64.91006 65.33308,-64.40047 65.46894,-65.04933 65.36118,-65.16559 65.48096,-64.70819 65.64613,-65.29552 65.62746,-64.77443 65.71803,-65.49574 65.73604,-65.34432 65.91297,-64.66337 65.95468,-64.84624 66.02168,-64.75738 66.1723,-64.32525 66.3381,-65.87399 65.93875,-65.46513 66.38232,-65.96649 66.1017,-66.5349 66.23641,-66.43494 66.39935,-66.75317 66.37031,-66.75523 66.37066,-66.72038 66.59314,-67.93072 66.63082,-67.11389 66.43988,-67.42336 66.4409,-67.22594 66.26604,-67.97379 66.50675,-67.76949 66.2403,-67.23193 65.98803,-67.67478 65.91776,-67.71561 66.10492,-67.73077 65.8874,-68.36174 66.06488,-68.04858 65.82395,-68.23516 65.7637,-67.7858 65.78091,-68.11454 65.43169,-67.78278 65.58394,-67.41679 65.64857,-67.2579 65.6431,-67.50528 65.54332,-67.34023 65.43034,-67.04633 65.4606,-67.40656 65.3413,-67.07343 65.28082,-67.24796 65.16647,-66.90427 65.21545,-67.10526 65.04639,-66.73746 65.16264,-66.9297 65.03637,-66.75031 65.04398,-66.7246 64.71368,-66.67274 65.03426,-66.11642 64.8605,-66.43678 64.72267,-66.30961 64.60576,-66.40919 64.71687,-66.01772 64.84917,-65.80641 64.62348,-65.95654 64.86697,-65.70422 64.8431,-65.53488 64.71667,-65.67866 64.51395,-65.67997 64.5121,-65.05984 64.44436,-65.68297 64.29631,-65.27238 64.21909,-65.42213 64.13361,-65.01024 64.03897,-65.22717 64.01065,-64.60505 63.97697,-64.96906 63.80438,-64.57482 63.69984,-64.90353 63.81525,-64.53584 63.90116,-64.45593 63.6581,-64.5199 63.68056),(-71.54161 70.53001,-71.39559 70.57114,-71.54161 70.53001)),((-78.21884 82.92164,-75.86047 82.58842,-76.26974 82.43539,-75.46043 82.61913,-77.27365 83.02971,-74.47939 83.02983,-72.6256 82.69371,-73.63957 82.92488,-73.1084 83.03407,-66.37541 82.93134,-68.66579 82.62379,-65.17776 82.7528,-65.44755 82.78979,-65.06759 82.8454,-65.27299 82.88352,-64.84644 82.91032,-63.52161 82.82157,-63.96028 82.71264,-62.96911 82.57607,-63.35703 82.43183,-61.13573 82.3563,-64.41186 81.71519,-68.32737 81.56062,-69.33637 81.71329,-68.62269 81.51137,-66.65344 81.51105,-69.99689 81.08273,-64.5404 81.54749,-70.18258 80.34515,-69.93493 80.25927,-70.12061 80.18999,-72.38819 80.21512,-71.85825 80.10623,-72.32915 80.05468,-70.47473 80.08865,-71.42247 79.92927,-70.86974 79.88396,-71.466 79.72487,-74.90097 79.83525,-73.34926 79.76772,-73.20783 79.5224,-75.04905 79.3689,-77.13725 79.53192,-75.87103 79.34179,-78.06289 79.35041,-74.44998 79.22299,-74.80547 79.18172,-74.40408 79.0501,-74.58818 79.0128,-77.80033 79.20516,-76.06375 79.10049,-77.92059 78.93435,-76.6906 79.02704,-74.76842 78.8231,-74.82314 78.63535,-74.5952 78.58634,-76.08208 78.48222,-75.0192 78.32892,-76.9058 78.2081,-75.5974 78.12601,-75.88023 77.95909,-78.40002 77.89891,-77.70501 77.59546,-78.32793 77.3707,-80.04715 77.27242,-81.67703 77.50965,-81.15198 77.32565,-82.20728 77.29278,-79.25259 77.21534,-78.9769 77.09658,-79.40788 76.93426,-78.73836 76.81586,-78.08983 77.01528,-77.78216 76.67222,-78.37595 76.45074,-78.80261 76.56828,-79.28024 76.30032,-81.062 76.13159,-80.76167 76.41681,-82.12399 76.53411,-82.7785 76.37616,-83.32237 76.6605,-83.1523 76.41804,-84.16161 76.50052,-85.03056 76.58186,-84.93646 76.41294,-84.44161 76.29757,-86.51313 76.48375,-86.6992 76.34439,-87.48347 76.53522,-87.39763 76.35128,-88.32666 76.38331,-88.62944 76.74287,-88.59683 76.39921,-88.61871 76.55583,-88.87518 76.40685,-89.65209 76.57175,-89.36512 76.72707,-89.527 76.84896,-88.53726 77.09458,-86.6113 77.17514,-87.22311 77.20002,-86.83426 77.35864,-87.71595 77.35564,-87.62704 77.48835,-88.22834 77.65956,-88.09078 77.8112,-88.22313 77.85532,-86.43169 77.83761,-85.9655 77.70631,-85.81355 77.4166,-84.52551 77.29169,-83.45089 77.3484,-83.83093 77.45205,-82.31645 78.07549,-83.89857 77.4861,-84.78098 77.51653,-85.69016 77.92947,-85.04745 78.05666,-84.7672 78.33941,-85.47997 78.09577,-86.25645 78.06469,-85.98499 78.30396,-87.51965 78.14028,-87.06882 78.20117,-87.49977 78.2126,-87.52731 78.3978,-86.64781 78.79836,-85.08517 78.92099,-82.34089 78.56297,-83.25671 78.84543,-81.64313 78.87885,-81.69907 79.02681,-82.52604 78.8878,-84.72626 79.02741,-83.5361 79.04611,-84.31136 79.18882,-85.13403 79.63984,-86.42596 79.76492,-86.20876 80,-86.66797 80.11884,-86.52673 80.29913,-83.7102 80.22907,-81.63425 79.62585,-80.72512 79.57033,-79.82093 79.67067,-81.50503 79.71058,-81.60435 79.95574,-83.23376 80.32454,-78.10284 80.56483,-80.00912 80.61169,-76.49068 80.87172,-79.00092 80.88163,-78.48402 81.14967,-79.51657 81.1863,-79.08438 81.07983,-79.67983 80.81194,-82.83002 80.54086,-83.10314 80.64513,-81.95412 80.83327,-83.39065 80.67726,-83.60751 80.73712,-83.26122 80.8364,-83.81535 80.73138,-83.70388 80.62372,-83.89657 80.5345,-86.76152 80.59388,-85.1004 81.02583,-82.439 81.14494,-85.70877 81.04475,-87.2154 80.62939,-89.45199 80.91177,-85.81654 81.06989,-84.70577 81.28954,-89.89796 81.01438,-90.28654 81.19711,-88.93315 81.2404,-89.95764 81.33448,-87.26992 81.48882,-88.32804 81.5751,-90.37183 81.3601,-90.85586 81.44466,-89.54535 81.62343,-91.93626 81.60668,-89.43023 81.86319,-89.16425 81.89041,-88.07726 82.1021,-86.81657 81.88404,-87.20064 81.95573,-86.89404 82.05154,-84.55436 81.87737,-86.90459 82.20691,-85.35464 82.27622,-85.90762 82.43342,-85.05518 82.47912,-83.24208 82.27635,-82.94586 82.11465,-83.11445 82.05093,-81.86156 82.03364,-82.67325 82.09366,-83.04297 82.24312,-82.66504 82.28036,-79.18816 81.81364,-82.65868 82.35561,-81.48357 82.49612,-82.33184 82.65824,-80.58206 82.54477,-81.56808 82.81128,-78.4994 82.67706,-80.41549 82.89111,-78.21884 82.92164)),((-115.889 70.58663,-115.9213 70.58358,-117.3928 70.57552,-118.4141 70.97755,-115.0394 71.53217,-118.0037 71.37566,-118.3046 71.47005,-117.6824 71.67742,-119.0677 71.66673,-118.9016 72.00014,-118.0794 72.2395,-118.5272 72.47167,-117.3195 72.91604,-114.4975 73.3735,-113.9659 73.19157,-113.9266 72.8232,-114.5675 72.56354,-113.4109 72.66671,-113.5778 72.78152,-113.3351 72.9239,-112.7751 72.98914,-111.1852 72.72295,-111.8815 72.34852,-111.6416 72.27831,-110.6734 72.57294,-109.7544 72.48132,-110.2889 72.66492,-109.7281 72.71794,-110.7158 72.95969,-109.8896 72.97004,-109.0414 72.74606,-108.9994 72.57632,-108.6499 72.61827,-108.3088 71.95184,-108.2493 71.72901,-107.8196 71.59888,-107.2729 71.81002,-107.745 72.13743,-107.7419 72.44971,-108.2495 73.1192,-107.8557 73.19763,-108.0323 73.33786,-107.0136 73.16711,-106.7366 73.29471,-105.7541 73.02531,-105.3079 72.77396,-105.4405 72.69564,-104.8595 71.90244,-104.3373 71.5966,-104.2965 71.35611,-104.6378 71.12718,-104.467 71.0178,-103.5301 70.58863,-102.8773 70.51989,-103.0135 70.68827,-101.5238 70.27505,-101.513 70.11826,-100.9896 70.20097,-100.9389 69.6757,-101.306 69.68413,-101.426 69.94554,-101.6529 69.65686,-102.0418 69.96184,-102.6674 69.77826,-102.5247 69.55721,-103.5191 69.71607,-102.998 69.50344,-103.1761 69.1096,-102.2952 69.52513,-101.9606 69.45929,-102.2133 69.22322,-101.8816 69.27496,-101.7105 69.16019,-101.8064 69.00326,-103.4189 68.78451,-105.1251 68.89618,-105.2497 68.96227,-105.0364 69.11478,-106.3912 69.17584,-106.3174 69.40505,-106.5876 69.49583,-107.394 69.00006,-108.6159 68.94643,-109.008 68.73111,-113.249 68.46378,-113.0002 68.50129,-113.6694 68.8159,-113.5098 69.0479,-113.7039 69.17502,-113.3577 69.17022,-116.4922 69.40429,-117.4044 69.98692,-114.4643 70.32364,-113.0599 70.2579,-111.4187 70.28149,-113.1825 70.64858,-115.889 70.58663)),((-125.8087 71.96925,-125.6623 72.24694,-124.945 72.56747,-125.1259 72.86475,-124.4371 72.94443,-124.8599 73.09658,-123.7468 73.74931,-124.7759 74.3413,-121.5336 74.55783,-119.6624 74.2401,-119.7426 74.08933,-119.0857 74.20992,-119.1032 73.99854,-118.6827 74.21912,-117.3895 74.22612,-115.2924 73.47508,-119.1118 72.64126,-119.2926 72.35822,-120.1916 72.22433,-120.4923 71.54838,-121.6489 71.467,-122.7868 71.08147,-123.1324 71.07635,-123.8882 71.62217,-124.9756 71.96917,-125.8087 71.96925)),((-95.28692 79.39037,-95.75322 79.5338,-94.3553 79.73173,-95.90239 79.64828,-96.63701 79.88033,-96.19211 79.92563,-96.77585 80.11426,-94.41689 80,-94.82084 80.08522,-94.13364 80.18353,-95.33544 80.11375,-95.72933 80.16805,-95.23328 80.23992,-96.68804 80.32957,-95.42737 80.33196,-96.01642 80.57446,-93.80067 80.52017,-94.6378 80.63337,-94.07425 80.70803,-95.55109 80.81165,-94.91594 81.06079,-93.14418 81.09074,-94.4138 81.24529,-93.5499 81.37808,-91.94349 81.18396,-90.64766 80.66457,-90.80362 80.56241,-89.1516 80.48819,-89.25385 80.28371,-88.80341 80.12624,-88.15274 80.09095,-88.67461 80.38012,-87.67182 80.4045,-87.59848 80.1795,-88.10257 80.12238,-86.92981 79.91436,-87.43255 79.52859,-85.71525 79.61685,-84.87173 79.26627,-86.99045 79.00459,-87.631 78.63861,-88.00384 78.81849,-87.85184 78.99393,-88.15856 78.9951,-88.10004 78.68119,-88.3649 78.65678,-87.88045 78.55022,-88.80582 78.60519,-88.53542 78.40003,-88.76309 78.16548,-89.9757 78.61337,-89.98823 78.44056,-89.44247 78.16383,-90.24413 78.32991,-90.36476 78.13975,-92.04947 78.19861,-92.9905 78.46867,-91.66324 78.56687,-93.29565 78.5795,-93.8218 78.77015,-93.03194 78.76058,-94.31303 78.98423,-90.73074 79.21729,-92.67965 79.24677,-92.03334 79.31987,-92.57191 79.36167,-92.40664 79.4584,-93.89309 79.26102,-94.25693 79.269,-93.8457 79.39278,-95.28692 79.39037)),((-93.66617 76.31744,-95.38068 76.22718,-94.79523 76.31176,-96.01771 76.43835,-95.58642 76.60562,-96.97273 76.73431,-96.29507 76.75084,-96.88541 76.8877,-96.39894 77.03138,-93.66167 76.91317,-93.16849 76.6875,-93.58891 76.40901,-93.08839 76.6175,-90.97179 76.65202,-90.47386 76.4669,-91.47205 76.45285,-89.18552 76.24635,-91.2552 76.20045,-90.17542 76.05952,-91.06971 75.98694,-89.9257 76.00296,-89.67242 75.88994,-89.78615 75.82259,-89.14975 75.7637,-89.61891 75.5919,-88.92911 75.42723,-88.74319 75.46922,-88.92245 75.60801,-88.77006 75.68279,-88.2169 75.47022,-87.25645 75.61971,-86.5491 75.36033,-84.00972 75.82653,-81.14612 75.77444,-81.29681 75.65229,-79.94899 75.54095,-80.37007 75.45737,-79.59146 75.45626,-79.5165 75.22341,-80.38149 75.01198,-79.34235 74.90208,-80.13854 74.82835,-80.22821 74.58066,-81.76391 74.45975,-82.91736 74.54771,-83.13682 74.68607,-83.03831 74.78471,-83.5195 74.90494,-83.31522 74.78365,-83.45635 74.58792,-84.33047 74.50565,-88.52671 74.50082,-88.46043 74.83031,-89.95404 74.52961,-91.02074 74.70282,-90.77345 74.88528,-91.24744 74.72467,-91.12663 74.62379,-91.68652 74.66655,-92.08322 74.80037,-92.25178 75.07192,-92.01342 75.10683,-92.50685 75.21716,-91.9998 75.58788,-92.10532 75.84956,-93.10067 76.36113,-93.66617 76.31744)),((-114.6135 76.49503,-114.1142 76.45985,-113.9364 76.19453,-112.41 76.17935,-111.6833 75.91943,-112.2164 75.81367,-111.4524 75.84389,-111.6004 75.81333,-111.1927 75.51975,-108.8824 75.49506,-109.0482 75.55017,-108.7903 75.61606,-108.9359 75.71562,-110.0475 75.89345,-109.2848 76.11606,-110.3962 76.35431,-108.7621 76.85413,-108.3874 76.71373,-108.6982 76.63172,-108.4308 76.45741,-108.5729 76.41981,-108.0436 76.27857,-108.4069 76.05711,-107.5779 75.99464,-108.0144 75.79916,-107.1596 75.91136,-106.8315 75.74928,-106.8453 75.96951,-106.5292 76.06738,-105.5656 75.93438,-105.3574 75.70488,-105.978 75.0566,-107.2019 74.90942,-108.7921 75.07056,-111.6422 74.49593,-113.7321 74.45879,-114.4203 74.69292,-110.8892 75.24522,-113.904 75.05511,-113.803 75.31914,-113.4144 75.40354,-113.969 75.45659,-114.1472 75.2187,-114.5775 75.28445,-114.2679 75.16927,-114.4351 75.06018,-115.0261 74.96368,-115.1924 75.15763,-115.6317 74.97385,-117.6455 75.24136,-117.2312 75.47394,-115.0966 75.68168,-117.1967 75.62082,-116.8765 75.79301,-114.7837 75.88906,-116.7147 75.94344,-116.2126 76.19572,-114.7537 76.15921,-115.8997 76.2944,-114.6135 76.49503)),((-55.44404 51.58365,-55.4326 51.58027,-55.5969 51.29137,-56.10115 51.33297,-55.73158 51.08476,-56.10166 50.72316,-56.26801 50.90702,-56.11395 50.68027,-56.93342 49.75192,-56.8783 49.54273,-56.17007 50.15922,-56.21636 49.9232,-55.47989 49.93903,-56.14408 49.69951,-55.85424 49.68897,-56.15487 49.43364,-55.86262 49.52855,-55.84081 49.52995,-55.58894 49.35817,-55.37278 49.49757,-55.32841 49.30363,-55.33704 49.53623,-55.16536 49.54324,-55.40467 49.02972,-55.09302 49.36482,-54.84505 49.27137,-54.48226 49.56157,-54.50583 49.25902,-54.07175 49.47976,-53.4707 49.25561,-54.21347 48.80299,-53.62544 48.67721,-54.17765 48.32138,-53.09331 48.69846,-53.21389 48.34719,-53.91626 48.20112,-53.68586 48.06111,-53.96464 48.02412,-53.61985 48.05275,-53.80253 47.7766,-53.95328 47.85228,-53.57186 47.51991,-53.31205 48.00767,-52.95582 48.17287,-53.29047 47.55246,-53.13834 47.38634,-52.80329 47.80859,-52.64447 47.48319,-53.08944 46.6579,-53.60677 46.62273,-53.47222 46.92605,-53.67341 46.79184,-53.52193 46.98066,-53.66781 46.98998,-53.42197 47.17445,-53.56766 47.2167,-54.21088 46.8266,-53.94937 47.25647,-53.82467 47.41979,-53.99689 47.84999,-54.26308 47.89309,-54.53639 47.36339,-54.44463 47.61906,-55.03042 47.29905,-55.24796 46.94365,-55.75948 46.85016,-55.9784 46.91144,-55.88858 47.07108,-54.71167 47.67662,-55.09277 47.58831,-54.95506 47.82676,-55.13145 47.5785,-55.45256 47.73324,-55.60019 47.40506,-55.594 47.57989,-55.79186 47.45405,-55.7294 47.59403,-55.94818 47.43754,-55.73753 47.61982,-56.20146 47.49802,-55.63186 47.68585,-55.94214 47.66389,-55.70917 47.84666,-55.82762 47.78187,-55.79615 47.96793,-56.08405 47.70133,-56.18154 47.87655,-56.18046 47.63899,-56.33353 47.79474,-56.34861 47.62332,-56.59422 47.72938,-56.86762 47.53006,-57.35616 47.59049,-57.28368 47.79088,-57.66433 47.60018,-58.37325 47.65689,-58.30404 47.83659,-58.4523 47.63932,-59.17863 47.56621,-59.33823 47.76829,-59.20108 47.84533,-59.42296 47.89811,-58.27771 48.51521,-59.27374 48.47411,-58.77071 48.79154,-58.97612 48.63134,-58.72421 48.56585,-58.37832 49.14985,-57.90567 48.96194,-58.159 49.1262,-57.85661 49.18168,-58.26513 49.31696,-57.99674 49.56305,-57.70984 49.45825,-57.95457 49.71981,-57.68588 49.8152,-57.83928 49.87178,-57.72901 50.02878,-57.5606 49.96894,-57.71574 50.03712,-57.38418 50.6031,-57.16484 50.62692,-57.41575 50.70292,-56.91735 50.91714,-57.09678 51.01417,-55.89953 51.62365,-55.87514 51.48588,-55.44404 51.58365)),((-100.3596 73.04686,-100.5803 73.13932,-100.0775 73.24992,-100.2528 73.36347,-100.9023 73.26672,-101.6123 73.49319,-100.8867 73.6045,-100.5023 73.44476,-101.1139 73.73214,-99.97006 73.86244,-99.14591 73.71965,-97.74977 73.9146,-96.93948 73.74376,-97.69877 73.54209,-97.14444 73.35522,-98.46268 72.94925,-97.27831 72.96775,-96.99818 72.73577,-97.16058 72.59673,-96.52769 72.7569,-96.26806 72.41817,-96.65742 72.30659,-96.48296 72.08056,-96.79437 72.0342,-96.4705 72.04293,-96.72942 71.93219,-96.47157 71.9019,-97.4699 71.62492,-98.19818 71.66496,-98.3549 71.7491,-98.26153 71.91393,-98.48737 71.73279,-98.03844 71.53691,-98.7037 71.29412,-99.21357 71.36636,-99.66158 71.77973,-100.6107 72.18274,-101.7709 72.29401,-102.667 72.6911,-102.4968 73.02608,-102.226 73.08919,-101.0228 72.68896,-100.3574 72.75401,-100.3596 73.04686),(-100.3474 73.04176,-100.3596 73.04686,-100.3474 73.04176)),((-81.70731 64,-80.91866 63.97554,-80.91128 64.12295,-80.16556 63.77902,-80.94607 63.45272,-82.49277 63.65388,-82.37766 63.89502,-83.1445 63.96342,-82.93239 64.13009,-83.07295 64.17784,-83.52847 64.09938,-83.60788 63.76587,-84.32889 63.64917,-84.58969 63.29171,-85.21426 63.10679,-85.62169 63.18608,-85.72366 63.75062,-87.22533 63.6236,-86.88599 63.91625,-86.17583 64.08778,-86.39319 64.59123,-86.12334 64.92238,-86.13552 65.37819,-85.98971 65.72063,-85.50563 65.92618,-85.12806 65.76254,-85.02874 65.60645,-85.27735 65.54351,-84.90495 65.21867,-84.46874 65.4763,-84.11322 65.20351,-82.06982 64.67999,-81.57458 64.17074,-82.00568 63.98642,-81.70731 64)),((-121.0107 76.72556,-119.1347 77.32504,-117.0149 77.29802,-116.6348 77.38058,-117.1371 77.46053,-116.4475 77.55468,-115.8085 77.43672,-115.3387 77.31261,-116.3861 77.13911,-115.7071 76.94897,-116.3513 76.93018,-115.8677 76.69632,-116.9791 76.55445,-116.9252 76.34593,-117.2947 76.26073,-118.0413 76.41172,-117.6718 76.79664,-117.8385 76.82454,-118.9575 76.4925,-118.525 76.33567,-119.0576 76.08981,-119.6421 76.30684,-119.5319 76.12275,-119.8086 76.11209,-119.4669 76.00433,-119.93 75.84935,-120.4798 75.84409,-120.3795 75.97098,-120.6901 76.17645,-121.0216 76.13933,-120.9102 75.95237,-121.9324 76.04081,-122.336 75.86236,-122.6824 75.90397,-122.4467 76.11012,-122.7076 76.11095,-122.5226 76.15247,-123.0161 76.08469,-121.0107 76.72556)),((-105.1586 79.30178,-103.7424 79.36445,-102.8461 79.23532,-102.5552 78.86649,-101.828 79.09044,-100.9575 78.93713,-101.1908 78.80036,-100.3537 78.83057,-99.48936 78.58512,-99.87401 78.437,-99.78429 78.30857,-98.93371 78.06564,-99.16809 77.83713,-99.86404 77.78113,-101.4223 78.24182,-104.4142 78.26242,-105.0166 78.50164,-103.5089 78.50601,-104.0261 78.62614,-103.2993 78.7318,-104.1984 78.77067,-103.8276 78.89189,-104.116 78.98296,-105 78.8004,-104.6866 79.02872,-105.5995 79.04113,-105.4521 79.31616,-105.1586 79.30178)),((-80.44704 73.76917,-77.18826 73.51052,-76.05467 72.86659,-79.57581 72.75642,-79.99072 72.86674,-80.14294 73.22936,-80.87289 73.33891,-80.6675 73.48636,-80.86597 73.54835,-80.84087 73.75405,-80.44704 73.76917)),((-97.39048 69.74936,-97.38435 69.58893,-97.25945 69.71603,-96.16931 69.30539,-96.19154 69.05175,-96.02063 69.25146,-95.83115 68.88921,-95.15894 68.86887,-96.55254 68.46024,-99.00421 68.98675,-99.41324 68.90578,-99.55091 69.0242,-99.42316 69.15947,-98.3606 69.31322,-98.53972 69.60056,-97.97608 69.45921,-98.34217 69.61686,-98.02473 69.89651,-97.39048 69.74936)),((-94.86588 75.63734,-93.47375 75.26369,-93.49271 74.67515,-94.69352 74.6368,-96.62096 74.9932,-95.83369 75.38332,-96.11623 75.41741,-94.86588 75.63734)),((-97.08665 78.74478,-94.90963 78.3925,-95.43842 78.23148,-94.90225 78.05894,-97.11317 77.80251,-97.00982 77.91842,-97.78322 78.03239,-96.86756 78.13365,-97.94586 78.22214,-98.42702 78.50209,-98.04858 78.54016,-98.36926 78.64945,-98.19228 78.81236,-97.08665 78.74478)),((-76.15875 68.29661,-75.01726 68.16608,-75.18965 67.44036,-76.68964 67.21204,-77.22475 67.4487,-77.29158 67.72925,-76.95683 68.09101,-76.15875 68.29661)),((-110 78.11423,-109.5455 78.07095,-109.6608 77.95975,-110.8944 77.85726,-110.0441 77.77026,-110.0552 77.55623,-110.8692 77.40376,-112.446 77.36959,-113.1771 77.52224,-113.295 77.79411,-110 78.11423)),((-105.6061 73.74528,-104.4451 73.5416,-104.6989 73.18212,-105.329 72.95405,-105.2274 72.84553,-107.0025 73.46478,-106.5391 73.70525,-105.6061 73.74528)),((-61.10395 45.86626,-60.98792 45.896,-61.18234 45.71735,-60.74851 45.69591,-60.36687 46.03772,-60.79776 45.96835,-60.30617 46.34115,-60.23168 46.12446,-60.14308 46.27293,-59.82699 46.18876,-59.97815 46.03874,-59.79653 45.95888,-60.69664 45.57153,-61.47034 45.7119,-61.56363 46.04674,-60.6249 47.04205,-60.31112 46.85195,-60.62605 46.30775,-60.43114 46.3012,-61.10395 45.86626)),((-82.23849 62.98935,-81.87467 62.91627,-81.96534 62.71027,-83.0777 62.19095,-83.72654 62.1414,-83.95488 62.42193,-83.40041 62.91168,-82.23849 62.98935)),((-110.5032 78.75322,-109.345 78.55119,-109.3792 78.3116,-113.311 78.33614,-110.5032 78.75322)),((-132.288315 53.883864,-131.651 54.17406,-131.9917 53.24614,-132.5516 53.16835,-132.7175 53.37475,-132.4153 53.33472,-132.8793 53.46403,-132.9993 53.58939,-132.8162 53.59877,-133.1197 53.79421,-133.0788 54.17796,-132.5762 54.11937,-132.6656 53.9416,-132.288315 53.883864),(-132.288315 53.883864,-132.6007 53.67896,-132.2029 53.64992,-132.288315 53.883864)),((-64.259 49.93024,-63.02747 49.74916,-61.67597 49.13903,-63.09779 49.22566,-64.52284 49.8563,-64.259 49.93024)),((-95.64572 77.77436,-93.0817 77.65719,-93.56934 77.43945,-95.83035 77.46099,-96.32771 77.60239,-95.64572 77.77436)),((-64.04024 46.81315,-63.78946 46.43246,-63.67956 46.56305,-62.00592 46.43046,-62.37192 46.35469,-62.47074 45.99583,-62.74481 45.94678,-63.04512 46.05301,-62.94532 46.18764,-64.13857 46.40082,-64.07374 46.63958,-64.41815 46.6964,-64.00209 47.06044,-64.04024 46.81315)),((-79.51006 62.38774,-79.27594 62.25226,-79.30566 62.03133,-79.68618 61.61192,-80.21782 61.79719,-80.15578 62.21481,-79.51006 62.38774)),((-100.1189 80.07204,-99.06607 80.12096,-98.61731 79.78414,-98.86556 79.66654,-100.1389 79.8886,-100.1189 80.07204)),((-90.68183 77.63753,-89.61872 77.34636,-90.12687 77.19375,-91.00766 77.31806,-91.21661 77.39095,-91.19773 77.61466,-90.68183 77.63753)),((-106.0845 77.72585,-105.3773 77.68713,-104.3446 77.20498,-105.2242 77.16346,-106.0845 77.72585)),((-131.8326 52.76128,-131.6513 52.64225,-131.578 52.57734,-131.5681 52.58758,-131.2701 52.39184,-130.9977 52.21292,-131.3113 52.14302,-132.3584 52.92597,-132.1084 52.99276,-132.5754 53.08485,-131.8176 53.2578,-131.6113 53.02746,-132.0342 53.05184,-132.0078 52.87566,-131.6546 52.80917,-131.8326 52.76128)),((-83.21934 45.90654,-82.81844 45.97336,-82.50106 45.93995,-82.30061 45.97336,-81.91641 45.97336,-81.66586 45.87313,-81.59904 45.7729,-81.8329 45.52234,-83.21934 45.90654)),((-117.9147 76.05423,-117.4379 76.0953,-118.1942 75.60087,-119.4035 75.61056,-117.9147 76.05423)),((-103.9791 76.66074,-102.9782 76.44084,-104.3343 76.32127,-104.6535 76.59309,-103.9791 76.66074)),((-80.7123 52.6667,-82.05449 53.00809,-81.12334 53.19252,-80.7123 52.6667)),((-79.54195 56.35642,-79.64982 56.08871,-79.41074 56.21439,-79.25873 56.63018,-78.88442 56.3097,-79.21809 55.85867,-79.09661 56.17562,-79.28216 55.85057,-79.13679 56.24207,-79.77939 55.78228,-79.52313 56.1321,-80.01978 55.89064,-79.54195 56.35642)),((-104.4838 75.40555,-103.8135 75.36451,-103.566 75.15903,-104.901 75.11866,-104.4838 75.40555)),((-78.51458 69.37903,-78.2131 69.292,-78.81708 68.91957,-79.41299 68.92709,-78.51458 69.37903)),((-74.19186 68.06091,-73.3419 67.83739,-74.53516 67.8036,-74.73551 68.06971,-74.19186 68.06091)),((-103.5498 76.27102,-102.4898 76.22243,-104.0738 76.04157,-104.4739 76.15718,-103.5498 76.27102)),((-114.7149 78.01527,-113.5412 77.81602,-114.2781 77.70486,-115.0804 77.94741,-114.7149 78.01527)),((-83.49369 65.64431,-84.11653 65.76234,-84.44608 66.13903,-83.17697 65.7152,-83.49369 65.64431)),((-86.56913 67.73096,-86.8774 67.8383,-86.95509 68.08929,-86.64433 68.30429,-86.33833 67.96288,-86.56913 67.73096)),((-128.6203 52.64433,-128.6331 52.60083,-128.663 52.59994,-128.6587 52.96796,-128.7635 52.6622,-129.1064 52.7899,-128.8323 53.0186,-129.0335 53.1453,-128.8651 53.03324,-129.1555 52.91297,-129.0999 53.18269,-128.8908 53.15741,-129.0945 53.28085,-128.5809 53.10158,-128.6203 52.64433)),((-98.21187 74.08377,-97.62773 74.08408,-98.14412 73.87697,-99.42251 73.90974,-98.21187 74.08377)),((-77.93615 63.46016,-77.49979 63.25586,-77.90172 63.09409,-78.54987 63.43209,-77.93615 63.46016)),((-102.0781 77.89989,-100.9005 77.73255,-102.0684 77.68039,-102.5163 77.7951,-102.0781 77.89989)),((15 68.85033,15.18499 69.018,15.42047 68.69589,15.0307 68.58096,14.78566 68.63544,15.14075 68.75703,14.36213 68.68958,15 68.85033)),((-76.90292 69.13343,-77.2617 69.15147,-77.34589 69.41108,-76.62164 69.39293,-76.90292 69.13343)),((-89.97798 76.8335,-89.70205 76.74338,-89.86703 76.61037,-89.75213 76.48647,-90.59743 76.74278,-89.97798 76.8335)),((-79.89297 69.74661,-79.32712 69.71213,-80.0573 69.64728,-80.00326 69.50011,-80.79765 69.69173,-79.89297 69.74661)),((-96.39507 75.55894,-96.80199 75.35555,-97.00984 75.46007,-96.31741 75.65868,-95.89586 75.57114,-96.12702 75.45913,-96.39507 75.55894)),((-75 68.67595,-74.8159 68.32607,-75.41213 68.53321,-75.25972 68.73127,-75 68.67595)),((-70.7037 62.8194,-70.17082 62.57511,-70.72129 62.55348,-70.89168 62.74303,-70.72816 62.77382,-71.21359 62.88121,-70.7037 62.8194)),((-64.93053 61.38405,-65.36399 61.55415,-64.70109 61.65086,-64.69028 61.41737,-64.93215 61.38279,-64.93053 61.38405)),((-85 66.0283,-84.55311 65.62383,-85.09306 65.74715,-85.15245 65.99585,-85 66.0283)),((-95.64018 69.53109,-95.9819 69.37371,-95.75641 69.63994,-95.34595 69.53842,-95.4462 69.36023,-95.72784 69.34947,-95.64018 69.53109)),((14.00136 53.85646,14.21288 53.86478,14.61713 53.84257,14.59569 53.5862,14.26866 53.69652,14.00136 53.85646)),((-102.2676 75.85693,-103.3697 75.76891,-102.3377 75.97668,-101.9584 75.94601,-102.2676 75.85693),(-102.2676 75.85693,-102.0818 75.71381,-102.7488 75.54329,-99.74516 75.66617,-100.7641 75.34844,-99.9961 75.23863,-100.5225 75.19895,-100.352 75.02143,-97.61259 75.11184,-98.1182 75.30933,-97.71513 75.57128,-97.25871 75.39752,-97.34377 75.68047,-97.88178 75.74888,-97.5508 75.86652,-97.46065 76.12911,-97.77973 76.31064,-97.66137 76.4853,-97.9343 76.5348,-98.53603 76.64394,-98.99194 76.60647,-98.83964 76.45514,-99.13432 76.40003,-100.0986 76.63064,-100.9807 76.49335,-99.9974 76.31909,-100.4342 76.21346,-99.39694 76.16012,-100.2348 76.12991,-99.58926 75.9502,-100.1015 75.92552,-101.7448 76.45197,-102.1518 76.23331,-101.6289 76.19581,-101.9031 76.0715,-101.3837 75.97386,-101.5869 75.9278,-101.2336 75.74868,-102.2676 75.85693)),((-100.3537 68.71497,-100.6113 68.78229,-100.6234 69.00672,-100.1186 68.91708,-100.3537 68.71497)),((-114.3032 76.88794,-113.4422 76.79379,-114.7928 76.75331,-114.3032 76.88794)),((-86.90395 70,-87.35842 70.10717,-86.59954 70.12825,-86.46114 69.99886,-86.90395 70)),((-78.79624 76.09637,-79.17658 75.94893,-78.88606 75.84315,-79.75646 75.8801,-78.79624 76.09637)),((-68.29916 60.48855,-67.82848 60.4543,-68.37606 60.19724,-68.29916 60.48855)),((-101.8108 68.56733,-102.3373 68.70196,-101.7002 68.79801,-101.8108 68.56733)),((-96.11974 69.35888,-96.70444 69.5878,-96.15344 69.59132,-96.11974 69.35888)),((-94.67776 75.95028,-94.26967 75.77613,-94.7724 75.78065,-94.8555 75.9374,-94.67776 75.95028)),((-130.3716 53.97481,-130.7314 53.90911,-130.4101 54.09978,-130.2331 53.97351,-130.3377 53.82629,-130.51 53.86525,-130.3716 53.97481)),((-77.28457 63.61661,-76.55722 63.44897,-76.96491 63.39964,-77.28457 63.61661)),((-97.02837 73.14477,-96.53589 73.03647,-96.95092 72.92861,-97.02837 73.14477)),((-64.68192 62.52752,-64.33105 62.48555,-64.74749 62.37807,-64.93496 62.46457,-64.68192 62.52752)),((-78.85395 56.2775,-78.66767 56.43111,-78.67776 56.17233,-78.9437 56.09877,-78.85395 56.2775)),((-78.42086 69.64282,-77.9381 69.64768,-78.82248 69.46201,-78.42086 69.64282)),((-61.61547 56.80928,-61.34424 56.92664,-61.52321 56.78513,-61.38586 56.60259,-61.7158 56.66525,-61.61547 56.80928)),((-78.80299 68.44616,-78.94846 68.53028,-78.67225 68.59492,-78.89185 68.66534,-78.45854 68.62782,-78.80299 68.44616)),((-64.4236 63.65214,-64.01153 63.28265,-64.3213 63.37569,-64.4236 63.65214)),((-101.2149 69.37138,-101.3336 69.58816,-100.9299 69.48144,-101.2149 69.37138)))
+MULTIPOLYGON(((15.50748 7.527468,15.97481 7.483338,16.59592 7.88019,16.84385 7.529787,17.67167 7.982768,18.61805 8.052467,19.12222 8.671246,18.86246 8.852613,19.02328 8.995074,20.43423 9.153878,21.67271 10.23371,21.83262 10.83948,22.88134 10.9309,23.66824 9.891512,23.52011 8.726969,24.25266 8.711761,24.20358 8.303996,24.86475 8.180498,25.18009 7.902913,25.20037 7.488982,26.41443 6.643824,26.28659 6.46246,26.45115 6.085776,27.16044 5.767366,27.46342 5.016153,27.14294 5.204216,26.50912 5.043906,25.54606 5.386098,25.08842 4.937803,24.39604 5.112711,23.42093 4.588927,22.90667 4.817867,22.55044 4.21542,22.26635 4.114358,20.60624 4.403446,19.8252 5.09344,19.42282 5.128375,18.54905 4.316255,18.6351 3.471089,18.48676 3.653269,18.189 3.481166,17.47406 3.703082,16.66285 3.537679,16.19199 2.220514,16.03593 2.974406,15.24779 3.713966,15.09312 4.292163,14.73201 4.60929,14.52787 5.278019,14.62132 5.896153,14.42192 6.031818,14.75068 6.261004,15.50748 7.527468)))
+MULTIPOLYGON(((16.19199 2.220514,16.66285 3.537679,17.47406 3.703082,18.189 3.481166,18.48676 3.653269,18.6351 3.471089,18.09457 2.23824,17.70007 -0.567603,16.8458 -1.263571,16.20089 -2.197611,16.22239 -3.296272,15.91541 -3.934902,15.5615 -4.04695,14.69051 -4.917224,14.41206 -4.893814,14.40724 -4.279238,13.73834 -4.44858,13.7292 -4.709084,13.43464 -4.919622,13.1025 -4.646508,12.75132 -4.372592,12.01273 -5.028313,11.20501 -3.978806,11.52937 -3.512756,11.88431 -3.747393,12.04545 -3.352566,12.06658 -2.969432,11.61747 -2.789746,11.60872 -2.322756,12.50287 -2.422352,12.44544 -1.869991,12.73326 -1.864831,13.04093 -2.333772,13.5031 -2.431169,13.75816 -2.113381,14.08302 -2.481633,14.39857 -1.875691,14.49294 -0.615902,13.89537 -0.212169,13.88868 0.202671,14.50007 0.898546,14.18722 1.39562,13.15633 1.234311,13.29897 2.170563,14.58318 2.211797,15.75006 1.915821,16.05783 1.652548,16.19199 2.220514)))
+MULTIPOLYGON(((7.58092 47.58238,8.595754 47.60012,8.413456 47.67541,8.595241 47.80518,9.544334 47.54256,9.672874 47.38769,9.535914 47.27354,9.603659 47.06155,10.47005 46.86188,10.45701 46.54151,10.05119 46.53883,10.13348 46.23097,9.283881 46.49617,9.016438 45.82587,8.451571 46.25948,8.442933 46.46386,7.859254 45.93451,7.03618 45.93694,6.776672 46.15083,6.775381 46.4403,5.957461 46.20375,6.428569 46.92942,7.051111 47.33619,6.874169 47.359,6.985055 47.50213,7.58092 47.58238)),((110.0041 19.93149,110.381 20.08842,110.6242 19.92804,110.6848 20.15647,110.9279 20.01449,111.0378 19.64333,110.7916 19.61385,110.4854 19.1696,110.5375 18.78081,109.5727 18.16126,108.7089 18.49626,108.6841 19.37382,109.3029 19.71653,109.1573 19.78983,109.2924 19.91909,110.0041 19.93149)))
+MULTIPOLYGON(((-7.978548 10.17511,-7.641548 10.48812,-7.030167 10.16143,-6.947465 10.36964,-6.672197 10.36513,-6.642263 10.67225,-6.444196 10.56543,-6.256417 10.73664,-6.172732 10.22263,-5.518916 10.43326,-5.152773 10.32246,-4.6924 9.677105,-4.318694 9.599602,-3.900427 9.900578,-3.209423 9.924427,-2.689926 9.488792,-2.779666 9.055429,-2.494897 8.205227,-2.780885 7.949609,-3.25542 6.618508,-2.727679 5.137735,-3.110742 5.094452,-3.98789 5.246169,-6.088667 4.986833,-6.093508 4.988578,-6.101426 4.972904,-6.098122 4.968613,-7.527073 4.357078,-7.422362 5.843457,-7.758396 5.953354,-7.901638 6.27985,-8.599302 6.505595,-8.27361 7.006707,-8.472179 7.554582,-8.193576 7.545011,-7.945582 8.012988,-8.243995 8.228629,-8.240768 8.460761,-7.641071 8.377432,-7.961311 8.810396,-7.736526 9.078054,-7.919881 9.186895,-7.849985 9.437742,-8.149226 9.532056,-7.978548 10.17511)))
+MULTIPOLYGON(((-73.24222 -44.91862,-73.40647 -44.57259,-72.91604 -44.45549,-72.69938 -44.52677,-72.9793 -44.58108,-72.85447 -44.70382,-72.57278 -44.50288,-73.28896 -44.16524,-72.88111 -43.61763,-73.09241 -43.43901,-72.70744 -42.94301,-72.82127 -42.53,-72.52686 -42.5624,-72.83748 -42.30013,-72.58704 -42.19411,-72.39391 -42.4915,-72.43085 -41.97572,-72.87922 -41.91405,-72.58203 -41.7109,-72.97804 -41.48755,-73.17828 -41.77288,-73.19005 -41.76506,-73.75925 -41.74515,-73.65451 -41.61227,-73.94408 -40.97664,-73.71321 -40.0069,-73.37312 -39.93909,-73.21568 -39.38827,-73.68263 -37.33414,-73.58519 -37.15131,-73.1984 -37.17437,-73.21659 -36.77448,-73.11427 -36.61233,-72.99512 -36.73359,-72.63081 -35.57739,-72.19292 -35.08144,-72.01015 -34.12406,-71.60082 -33.53947,-71.75748 -33.10215,-71.56316 -33.00626,-71.41867 -32.40774,-71.71597 -30.59923,-71.27634 -29.92492,-71.51958 -28.90519,-70.90517 -27.62399,-70.9698 -27.16887,-70.62814 -26.33661,-70.7312 -25.78265,-70.45029 -25.36307,-70.57887 -24.54476,-70.39381 -23.57468,-70.62499 -23.50621,-70.5786 -23.08342,-70.28738 -22.91118,-70.05627 -21.43386,-70.37419 -18.34973,-69.94788 -18.24803,-69.799 -17.65035,-69.46265 -17.50755,-69.06861 -18.0672,-68.95712 -18.94081,-68.40726 -19.4076,-68.69057 -19.73909,-68.52397 -19.92741,-68.78046 -20.08205,-68.75569 -20.39242,-68.43936 -20.6324,-68.54726 -20.87996,-68.17242 -21.29667,-67.87513 -22.8258,-67.1775 -22.80469,-66.98794 -22.9924,-67.33754 -24.0342,-68.39136 -24.47407,-68.56738 -24.74768,-68.35064 -25.10669,-68.58668 -25.20431,-68.39045 -26.19049,-68.5877 -26.50918,-68.27213 -26.9169,-68.83334 -27.04887,-69.11214 -27.89204,-69.64111 -28.37884,-69.7677 -29.12587,-70.00744 -29.35628,-69.8166 -30.21648,-70.50563 -31.14843,-70.53893 -31.60142,-70.20244 -31.97015,-70.38564 -32.05095,-69.99737 -32.9016,-70.02461 -33.31369,-69.88811 -33.22215,-69.74717 -33.40779,-69.81541 -34.22364,-70.04218 -34.28701,-70.36263 -35.14241,-70.57765 -35.25788,-70.32522 -35.81524,-70.42343 -36.15309,-71.03448 -36.46488,-71.1721 -36.84647,-71.20322 -37.6801,-70.83273 -38.57305,-71.42781 -38.92983,-71.48103 -39.59019,-71.71897 -39.6377,-71.58906 -39.89707,-71.83086 -40.22242,-71.65408 -40.36865,-71.94669 -40.73969,-71.72849 -42.11539,-72.12493 -42.30677,-72.13357 -43.01638,-71.73962 -43.17142,-71.93305 -43.45695,-71.58262 -43.66576,-71.83199 -44.38578,-71.11016 -44.52303,-71.30264 -44.80802,-72.06971 -44.76825,-71.29688 -45.29317,-71.75804 -45.56223,-71.59829 -45.97458,-71.89174 -46.14821,-71.64585 -46.68254,-71.92654 -46.80474,-71.84908 -47.21814,-72.32291 -47.43373,-72.52264 -47.90715,-72.2951 -48.35757,-72.59288 -48.47141,-72.54967 -48.79079,-73.57778 -49.54358,-73.42122 -49.79916,-73.52998 -50.14991,-73.15174 -50.76809,-72.27752 -50.65468,-72.43781 -51.56912,-71.93159 -51.99528,-70.01936 -51.99819,-69.22569 -52.20016,-69.66827 -52.54416,-70.87466 -52.73598,-70.73814 -52.78922,-70.96228 -53.78879,-71.28926 -53.9029,-72.09499 -53.69886,-72.46213 -53.37105,-72.12518 -53.24398,-72.21123 -53.44884,-71.84605 -53.22706,-71.77476 -53.39636,-71.18076 -52.81555,-71.55768 -52.56058,-72.89146 -52.54597,-73.224 -52.40874,-73.27116 -52.68798,-73.42886 -52.55856,-73.74389 -52.73709,-73.49429 -52.49295,-73.75943 -52.04823,-73.34671 -52.25334,-73.00555 -52.07181,-73.12071 -52.25046,-72.88005 -52.28546,-72.74142 -52.08661,-72.89774 -52.22314,-72.96014 -52.05955,-72.77599 -51.96296,-72.5561 -52.2006,-72.54461 -51.73154,-72.73412 -51.85456,-73.29729 -51.58558,-72.99676 -51.80307,-73.2192 -51.9045,-72.91719 -51.87162,-73.24245 -52.10829,-73.39974 -51.6473,-73.27306 -52.1795,-73.59254 -52.0226,-73.59838 -51.8209,-73.38865 -52.04894,-73.60086 -51.75854,-73.45644 -51.68519,-73.71201 -51.80508,-73.70057 -51.6314,-73.92886 -51.6269,-73.90192 -51.3739,-73.64915 -51.54033,-73.68168 -51.14441,-73.96539 -51.24696,-74.13271 -51.19484,-74.08409 -50.98714,-73.80587 -51.00838,-73.75912 -50.67272,-73.38177 -50.68794,-73.70744 -50.52204,-74.03259 -50.85655,-74.30185 -50.47522,-73.86702 -50.56458,-74.14629 -50.44449,-73.99896 -50.37909,-74.37437 -50.3815,-74.69939 -50.20422,-74.50559 -50.13492,-73.85388 -50.30098,-74.35324 -50.00921,-73.85291 -50.07529,-74.0193 -50,-73.81215 -49.92426,-74.31844 -49.8779,-74.03322 -49.70452,-74.32057 -49.6356,-73.66111 -49.72493,-74.09788 -49.5008,-74.03283 -49.26136,-73.80724 -49.39627,-74.0146 -49.0857,-74.17609 -49.53275,-74.41471 -49.39048,-74.4396 -48.80293,-74.21555 -48.72193,-74.398 -48.60426,-73.96749 -48.60841,-73.88055 -48.42785,-74.27049 -48.20767,-74.30189 -48.02039,-74.10533 -47.98394,-73.6392 -48.26558,-73.27496 -48.1613,-73.64219 -48.00723,-73.7389 -47.56316,-73.92386 -47.84189,-74.71735 -47.72752,-74.53532 -47.52084,-74.43063 -47.67564,-74.14397 -47.60229,-74.51471 -47.41999,-73.9994 -46.97364,-74.26679 -46.75634,-74.63155 -46.78896,-74.43808 -46.90854,-74.9826 -46.75982,-74.97445 -46.49957,-75.51554 -46.65548,-75.36787 -46.92783,-75.68734 -46.69662,-74.75882 -46.19981,-74.70323 -45.95214,-75.0369 -46.11666,-75.09542 -45.89167,-74.72708 -45.8178,-74.43388 -46.04555,-74.44651 -45.80548,-74.08889 -45.81993,-74.03127 -46.17208,-73.73959 -46.24218,-73.84178 -46.59807,-73.33689 -46.03957,-73.68448 -46.32694,-73.5238 -45.81584,-73.14986 -45.67418,-73.568 -45.78683,-73.2477 -45.31152,-73.44592 -45.25869,-73.24222 -44.91862),(-72.54461 -51.73154,-72.54829 -51.72915,-72.54461 -51.73154)),((-71.35474 -54.5994,-71.97408 -54.56209,-71.5046 -54.55263,-71.85047 -54.43521,-71.3925 -54.37399,-70.93102 -54.51526,-70.75761 -54.32531,-70.58414 -54.3419,-70.75538 -54.6323,-70.55784 -54.39291,-70.07841 -54.54856,-70.92416 -54.12815,-70.13144 -54.43351,-70.0624 -54.25214,-69.82415 -54.55326,-69.84899 -54.28506,-69.20483 -54.44539,-69.35909 -54.71305,-69.14237 -54.60218,-68.97376 -54.44665,-70 -54.11998,-70.18124 -53.83385,-69.324 -53.42673,-70.44344 -53.38099,-70.42791 -53.01678,-70.09575 -52.93019,-70.43166 -52.7706,-69.90105 -52.84027,-69.43363 -52.45683,-69.18389 -52.69351,-68.78374 -52.54082,-68.60475 -52.66537,-68.61058 -54.89589,-69.07925 -54.95971,-69.71315 -54.6919,-69.91203 -54.83395,-69.94449 -54.67878,-69.94819 -54.83685,-70.29298 -54.85793,-70.21593 -54.68373,-70.57233 -54.78673,-70.81266 -54.78963,-70.43372 -54.62704,-70.96526 -54.69347,-71.35474 -54.5994)),((-73.6098 -42.42853,-73.80442 -42.54289,-73.70382 -42.64185,-73.45917 -42.88253,-73.66968 -42.88434,-73.48232 -43.1521,-73.73986 -43.1456,-73.83492 -43.43195,-74.41708 -43.23071,-73.90768 -41.77277,-73.48137 -41.83194,-73.3356 -42.26742,-73.6098 -42.42853)),((-72.97182 -52.93457,-73.19514 -53.10455,-73.44852 -53.00926,-73.25968 -52.91945,-73.58219 -52.807,-72.89758 -52.5561,-73.01178 -52.74517,-72.68235 -52.66826,-72.88029 -52.80264,-72.5723 -52.82703,-72.1806 -52.63778,-71.40897 -52.72181,-72.03294 -53.13026,-72.60193 -53.07178,-72.20413 -53.18832,-72.52552 -53.27699,-72.60567 -53.37247,-72.38577 -53.53907,-72.53907 -53.55801,-73.32495 -53.15733,-72.71641 -53.29646,-72.84722 -53.17816,-72.65632 -53.14757,-72.97523 -53.09996,-72.97182 -52.93457)),((-75.05872 -49.23446,-74.87993 -49.38818,-74.75239 -49.10678,-74.93613 -49.01538,-74.79661 -48.99709,-75.04184 -48.7956,-74.50744 -48.73373,-74.53397 -49.67704,-74.42033 -49.91077,-74.79845 -50.02766,-74.83113 -49.96637,-74.62196 -49.80539,-74.79898 -49.79223,-74.8904 -49.61161,-74.68388 -49.64019,-74.87853 -49.54367,-74.60509 -49.3248,-75.02164 -49.49245,-75.05895 -49.91715,-75.30811 -49.62539,-75.14941 -49.52536,-75.47486 -49.30725,-75.13733 -49.50551,-74.97122 -49.42443,-75.33045 -49.27389,-75.04832 -49.3701,-75.09298 -49.21934,-75.23029 -49.15876,-74.90466 -49.06145,-74.89807 -49.30533,-75.05872 -49.23446)),((-73.42761 -53.56767,-73.41415 -53.56451,-73.22441 -53.65667,-73.45972 -53.45137,-73.05795 -53.54927,-73.19199 -53.39583,-73.03204 -53.3833,-72.87141 -53.68566,-72.86702 -53.45703,-72.12933 -53.81114,-72.4052 -53.84236,-72.32348 -54.04368,-72.80581 -54.06562,-72.96216 -54.02012,-72.65169 -53.86692,-72.82003 -53.82279,-73.05587 -53.81195,-73.09964 -54.04789,-73.35192 -53.9759,-73.2416 -53.70652,-73.61773 -53.74617,-73.42761 -53.56767)),((-69.24039 -55.17559,-69.4837 -55.24413,-69.12214 -55.48726,-69.7805 -55.30127,-69.48708 -55.17648,-70.01579 -55.16467,-68.50295 -54.92266,-68.31403 -55.03096,-68.56479 -55.09347,-69.06313 -55.07208,-68.2613 -55.22544,-68.7409 -55.27457,-68.14135 -55.38745,-68.0724 -55.72333,-68.33756 -55.47251,-68.97346 -55.43268,-68.72253 -55.38641,-68.97112 -55.39253,-68.78975 -55.18314,-69.24039 -55.17559)),((-68.258489 -54.930777,-67.199579 -55.014257,-67.032529 -55.148327,-67.207799 -55.317727,-67.837469 -55.283957,-68.116949 -55.231327,-68.258489 -54.930777)),((-73.80109 -53.17184,-73.80795 -53.16441,-74.32555 -53.11764,-74.7498 -52.77395,-73.61003 -53.07045,-73.15726 -53.37687,-73.80109 -53.17184)),((-70.53081 -54.16032,-70.84109 -54.12117,-70.89363 -53.88923,-70.60798 -53.87253,-70.7065 -53.70599,-70.48555 -53.56389,-70.33699 -54.00923,-70.67607 -53.91827,-70.53081 -54.16032)),((-71.89748 -54.22831,-71.97157 -54.21706,-72.25776 -53.95837,-71.90928 -53.85465,-71.60609 -54.09644,-71.89664 -54.01429,-71.7141 -54.24075,-71.89748 -54.22831)),((-74.87216 -48.42607,-74.70602 -48.47838,-74.70289 -48.14195,-74.47606 -48.65519,-74.97094 -48.62226,-74.87216 -48.42607)),((-75.39803 -50.37036,-75.39107 -50.16293,-75.16673 -50.28694,-75.09585 -50.14531,-75.35244 -50.01888,-74.78661 -50.13615,-75.23331 -50.46223,-75.18901 -50.30218,-75.39803 -50.37036)),((-74.84398 -51.00659,-74.83934 -51.00058,-74.94334 -50.89065,-74.53904 -50.92036,-74.64352 -50.71528,-74.39615 -50.82218,-74.37969 -51.09489,-74.84398 -51.00659)),((-75.3289 -48.14061,-75.33076 -48.14263,-75.05191 -48.60897,-75.22577 -48.71763,-75.27714 -48.33622,-75.57104 -48.38987,-75.36392 -48.29257,-75.54684 -48.35078,-75.39362 -48.20187,-75.5821 -48.09588,-75.3289 -48.14061)),((-75.03801 -48.11059,-74.99657 -48.12489,-74.78368 -48.20436,-75.01956 -48.47293,-75.26512 -48.0896,-75.03801 -48.11059)),((-71.39897 -54.1195,-71.65424 -54.22776,-71.43325 -53.9556,-71.19186 -54.20606,-70.99033 -54.09599,-70.96526 -54.31203,-71.34532 -54.3174,-71.16639 -54.24416,-71.39897 -54.1195)),((-74.28314 -50.6978,-74.15287 -50.84114,-74.34256 -50.85123,-74.59902 -50.63215,-74.35555 -50.54039,-74.688 -50.49857,-74.37289 -50.45979,-74.28314 -50.6978)),((-73.84028 -45.25069,-74.21956 -45.16691,-73.91615 -45,-73.75821 -44.98145,-73.81079 -45.2572,-73.84028 -45.25069)),((-70.54221 -55.00183,-70.55764 -55.00322,-70.23924 -55.10943,-70.53922 -55.17696,-71.00089 -54.96968,-70.54221 -55.00183)),((-74.3446 -47.8168,-73.78364 -47.87295,-74.30367 -47.97623,-74.50021 -47.90353,-74.3446 -47.8168)),((-74.85143 -51.87255,-74.93851 -51.66368,-74.75163 -51.79514,-75.02433 -52.12413,-74.94624 -51.93877,-75.13374 -51.82122,-74.98589 -51.71463,-74.85143 -51.87255)),((-74.44547 -45.50452,-74.27339 -45.49538,-74.20646 -45.68729,-74.46135 -45.78475,-74.44873 -45.512,-74.44547 -45.50452)),((-75.50002 -48.8327,-75.21676 -48.97669,-75.21437 -48.98353,-75.47464 -49.06939,-75.65687 -48.90248,-75.50002 -48.8327)),((-74.74896 -50.69143,-74.66804 -50.88846,-74.92787 -50.87397,-74.93272 -50.68066,-74.74896 -50.69143)),((-74.12131 -52.18149,-73.93063 -52.36374,-74.17678 -52.41679,-74.24151 -52.25767,-74.07568 -52.299,-74.25015 -52.19971,-74.10632 -52.21936,-74.44565 -52.13906,-74.12131 -52.18149)),((-73.57379 -45.52574,-73.62644 -45.77091,-73.79679 -45.67231,-73.68954 -45.43818,-73.57379 -45.52574)),((-75.48345 -48.48434,-75.2897 -48.62125,-75.61799 -48.68919,-75.38722 -48.59958,-75.63913 -48.64066,-75.66451 -48.49036,-75.48345 -48.48434)),((-73.90056 -44.65815,-74.24758 -44.81012,-74.41177 -44.66319,-73.90056 -44.65815)),((-74.81822 -51.46082,-75.02884 -51.49046,-74.78706 -51.33543,-74.95007 -51.31003,-74.53223 -51.24933,-74.81822 -51.46082)),((-74.99657 -48.12489,-74.89184 -47.98327,-74.96626 -47.9295,-75 -47.90513,-75.27802 -48.02776,-75.03801 -48.11059,-75 -48.1141,-74.99657 -48.12489)))
+MULTIPOLYGON(((14.08543 13.07806,14.45988 13.0745,14.83153 12.6285,15.11895 11.79355,15.14594 10.53835,15.67966 10,14.23641 9.997405,14.01946 9.670767,14.50994 9.032372,15.20761 8.610803,15.59733 7.767455,15.50748 7.527468,14.75068 6.261004,14.42192 6.031818,14.62132 5.896153,14.52787 5.278019,14.73201 4.60929,15.09312 4.292163,15.24779 3.713966,16.03593 2.974406,16.19199 2.220514,16.05783 1.652548,15.75006 1.915821,14.58318 2.211797,13.29897 2.170563,11.69521 2.322612,11.33461 2.173887,10.04082 2.161885,9.822182 2.346989,9.975469 3.084204,9.546248 3.811305,9.713395 3.853545,9.699567 4.118757,9.216111 3.943225,8.644445 4.716199,8.713179 4.504194,8.506061 4.502273,8.527482 4.726633,8.816417 5.184829,8.841041 5.824076,9.706893 6.51328,9.784036 6.796423,10.1549 7.03955,10.49373 6.899972,10.57661 7.161691,11.10094 6.541077,11.35264 6.502454,11.84693 7.079654,12.23703 8.428885,12.79066 8.759627,12.85477 9.384972,13.21933 9.542589,13.69474 10.96683,13.98038 11.30761,14.63724 11.5288,14.6782 12.16546,14.17308 12.4051,14.08543 13.07806)))
+MULTIPOLYGON(((112.9982 22.47025,112.9846 21.88995,112.8033 22.02505,112.5618 21.75739,112.5004 21.94506,112.3917 22.07701,112.4015 21.7367,112.1962 21.80529,111.8706 21.6689,111.6752 21.79575,111.7861 21.61888,111.2569 21.4134,110.7815 21.43369,110.7782 21.44063,110.749 21.42544,110.693 21.39635,110.431 21.18894,110.3263 21.43312,110.264 21.04172,110.2595 21.03705,110.1799 20.85242,110.5334 20.48269,110.2863 20.2401,109.9275 20.22848,109.9865 20.37448,109.6649 20.9427,109.953 21.48437,109.6751 21.5004,109.5694 21.76208,109.5362 21.50236,109.1604 21.40231,108.8598 21.8176,108.7423 21.60615,108.4773 21.93543,108.5376 21.73108,108.4698 21.56241,108.3692 21.67672,108.364 21.67916,108.3382 21.69123,108.1326 21.55578,108.0241 21.55152,107.3836 21.59821,107.0213 21.94991,106.697 21.96585,106.565 22.45686,106.8187 22.81807,105.8806 22.92103,105.3316 23.38878,104.8184 23.12538,104.7335 22.82427,104.1109 22.80446,103.9694 22.50606,103.3324 22.82147,103.0307 22.44462,102.4978 22.78027,102.1496 22.40003,101.7469 22.50021,101.547 22.25014,101.7815 21.83249,101.7879 21.14003,101.285 21.17868,101.1547 21.56387,101.1177 21.77615,100.2026 21.43935,99.9706 22.05203,99.16896 22.15524,99.32204 22.7415,99.56421 22.9258,98.88978 23.18311,98.67962 23.96499,98.88095 24.15503,97.53503 23.93779,97.75788 24.16994,97.55451 24.74129,97.78796 24.84673,97.84502 25.26789,98.70353 25.85471,98.57286 26.11908,98.73453 26.18707,98.76456 27.05228,98.70368 27.56615,98.42828 27.68903,98.32202 27.53787,97.90508 28.3721,97.55236 28.53457,97.34721 28.21058,96.27107 28.4075,96.62262 28.77994,96.5154 29.07517,96.17328 28.90239,96.12448 29.07665,96.3967 29.25173,96.09804 29.45244,95.26135 29.07291,94.69138 29.31206,94.42386 29.21401,93.94067 28.77195,93.29386 28.63134,93.22356 28.35798,92.55601 27.86175,91.6572 27.76037,91.66819 27.94326,91.32251 28.08927,90.39165 28.07166,90.38075 28.248,90.00265 28.32378,89.35764 27.96391,88.92725 27.28978,88.78898 28.05352,88.13596 27.87923,87.13796 27.82401,86.7031 28.10784,86.41976 27.9102,86.16701 28.17015,86.04537 27.90898,85.49779 28.32973,85.11485 28.33332,85.1314 28.67791,84.85825 28.56832,84.15152 28.88498,84.09618 29.27633,83.54865 29.19856,83.23838 29.58295,82.19776 30.09251,82.14826 30.32864,81.40681 30.41374,81.19847 30.02989,81.05566 30.20446,80.22026 30.57917,80.25038 30.74959,79.95748 30.87472,79.40791 31.08637,79.07217 31.45461,78.88874 31.26903,78.74631 31.90719,78.47343 32.23766,78.41224 32.55606,78.73645 32.69593,78.97096 32.34428,79.25841 32.52338,79.56429 32.67076,79.40984 33.17877,79.18546 33.19123,78.94111 33.39008,78.89888 33.59235,79.0872 33.63753,78.90406 33.9967,79.42042 34.01869,79.51649 34.46106,79.72459 34.43313,80.17257 34.85013,80.34001 35.46458,80.03587 35.41065,79.32433 35.9853,78.70403 35.91927,77.85342 35.48316,77.8409 35.50421,77.18671 35.52834,76.56726 35.91782,76.17518 35.83339,75.85235 36.6753,75.4545 36.72161,75.14687 37.01989,74.57156 37.03444,74.48911 37.24192,74.87856 37.23569,75.13383 37.43744,74.89603 37.66544,74.86215 38.50415,73.7812 38.61199,73.84548 38.97701,73.5577 39.25914,73.58203 39.28056,73.93794 39.59399,73.94488 40.02313,74.89946 40.33709,74.82812 40.52475,75.21906 40.44147,75.59311 40.65871,75.69683 40.29395,76.33176 40.35956,76.86404 41.02094,78.05938 41.03276,78.39241 41.41043,80.28261 42.05965,80.16733 42.63659,80.26365 42.6949,80.58799 42.89124,80.40971 43.0573,80.79986 43.17976,80.34283 44.4813,80.48974 44.71143,79.84063 44.89213,81.68958 45.36663,82.48621 45.12067,82.60367 45.43167,82.27198 45.57064,83.03088 47.21212,84.68604 47.00464,84.80595 46.82669,85.52972 47.0594,85.69684 47.23086,85.5416 47.93944,85.73545 48.371,86.58855 48.543,86.86476 49.1126,86.93111 49.11688,87.83231 49.175,87.91448 48.98592,87.74966 48.88459,88.08491 48.70694,87.97818 48.5092,88.5164 48.41327,89.04101 47.9473,89.56589 48.04869,89.79642 47.81815,90.0731 47.85859,90.91358 46.9533,91.01986 46.01566,90.66355 45.51682,90.87865 45.19198,93.50827 44.96534,94.69542 44.3477,95.431 44.28123,95.34509 44.04517,96.37058 42.71486,100.8255 42.65695,103.3221 41.90749,104.5437 41.88379,104.534 41.66262,105.0344 41.56764,107.4528 42.46183,109.2717 42.42277,110.4165 42.76889,111.047 43.34341,112.0054 43.77061,111.3868 44.34732,111.8645 45.0648,113.6466 44.76521,114.6434 45.4309,115.721 45.43835,116.2234 45.70384,116.6052 46.297,117.3657 46.34863,117.4388 46.57964,118.9783 46.81819,119.5133 46.41943,119.9207 46.7435,119.7014 47.19307,119.8565 47.21655,118.4786 48,117.8419 48.02544,117.3744 47.63805,116.8039 47.90002,115.9354 47.67554,115.4767 47.96859,116.7003 49.83983,117.8546 49.5054,118.5626 49.92574,119.1975 50.01209,119.3606 50.16798,119.1163 50.38475,119.2803 50.6097,120.0925 51.67718,120.7782 52.15837,120.6102 52.34472,120.721 52.54308,120.0612 52.58407,120.0243 52.76811,120.8139 53.26356,123.5218 53.55318,124.8751 53.09429,125.6005 53.0746,125.6722 52.85682,126.102 52.77266,125.9655 52.62254,126.5565 52.12088,126.4619 51.94272,126.9158 51.38577,126.8254 51.27232,126.9743 51.31988,126.9202 51.06199,127.2946 50.74709,127.3414 50.31707,127.5981 50.21679,127.523 49.81782,128.2506 49.49959,129.4714 49.4316,130.2226 48.86702,130.6731 48.86701,130.5245 48.61383,130.8255 48.30009,130.651 48.10178,131 47.6912,132.562 47.71522,132.6697 47.94657,133.1603 48.1057,134.5697 48.36628,134.7118 48.27581,134.5513 47.99365,134.7739 47.72915,134.1813 47.32342,133.9099 46.26525,133.1559 45.4652,133.131 45.12125,132.942 45.01337,131.8915 45.33602,131.4698 44.95948,130.9542 44.85416,131.2931 44.0797,131.3084 43.39982,131.1066 42.91479,130.4051 42.72232,130.6146 42.42395,130.259 42.8958,129.8965 43.002,129.7144 42.42675,129.3423 42.44767,128.9451 42.01748,128.0694 41.9782,128.3138 41.58303,128.1353 41.37826,126.6772 41.74695,126.0196 40.89744,124.8972 40.47795,124.3644 40,123.6468 39.8606,122.3854 39.43032,121.8802 38.94814,121.7059 39.05667,121.7003 38.86315,121.1427 38.7196,121.0971 38.92241,121.687 39.10405,121.5901 39.26279,121.9363 39.40033,121.2716 39.37237,121.5522 39.53826,121.4731 39.792,122.2851 40.48697,121.8038 40.95296,121.1892 40.937,120.4445 40.19276,119.394 39.79017,118.9877 39.19087,118.318 39.03813,117.8177 39.16712,117.5215 38.68634,118.0375 38.12706,118.5202 38.04356,118.8414 38.20891,119.0773 37.72818,118.89 37.28757,119.1172 37.20395,119.7698 37.166,120.221 37.68293,120.735 37.8399,121.5708 37.418,122.1174 37.55382,122.6682 37.41513,122.3838 37.02761,122.5344 37.01122,122.3365 36.83031,122.1946 37.04904,121.6362 36.74135,121.4436 36.86429,120.8485 36.65417,120.9541 36.4631,120.6834 36.38377,120.7109 36.135,120.2817 36.04828,120.3392 36.25572,120.115 36.20107,120.2932 35.97583,119.6192 35.61073,119.2038 35.04116,119.2062 34.75571,120.2884 34.30332,120.8313 32.61757,121.8113 31.9336,121.8704 31.69532,121.1061 31.83654,121.0377 31.81791,120.5218 32.09286,120.2708 31.93319,120.7106 31.99174,121.7072 31.29293,121.8834 30.88735,120.5082 30.31112,120.6782 30.09365,121.2798 30.3123,121.723 29.94876,122.1214 29.90477,121.4534 29.52279,121.4877 29.3878,121.9982 29.5897,121.9678 29.19673,121.8086 29.37851,121.7414 29.18855,121.4564 29.25615,121.3957 29.10852,121.6326 29.05306,121.7276 28.94267,121.4958 28.93484,121.6783 28.79261,121.4436 28.69154,121.6668 28.34389,121.3444 28.14142,121.1712 28.38927,120.9584 27.98499,120.6431 28.03683,120.8649 27.93188,120.6438 27.36485,120.0446 26.89451,120.1321 26.64603,119.8359 26.52199,119.9075 26.69044,119.8517 26.85539,119.5736 26.79332,119.831 26.4445,119.5809 26.42111,119.9581 26.37013,119.6143 26.16364,119.611 26.16002,119.7116 25.9623,119.4628 25.63036,119.6552 25.35127,119.3148 25.61117,119.1077 25.42362,119.3723 25.24816,119.129 25.27175,119.107 25.11101,118.8791 25.25459,119.0286 24.95979,118.6594 24.97705,118.6528 24.55454,118.4382 24.72174,118.2343 24.53569,118.1766 24.68885,117.8736 24.43393,118.1411 24.26461,117.7669 23.91921,117.6459 24.07347,117.5853 23.72171,117.422 23.9567,117.2421 23.60753,116.9178 23.66179,116.7479 23.34495,116.5327 23.42078,116.8015 23.23664,116.5004 22.9463,115.8156 22.74022,115.6449 22.87709,115.5681 22.6528,115.2227 22.78163,115.324 22.91621,114.8777 22.54238,114.7761 22.83329,114.5142 22.69923,114.6118 22.49697,114.2354 22.55644,114.0369 22.50504,113.5125 22.92255,113.5138 22.90736,113.6165 22.75491,113.4561 22.80441,113.5544 22.22112,113.529 22.2136,113.5158 22.21807,113.4965 22.22462,113.474 22.22078,113.4578 22.18258,113.3405 22.23388,113.3393 22.2268,113.1151 22.07514,112.9982 22.47025,112.9983 22.47192,112.9945 22.48273,112.9982 22.47025)),((122.0976 30.15388,122.3167 29.947,122.0269 29.99033,121.9371 30.16885,122.0976 30.15388)))
+MULTIPOLYGON(((-77.36086 8.686984,-76.76639 7.909259,-76.93661 8.552897,-76.33702 8.923599,-76.08941 9.333804,-75.62019 9.415977,-75.5163 10.23934,-75.69952 10.14136,-75.5125 10.57647,-74.85291 11.10267,-74.35 10.97785,-74.10612 11.35108,-73.27779 11.28881,-71.66233 12.46331,-71.22466 12.30771,-71.11625 12.03485,-71.32639 11.84789,-71.96606 11.65008,-72.23744 11.15238,-72.48579 11.09459,-73.37431 9.179666,-73.01078 9.296101,-72.76882 9.106619,-72.38087 8.321577,-72.48071 7.484616,-72.01836 7.011073,-70.08932 7.002468,-69.44788 6.114453,-67.47605 6.194591,-67.85004 5.290832,-67.87634 4.521809,-67.30263 3.397936,-67.85923 2.789513,-67.61562 2.812483,-67.19505 2.391271,-66.86983 1.225646,-67.09666 1.170079,-67.11682 1.732161,-67.44616 2.141113,-67.95162 1.746852,-68.20544 2.037632,-68.12775 1.730217,-69.85519 1.714919,-69.85407 1.069752,-69.32924 1.062455,-69.11382 0.634123,-69.46821 0.734351,-70.03735 0.553025,-70.06187 0,-70 -0.20092,-69.5933 -0.516707,-69.36835 -1.333702,-69.95342 -4.230484,-70.59111 -3.854687,-70.20691 -2.635289,-71.14234 -2.36803,-73.19693 -2.301213,-73.38068 -1.800092,-74.48315 -0.697625,-75.10118 -0.163096,-75.2882 -0.093691,-76.26915 0.441074,-76.59544 0.232862,-77.40308 0.361558,-77.67379 0.81724,-77.97404 0.817894,-78.77576 1.407844,-79.04723 1.613037,-78.84613 1.81657,-78.57029 1.761888,-78.55822 2.440422,-78.24505 2.673349,-77.79861 2.649674,-77.65806 2.872989,-77.16634 3.692999,-77.16255 3.69564,-77.10458 3.901834,-77.27479 3.839324,-77.17149 4.054936,-77.35904 3.933906,-77.52853 4.21599,-77.30168 4.643438,-77.37936 5.451063,-77.54697 5.488408,-77.23264 5.796444,-77.47776 6.189802,-77.32779 6.550925,-77.88682 7.220824,-77.74377 7.724391,-77.57512 7.508054,-77.17687 7.926277,-77.36086 8.686984)))
+MULTIPOLYGON(((-85.69843 11.07388,-85.60976 11.21682,-84.91411 10.94132,-84.67788 11.07886,-83.92849 10.70754,-83.69353 10.93761,-83.27977 10.18317,-82.5631 9.566999,-82.93756 9.473368,-82.93277 9.07554,-82.714 8.931086,-83.03423 8.364222,-83.48779 8.706521,-83.29498 8.371211,-83.56781 8.438021,-83.72871 8.576993,-83.48788 8.855814,-83.62083 9.036473,-84.5358 9.516808,-84.74493 9.96275,-85.24442 10.21484,-85.24252 10.12167,-84.86781 9.821921,-85.11121 9.551605,-85.78996 10.0892,-85.87448 10.35149,-85.62969 10.62717,-85.95062 10.88872,-85.69843 11.07388)))
+MULTIPOLYGON(((-84.83004 21.91694,-84.28132 22.01696,-84.44423 22.19913,-84.22116 22.56988,-83.22783 23.00043,-80.87563 23.14306,-77.87231 21.86489,-77.94974 22.10805,-77.64858 22.06589,-77.85509 21.92567,-77.7408 21.79838,-77.33253 21.63296,-77.43053 21.81045,-76.12368 21.09571,-75.71162 21.12968,-75.56042 20.78312,-74.73582 20.62732,-74.14251 20.18187,-75.1534 19.8943,-75.84227 20.03105,-77.73359 19.84306,-77.10847 20.37204,-77.26452 20.69829,-78.13723 20.76148,-78.48692 21.03594,-78.74833 21.64364,-79.8257 21.67051,-80.45974 22.07845,-81.05759 22.07245,-81.18996 22.28377,-81.22284 22.05452,-81.80782 22.18142,-82.16041 22.39826,-81.60777 22.52159,-81.88952 22.68474,-82.76345 22.70647,-83.36718 22.20912,-83.90379 22.1867,-84.03968 21.91084,-84.51357 21.75973,-84.51421 21.93356,-84.83004 21.91694)),((-82.93224 21.9352,-82.69332 21.88861,-82.55298 21.5619,-83.08946 21.47495,-83.19929 21.63253,-82.97388 21.57014,-83.09505 21.78799,-82.93224 21.9352)))
+MULTIPOLYGON(((-25.09711 17.19718,-24.98303 17.06912,-25.29724 16.90989,-25.35259 17.074,-25.09711 17.19718)),((-23.77427 15.3103,-23.48785 14.90434,-23.73463 14.97797,-23.77427 15.3103)))
+MULTIPOLYGON(((32.30749 35,32.91033 35.17661,32.92602 35.40247,33.64697 35.35596,34.59792 35.6995,33.93032 35.27253,34.09648 34.95496,33.69581 34.97161,33.03815 34.56351,32.41229 34.75311,32.30749 35)))
+MULTIPOLYGON(((14.82523 50.87399,15.17237 51.02024,15.38146 50.77971,16.3499 50.65818,16.19747 50.4337,16.63588 50.10873,17.01608 50.22456,16.91216 50.44516,17.68593 50.32611,17.59099 50.15761,17.78249 50.01773,18.57495 49.92144,18.85366 49.56773,18.7347 49.45151,18.57029 49.46633,18.33142 49.39188,18.34624 49.31708,18.12219 49.2571,18.12219 49.1823,18.01774 49.06304,17.86849 48.98824,17.56964 48.85381,17.31595 48.83865,17.15153 48.85381,17.03227 48.76385,16.92182 48.69472,16.53641 48.80704,15.02669 49.01706,14.98922 48.76698,14.31861 48.54292,13.84239 48.77366,12.66035 49.43354,12.40317 49.75452,12.54792 49.92308,12.214155 50.182137,12.3256 50.1721,12.50997 50.39046,14.38607 50.90216,14.30408 51.05877,14.82523 50.87399)))
+MULTIPOLYGON(((13.18373 54.34568,13.14224 54.54697,13.38461 54.52999,13.22123 54.60621,13.66617 54.57478,13.76725 54.3427,13.26875 54.29482,13.91638 53.90731,14.00136 53.85646,14.26866 53.69652,14.45072 53.26357,14.12299 52.8411,14.63822 52.57733,14.53389 52.39124,14.75716 52.06902,14.58629 51.82447,15.03887 51.27147,14.82523 50.87399,14.30408 51.05877,14.38607 50.90216,12.50997 50.39046,12.3256 50.1721,12.214155 50.182137,12.54792 49.92308,12.40317 49.75452,12.66035 49.43354,13.84239 48.77366,13.7241 48.51663,13.50247 48.59414,13.32995 48.32526,12.75725 48.12494,13.09669 47.64745,13.01005 47.4729,12.26024 47.74409,11.26402 47.40426,10.43452 47.58615,10.1776 47.27579,9.970167 47.55003,9.544334 47.54256,8.595241 47.80518,8.413456 47.67541,8.595754 47.60012,7.58092 47.58238,7.581027 48.12104,8.235493 48.96933,6.732141 49.16809,6.374592 49.45884,6.527001 49.81488,6.13802 50.1329,6.403867 50.32674,6.025336 50.75425,6.030564 50.82741,6.096231 50.83913,6.107958 50.9048,6.030564 50.9048,6.030564 50.97047,5.899231 50.97047,5.878123 51.03613,5.943792 51.08069,5.986005 51.03613,6.194732 51.14636,6.173625 51.21203,6.096231 51.1792,6.084505 51.25424,6.194732 51.34336,6.239291 51.42075,6.227565 51.51925,6.107958 51.61776,6.117339 51.6928,6.018838 51.70453,5.953171 51.74909,5.953171 51.83586,6.150171 51.83586,6.140792 51.90153,6.281507 51.85697,6.424565 51.83586,6.666125 51.90153,6.797459 51.90153,6.851399 51.94609,6.80684 52.01176,6.687233 52.02114,6.731792 52.09853,6.884233 52.13136,7.060126 52.25331,7.015567 52.29553,7.060126 52.38465,6.994459 52.48315,6.872507 52.42686,6.7529 52.47142,6.675507 52.52536,6.720066 52.56992,6.698958 52.64732,6.973351 52.63559,7.060126 52.62386,7.048399 52.87715,7.179733 52.98738,7.137519 53.12809,7.179733 53.17265,7.158627 53.25004,7.224293 53.25943,7.301686 53.31571,7.114066 53.32509,7.006186 53.32509,7.104686 53.47988,7.1469 53.52209,7.081234 53.54554,7.114066 53.61121,7.278234 53.66515,7.465852 53.65342,7.606567 53.67688,7.802905 53.703,8.019035 53.71154,8.205529 53.40596,8.276391 53.61264,8.556741 53.54255,8.680147 53.89381,9.052367 53.87154,8.811317 54.1769,8.964425 54.31462,8.588911 54.32712,9.050051 54.47654,8.812621 54.47458,8.976296 54.53461,8.703629 54.71344,8.61216 54.88446,8.28185 54.74732,8.390188 55.04619,8.378885 54.89544,8.651432 54.91,9.472132 54.84745,9.959934 54.78204,10.0287 54.55287,9.841899 54.47237,10.19967 54.45798,10.13167 54.31627,11.13042 54.39335,10.75883 54.05312,10.87973 53.95297,12.15211 54.09328,12.52026 54.48446,12.92828 54.42917,12.42218 54.25908,13.18373 54.34568)),((6.65909 53.59245,6.736483 53.60886,6.818566 53.59245,6.724756 53.57368,6.764627 53.55962,6.705994 53.54554,6.65909 53.57368,6.65909 53.59245)),((7.130483 53.69329,7.184423 53.70971,7.334519 53.71206,7.233675 53.68626,7.137519 53.67219,7.130483 53.69329)),((6.877197 53.66281,6.966317 53.68157,7.067162 53.68157,7.09296 53.66281,6.959281 53.66515,6.874852 53.64639,6.877197 53.66281)),((7.458817 53.71206,7.470543 53.74723,7.620639 53.75192,7.597186 53.73082,7.498686 53.72613,7.458817 53.71206)),((7.686306 53.77772,7.801222 53.77538,7.754317 53.74958,7.698032 53.75661,7.658162 53.75192,7.686306 53.77772)))
+MULTIPOLYGON(((42.41032 12.44916,42.4554 12.51723,42.69648 12.35956,43.13463 12.70684,43.3728 11.98542,42.51382 11.57484,43.25469 11.4696,42.96164 10.98441,41.81599 10.95938,41.77344 11.48747,42.41032 12.44916)))
+MULTIPOLYGON(((9.771108 54.93061,9.778394 54.91796,9.472132 54.84745,8.651432 54.91,8.62571 55.42776,8.075603 55.56623,8.162464 56.64308,8.558956 56.56107,8.256482 56.82804,8.623206 57.12032,9.396707 57.15497,9.953356 57.5889,10.56769 57.74319,10.55971 57.22423,10.18962 56.7011,10.96203 56.43379,10.70406 56.13452,10.35611 56.25669,10.19714 55.84081,9.857654 55.8551,10.03451 55.7001,9.544365 55.70776,9.862017 55.62768,9.501693 55.49574,9.695034 55.46497,9.515706 55.2523,9.719143 55.25641,9.427959 55.0272,9.771108 54.93061)),((11.13289 55.53054,10.88031 55.74566,11.38251 55.77841,11.52033 55.93058,11.28877 55.99945,11.78232 55.9762,11.61304 55.78364,11.81653 55.68839,11.91094 55.93458,12.08448 55.65274,12.0233 55.95794,11.84993 55.9571,12.63485 56.03262,12.59752 55.68785,12.19602 55.46967,12.45854 55.29117,12.01612 55.1478,12.17196 54.99295,11.83315 55.04755,11.7333 55.19399,11.24863 55.21091,11.13289 55.53054)),((10.49426 55.55054,10.85972 55.29445,10.65249 55.04998,10.64571 55.04885,10.61209 55.04326,10.07891 55.07621,9.680588 55.51643,10.49426 55.55054)),((11.82714 54.78779,11.77402 54.96134,12.12247 54.88567,11.97223 54.56238,11.86402 54.75827,11.49926 54.59722,11.00996 54.76348,11.17926 54.95888,11.82714 54.78779)),((15 55.18967,15.07421 54.98485,14.68471 55.09652,14.77224 55.30014,15 55.18967)))
+MULTIPOLYGON(((-61.47072 15.52196,-61.30369 15.58877,-61.23687 15.35492,-61.40391 15.17117,-61.47072 15.52196)))
+MULTIPOLYGON(((-71.75405 18.03015,-71.69286 18.34117,-72.00349 18.62527,-71.73773 18.73045,-71.88239 18.9543,-71.61336 19.20164,-71.78707 19.33363,-71.7578 19.70272,-71.65755 19.89631,-70.98975 19.92854,-69.9672 19.68463,-69.7485 19.28398,-69.1488 19.29421,-69.62262 19.2239,-69.61973 19.08248,-68.77193 18.97396,-68.32426 18.62411,-68.63787 18.21252,-69.32555 18.47192,-69.88219 18.48724,-70.50739 18.19358,-70.67525 18.43261,-71.03745 18.31735,-71.42178 17.60656,-71.75405 18.03015)))
+MULTIPOLYGON(((-2.206259 35.09098,-1.382006 35.31348,-0.825226 35.7767,-0.092147 35.801,0.345144 36.20284,1.352905 36.55564,2.548406 36.59274,3.906962 36.92595,4.789081 36.89609,5.300296 36.64227,6.40426 37.08866,6.917278 36.88607,7.212918 37.09152,7.852205 36.84656,8.641963 36.94693,8.154936 36.49945,8.409268 36.42483,8.255554 35.76288,8.473442 35.24205,8.31266 34.72816,7.636226 34.19632,7.533545 33.79332,7.738455 33.25135,8.326456 32.80933,8.353506 32.51591,9.129236 32,9.575346 30.24043,9.395229 30.17122,9.877125 29.04413,9.962235 27.87777,9.773593 27.27238,9.927657 26.64288,9.387854 26.18385,10.04183 25.32771,10.23926 24.61171,11.60618 24.24904,11.97955 23.52503,7.445678 20.84247,5.817081 19.43771,4.242888 19.13672,3.294835 18.98319,3.10724 19.15906,3.231133 19.82456,1.798455 20.29978,1.634107 20.57896,1.172165 20.73779,1.166675 21.11889,0 21.83772,-4.827674 24.9966,-8.673868 27.29807,-8.670276 27.66212,-8.669257 28.71986,-7.640522 29.38141,-5.108271 30.017,-4.82199 30.64122,-3.586124 30.90655,-3.807284 31.22201,-3.656205 31.61393,-2.829027 31.77569,-2.867483 32.10715,-1.205814 32.11682,-1.250021 32.33232,-0.991742 32.52681,-1.542218 32.9575,-1.745389 34.75318,-2.206259 35.09098)))
+MULTIPOLYGON(((-78.77576 1.407844,-77.97404 0.817894,-77.67379 0.81724,-77.40308 0.361558,-76.59544 0.232862,-76.26915 0.441074,-75.2882 -0.093691,-75.62195 -0.108895,-75.24495 -0.534989,-75.18459 -0.970688,-75.36436 -0.955734,-75.53837 -1.536144,-76.62732 -2.590585,-77.79285 -2.984906,-78.19521 -3.364114,-78.13014 -3.516708,-78.32841 -3.441479,-78.61257 -4.475154,-78.9999 -4.979351,-79.26035 -4.967359,-79.61343 -4.442309,-80.13631 -4.285207,-80.44341 -4.436912,-80.30513 -4.200802,-80.47536 -4.054242,-80.15477 -3.910297,-80.21902 -3.437626,-80.04405 -3.370153,-80.03853 -3.356442,-79.71052 -2.482893,-79.84434 -2.307149,-79.95517 -2.493104,-80.00433 -2.419199,-80.2761 -2.732283,-81.00587 -2.192326,-80.73239 -2.038729,-80.90808 -1.054829,-80.30134 -0.652601,-80.48804 -0.379718,-80.0427 0.108537,-80.04128 0.821698,-79.18088 1.07305,-78.77576 1.407844)),((-91.43499 -0.784657,-91.07195 -0.590685,-91.59045 0,-91.33742 0.163616,-90.78073 -0.753479,-91.16916 -1.05116,-91.44044 -0.997582,-91.43499 -0.784657)),((-90.35518 -0.769967,-90.53396 -0.566315,-90.24759 -0.47706,-90.17548 -0.665049,-90.35518 -0.769967)))
+MULTIPOLYGON(((24.35622 57.87815,24.57626 58.33288,23.75047 58.34032,23.50237 58.57251,23.76257 58.76242,23.46284 58.77376,23.43765 58.94152,23.66576 58.97635,23.41722 59.02584,23.51536 59.2305,25.69773 59.67622,28.04841 59.47015,28.18678 59.30873,27.54815 58.86166,27.44971 58.50935,27.82688 57.85849,27.32212 57.54839,26.50471 57.52006,25.29386 58.07761,24.35622 57.87815)),((22.85475 58.33971,22.29942 58.20514,22.184302 58.074735,22.166799 58.145438,21.84381 58.28842,22 58.39152,21.84379 58.49769,22.95893 58.61528,23.33162 58.46026,22.85475 58.33971)),((22.5642 58.6882,22.04432 58.92493,22.59108 59.09182,22.94615 58.9837,23.07467 58.83891,22.5642 58.6882)))
+MULTIPOLYGON(((34.23046 31.33046,34.26801 31.22361,34.91122 29.49664,34.24915 27.72421,33.24136 28.55233,33.17902 29.00064,32.82695 29.31606,32.57037 30.00153,32.34132 29.58844,32.86613 28.57118,33.56222 27.88803,33.49742 27.64889,33.84745 27.24946,33.93649 26.66787,35.14138 24.51279,35.79397 23.90703,35.48408 23.89439,35.62337 23.14688,35.21217 22.7873,34.95135 22.85757,34.69196 22.29791,34.16069 22.2071,34.00521 21.77233,33.56408 21.72539,33.16651 22.00619,31.4121 22.00813,31.4745 22.22508,31.31852 22.0064,25 21.9992,24.99944 29.25016,24.6981 30.14885,25.01827 30.77798,24.86111 31.40591,25.14805 31.64858,27.3445 31.37001,29.09328 30.81744,30.25248 31.29898,30.35956 31.50974,30.97031 31.58241,30.62933 31.38031,31.10268 31.4888,30.97656 31.58651,31.87915 31.52854,31.78458 31.27357,32.09054 31.05464,32.28268 31.19773,32.70239 31.06094,32.91797 31.08571,33.10033 31.17812,33.36142 31.06066,34.23046 31.33046)))
+MULTIPOLYGON(((-13.16859 27.66702,-8.670276 27.66212,-8.673868 27.29807,-8.674157 25.99761,-12.00389 25.99864,-12 23.45452,-12.75983 23.38755,-13.05887 23.0585,-13.00176 21.33081,-16.91926 21.33035,-17.05185 20.77416,-16.95304 21.83368,-15.70791 23.82401,-16.00132 23.65436,-14.89122 24.70029,-14.49319 26.14625,-13.57368 26.73241,-13.16859 27.66702)))
+MULTIPOLYGON(((-8.207305 43.32568,-8.317112 43.56603,-7.676827 43.79172,-7.049364 43.48129,-6.102077 43.48532,-5.836588 43.66094,-4.471512 43.38303,-3.587238 43.51397,-2.978318 43.31048,-2.750118 43.45387,-1.788518 43.35551,-0.561222 42.79122,0.678369 42.68731,0.703 42.86748,1.439922 42.60649,1.464789 42.44115,1.72351 42.50385,2.032906 42.35859,3.164816 42.44079,3.315126 42.32742,3.03903 42.17483,3.1712 41.8692,2.118542 41.29733,0.981047 41.03984,0.707491 40.80322,0.853528 40.72556,-0.326278 39.46793,-0.147956 38.98944,0.23056 38.73304,-0.503325 38.33036,-0.858919 37.71926,-0.694572 37.62732,-1.823366 37.26987,-2.124149 36.73759,-4.398425 36.72457,-5.177732 36.41409,-5.340027 36.15975,-5.353222 36.1598,-5.610219 36.01498,-6.138934 36.30164,-6.433872 36.74737,-6.085259 37.06393,-6.382065 36.80788,-6.918484 37.18449,-6.837488 37.29861,-7.115517 37.20753,-7.380345 37.17237,-7.457407 37.41022,-7.415919 37.7572,-6.951722 38.14727,-7.330624 38.43736,-6.953342 39.029,-7.524928 39.65641,-7.012062 39.67205,-6.874694 40,-7.018512 40.18777,-6.776533 40.36558,-6.93036 41.034,-6.184047 41.58385,-6.5545 41.69159,-6.571484 41.96747,-8.095398 41.80145,-8.199442 42.14565,-8.799806 41.90958,-8.892814 42.11259,-8.604636 42.29104,-8.866341 42.25817,-8.660237 42.41981,-8.935301 42.4627,-8.74061 42.65106,-9.016839 42.51727,-8.875895 42.8243,-9.084396 42.73923,-9.28828 43.05134,-8.836575 43.34566,-8.207305 43.32568)),((3.058582 39.26368,2.34437 39.58329,3.2098 39.95784,3.134699 39.77854,3.470593 39.71291,3.058582 39.26368)),((-14.01923 28.63949,-13.82573 28.69311,-13.92146 28.24234,-14.50271 28.06274,-14.01923 28.63949)),((-16.67809 28.38674,-16.11931 28.55642,-16.54099 28.02102,-16.91243 28.33643,-16.67809 28.38674)),((-15.55806 28.14362,-15.36081 27.93222,-15.59388 27.73076,-15.82851 27.95347,-15.55806 28.14362)),((1.412784 39.09651,1.534737 39.10589,1.623856 39.0285,1.424511 38.91827,1.391677 38.84088,1.302557 38.89716,1.213439 38.88544,1.204058 38.97456,1.314284 38.97456,1.302557 39.05195,1.412784 39.09651)),((-17.86377 28.832,-17.72186 28.73906,-17.83327 28.44737,-18.00255 28.75838,-17.86377 28.832)),((4.052117 40.05807,4.297035 39.83351,3.812775 39.92062,4.052117 40.05807)),((-13.78044 28.83317,-13.81041 29.02878,-13.43715 29.21933,-13.78044 28.83317)))
+MULTIPOLYGON(((42.41032 12.44916,41.77344 11.48747,41.81599 10.95938,42.96164 10.98441,42.68301 10.60633,42.83263 10.27788,44.00586 8.996557,46.9897 8,47.98618 8,44.98174 4.917296,43.65907 4.868027,42.83331 4.270625,42.08767 4.179365,41.89908 3.975494,41.16927 3.94258,40.77492 4.281918,39.86957 3.874727,39.53289 3.402422,38.12922 3.616987,37.0419 4.375583,36.04136 4.447551,35.9477 4.629333,35.8614 5.314649,35.30796 5.341023,35.12726 5.62447,34.93832 6.551554,34.19323 7.038556,33.67129 7.693246,33.00082 7.873695,33.2178 8.430296,33.7691 8.362971,34.13977 8.595025,34.29985 10.58783,34.60198 10.90413,34.78151 10.70829,34.97515 10.90899,35.06233 11.74959,35.68944 12.66013,36.15517 12.68091,36.37843 13.54732,36.56107 14.25609,36.43877 15.15664,36.96253 16.28581,37.00204 17.06818,37.39465 17.04713,37.5153 17.33686,38.26013 17.55859,38.56443 18.00309,39.69333 15.12198,39.81512 15.0743,39.87025 15.49886,40.16063 14.97856,40.52112 15.0214,40.77411 14.70481,41.17978 14.6216,41.68169 13.94352,42.22152 13.6234,42.38828 13.20285,43.13463 12.70684,42.69648 12.35956,42.4554 12.51723,42.41032 12.44916)),((40 15.85672,40.41896 15.55736,39.95969 15.61414,40 15.85672)))
+MULTIPOLYGON(((22.9639 60.3084,22.76673 60.00655,22.37797 60.09168,22.94714 60.30462,22.53627 60.21209,22.64918 60.40788,21.77085 60.50473,21.8603 60.64865,21.5849 60.49359,21.21686 60.90632,21.44547 60.91067,21.30112 61.07809,21.61727 61.22718,21.4831 61.56853,21.72353 61.55123,21.28389 61.99358,21.45276 62.21346,21.11172 62.48463,21.12302 62.79442,21.69213 63.05116,21.58454 63.28366,22.36647 63.28535,22.20118 63.47124,22.40269 63.4355,22.32429 63.57304,22.8406 63.6464,22.93846 63.75509,22.66913 63.80982,22.82948 63.90371,23.00955 63.77902,23.61997 64.04483,24.54426 64.81657,25.49055 64.96886,25.22754 65.12632,25.36902 65.42327,25.2062 65.56065,24.15595 65.81819,23.65543 66.30672,24.01554 66.82013,23.5792 67.16257,23.78639 67.42785,23.40979 67.49654,23.65582 67.96259,20.55732 69.0625,21.64404 69.27008,22.37394 68.72049,23.16076 68.62904,23.95907 68.83519,24.90355 68.55798,25.78341 69.02026,25.70955 69.25553,25.97886 69.71546,27.96325 70.09605,29.33293 69.49054,28.82457 69.2292,28.92693 69.05738,28.43475 68.90842,28.80354 68.87493,28.45037 68.54767,28.65979 68.19511,30.03453 67.66936,29.02974 66.91658,30.10133 65.83206,30.12272 65.66451,29.73441 65.62791,29.88122 65.56409,29.60952 65.25109,29.89286 65.10344,29.59626 64.98994,30.08586 64.77503,30.05301 64.40425,30.55125 64.11019,29.98095 63.75448,31.58095 62.90803,30.94843 62.31269,27.8018 60.5494,26.44571 60.49363,26.52312 60.34407,26.24531 60.45474,25.78704 60.23732,25.67679 60.38103,24.41668 59.96262,23.64137 59.93294,23.57659 59.92838,22.89621 59.81329,23.23341 60.03376,22.84129 60.02602,23.15738 60.05233,22.87505 60.1638,22.9639 60.3084)),((19.89858 60.3023,19.80618 60.39631,20.28798 60.28155,19.96204 60.20273,20.24253 60.00166,19.7592 60.09486,19.64925 60.2912,19.89509 60.29403,19.89858 60.3023)))
+MULTIPOLYGON(((178.1421 -18.25408,177.3382 -18.11754,177.2647 -17.89015,177.5227 -17.51011,178.1833 -17.31135,178.5816 -17.64541,178.6837 -18.05215,178.1421 -18.25408)),((180 -16.17001,179.4743 -16.70402,179.9275 -16.4691,179.9317 -16.75956,179.2012 -16.6999,178.7163 -17.01024,178.5064 -16.82339,178.551 -16.63551,180 -16.17001)))
+MULTIPOLYGON(((-59.32932 -52.34733,-59.72961 -52.13116,-59.49426 -51.83852,-58.96808 -51.78765,-59.17275 -51.58753,-58.92181 -51.53147,-59.14103 -51.46628,-58.85584 -51.38089,-58.963 -51.24174,-58.33759 -51.36374,-58.58615 -51.44751,-58.21596 -51.66436,-58.26746 -51.39955,-57.73994 -51.51839,-58.15722 -51.55529,-57.71249 -51.68759,-58.39589 -51.92214,-58.93896 -51.79064,-58.62948 -52.11549,-59.25478 -51.99445,-59.01723 -52.25996,-59.4515 -52.13249,-59.32932 -52.34733)),((-60.236 -51.42021,-60.17057 -51.39289,-59.59754 -51.45232,-59.19929 -51.44551,-59.85421 -51.96618,-60.61304 -52.26045,-61.07092 -52.01685,-60.50035 -52.02376,-60.38986 -51.9291,-60.62925 -51.92735,-60.46045 -51.84176,-60.46168 -51.83904,-60.19226 -51.71931,-60.64433 -51.34375,-60.25455 -51.38418,-60.236 -51.42021)),((-36.18698 -54.4221,-35.7921 -54.75687,-36.1126 -54.885,-36.454 -54.52568,-37.41179 -54.26977,-37.24134 -54.14586,-38.01948 -54.00739,-36.66531 -54.10859,-36.4875 -54.19356,-36.67097 -54.28681,-36.18698 -54.4221)))
+MULTIPOLYGON(((158.12 6.90269,158.1702 6.952803,158.2871 6.936099,158.3205 6.885985,158.2871 6.78577,158.2036 6.78577,158.12 6.90269)),((162.9976 5.36592,163.0477 5.315818,162.9976 5.265705,162.8807 5.299114,162.9976 5.36592)))
+MULTIPOLYGON(((-6.685637 62.0614,-7.106133 62.31528,-6.62926 62.20536,-6.685637 62.0614)))
+MULTIPOLYGON(((-149.3768 -17.53473,-149.1532 -17.87719,-149.5832 -17.7391,-149.6221 -17.5621,-149.3768 -17.53473)))
+MULTIPOLYGON(((2.546947 51.09281,2.795442 50.72651,3.139944 50.79072,3.694881 50.31094,4.206795 50.27324,4.148557 49.97853,4.877701 50.15532,4.856486 49.79186,5.477649 49.49361,5.816617 49.54663,6.374592 49.45884,6.732141 49.16809,8.235493 48.96933,7.581027 48.12104,7.58092 47.58238,6.985055 47.50213,6.874169 47.359,7.051111 47.33619,6.428569 46.92942,5.957461 46.20375,6.775381 46.4403,6.776672 46.15083,7.03618 45.93694,6.790975 45.77126,7.12885 45.26577,6.615681 45.10521,7.013811 44.83339,6.849277 44.53329,7.002817 44.24012,7.678827 44.18167,7.523377 43.78971,6.150552 43.03003,4.875491 43.3631,4.738445 43.46336,4.832345 43.33904,4.574308 43.3745,4.038548 43.5651,3.332358 43.28226,2.991492 42.96224,3.164816 42.44079,2.032906 42.35859,1.72351 42.50385,1.439922 42.60649,0.703 42.86748,0.678369 42.68731,-0.561222 42.79122,-1.788518 43.35551,-1.424399 43.66138,-1.253916 44.55111,-1.020061 44.65529,-1.16444 44.7733,-1.262118 44.62058,-1.152009 45.48921,-0.558637 45.03542,-0.824097 45.48967,-1.234649 45.68884,-0.992596 45.97147,-1.239468 46.16558,-1.117898 46.29456,-1.804643 46.48708,-2.139063 46.81699,-1.984438 47.03243,-2.243252 47.13449,-2.009018 47.31611,-2.53937 47.28721,-2.477763 47.51271,-2.910778 47.54142,-2.70604 47.6384,-3.109616 47.47004,-3.136508 47.73933,-4.109377 47.97178,-4.3661 47.78963,-4.738554 48.04216,-4.294135 48.10557,-4.633099 48.28314,-4.189399 48.30006,-4.461697 48.33046,-4.284529 48.44025,-4.796903 48.41734,-4.548846 48.64105,-3.861644 48.62415,-3.078109 48.88744,-2.692234 48.49808,-2.325284 48.69125,-1.358894 48.63744,-1.614106 48.84066,-1.610309 49.21982,-1.942512 49.73267,-1.268516 49.70425,-1.141551 49.31734,-0.229212 49.269,0.481422 49.47628,0.092723 49.47592,0.194277 49.70889,1.672195 50.1855,1.582968 50.87255,2.546947 51.09281)),((9.483669 42.84132,9.553199 42.14012,9.180149 41.37232,8.660048 41.75091,8.799218 41.9035,8.609168 41.9044,8.739815 42.06124,8.545298 42.38079,9.295632 42.68132,9.353201 43.01014,9.483669 42.84132)))
+MULTIPOLYGON(((68.9295 -48.86312,69.17527 -48.76316,69.0575 -49.1187,69.25529 -49.07036,69.62476 -48.98005,69.65557 -49.12193,69.30565 -49.19022,69.57137 -49.30214,70.5244 -49.10763,70.53436 -49.30701,70.30265 -49.38895,70.4429 -49.44366,69.8761 -49.37181,69.87763 -49.37266,69.61449 -49.38235,69.78697 -49.54977,70.3018 -49.55116,70.2247 -49.70134,69.12501 -49.46886,69.09065 -49.68557,68.772 -49.73171,68.93176 -49.32593,68.76415 -49.22182,68.92656 -49.14744,68.73909 -49.08115,68.89362 -48.99872,68.79001 -48.85332,69.12785 -48.73497,68.9295 -48.86312)))
+MULTIPOLYGON(((-5.761648 56.85765,-5.923347 56.88718,-5.825565 57.01194,-5.50931 56.99562,-5.802319 57.06939,-5.3873 57.11016,-5.657581 57.23205,-5.391338 57.23504,-5.734032 57.28438,-5.440399 57.41738,-5.830651 57.3815,-5.835985 57.58011,-5.513047 57.54048,-5.819703 57.63965,-5.673998 57.70136,-5.814012 57.86035,-5.073551 57.82016,-5.456258 58.07318,-5.240592 58.15485,-5.377501 58.26773,-4.94328 58.21893,-5.182642 58.35573,-4.996487 58.63159,-4.48174 58.44477,-3.026596 58.64274,-3.127723 58.36174,-4.192018 57.86132,-3.782587 57.856,-4.467337 57.48183,-3.336853 57.72617,-1.827003 57.61489,-2.546609 56.57108,-3.360783 56.38087,-2.819083 56.45011,-2.596072 56.28216,-3.296456 56.04559,-2.147081 55.91851,-1.645028 55.58646,-1.245967 54.59323,-0.596015 54.49137,-0.081918 54.12095,-0.203828 53.9763,0.134925 53.61492,-0.706891 53.70306,0.161409 53.48294,0.339487 53.10311,0 52.89512,0.367313 52.79057,0.971131 52.98265,1.739798 52.63234,1.579712 52.09655,1.142966 52.04163,1.286637 51.8724,0.959528 51.80658,0.928523 51.80112,0.686442 51.73093,0.94825 51.61734,0.602265 51.53315,0.531331 51.53715,0.344282 51.44876,0.725905 51.42236,0.744292 51.38912,0.87593 51.38862,1.437325 51.38649,0.963791 50.91404,0.237589 50.73737,-0.85875 50.8159,-1.478651 50.9216,-1.406337 50.78976,-2.465522 50.5185,-2.798604 50.72173,-3.483619 50.69411,-3.648454 50.22518,-4.205175 50.4288,-4.704587 50.34961,-5.207258 49.96104,-5.713986 50.12914,-4.791278 50.60564,-4.532721 51.0243,-4.160434 51.08017,-3.00623 51.22282,-2.419979 51.81339,-3.340029 51.3843,-3.837151 51.63112,-4.30424 51.5638,-4.081483 51.66132,-4.347486 51.80293,-5.060992 51.62495,-4.933724 51.71405,-5.322225 51.86536,-4.211852 52.26543,-3.948004 52.55988,-4.133759 52.61578,-3.939249 52.7523,-4.155301 52.81306,-4.060295 52.92563,-4.764292 52.79308,-4.204031 53.21437,-3.3178 53.35903,-3.06123 53.22663,-3.204575 53.39034,-3.046917 53.4413,-2.789017 53.29852,-3.108091 53.55709,-2.839477 53.72302,-3.060501 53.77135,-2.853241 54.00626,-2.805058 54.2462,-3.153319 54.06556,-3.64097 54.51077,-3.060157 54.98634,-3.602532 55.02723,-3.986511 54.76991,-4.406258 54.91104,-4.396054 54.67985,-4.816141 54.86673,-4.96006 54.80833,-4.853545 54.63635,-5.185563 54.97681,-4.994437 54.91571,-4.625731 55.4992,-4.907257 55.70077,-4.880601 55.94394,-4.493469 55.92852,-4.857075 55.992,-4.754687 56.21059,-5 55.86493,-5.170537 55.91907,-5.345491 55.97461,-4.922588 56.27454,-5.44153 56.03485,-5.314846 55.78452,-5.602317 55.30992,-5.806814 55.36736,-5.436556 55.85783,-5.671417 55.81552,-5.605306 56.02883,-5.485006 56.26105,-5.665133 56.29794,-5 56.71432,-5.180667 56.79288,-5.686227 56.50142,-6.008562 56.65339,-5.53949 56.68963,-6.235613 56.71775,-5.761648 56.85765)),((11.33461 2.173887,11.69521 2.322612,13.29897 2.170563,13.15633 1.234311,14.18722 1.39562,14.50007 0.898546,13.88868 0.202671,13.89537 -0.212169,14.49294 -0.615902,14.39857 -1.875691,14.08302 -2.481633,13.75816 -2.113381,13.5031 -2.431169,13.04093 -2.333772,12.73326 -1.864831,12.44544 -1.869991,12.50287 -2.422352,11.60872 -2.322756,11.61747 -2.789746,12.06658 -2.969432,12.04545 -3.352566,11.88431 -3.747393,11.52937 -3.512756,11.20501 -3.978806,9.624951 -2.408721,8.704875 -0.68259,8.842259 -0.834064,9.294266 -0.400335,9.320472 0.332451,9.476711 0.145474,9.912024 0.181602,9.916915 0.187098,9.310792 0.517722,9.503311 0.66844,9.613253 0.517494,9.665299 1.061179,11.33478 0.999263,11.33461 2.173887)),((-7.405216 54.94457,-6.959617 55.19511,-6.144355 55.22849,-5.762994 54.81772,-5.929478 54.59916,-5.545345 54.65722,-5.460032 54.38773,-5.686832 54.58477,-5.703889 54.35185,-5.527007 54.31477,-6.266092 54.09651,-6.634315 54.04186,-7.032411 54.41945,-7.282304 54.12552,-7.550656 54.12475,-8.160958 54.43678,-7.405216 54.94457)),((-6.841243 57.81628,-7.132653 57.8365,-6.822138 57.9038,-7.11227 57.99076,-6.913652 58.05386,-7.095441 58.18867,-6.863925 58.11589,-6.804593 58.30701,-6.185835 58.46983,-6.381968 58.22593,-6.157477 58.22328,-6.581411 58.08951,-6.401071 58.11052,-6.477533 57.93663,-6.699586 58.05869,-6.841243 57.81628)),((-6.303623 57.69365,-6.172023 57.29937,-5.649447 57.25922,-6.022753 57.02213,-5.841354 57.19072,-6.327704 57.16341,-6.39142 57.36631,-6.791327 57.4233,-6.586012 57.42461,-6.636896 57.60946,-6.31823 57.45966,-6.303623 57.69365)),((-6.275485 56.4812,-6.330446 56.60921,-6.071127 56.6426,-5.649987 56.43379,-6.328577 56.27247,-5.983783 56.39249,-6.275485 56.4812)),((-1.3017 60.25573,-1.70729 60.29218,-1.055126 60.43896,-1.279205 59.85966,-1.3017 60.25573)),((-4.572057 53.26992,-4.591009 53.2866,-4.433951 53.43357,-4.047035 53.31404,-4.346991 53.1317,-4.572057 53.26992)),((-6.269501 55.58354,-6.262885 55.78733,-6.489327 55.79449,-6.127541 55.94006,-6.024627 55.6871,-6.269501 55.58354)),((-45.19071 -60.73222,-46.03582 -60.60854,-45.45302 -60.54016,-45.19071 -60.73222)),((-4.628757 54.05592,-4.798655 54.06398,-4.723104 54.21301,-4.367136 54.41885,-4.628757 54.05592)),((-7.263451 57.33499,-7.20893 57.11899,-7.392337 57.11483,-7.426861 57.39123,-7.263451 57.33499)),((-2.836712 58.87268,-3.360115 59.10545,-2.712693 58.97096,-2.836712 58.87268)))
+MULTIPOLYGON(((-61.62106 12.24797,-61.63776 11.99741,-61.85492 11.99741,-61.62106 12.24797)))
+MULTIPOLYGON(((39.25613 43.92894,41.57566 43.84114,47.16404 41.89426,47.19468 41.89426,46.70084 41.43105,45.86707 41.55434,44.5701 41.55434,42.85301 41.56945,42.82929 41.58788,42.52033 41.44005,41.547 41.52649,41.77663 41.86655,41.43321 42.73899,40.33849 43.14618,39.25613 43.92894)))
+MULTIPOLYGON(((-54.01162 5.621387,-53.83072 5.7702,-52.93198 5.458016,-52.65663 5.141731,-51.94453 4.508541,-51.79938 4.608623,-51.61506 4.190925,-52.90534 2.189559,-53.78421 2.36406,-54.1146 2.127094,-54.52573 2.303486,-53.97749 3.601097,-54.3625 4.046188,-54.47425 4.903628,-54.01162 5.621387)))
+MULTIPOLYGON(((-2.689926 9.488792,-2.945597 10.62952,-2.834325 11.00416,-0.621151 10.90218,-0.142005 11.13898,0.022753 11.08191,-0.063918 10.64102,0.392497 10.30426,0.227102 9.455466,0.562796 9.40219,0.381674 8.749467,0.725227 8.284056,0.530341 6.825836,1.191781 6.104417,0.924824 5.784073,0.238387 5.760786,-1.979184 4.756618,-3.110742 5.094452,-2.727679 5.137735,-3.25542 6.618508,-2.780885 7.949609,-2.494897 8.205227,-2.779666 9.055429,-2.689926 9.488792)))
+MULTIPOLYGON(((-28.14555 70.46027,-27.09641 70.88862,-25.69718 71.01743,-25.29546 70.65814,-28.13041 70.46035,-26.33931 70.36531,-28.59663 70.10286,-27.37967 69.96333,-26.91559 70.25006,-25.31204 70.41239,-25.32899 70.27416,-23.86761 70.1242,-22.12541 70.15429,-23.31262 69.75248,-23.31853 69.75288,-23.92075 69.75668,-23.64756 69.56281,-24.34126 69.60481,-24.08908 69.40952,-25.24182 69.27723,-25.03749 69.11531,-25.64768 69.09978,-25.45255 68.9678,-26.38128 68.66959,-27.64891 68.4732,-28.00777 68.59305,-28.01519 68.44726,-29.17162 68.39511,-29.39096 68.21064,-29.86814 68.41541,-30.29809 68.2607,-30.02576 68.11399,-30.83574 68.24348,-30.47677 68.0569,-31.7185 68.10094,-31.51678 68.24383,-32.00249 68.26142,-32.52806 68.61318,-32.58184 68.48006,-32.09141 68.18427,-32.46302 68.20065,-31.98782 68.13315,-32.15352 68.03827,-32.02939 67.92458,-33.22132 67.68338,-33.05204 67.63641,-33.38855 67.54549,-33.27136 67.40015,-33.58484 67.36236,-33.36094 67.24952,-33.67861 67.22143,-33.5231 67.08051,-34.05738 67.00077,-33.85258 66.96443,-34.01257 66.96568,-33.96321 66.78907,-33.96092 66.7874,-34.2821 66.57556,-34.40937 66.75153,-34.39795 66.54102,-34.71579 66.33395,-35.20616 66.37548,-35.03725 66.24724,-35.84027 66.44345,-35.5596 66.12851,-35.76114 66.18983,-36.08715 65.91762,-36.57527 66.0724,-37.04347 65.86806,-37.25504 66.09955,-37.12794 65.88628,-37.29777 65.90532,-37.09521 65.85374,-37.21599 65.75349,-37.47003 65.80631,-37.27514 65.74495,-37.89751 65.57227,-37.97995 65.77876,-37.75264 65.86507,-37.82204 66.02455,-37.2021 66.33979,-38.12551 66.37542,-37.70875 66.25516,-38.04847 66.08759,-38.07007 65.90343,-38.48322 66.01666,-38.09731 65.79227,-38.21062 65.63786,-38.74276 65.69275,-38.61815 65.55751,-38.96515 65.51833,-39.35147 65.74557,-39.33249 65.53265,-39.66852 65.67104,-39.80758 65.49055,-40.1243 65.543,-39.76071 65.22646,-40.15472 65.00868,-41.13086 65.11428,-40.97775 64.95284,-41.1604 64.93859,-40.39711 64.36694,-41.32666 64.29459,-41.07946 64.24009,-40.63292 64.14164,-40.61458 63.95367,-40.84501 63.93075,-40.51359 63.69147,-41.50156 63.85398,-41.57879 63.741,-40.74203 63.57571,-41.30433 63.55124,-41.13933 63.37884,-41.59218 63.48257,-41.34764 63.3476,-41.41479 63.35833,-41.93033 63.46777,-41.42868 63.10695,-42.11901 63.24866,-41.54306 63.02187,-42.21598 63.09504,-41.64922 62.89853,-43.15359 62.74079,-42.14779 62.37841,-42.99031 62.51328,-42.26389 62.29115,-42.54786 61.93954,-42.11208 62.00198,-42.42638 61.90294,-42.19338 61.85585,-42.31166 61.75439,-42.88283 61.76127,-42.24213 61.71105,-42.42539 61.54898,-43.08371 61.58697,-42.40396 61.48519,-42.6499 61.2816,-43.24071 61.31836,-42.68864 61.26142,-43.19075 61.20586,-42.64785 61.08757,-43.62982 61.12609,-42.70446 61.05399,-42.97501 60.87681,-43.48579 60.93408,-42.89833 60.79795,-43.5269 60.83239,-42.75582 60.72429,-43.29513 60.6689,-42.77542 60.68485,-43.23233 60.4532,-43.71304 60.71693,-43.63351 60.53573,-44.19664 60.62235,-43.32105 60.43966,-43.60344 60.29723,-43.09855 60.30228,-43.33697 60.20972,-43.1211 60.11584,-44.10293 60.1707,-43.48964 60.03858,-43.58833 59.9066,-44.10857 60.1688,-44.09177 60.37852,-44.41204 60.13229,-44.42534 60.12207,-44.95188 60.08015,-45.11016 60.09793,-44.76089 60.18834,-44.46674 60.5599,-45.17358 60.12288,-44.62157 60.74009,-45.22956 60.41784,-45.07727 60.65126,-45.50875 60.47629,-45.22031 60.76381,-45.56776 60.46017,-45.75364 60.59219,-45.62763 60.64048,-46.00314 60.56429,-45.82497 60.64519,-45.26233 60.90065,-46.21436 60.73175,-45.26133 61.09457,-45.51891 61.24727,-45.49773 61.0873,-46.02214 60.89751,-45.6222 61.14131,-45.87765 61.21574,-45.71909 61.3129,-46.12 61.24056,-45.82755 61.12078,-46.24053 60.96814,-46.89675 60.93089,-46.69751 60.87564,-46.86066 60.79264,-47.03407 60.97438,-48.07035 60.81425,-48.08761 60.81141,-47.68956 61.00789,-48.4183 60.99311,-47.84388 61.02166,-48.2257 61.17739,-47.92518 61.32137,-48.50281 61.16364,-48.62698 61.25446,-48.32741 61.37207,-49.07418 61.39491,-48.2557 61.51986,-49.28308 61.54552,-48.5824 61.62947,-49.16111 61.7124,-48.75236 61.98153,-49.23682 61.7043,-49.35764 61.76336,-49.15832 61.88962,-49.38348 61.79842,-49.40537 61.937,-48.84612 62.06821,-49.09842 62.06213,-49.04012 62.20267,-49.17943 62.00394,-49.72402 61.99625,-49.36276 62.06744,-49.37777 62.20792,-49.71151 62.14263,-49.29831 62.26247,-49.89986 62.35502,-50.32828 62.48676,-49.8842 62.88608,-50.33025 62.73368,-49.69945 63.04596,-50.34715 62.77113,-50.15666 62.99714,-50.62399 63.08483,-50.07456 63.22289,-51.02853 63.23297,-50.15849 63.37881,-51.2112 63.37507,-50.75204 63.54491,-50.95669 63.58371,-51.40285 63.52108,-51.30294 63.61147,-51.54817 63.66962,-51.34977 63.71077,-51.55897 63.73604,-50.91773 63.92724,-51.42657 63.79373,-51.35708 63.95633,-51.63495 64.01893,-50.54148 64.19648,-51.2743 64.27278,-50.16857 64.44247,-50.91721 64.58614,-50.48874 64.70216,-50.07016 64.53222,-50.12548 64.83095,-50.5658 64.75699,-50.86142 65.11344,-50.66662 65.20126,-51.04179 65.22356,-50.6373 64.74516,-51.13672 64.60527,-51.07537 64.75097,-52.02903 64.20364,-52.15518 64.6785,-51.61219 64.84779,-51.25061 65.01993,-52.2107 64.79685,-52.02048 64.9808,-52.29142 65.08043,-51.99521 65.32018,-52.58793 65.31689,-51.4193 65.59827,-51.88955 65.5976,-52.50327 65.38522,-52.43837 65.54483,-52.63651 65.48678,-52.4763 65.6712,-52.81177 65.54525,-52.55216 65.66936,-52.80112 65.63402,-52.72082 65.76869,-51.7367 65.91946,-51.75545 66.07773,-53.18819 65.84727,-52.89822 66.01677,-53.47952 66.02846,-51.28415 66.84447,-50.3189 66.82603,-50.94397 66.98449,-53.10065 66.29104,-53.62734 66.23997,-53.50035 66.47602,-53.64889 66.5026,-52.44911 66.51741,-53.48396 66.59266,-52.59816 66.70349,-53.17166 66.71347,-52.6839 66.79375,-53.08122 66.83652,-52.23697 66.84201,-52.88662 66.88889,-52.89135 66.88934,-53.83362 66.95385,-53.21435 66.98473,-53.98417 67.07246,-53.53165 67.2226,-53.82722 67.19913,-53.83753 67.40339,-53.29626 67.60654,-53.70768 67.49526,-53.54312 67.68037,-53.69761 67.80457,-53.06647 67.86991,-53.32687 67.90934,-52.90884 67.96806,-53.25853 67.97595,-53.11347 68.05927,-52.07756 67.94404,-53.48133 68.15084,-52.16309 68.1154,-50.13596 67.9315,-51.33354 68.27843,-53.37239 68.2783,-52.02196 68.58157,-52.01623 68.58234,-51.03962 68.5876,-51.10798 68.7017,-50.67762 68.82063,-51.31794 68.74992,-51.13245 68.88589,-51.09883 69.13688,-50.19825 68.96844,-50.71322 69.11329,-50.15835 69.1634,-50.49763 69.19804,-50.41976 69.34853,-51.14857 69.20639,-50.89211 69.46269,-50.23154 69.52814,-50.90349 69.48605,-50.83698 69.64491,-50.41843 69.59883,-50.82163 69.71577,-50.19744 69.76241,-50.62982 69.92654,-50.25739 70.04337,-52.34518 70.0504,-54.62635 70.65181,-53.09321 70.77789,-50.55227 70.32685,-50.70911 70.39897,-50.52119 70.5173,-51.36948 70.55631,-50.66058 70.61297,-51.47482 70.7381,-50.67352 70.70908,-50.87666 70.88378,-51.96832 71.02554,-50.93677 71.02549,-52.26462 71.1237,-51.53505 71.30318,-52.56266 71.17054,-51.36395 71.47401,-52.99587 71.4239,-51.65284 71.7141,-53.27787 71.71384,-52.70002 72.00007,-53.37428 71.77656,-53.52871 72,-53.46876 71.80655,-53.93425 71.75147,-53.74016 71.64999,-54.11363 71.73019,-53.8986 71.44592,-55.34764 71.40327,-55.87665 71.70541,-54.63294 72,-55.61369 72,-54.90398 72.32346,-55.08973 72.35572,-55.6471 72.45253,-55.15972 72.53603,-54.8047 72.59685,-54.79735 72.59811,-54.79779 72.59958,-54.7226 72.72791,-55.08203 72.72337,-54.58127 72.83009,-54.76434 72.99429,-55.73773 73.0918,-55.16069 73.19617,-55.46841 73.2702,-55.15866 73.42033,-56.07065 73.65427,-55.80207 73.76915,-55.95939 73.86819,-55.6037 73.8665,-56.4315 74.07304,-56.13281 74.25784,-57.3114 74.10525,-56.25363 74.27782,-56.71957 74.35591,-56.28641 74.44775,-56.82084 74.45461,-56.35929 74.48444,-56.32121 74.49257,-57.15164 74.74181,-56.78924 74.8149,-56.97397 74.90287,-58.6931 75.35082,-58.13716 75.51884,-58.58828 75.67424,-58.37256 75.7149,-59.77588 75.80223,-59.66836 75.97004,-63.41718 76.38249,-63.96902 76.13738,-64.34446 76.36026,-64.97635 76.12064,-65.62978 76.03011,-65.88131 76.09883,-65.53345 76.2382,-66.19076 76.28215,-66.41331 76.08879,-66.94909 76.2749,-67.30036 76.17663,-66.48148 75.91088,-68.50931 76.09393,-69.63847 76.38279,-67.94397 76.68876,-70.02199 76.77023,-69.85648 76.96404,-70.63395 76.7957,-71.3839 77.01604,-70.47363 77.22885,-68.09475 77.17738,-69.10619 77.27593,-68.34023 77.3765,-66.23434 77.26073,-66.63561 77.41866,-66.11443 77.43323,-66.19059 77.59901,-68.37785 77.51064,-68.71292 77.67309,-68.60901 77.51486,-69.18089 77.45958,-70.29501 77.5732,-69.56183 77.73582,-70.68573 77.6966,-70.15213 77.85326,-71.42501 77.79472,-71.26183 77.89183,-73.04203 78.173,-72.67249 78.19798,-72.85124 78.35027,-72.59833 78.5109,-69.22673 78.81557,-68.55481 79.04223,-66.05612 79.11364,-65.14085 79.3737,-64.8119 79.53706,-65.06808 80,-63.59893 80.11676,-64.01382 80.13842,-63.90718 80.26811,-64.32851 80.06968,-65.64215 80,-67.41831 80.18811,-66.61549 80.5402,-65.37178 80.65918,-63.63564 81.1367,-62.70361 80.74539,-63.3176 81.15242,-60.98559 81.14142,-61.34058 81.34665,-60.77701 81.49766,-61.42698 81.76199,-60.09566 81.93845,-56.45251 81.33553,-59.52304 81.98774,-55.8941 82.26759,-55.13906 82.14953,-55.62801 82.27724,-54.59059 82.3624,-53.59948 82.11454,-53.53478 81.86765,-53.87788 81.69285,-53.59822 81.54498,-52.96531 81.82965,-52.92236 82.03039,-49.64294 81.63279,-51.13588 81.93353,-49.47973 81.9241,-50.76741 82.19353,-51.0715 82.51257,-49.2877 82.47915,-44.6468 81.75911,-44.21621 81.8307,-44.97985 82.02648,-44.34969 82.10508,-44.77335 82.25634,-42.33032 82.21101,-43.86695 82.32986,-45.78048 82.77394,-42.10249 82.75707,-41.77908 82.47218,-41.68823 82.65119,-41.99852 82.72868,-41.82192 82.75338,-39.86321 82.35831,-39.93886 82.48553,-39.74581 82.50078,-40.16508 82.7188,-45.10057 82.91608,-43.38381 82.94218,-45.57642 83.14489,-42.93217 83.21451,-38.63818 82.75134,-38.51028 82.83351,-39.04739 83.02007,-36.95845 83.14888,-38.93605 83.2485,-38.72478 83.30937,-38.88985 83.43783,-36.48051 83.36389,-36.96846 83.50204,-36.44117 83.56442,-33.87707 83.46004,-34.16059 83.57257,-32.60862 83.62696,-26.28423 83.39066,-25.70142 83.29356,-26.95507 83.15107,-25.30665 83.16553,-24.80565 82.97458,-25.94098 82.77133,-24.00149 82.91538,-23.79731 82.8981,-24.06358 82.75002,-23.41582 82.85439,-21.37832 82.56393,-24.99492 82.15875,-30.12133 82.18053,-32.74325 81.82196,-32.65096 81.64621,-28.8716 81.99226,-24.55974 81.99512,-24.66936 81.76372,-26.6853 81.53676,-26.34334 81.42517,-23.26189 81.69637,-23.22566 81.99029,-21.2561 82.07239,-20.99261 81.77075,-21.25238 81.49158,-22.89808 81.08366,-22.58378 81.05447,-23.97291 80.56963,-19.47007 81.55724,-19.42779 81.56053,-18.91917 81.60008,-19.52467 81.35762,-18.45139 81.49064,-17.36484 81.35722,-16.66944 81.51414,-16.99375 81.55992,-16.85143 81.64722,-16.36899 81.61996,-16.54635 81.65129,-16.45639 81.75927,-15.62531 81.83095,-11.31232 81.45669,-13.3436 81.01219,-14.32841 81.01286,-14.51412 80.97047,-14.13162 80.82867,-15.47235 80.61592,-17.28877 80.75825,-18.1343 80.55278,-20.85436 80.55784,-15.70082 80.41879,-16.85193 80.17031,-19.28878 80.26202,-20.22284 80.09207,-19.977 80.0748,-20.45069 79.82984,-19.94182 79.71956,-19.54794 79.79916,-19.93719 79.77851,-19.72666 79.93687,-18.97553 80.05466,-17.15697 80.00001,-17.94281 79.69401,-19.4482 79.60286,-19.3343 79.51917,-19.60075 79.40356,-19.43839 79.29396,-19.6693 79.11216,-19.17532 79.22771,-19.95476 79.02206,-19.7839 78.85245,-21.06997 78.76053,-20.77872 78.65167,-21.23918 78.57278,-20.76974 78.58437,-21.31158 78.11718,-21.74902 78.10468,-21.32243 78.07911,-21.95144 77.63788,-21.37852 77.6382,-21.72008 77.47606,-21.15937 77.60255,-21.35045 77.76094,-20.8246 77.97794,-19.26413 77.72829,-18.93954 77.59399,-19.34281 77.53487,-20.70052 77.70201,-20.88986 77.61488,-20.21071 77.50574,-21.05636 77.50001,-19.45691 77.19889,-18.46959 77.28142,-18.22526 76.89658,-18.51156 76.75527,-20.98997 76.93395,-21.68072 76.86636,-20.76077 76.80586,-21.66715 76.62245,-22.23213 76.84409,-22.699 76.69296,-21.70149 76.52077,-22.57416 76.4566,-21.62774 76.42976,-21.70908 76.25068,-21.33297 76.22085,-20.94969 76.22875,-20.47902 76.2361,-19.8921 76.24526,-19.80019 76.05142,-21.93523 75.99461,-19.76736 75.89034,-19.36195 75.72788,-19.60325 75.68162,-19.34806 75.42039,-19.45715 75.2042,-22.11149 75.67018,-21.40673 75.45142,-22.46332 75.50835,-20.50347 75.13656,-21.76379 74.97749,-22.47357 75.16891,-21.7592 74.95338,-20.63758 75.05076,-20.76673 74.85767,-20.61812 74.75056,-21.1105 74.6682,-19.21752 74.58466,-19.20034 74.57744,-18.97684 74.48338,-19.64561 74.23621,-20.71581 74.39705,-20.12521 74.19879,-21.31815 74.08649,-21.99524 74.22454,-21.87755 74.35825,-22.45639 74.30653,-22.02169 74.30395,-22.50743 74.06013,-22.05188 74.00856,-21.88581 73.64987,-21.73775 73.70659,-21.93872 74.01174,-21.7461 74.05891,-20.2875 73.88158,-20.53525 73.72254,-20.41591 73.48486,-22.45171 73.25818,-24.09643 73.6834,-22.27736 73.63705,-24.13375 73.81319,-24.49292 73.71524,-24.40784 73.55146,-25.69375 73.95196,-24.69392 73.52306,-25.21862 73.39608,-23.22319 73.23543,-24.85397 73.31055,-22.87068 73.15957,-24.41366 73.02441,-25.74364 73.19809,-25.41068 73.3496,-25.84574 73.24432,-27.3162 73.50385,-26.35393 73.24327,-27.69605 73.12244,-27.35569 73.12112,-27.3447 72.97363,-27.23481 73.13902,-26.08953 73.1995,-25 73.01083,-26.2444 72.77463,-27.4031 72.83974,-26.42349 72.78356,-26.78502 72.70955,-26.33312 72.74647,-26.42895 72.57894,-25.52929 72.83907,-24.71549 72.68829,-24.65984 72.52517,-24.87871 72.46775,-26.30881 72.38677,-25.24635 72.39455,-25.54598 72.0267,-25.21232 72.35236,-24.55699 72.41786,-22.5061 71.91082,-23.14008 71.62605,-21.90918 71.73267,-22.56562 71.45732,-22.42601 71.24445,-21.765 71.49272,-21.83862 71.30773,-21.61362 71.32686,-21.94951 71.26789,-21.71311 71.11799,-22.33149 71.05215,-21.68026 71.07487,-22.01398 70.96871,-21.60328 70.95948,-21.91793 70.80227,-21.53272 70.71065,-21.79149 70.56614,-21.47547 70.5371,-22.40204 70.45303,-22.51227 70.85562,-22.62911 70.43879,-23.37208 70.44881,-24.08279 70.69372,-24.6111 71.33912,-25.8384 71.4584,-25.42752 71.2716,-26.76429 70.93672,-27.53107 70.9398,-27.93192 71.14745,-27.62672 70.94726,-28.42991 70.97313,-27.9202 70.87489,-28.18025 70.63155,-29.26052 70.45469,-28.14555 70.46027),(-33.7826 82.87383,-27.40449 83.14713,-33.62451 83.14703,-32.54295 83.0432,-35.63765 82.91679,-35.28968 82.90237,-35.58089 82.7587,-33.7826 82.87383),(-52.375187 67.778817,-52.97591 67.69319,-50.16449 67.45318,-50.69578 67.64301,-51.2975 67.73514,-50.15227 67.85117,-50.81799 67.86457,-51.17954 67.75042,-51.38514 67.86927,-51.04343 67.98149,-51.627909 67.93823,-51.31668 67.80476,-51.73619 67.6855,-52.375187 67.778817),(-26.23754 71.4972,-27.35974 71.7074,-28.4663 71.54572,-26.23754 71.4972),(-52.0521 67.34005,-51.20815 67.12019,-50.36268 67.17007,-51.207 67.12654,-51.55331 67.35231,-51.09772 67.41582,-52.0521 67.34005),(-51.27444 68.30428,-50.81928 68.50327,-51.62458 68.41907,-51.27444 68.30428),(-26.23754 71.4972,-25.8384 71.4584,-26.23754 71.4972),(-51.27444 68.30428,-51.33354 68.27843,-51.27444 68.30428),(-33.7826 82.87383,-33.78602 82.87215,-33.7826 82.87383)),((-52.97591 67.69319,-53.29626 67.60654,-52.97591 67.69319)),((-53.53165 67.2226,-52.0521 67.34005,-53.53165 67.2226)),((-26.95507 83.15107,-27.40449 83.14713,-26.95507 83.15107)),((-54.26654 69.93257,-54.78088 70.03835,-54.81676 70.22186,-53.29022 70.20001,-51.84831 69.64091,-53.85342 69.26327,-54.22256 69.45567,-53.38759 69.44254,-53.59248 69.46542,-53.36069 69.58073,-53.79931 69.45777,-54.9934 69.70049,-54.39809 69.67743,-54.94343 69.83913,-54.26654 69.93257)),((-24.20613 72.87333,-23.50274 73.03796,-21.98338 72.94053,-22.19094 72.81561,-21.87298 72.71885,-23.03228 72.79561,-21.92968 72.42393,-22.74426 72.44869,-22.03206 72.27174,-22.69777 72.17223,-24.40764 72.61176,-24.51589 72.84647,-24.20613 72.87333)),((-47.56549 82.60365,-46.19449 82.65955,-44.4143 82.3645,-45.12329 82.21884,-44.69842 82.09728,-45.0113 82.05331,-47.56549 82.60365)),((-18.84585 75.25514,-18.0426 75.42302,-17.81165 75.30054,-18.20919 75.21754,-17.32105 75.12432,-17.62654 74.92715,-18.77809 74.98763,-18.84585 75.25514)),((-45.6722 82.87822,-46.95057 82.95763,-46.02589 82.91138,-46.76864 83.00266,-46.03219 83.0967,-44.90423 82.8643,-45.6722 82.87822)),((-20.12174 75.01055,-19.74716 74.85922,-20.07422 74.70508,-20.67638 74.81385,-20.48385 75.02602,-20.12174 75.01055)),((-51.54631 81.96103,-53.41801 82.23185,-52.76576 82.30508,-51.54631 81.96103)),((-51.23862 69.92619,-50.674 69.85931,-51.15369 69.51058,-51.39348 69.72424,-51.01506 69.89031,-51.23862 69.92619)),((-18.83618 76.55819,-18.46059 75.94325,-19.17009 76.47566,-18.83618 76.55819)),((-19.0248 82.02837,-18.61792 81.84016,-18.81014 81.79662,-19.56583 82.05766,-19.0248 82.02837)),((-55.23654 72.84,-54.93779 72.81406,-55.19822 72.67501,-55.8481 72.62366,-55.23654 72.84)),((-19.62635 80.02088,-19.36048 80.21169,-18.67136 80.13188,-19.62635 80.02088)),((-53.17135 71.33792,-52.34462 71.28054,-52.97269 71.15108,-53.17135 71.33792)),((-41.41479 63.35833,-41.33729 63.34188,-41.10471 63.19713,-41.43771 63.22081,-41.8814 63.43295,-41.41479 63.35833)),((-48.05143 82.77119,-48.45181 82.80066,-48.33594 82.89301,-47.49111 82.7963,-48.05143 82.77119)),((-17.58673 77.80525,-18.21959 77.63401,-17.92962 77.85815,-17.58673 77.80525)),((-17.63455 79.02203,-17.95078 78.99835,-17.5793 79.17499,-17.37508 79.0665,-17.63455 79.02203)),((-19.28531 78.67429,-19.56787 78.77731,-18.97851 78.84709,-19.28531 78.67429)))
+MULTIPOLYGON(((-16.56014 13.58879,-15.48113 13.58728,-15.07115 13.82657,-13.80755 13.38672,-14.36912 13.22905,-15.1106 13.58946,-15.29622 13.36043,-15.80781 13.34109,-15.81226 13.1591,-16.75583 13.06425,-16.68503 13.48858,-16.45518 13.2689,-15.58562 13.47499,-16.41561 13.3264,-16.56014 13.58879)))
+MULTIPOLYGON(((-13.70903 12.67622,-13.07347 12.63898,-13.0606 12.47781,-12.35323 12.30727,-11.37946 12.41356,-11.46411 12.13361,-11.24695 11.99247,-10.9286 12.22242,-10.69021 11.893,-10.33932 12.22548,-9.699758 12.02382,-9.340386 12.24292,-9.362003 12.49567,-9.034279 12.42307,-8.80539 12.00517,-8.854325 11.62834,-8.37589 11.36748,-8.677261 10.95531,-8.323532 11.0482,-8.261836 10.47687,-7.978548 10.17511,-8.149226 9.532056,-7.849985 9.437742,-7.919881 9.186895,-7.736526 9.078054,-7.961311 8.810396,-7.641071 8.377432,-8.240768 8.460761,-8.243995 8.228629,-7.945582 8.012988,-8.193576 7.545011,-8.472179 7.554582,-8.666122 7.693086,-8.848072 7.263333,-9.104451 7.193552,-9.211778 7.385181,-9.477838 7.362011,-9.343918 7.748662,-9.480072 8.376794,-9.77296 8.551791,-10.28686 8.484799,-10.71892 8.27101,-10.46939 8.67458,-10.73339 9.084249,-10.66331 9.30055,-11.20675 10.00043,-12.43174 9.881638,-12.78951 9.300714,-13.30763 9.037539,-13.32463 9.338552,-13.72582 9.503187,-13.5682 9.770332,-13.76004 9.779703,-13.68374 9.938039,-13.81432 9.839963,-14.04811 10.1532,-14.45648 10.20833,-14.66708 10.47467,-14.541 10.81716,-14.70327 10.63254,-14.75263 10.97044,-14.92662 11.05454,-14.66538 11.50674,-13.71343 11.70982,-13.70556 12.00434,-13.96502 12.19151,-13.66319 12.31524,-13.70903 12.67622)))
+MULTIPOLYGON(((-61.50909 16.38901,-61.46194 16.51685,-61.16898 16.25104,-61.50312 16.21101,-61.50909 16.38901)),((-61.6709 16.32425,-61.55082 16.05427,-61.69314 15.94776,-61.80717 16.27585,-61.6709 16.32425)))
+MULTIPOLYGON(((9.8123725033182 2.3423616497371,10.032578305808 2.15922444068786,11.3356457744242 2.17109891548586,11.3358169934549 1.00895568226423,9.65436453163893 1.07021380437662,9.33364711513291 1.18224960271446,9.80541597481996 1.93102517288593,9.8123725033182 2.3423616497371)),((8.86137064137851 3.74265725994811,8.66677819870317 3.19892266466099,8.4279347011417 3.26218624923094,8.67203462294413 3.75590993366243,8.86137064137851 3.74265725994811)))
+MULTIPOLYGON(((22.94867 41.34562,24.5423 41.57489,25.33353 41.24466,26.13499 41.36612,26.06927 41.71579,26.36189 41.71968,26.63687 41.35608,26.33243 41.26126,26.35771 40.95393,26.04115 40.74553,25.15605 41.00514,23.8556 40.79778,23.70548 40.67533,23.8704 40.42207,24.40636 40.16606,23.74212 40.36008,23.99912 40.12073,23.93617 39.9391,23.40856 40.28523,23.75336 39.92299,23.3605 39.95621,23.31954 40.23159,22.82742 40.48318,22.95872 40.63184,22.60129 40.4915,22.59789 40.02324,23.35318 39.18967,23.06023 39.09605,23.22033 39.19235,22.93881 39.36161,22.82284 39.22221,23.05827 39.02071,22.5245 38.86047,24.07553 38.20406,24.03009 37.65218,23.57774 38.0475,23.00382 37.86118,23.52091 37.43631,23.16991 37.28865,22.72132 37.56178,23.19774 36.43824,22.62776 36.80886,22.48725 36.39054,22.1484 37.0211,21.93266 36.98443,21.88299 36.72033,21.70795 36.81683,21.65293 37.43657,21.10634 37.85333,21.37129 38.21561,21.85617 38.33976,22.86103 37.94213,23.22748 38.15472,22.41657 38.44308,21.49081 38.30099,21.35494 38.43558,21.15797 38.29834,21.09926 38.43034,20.73259 38.85539,21.17361 38.86879,21.11843 39.04126,20.73074 38.95249,20.00683 39.69328,20.25783 39.67355,20.30562 39.98825,20.69255 40.11284,21.05243 40.57025,21.00006 40.86164,22.72656 41.14888,22.94867 41.34562)),((26.04521 35.22865,26.31555 35.3095,26.14713 35.00499,24.73855 34.92517,24.39129 35.19379,23.5205 35.29219,23.74733 35.69273,24.32897 35.35386,25.77174 35.34311,25.81339 35.11456,26.04521 35.22865)),((23.47596 38.83876,24.15096 38.6576,24.25156 38.2353,24.59016 38.15908,24.55712 37.98051,23.19374 38.83964,22.83576 38.82952,23.30401 39.04393,23.47596 38.83876)),((25.90916 39.29025,26.34688 39.39348,26.61927 39.03311,26.16331 39.01029,26.29281 39.18812,25.95476 39.10683,25.90916 39.29025)),((20.44531 38.33776,20.58158 38.46497,20.79726 38.06824,20.33934 38.18163,20.44531 38.33776)),((28.22038 36.36724,27.75582 35.88139,27.6902 36.15646,28.22038 36.36724)),((19.70205 39.83864,19.86204 39.81829,19.92215 39.67818,20.10249 39.43773,19.90227 39.43773,19.82228 39.59819,19.64194 39.77852,19.70205 39.83864)),((27.17498 35.92854,27.23509 35.76808,27.21475 35.54798,27.23509 35.44764,27.11487 35.40741,26.87442 35.38752,26.99464 35.4874,27.13475 35.52763,27.09452 35.64786,27.17498 35.92854)),((25.99062 38.39549,25.84592 38.57217,26.16125 38.53859,26.0128 38.15358,25.86854 38.25405,25.99062 38.39549)),((25.1528 40,25.44839 39.98299,25.34782 39.78173,25.04693 39.8343,25.1528 40)),((26.85138 37.82038,27.00591 37.80098,27.11205 37.80098,27.07347 37.75259,26.98651 37.70443,26.85138 37.65604,26.74502 37.73342,26.65805 37.69462,26.59049 37.71402,26.59049 37.76241,26.76442 37.82997,26.85138 37.82038)),((20.70362 37.91364,20.92419 37.83365,20.9843 37.75319,20.86407 37.63297,20.7235 37.75319,20.64351 37.83365,20.70362 37.91364)),((24.65025 40.78102,24.8107 40.72091,24.83059 40.64045,24.71036 40.52022,24.55037 40.64045,24.55037 40.74079,24.65025 40.78102)),((24.77406 38.00412,24.89001 37.90734,24.95757 37.90734,25.00596 37.76241,24.94799 37.69462,24.73548 37.87836,24.69691 37.94614,24.77406 38.00412)),((25.45996 37.13381,25.55673 37.1822,25.6049 37.09524,25.57591 36.98887,25.46977 36.90191,25.3924 37.01786,25.36341 37.07584,25.45996 37.13381)),((20.625 38.82915,20.7024 38.86902,20.7024 38.75176,20.69536 38.68844,20.69536 38.61808,20.63204 38.58055,20.59217 38.6345,20.53823 38.57117,20.53823 38.67437,20.5781 38.78225,20.625 38.82915)),((22.92733 36.39002,23.10766 36.28968,23.08778 36.16945,23.00778 36.12922,22.92733 36.18933,22.92733 36.39002)),((26.9961 36.81472,27.15085 36.88251,27.25699 36.92109,27.32478 36.86311,27.10246 36.76656,26.98651 36.77615,26.93834 36.68918,26.88996 36.74716,26.9961 36.81472)),((26.09769 37.64623,26.19425 37.64623,26.29102 37.69462,26.33919 37.69462,26.27162 37.61724,26.14608 37.55927,26.01073 37.53028,25.94317 37.52069,26.01073 37.60765,26.09769 37.64623)),((24.48418 38.99038,24.55197 38.9614,24.58096 38.88402,24.67751 38.77766,24.53257 38.78724,24.52298 38.85503,24.4262 38.88402,24.4262 38.9614,24.48418 38.99038)),((25.04454 37.68503,25.27644 37.63664,25.22828 37.52069,24.99637 37.64623,24.99637 37.69462,25.04454 37.68503)),((25.10251 37.09524,25.23787 37.15321,25.22828 37.05644,25.1703 37.00827,25.07353 37.00827,25.00596 36.95988,24.9384 36.97906,25.01555 37.03726,25.10251 37.09524)),((26.80299 37.1822,26.89955 37.08543,27.04449 36.99846,27.0155 36.95007,26.88996 36.95007,26.88996 37.00827,26.75461 37.1822,26.80299 37.1822)),((24.51317 36.86311,24.57114 36.86311,24.52298 36.78574,24.52298 36.71817,24.4262 36.68918,24.28126 36.68918,24.32006 36.77615,24.40703 36.76656,24.48418 36.78574,24.51317 36.86311)),((25.81763 36.86311,25.96234 36.95007,26.05912 36.9309,25.91418 36.82454,25.79823 36.78574,25.72085 36.81472,25.81763 36.86311)),((24.32006 37.69462,24.39721 37.68503,24.39721 37.62706,24.33924 37.56908,24.30066 37.53987,24.26209 37.55927,24.26209 37.61724,24.32006 37.69462)),((23.64375 39.20311,23.7403 39.13532,23.82727 39.13532,23.83685 39.10633,23.73071 39.04836,23.64375 39.11592,23.64375 39.20311)),((25.26686 36.79555,25.38281 36.71817,25.34401 36.63099,25.26686 36.71817,25.22828 36.73735,25.26686 36.79555)))
+MULTIPOLYGON(((-89.14696 17.8095,-89.22346 15.89967,-88.93882 15.89004,-88.61941 15.69048,-88.59233 15.96096,-88.2232 15.72008,-89.15445 15.0653,-89.15538 14.57221,-89.34995 14.42176,-89.57234 14.40572,-89.52058 14.22222,-90.12866 13.73827,-91.31594 13.95284,-92.24149 14.53962,-92.05993 15.07075,-92.21432 15.26208,-91.72518 16.0801,-90.42336 16.09669,-90.38557 16.40808,-91.43755 17.25004,-90.99025 17.2585,-90.98163 17.81522,-89.14696 17.8095)))
+MULTIPOLYGON(((144.6733 13.26691,144.6399 13.48407,144.8905 13.601,144.6733 13.26691)))
+MULTIPOLYGON(((-16.71754 12.32819,-15.66585 12.4283,-15.17925 12.68079,-13.70903 12.67622,-13.66319 12.31524,-13.96502 12.19151,-13.70556 12.00434,-13.71343 11.70982,-14.66538 11.50674,-14.92662 11.05454,-14.9316 11.04646,-14.95219 10.97312,-14.95698 10.97378,-14.97658 10.97648,-15.11668 10.9652,-14.99552 11.21057,-15.22874 11.07393,-15.35382 11.40649,-15.51723 11.3396,-15.28599 11.62508,-14.97517 11.58834,-15.22389 11.75911,-15.48492 11.6215,-15.03174 11.97414,-15.96125 11.73463,-15.88122 11.94545,-16.38612 12.07134,-16.13909 12.29314,-16.47266 12.17658,-16.71754 12.32819)))
+MULTIPOLYGON(((-59.99787 8.557567,-58.4854 7.366343,-58.61452 6.41889,-58.41235 6.871654,-58.03988 6.818614,-57.14622 5.999986,-57.34863 5.312995,-57.19182 5.169795,-57.87356 4.904678,-58.0864 4.131202,-57.67311 3.381816,-57.30506 3.373516,-57.2044 2.833982,-56.48025 1.941472,-57.3024 1.990075,-57.55563 1.695373,-58 1.665301,-58.00851 1.500673,-58.32467 1.590138,-58.80411 1.17508,-59.25275 1.397388,-59.7539 1.860766,-59.72432 2.276611,-59.99205 2.726567,-59.8651 3.560974,-59.51631 3.939903,-59.67398 4.381637,-60.16332 4.52116,-59.96942 5.073079,-60.12056 5.243235,-60.73177 5.19614,-61.39627 5.961447,-61.11466 6.199507,-61.14338 6.717797,-60.28549 7.074996,-60.61609 7.206539,-60.71212 7.539176,-59.80846 8.273121,-59.99787 8.557567)))
+MULTIPOLYGON(((114.0369 22.50504,114.2354 22.55644,114.1892 22.37235,114.4032 22.41155,114.2957 22.25342,113.9186 22.37282,114.0369 22.50504)))
+MULTIPOLYGON(((73.49461 -53.01786,73.85915 -53.10776,73.482 -53.1899,73.2533 -52.98622,73.49461 -53.01786)))
+MULTIPOLYGON(((-88.2232 15.72008,-87.72701 15.92312,-86.92149 15.74986,-86.36485 15.77617,-85.93369 15.926,-86.03465 16.02559,-85.45474 15.86028,-85.01488 15.98707,-84.30397 15.81543,-83.15781 14.99208,-84.46906 14.61453,-84.89904 14.80938,-85.18357 14.25056,-85.75548 13.8319,-86.01214 14.07706,-86.34616 13.76178,-86.76284 13.77312,-86.70654 13.29538,-87.31461 12.98241,-87.46735 13.27842,-87.42423 13.3631,-87.39264 13.38208,-87.81824 13.40119,-87.75652 13.8623,-88.4948 13.85812,-89.34995 14.42176,-89.15538 14.57221,-89.15445 15.0653,-88.2232 15.72008)))
+MULTIPOLYGON(((16.65091 46.53329,17.86854 45.76926,18.44096 45.74571,18.82852 45.89342,18.95427 45.6406,19.06093 45.33828,19.43422 45.23163,19.11425 45.16066,19.06093 45.00027,19.16758 44.96499,19.08731 44.85201,18.84762 44.87598,18.65236 45.07165,18.43905 45.10733,18.03008 45.14261,17.79913 45.03596,17.69248 45.14261,17.2835 45.1783,16.92826 45.23163,16.82161 45.21399,16.46596 45.21399,16.3593 44.98263,16.07503 45.12497,16.00406 45.24927,15.73743 45.1783,15.75507 44.87598,15.80839 44.73363,15.91505 44.73363,16.07503 44.57365,16.21737 44.23565,16.59066 43.89763,16.89257 43.66628,17.24822 43.47061,17.39015 43.2573,17.69248 42.97262,17.85246 42.90165,18.13673 42.70598,18.38573 42.61697,18.52357 42.584,18.51002 42.56364,18.43905 42.54559,18.5575 42.40775,18.50661 42.43169,17.73295 42.79568,17.00358 43.00785,17.70711 42.8816,16.88874 43.39784,15.9609 43.50254,15.97907 43.90528,15.69571 43.76876,15.14007 44.19426,15.27213 44.33268,15.62655 44.14614,14.98721 44.57682,14.84465 45.11316,14.54348 45.30357,14.30443 45.33355,13.9051 44.77005,13.49747 45.47862,13.8063 45.41586,14.00036 45.47583,14.41847 45.49065,14.58289 45.64025,14.85175 45.47583,14.95619 45.52064,15.23987 45.44584,15.3743 45.62508,15.3743 45.7895,15.64316 45.87946,15.68797 45.98391,15.55354 46.14832,15.64316 46.19313,15.80758 46.2083,16.06127 46.32756,16.10608 46.38754,16.28532 46.38754,16.30014 46.53714,16.50937 46.52197,16.65091 46.53329)))
+MULTIPOLYGON(((-71.7578 19.70272,-71.78707 19.33363,-71.61336 19.20164,-71.88239 18.9543,-71.73773 18.73045,-72.00349 18.62527,-71.69286 18.34117,-71.75405 18.03015,-72.03558 18.22021,-73.38584 18.27442,-73.87939 18.02103,-74.47858 18.41937,-74.19939 18.68184,-72.88028 18.42488,-72.34834 18.53638,-72.81721 19.04432,-72.69473 19.45916,-73.36245 19.62543,-73.40799 19.84048,-72.81625 19.95057,-71.7578 19.70272)))
+MULTIPOLYGON(((22.13036 48.3819,22.90599 47.95905,22.03673 47.53268,21.17978 46.30436,20.26995 46.12806,19.57521 46.17799,18.82852 45.89342,18.44096 45.74571,17.86854 45.76926,16.65091 46.53329,16.11189 46.87151,16.51555 47.00671,16.44933 47.40102,16.71279 47.53454,16.44964 47.69149,17.09076 47.71126,17.16273 48.00808,17.78487 47.73532,18.68 47.75199,18.86988 47.80854,18.83232 48.04372,19.63655 48.24422,19.93207 48.13028,20.51103 48.54143,21.4518 48.58484,21.72957 48.35518,22.13036 48.3819)))
+MULTIPOLYGON(((-23.46942 66.02618,-23.55333 66.1254,-22.98991 66.01614,-22.84542 65.89241,-22.68245 66.05091,-22.66644 65.82387,-22.53407 65.97375,-22.47002 65.83935,-22.38589 66.09045,-22.98359 66.21464,-22.37324 66.26727,-23.20143 66.35029,-22.94453 66.46739,-22.41729 66.45931,-21.32641 66.00092,-21.60987 65.95439,-21.28761 65.92573,-21.35364 65.72963,-21.78558 65.76366,-21.30206 65.59778,-21.47668 65.44579,-21.19975 65.43414,-21.07954 65.15491,-20.94641 65.57841,-20.67199 65.68942,-20.37893 65.52882,-20.42806 66.08151,-20.09644 66.1172,-19.4501 65.72404,-19.46036 66.04275,-18.80056 66.19163,-18.07023 65.64036,-18.30614 66.16427,-17.40607 65.95537,-17.14587 66.20623,-16.66784 66.12196,-16.43267 66.13537,-16.44503 66.51932,-16.01746 66.53373,-15.38129 66.13844,-14.54198 66.37646,-15.18042 66.10503,-14.61395 65.99041,-14.90228 65.75747,-13.69155 65.55268,-13.66756 65.3706,-13.99783 65.27134,-13.57067 65.2679,-13.996 65.18927,-13.49582 65.07482,-14.22674 65.03012,-13.69307 64.9107,-14.04165 64.93161,-13.75467 64.86849,-14.22622 64.68867,-14.49288 64.79352,-14.2529 64.64355,-14.47059 64.53272,-15.03282 64.25318,-15.49601 64.39551,-15.47246 64.23507,-16.80174 63.79494,-17.00074 63.93982,-17.23638 63.80868,-17.05948 63.78155,-18.01537 63.81412,-17.86558 63.62949,-19.14395 63.40562,-20.16836 63.53274,-20.79489 63.76771,-20.66478 63.92621,-20.81959 63.77448,-21.2107 63.88039,-20.99189 63.94674,-22.71504 63.79833,-22.70471 64.07153,-21.94545 64.06384,-21.69043 64.1777,-21.8329 64.29293,-21.35866 64.38608,-22.10282 64.31048,-21.76225 64.57921,-22.17202 64.45873,-22.33466 64.68878,-24.06094 64.8808,-21.81585 65.01991,-21.71866 65.17029,-22.56744 65.16341,-21.69249 65.45361,-22.28804 65.43836,-22.10897 65.59915,-24.54234 65.49426,-24.32251 65.6371,-23.79729 65.53337,-24.10838 65.80081,-23.26312 65.68241,-23.87907 65.88198,-23.19849 65.83522,-23.82732 66.02974,-23.46942 66.02618)))
+MULTIPOLYGON(((109.6417 2.081388,109.6592 1.619646,110.5719 0.855222,111.2186 1.088406,111.8283 0.987671,112.4924 1.577371,112.9943 1.578012,112.9738 1.407019,113.6582 1.210515,113.9698 1.446303,114.5663 1.433472,114.8729 1.922119,114.8113 2.264977,115.2373 2.511148,115.0891 2.823322,115.5618 3.159515,115.5595 3.917913,115.8762 4.389797,117.2388 4.373793,117.5858 4.17752,117.3947 4.104475,117.8333 3.704301,117.0194 3.601971,117.6199 3.495893,117.2274 3.487141,118.099 2.285805,117.7615 2.016922,117.8388 1.8317,118.9958 1.022845,118.7942 0.797073,118.3584 0.805793,117.8851 1.12195,118.031 0.788065,117.7569 0.76596,117.4724 0.15878,117.453 -0.390635,117.634 -0.425977,117.4449 -0.672159,117.6097 -0.791409,117.3414 -0.91429,117.288 -0.756236,116.901 -1.273525,116.7387 -1.057364,116.7597 -1.368607,116.2058 -1.783018,116.4469 -1.773103,116.3128 -2.135445,116.454 -2.16662,116.6003 -2.19891,116.1966 -2.942306,116.1741 -3.285381,116.1381 -3.307326,116.136 -3.343464,115.9577 -3.615326,114.6461 -4.188225,114.5339 -3.345182,114.4719 -3.502592,114.0981 -3.275024,113.6319 -3.464067,113.6132 -3.15517,113.3447 -3.283297,113.0269 -2.936992,113.0321 -3.144436,112.6309 -3.410052,112.2359 -3.310372,111.8808 -3.570069,111.7 -2.804117,111.541 -3.040402,111.4138 -2.90217,110.9304 -3.096985,110.6219 -3.054545,110.6039 -2.867153,110.2266 -2.971627,110.125 -2.038915,109.8964 -1.838918,110.0811 -1.411488,109.9562 -1.121264,109.7587 -1.019303,109.7428 -0.998937,109.2507 -0.81042,109.2501 -0.661919,109.5688 -0.740737,109.1148 -0.517509,109.2 0.053827,108.9117 0.317856,108.839 0.814596,109.0515 1.523634,109.6417 2.081388)),((100.9268 1.856497,100.935 1.860658,100.7702 2.224259,101.0466 2.289879,101.4033 1.707079,102.1575 1.367923,102.4055 0.816251,102.8817 0.73381,103.1097 0.446135,102.6976 0.215476,103.3339 0.543288,103.7226 0.286564,103.8109 0.004425,103.4368 -0.20343,103.7714 -0.347089,103.3733 -0.722477,103.7477 -1.012227,104.3613 -1.021747,104.4581 -1.935812,104.8669 -2.074599,104.6336 -2.389143,104.7209 -2.585658,104.8517 -2.292364,105.611 -2.395448,105.8137 -2.920509,106.0479 -2.997278,105.8182 -3.71465,105.957 -3.839156,105.7965 -5.792992,105.7141 -5.909359,105.288 -5.443848,105.2173 -5.787442,104.55 -5.512948,104.7288 -5.931019,104.5513 -5.930291,103.7228 -4.969719,102.2849 -3.979338,102.216 -3.670946,100.8867 -2.333125,100.3276 -0.865789,99.65638 0.039026,99.13891 0.251739,98.79923 1.720059,97.78893 2.240896,97.60357 2.869762,96.87305 3.687165,96.49667 3.751369,95.41193 4.817936,95.18967 5.522778,95.43145 5.65644,96.38824 5.214849,97.51366 5.246362,97.90357 4.884578,97.96084 4.527452,98.28915 4.421815,98.16736 4.157561,99.75997 3.172256,100.1289 2.52239,100.2258 2.701185,100.9268 1.856497)),((139.4299 -7.21115,138.5487 -6.953701,139.0828 -6.91857,138.4045 -6.344897,138.2454 -5.877429,138.4043 -5.741106,138.0585 -5.727854,138.1534 -5.453088,137.7074 -5.177695,137.5565 -5.110066,137.4602 -4.952026,137.4126 -5.105817,137.318 -4.96523,135.1772 -4.435026,134.6304 -4.111171,134.9472 -3.914259,134.5123 -4.024375,134.3437 -3.864351,134.3059 -4.025395,134.1516 -3.736306,134.0222 -3.816791,133.6323 -3.471212,133.6923 -3.195787,133.4663 -3.549077,133.2501 -4.069128,132.8997 -4.086795,132.7236 -3.640093,132.9296 -3.549771,132.8371 -3.296674,131.9426 -2.781653,132.7215 -2.813688,133.2519 -2.410754,133.3913 -2.510615,133.2767 -2.703947,133.4391 -2.509702,133.601 -2.628564,133.644 -2.808288,133.7089 -2.502631,133.8009 -2.604163,133.8093 -2.619447,133.8112 -2.550296,133.8085 -2.538123,133.9032 -2.460743,134.041 -2.378235,134.0555 -2.362239,133.9214 -2.192686,133.9626 -2.047041,133.798 -2.137251,132.304 -2.290982,132.0936 -2.016249,131.9188 -1.869633,132.0234 -1.675048,131.8805 -1.656041,131.972 -1.509944,131.7207 -1.517375,131.7223 -1.514881,131.5254 -1.480447,131.5887 -1.34423,131.448 -1.517668,131.3429 -1.347232,131.2081 -1.532779,130.9396 -1.448196,131.2283 -0.826661,132.7103 -0.359109,134.1508 -0.862349,134.0257 -0.95362,134.291 -1.354152,134.154 -1.907014,134.1581 -1.922511,134.464 -2.857567,134.6439 -2.483087,134.8709 -3.245714,135.3409 -3.393879,135.9208 -2.986668,136.4098 -2.211005,137.2864 -2.10383,137.256 -1.911406,137.2542 -1.904951,137.1989 -1.82862,137.1914 -1.813877,137.9291 -1.469803,139.7508 -2.356036,140.999 -2.608743,141.0003 -6.31305,140.8429 -6.611421,141.0218 -6.898336,141.0214 -9.131344,140.3833 -8.469405,140.2309 -8.368771,139.9339 -8.129582,140.1484 -7.858081,139.8607 -8.116987,139.3613 -8.163068,139.2563 -8,138.948 -8.255133,139.1298 -7.565531,138.6753 -7.203467,139.4299 -7.21115)),((133.7219 -3.149508,133.6923 -3.195787,133.7219 -3.149508)),((125.2275 1.472993,124.4661 0.448734,123.6281 0.271407,123.0685 0.529858,120.5137 0.526934,120.1329 0.187793,120.06 -0.632907,120.5077 -0.986457,120.6791 -1.419575,121.0959 -1.423707,121.6103 -0.803237,121.9401 -0.981518,122.2009 -0.775112,122.9579 -0.748518,122.7176 -0.659124,123.054 -0.561298,123.4563 -0.769121,123.3416 -1.042975,123.0974 -0.832567,122.7948 -0.945312,122.3868 -1.49776,121.6613 -1.943879,121.2895 -1.853133,122.3136 -2.905743,122.4777 -3.165916,122.2038 -3.616509,122.6655 -3.896488,122.5312 -3.969648,122.6801 -4.154491,122.8464 -4.062827,122.8932 -4.393916,122.0896 -4.535966,121.9856 -4.89656,121.5778 -4.785447,121.6032 -4.059939,120.881 -3.532354,121.0871 -2.718576,120.8069 -2.623637,120.1914 -2.970125,120.4112 -3.255863,120.4296 -4.678784,120.2657 -5.138552,120.4658 -5.621928,119.4229 -5.58476,119.6298 -3.973415,119.4191 -3.461248,118.9354 -3.572695,118.7525 -2.782486,119.1444 -2.47298,119.3316 -1.964087,119.3326 -1.174551,119.7373 -0.645166,119.8782 -0.857212,119.8118 -0.139942,119.6121 -0.010906,119.8424 -0.101705,119.7755 0.22187,120.0465 0.718429,120.2832 0.982884,120.5909 0.760178,120.9112 1.354875,122.8469 0.805428,122.9734 0.966245,123.9415 0.832896,124.584 1.195822,124.535 1.357874,124.9666 1.738123,125.2275 1.472993)),((112.7013 -8.437901,112.6948 -8.439592,110.7107 -8.201706,108.8719 -7.605248,108.3401 -7.814145,106.4078 -7.379401,106.5187 -6.969193,105.4796 -6.807122,106.0364 -5.873757,108.2951 -6.242659,108.6963 -6.811722,110.3713 -6.973555,110.9123 -6.397272,111.1707 -6.7036,112.5511 -6.861817,112.9478 -7.669765,113.2931 -7.792129,114.0425 -7.615606,114.4379 -7.790659,114.3527 -8.53114,114.6 -8.710374,114.2383 -8.605833,113.2375 -8.283751,112.7013 -8.437901)),((124.1143 -10.16846,123.4523 -10.36439,123.7535 -10.05713,123.5679 -10.02652,123.6583 -9.633697,125.0997 -8.752322,125.2849 -8.847486,125.1285 -8.647179,127.2943 -8.397074,126.4702 -8.951621,125.374 -9.27804,124.4857 -10.10442,124.1143 -10.16846)),((127.9185 2.159569,128.0691 2.191294,127.8406 1.853614,128.0159 1.31513,127.6531 0.875979,127.8762 0.820619,128.1671 1.367971,128.7284 1.546142,128.703 1.070277,128.1946 0.801879,128.9091 0.207443,127.9603 0.482091,127.8635 0.300212,128.0468 -0.422707,128.4363 -0.920513,127.6628 -0.229606,127.6323 0.853512,127.391 1.059648,127.5699 1.758012,127.9185 2.159569)),((129.6191 -2.810791,130.5644 -3.114848,130.8285 -3.451581,130.8452 -3.873016,129.9066 -3.334303,129.5186 -3.29356,129.5307 -3.469759,128.8772 -3.197397,128.4559 -3.455557,128.1747 -3.057812,127.9134 -3.568954,127.8338 -3.158372,128.1661 -2.85906,129.0434 -2.7969,129.1274 -2.966905,129.6191 -2.810791)),((117.8895 -8.099442,118.2781 -8.372096,118.6452 -8.297636,118.6465 -8.55589,118.7637 -8.313971,119.0006 -8.316621,119.1396 -8.757843,118.4182 -8.868382,118.3943 -8.608338,117.8871 -8.943034,117.0263 -9.112103,116.7193 -8.971774,116.828 -8.518329,117.127 -8.364887,117.5692 -8.411745,117.8083 -8.729995,118.2523 -8.669119,117.6932 -8.239166,117.8895 -8.099442)),((123.009 -8.322679,122.7783 -8.428374,122.8187 -8.599476,121.7858 -8.896641,119.8065 -8.767161,119.862 -8.430293,120.4334 -8.231742,121.5004 -8.626773,122.0031 -8.433077,122.4567 -8.60618,122.88 -8.284707,122.7193 -8.225791,122.834 -8.074396,123.009 -8.322679)),((106.149 -2.090856,106.3622 -2.474618,106.845 -2.576815,106.5911 -2.894365,106.7369 -3.085875,105.945 -2.812951,105.757 -2.145321,105.1276 -2.087412,105.3853 -1.608835,105.5907 -1.530048,105.7916 -1.811156,105.6917 -1.529714,105.9101 -1.502093,106.149 -2.090856)),((138.2959 -8.402906,138.2874 -8.407409,137.6244 -8.422536,138.2143 -7.495863,138.669 -7.371625,139.1036 -7.564309,138.9553 -8.047141,138.2959 -8.402906)),((120.2778 -9.651771,120.8252 -10.02814,120.4528 -10.32221,119.6646 -9.782634,118.9387 -9.56801,119.9397 -9.283732,120.2778 -9.651771)),((126.6061 -3.063457,127.2598 -3.370298,127.2186 -3.66758,126.6928 -3.844355,126.1756 -3.602276,126.0184 -3.162229,126.6061 -3.063457)),((115.1572 -8.062587,115.7192 -8.391159,115.1638 -8.849496,114.4307 -8.179665,115.1572 -8.062587)),((116.1558 -8.351388,116.3435 -8.219005,116.7263 -8.353747,116.5773 -8.897724,115.8411 -8.81915,116.066 -8.772664,116.1558 -8.351388)),((113.7474 -6.882952,114.1223 -6.981162,113.5303 -7.248936,112.6741 -7.061266,112.8626 -6.889683,113.7474 -6.882952)),((97.81693 0.545709,97.05953 1.412042,97.40904 1.516504,97.8853 1.055496,97.81693 0.545709)),((123.1269 -4.717384,122.9254 -5.169833,123.215 -5.296303,122.6483 -5.701154,122.8647 -4.52009,123.0813 -4.366273,123.1269 -4.717384)),((107.6248 -2.606023,108.1851 -2.688966,108.1959 -3.143872,107.9743 -3.268104,107.8408 -3.057205,107.6073 -3.240922,107.6248 -2.606023)),((126.4273 -7.63068,126.8426 -7.735018,126.4724 -7.967912,125.7792 -8.011725,125.9443 -7.663583,126.4273 -7.63068)),((99.17957 -1.508052,99.25424 -1.782622,98.86172 -1.686982,98.64793 -0.992241,98.91953 -0.94647,99.17957 -1.508052)),((134.4155 -6.004848,134.2049 -5.708978,134.5021 -5.542168,134.5034 -5.54572,134.7024 -5.734791,134.7099 -5.735772,134.6325 -5.9813,134.7122 -6.02903,134.6151 -6.366838,134.3407 -6.178817,134.2735 -6.116869,134.4155 -6.004848)),((124.5717 -1.643565,125.3223 -1.879372,124.4022 -2.029361,124.3613 -1.699968,124.5717 -1.643565)),((122.3969 -5.070944,122.3707 -4.738174,122.7411 -4.644409,122.5991 -5.427899,122.5415 -5.258076,122.2828 -5.388706,122.3969 -5.070944)),((135.4377 -0.66069,135.88 -0.712989,136.3853 -1.101698,135.8798 -1.191841,135.7427 -0.787879,135.4836 -0.74467,135.5491 -0.883408,135.4377 -0.66069)),((131.2279 -7.553687,131.7097 -7.13711,131.3473 -7.983702,131.1056 -7.984068,131.2279 -7.553687)),((128.5224 2.580829,128.6899 2.465109,128.5686 2.107352,128.257 1.984516,128.1901 2.284296,128.5224 2.580829)),((135.9251 -1.641356,136.9069 -1.789967,136.232 -1.905224,135.4814 -1.680104,135.9251 -1.641356)),((102.6982 0.983687,103.035 0.682563,102.4443 0.924888,102.2128 1.403009,102.4908 1.227135,102.4585 0.92845,102.5472 1.11868,102.6598 1.017977,102.9736 1.089948,103.1351 0.820805,102.6982 0.983687)),((127.6303 -1.335111,128.1462 -1.691225,127.4188 -1.688151,127.4083 -1.42103,127.6303 -1.335111)),((124.9767 -8.159108,125.1085 -8.343347,124.3292 -8.422364,124.4635 -8.133295,124.9767 -8.159108)),((123.3836 -1.220799,123.5541 -1.282871,123.4544 -1.516691,123.292 -1.415775,123.1541 -1.639529,123.1461 -1.301808,122.8542 -1.587309,122.9012 -1.187582,123.1818 -1.157866,123.2393 -1.398993,123.3836 -1.220799)),((129.8887 -1.795571,130.345 -1.675565,130.4364 -1.980287,129.8992 -2.002939,129.7127 -1.884272,129.8887 -1.795571)),((127.2943 -0.521792,127.3171 -0.338487,127.5612 -0.322465,127.5979 -0.637763,127.9022 -0.797312,127.4695 -0.834976,127.2943 -0.521792)),((123.9177 -8.244354,123.5387 -8.579031,123.195 -8.52935,123.3954 -8.257503,123.9177 -8.244354)),((130.6475 -0.109906,131.0414 -0.023858,131.3334 -0.304008,130.9532 -0.3625,130.6475 -0.109906)),((107.9869 4.009458,108.236 4.221169,108.3995 3.961394,108.2981 3.657955,108.0891 3.676888,108.2809 3.710928,107.9869 4.009458)),((134.1656 -6.836565,134.105 -6.453737,134.2914 -6.656324,134.0877 -6.162454,134.5258 -6.581078,134.1656 -6.836565)),((131.0561 -1.168251,130.8592 -1.352052,130.638 -0.989307,131.0386 -0.927145,131.0561 -1.168251)),((116.142964 -3.351424,116.180028 -3.295117,116.3347 -3.738888,116.0924 -4.08303,116.142964 -3.351424)),((125.7877 -1.803772,126.35 -1.816954,125.4188 -1.95198,125.3686 -1.779667,125.7877 -1.803772)),((101.5911 2.069988,101.79 1.960159,101.6241 1.686206,101.3865 1.907348,101.5911 2.069988)),((104.5443 0.007856,104.9972 -0.306154,104.4338 -0.247322,104.5443 0.007856)),((95.7921 2.83274,96.4968 2.362147,95.7914 2.623433,95.7921 2.83274)),((102.5107 1.241529,101.995 1.610747,102.4649 1.518405,102.5107 1.241529)),((100.4503 -3.349013,100.185 -2.791292,100.4713 -3.026565,100.4503 -3.349013)),((121.9925 -5.155172,121.9509 -5.493283,121.7905 -5.262755,121.8841 -5.058366,121.9925 -5.155172)),((104.3472 -0.397982,104.5883 -0.467341,104.4998 -0.653567,104.3406 -0.670489,104.3472 -0.397982)),((123.9624 -8.341529,124.3093 -8.19349,124.1342 -8.537789,123.9624 -8.341529)),((128.1755 -3.56742,128.3411 -3.519277,128.2464 -3.738943,127.9291 -3.778539,128.1755 -3.56742)),((123.1161 -4.017374,123.2622 -4.087534,123.1213 -4.257167,122.9384 -4.072475,123.1161 -4.017374)))
+MULTIPOLYGON(((-7.46914 55.05043,-7.525289 55.28312,-7.251913 55.2827,-7.369507 55.38791,-6.923227 55.23738,-7.255213 55.06712,-7.405216 54.94457,-8.160958 54.43678,-7.550656 54.12475,-7.282304 54.12552,-7.032411 54.41945,-6.634315 54.04186,-6.266092 54.09651,-6.107816 54.00118,-6.403613 54.01521,-6.221015 53.79626,-6.339353 53.71866,-6.085886 53.55663,-6.209974 53.46759,-6.057437 53.36481,-6.236537 53.3622,-6.002564 52.96395,-6.514523 52.35198,-6.36582 52.17206,-6.928827 52.12389,-6.994727 52.28001,-8.00851 51.82772,-8.310498 51.89138,-8.319308 51.8453,-8.637495 51.74102,-8.532841 51.60956,-9.774042 51.45157,-9.456813 51.73584,-10.1593 51.61216,-9.748881 51.83235,-10.34159 51.78676,-10.18384 51.96445,-10.32225 51.95573,-9.751362 52.14962,-10.4546 52.19119,-9.72333 52.25878,-9.951208 52.41228,-9.623416 52.58303,-8.715978 52.66534,-8.958472 52.77181,-9.941096 52.56108,-8.979424 53.21976,-10.18829 53.41159,-10.02172 53.47262,-10.19256 53.55916,-9.694108 53.5998,-9.907255 53.76432,-9.546713 53.80319,-9.945444 53.87233,-9.8339 54.13009,-10.12756 54.09829,-10.11219 54.24703,-9.341279 54.33186,-9.138386 54.14283,-8.576988 54.32924,-8.119458 54.65449,-8.804006 54.7036,-8.267118 54.8727,-8.461501 54.92608,-8.287798 55.16141,-7.798321 55.22076,-7.519329 55.12454,-7.685642 54.9525,-7.46914 55.05043)))
+MULTIPOLYGON(((35.55973 32.39043,35.47559 31.48824,34.88395 31.39669,35.22941 31.75167,34.96389 31.84679,35.09043 32.47389,35.55973 32.39043)))
+MULTIPOLYGON(((78.94111 33.39008,79.18546 33.19123,79.40984 33.17877,79.56429 32.67076,79.25841 32.52338,78.97096 32.34428,78.73645 32.69593,78.41224 32.55606,78.47343 32.23766,78.74631 31.90719,78.88874 31.26903,79.07217 31.45461,79.40791 31.08637,79.95748 30.87472,80.25038 30.74959,80.22026 30.57917,81.05566 30.20446,80.36317 29.74552,80.0665 28.83346,81.89027 27.85854,82.70869 27.7071,82.76105 27.50681,83.31216 27.33275,84.1551 27.51991,84.62772 27.32822,84.64421 27.04913,85.20665 26.76708,85.62429 26.88045,85.85046 26.56794,86.34086 26.6219,86.72475 26.42732,87.06647 26.58938,87.32799 26.35671,88.02405 26.36578,88.18853 26.76687,87.9837 27.12124,88.13596 27.87923,88.78898 28.05352,88.92725 27.28978,88.75972 27.11429,88.87685 26.94915,89.62505 26.72416,90.41105 26.90381,91.91294 26.80428,92.11964 26.92154,92.12455 27.28041,91.63419 27.53725,91.6572 27.76037,92.55601 27.86175,93.22356 28.35798,93.29386 28.63134,93.94067 28.77195,94.42386 29.21401,94.69138 29.31206,95.26135 29.07291,96.09804 29.45244,96.3967 29.25173,96.12448 29.07665,96.17328 28.90239,96.5154 29.07517,96.62262 28.77994,96.27107 28.4075,97.34721 28.21058,97.37821 27.8962,96.88756 27.60774,97.14354 27.09397,96.60806 27.36686,95.14398 26.61056,95.18343 26.06357,94.582 25.24725,94.72583 25,94.15455 23.8483,93.33115 24.07977,93.38774 23.13586,93.1313 23.04397,93.09991 22.7794,93.19876 22.25992,93.00166 21.98413,92.70662 22.15061,92.60881 21.97587,92.28809 23.69794,91.95375 23.72646,91.82832 23.09429,91.61399 22.92959,91.42766 23.25905,91.34951 23.08543,91.15093 23.64115,91.38819 24.1085,91.9061 24.14516,92.26034 24.83023,92.48511 24.86508,92.41306 25.02052,89.84493 25.28913,89.88033 25.9313,89.67532 26.22877,89.55626 25.96017,89.35738 26.00834,89.10016 26.39598,88.66698 26.2735,88.39457 26.62918,88.52641 26.37258,88.18036 26.14472,88.10567 25.82449,89.0113 25.29883,88.4422 25.20072,88.02834 24.68834,88.73291 24.26673,88.57062 23.6455,88.80328 23.48974,88.72794 23.2574,88.99747 23.19974,88.86646 22.9578,89.08354 21.93857,89.06349 21.92776,89.03131 21.90706,89.05953 21.61154,88.73206 21.67889,88.7229 21.68925,88.74857 22.06594,88.48277 21.82861,88.46631 21.80936,88.43805 21.66155,88.43002 21.60411,88.41084 21.91539,88.29903 21.83306,88.22757 21.61672,88.23467 21.65239,88.2133 21.71215,88.2134 21.71363,88.21426 22.15742,88.0447 22.22218,88.19611 22.1048,87.82855 21.7222,86.97277 21.39405,86.81679 21.13818,87.05199 20.7035,86.7629 20.31075,85 19.32192,84.14108 18.31418,82.30446 17.0442,82.36817 16.84393,82.31754 16.58463,81.33067 16.31521,80.93883 15.70794,80.76952 15.86851,80.29359 15.70468,80.0457 15.08755,80.34645 13.30402,79.77618 11.76944,79.87608 10.2956,79.39067 10.31869,78.98161 9.676768,78.96533 9.376285,79.44234 9.153852,78.96259 9.268795,78.41982 9.109741,78.06974 8.36659,77.55257 8.069007,76.55161 8.890351,75.73327 11.35397,75.20039 12.00316,74.39533 14.41856,73.45624 16.05808,73.26486 17.28613,72.85629 18.68839,73.09037 19.04566,72.97643 19.17068,72.80319 18.89796,72.91546 19.29084,72.65936 19.8391,72.9519 20.75498,72.74421 20.9789,72.64137 21.45602,73.10773 21.72976,72.54304 21.65636,72.77861 21.95182,72.50419 21.94306,72.76682 22.19364,72.5878 22.26793,72.29237 22.21461,72.10708 21.20381,70.83937 20.68841,70.21914 21.00221,68.93578 22.31657,70.17786 22.56044,70.39329 23.04573,70.38342 23.05162,70.37627 23.04768,70.38002 23.03903,69.46711 22.77078,68.60395 23.33114,68.38507 23.44854,68.78115 23.86632,68.25272 23.63652,68.24763 23.6382,68.31957 23.92002,68.74924 23.96205,68.82635 24.3084,69.97868 24.16505,71.1244 24.40936,70.65932 25.70151,70.27539 25.71132,70.09608 25.94432,70.16774 26.55075,69.51545 26.74006,69.57813 27.16549,70.36617 28.00825,70.86549 27.70511,71.89957 27.9642,72.39619 28.77465,72.94442 29.0341,73.39652 29.93901,73.96526 30.19131,73.93529 30.46296,74.6857 31.06146,74.53585 31.15423,74.54382 31.8223,75.37476 32.22432,74.69842 32.48494,74.69702 32.83971,74.53153 32.74073,74.01427 33.19825,74.18707 33.45552,73.95624 33.72029,74.26275 33.97429,73.88322 34.04995,73.97623 34.26481,73.76322 34.35963,73.94156 34.6772,74.37554 34.80344,75.74921 34.51583,76.68182 34.75959,77.8409 35.50421,77.85342 35.48316,78.70403 35.91927,79.32433 35.9853,80.03587 35.41065,80.34001 35.46458,80.17257 34.85013,79.72459 34.43313,79.51649 34.46106,79.42042 34.01869,78.90406 33.9967,79.0872 33.63753,78.89888 33.59235,78.94111 33.39008)),((93.05704 13.36986,92.72138 11.47929,92.52598 11.84491,92.84876 13.39596,93.03716 13.57325,93.05704 13.36986)),((93.67802 7.153168,93.88215 7.197016,93.84781 6.747382,93.67802 7.153168)))
+MULTIPOLYGON(((42.36371 37.10926,42.80326 37.37804,43.85316 37.19084,44.14184 37.31565,44.31998 36.96706,44.80497 37.14814,45.35571 35.98217,46.34515 35.81621,46.01299 35.67784,46.189 35.10828,45.70106 34.81196,45.74831 34.54156,45.53599 34.59146,45.58042 34.14325,45.41276 33.97156,46.19623 33.23977,46.10195 32.96962,47.45319 32.39359,47.86495 31.77916,47.70172 30.9925,48.03083 30.99381,48.03505 30.48498,48.48461 29.97987,47.95707 30.01171,47.18075 30.02608,46.55759 29.10305,45.47203 29.47496,44.71873 29.20663,43.59605 29.60304,43.66146 30.3756,43.0655 30.4107,42.9772 30.72498,39.31893 32.21677,38.80408 33.37191,41.01237 34.41986,41.39429 35.63027,41.29453 36.35617,42.36371 37.10926)))
+MULTIPOLYGON(((44.82024 39.62525,45.44402 38.99178,46 38.82019,46.53373 38.86489,46.95339 39.10436,47.99076 39.69632,48.37463 39.37077,48.13177 39.26484,48.36908 39.01485,48.01774 38.84517,48.63203 38.40241,48.87941 38.437,49.15762 37.59504,50.18956 37.38953,50.48304 37.02308,51.64344 36.60569,53.99164 36.94398,53.89781 37.34081,54.67566 37.44039,54.85671 37.76054,55.47419 38.08433,57.23291 38.26714,57.51798 37.91442,59.34782 37.51545,59.55383 37.12253,60.05066 37.01224,60.37067 36.62425,61.14761 36.65593,61.27663 35.61316,60.99798 34.63269,60.74568 34.52298,60.91771 34.30145,60.47844 34.07925,60.64322 33.56461,60.94499 33.49451,60.58612 33.14312,60.87726 32.19884,60.8569 31.49167,61.71288 31.37597,61.8457 31.04082,60.8786 29.86178,61.80416 28.64017,62.79194 28.2771,62.78297 27.23428,63.31746 27.13866,63.16919 26.64729,62.43453 26.56814,61.84788 26.22814,61.61045 25.19495,61.41459 25.06409,60.53225 25.44646,60.45864 25.29239,59.11906 25.42644,57.3302 25.78979,56.80032 27.1285,56.07236 27.11989,54.61605 26.50467,54.31315 26.72567,53.71799 26.70395,52.04406 27.84187,51.40396 27.92542,51.03392 28.80974,50.81421 28.92234,50.92504 29.06672,50.66298 29.13639,50.64366 29.4595,50.09842 30.17461,49.55951 29.99754,48.93444 30.38899,48.92179 30.02477,48.48461 29.97987,48.03505 30.48498,48.03083 30.99381,47.70172 30.9925,47.86495 31.77916,47.45319 32.39359,46.10195 32.96962,46.19623 33.23977,45.41276 33.97156,45.58042 34.14325,45.53599 34.59146,45.74831 34.54156,45.70106 34.81196,46.189 35.10828,46.01299 35.67784,46.34515 35.81621,45.35571 35.98217,44.80497 37.14814,44.63467 37.72633,44.23886 37.88711,44.50953 38.32789,44.31766 38.38543,44.04729 39.37641,44.42366 39.4098,44.61477 39.77621,44.82024 39.62525),(48.93444 30.38899,48.95354 30.39982,48.93444 30.38899)))
+MULTIPOLYGON(((35.11546 33.09018,35.62841 33.25093,35.64941 32.6873,35.55973 32.39043,35.09043 32.47389,34.96389 31.84679,35.22941 31.75167,34.88395 31.39669,35.47559 31.48824,34.96632 29.5476,34.91122 29.49664,34.26801 31.22361,34.48946 31.59407,35.11546 33.09018)))
+MULTIPOLYGON(((10.47005 46.86188,11.01477 46.77032,11.16155 46.96649,12.18404 47.09521,12.43604 46.69191,13.71563 46.52403,13.38307 46.30019,13.66695 46.18206,13.47854 46.00447,13.90781 45.6393,13.72107 45.59447,13.54803 45.7973,13.13257 45.77088,12.14619 45.38552,12.54236 44.96169,12.24288 44.72267,12.38784 44.22705,13.62712 43.55183,13.9515 42.72435,14.72871 42.09376,15.34631 41.86517,16.18133 41.89166,15.95641 41.46295,18.01636 40.6409,18.51345 40.13034,18.34918 39.78941,17.87668 40.27125,16.9521 40.47552,16.48812 39.77875,17.15826 39.40068,17.21372 39.02584,16.61732 38.81383,16.57636 38.42414,16.06622 37.92332,15.63801 38.01673,15.84763 38.65526,16.2241 38.85559,15.62409 40.0722,15.33235 40,14.9016 40.24603,14.79204 40.66367,14.32527 40.57592,14.4567 40.74391,14.02882 40.79278,13.71053 41.25045,13.04785 41.22547,11.54984 42.34292,11.0949 42.39658,11.08124 42.64227,10.49544 42.9358,10.51972 43.26908,9.983374 44.09307,8.763913 44.43042,8.074021 43.89411,7.523377 43.78971,7.678827 44.18167,7.002817 44.24012,6.849277 44.53329,7.013811 44.83339,6.615681 45.10521,7.12885 45.26577,6.790975 45.77126,7.03618 45.93694,7.859254 45.93451,8.442933 46.46386,8.451571 46.25948,9.016438 45.82587,9.283881 46.49617,10.13348 46.23097,10.05119 46.53883,10.45701 46.54151,10.47005 46.86188)),((12.46719 37.9219,12.72997 38.19249,12.91789 38.03049,13.31619 38.22785,13.74824 37.97554,15.65654 38.26612,15.09115 37.48394,15.33887 37.0099,15.08873 36.65308,12.66241 37.56498,12.46719 37.9219)),((8.494676 39.72335,8.485087 40.30003,8.153088 40.57606,8.178012 40.93834,8.53252 40.82807,9.141717 41.24946,9.527966 41.16186,9.826783 40.54034,9.625611 40.24757,9.567271 39.15408,9.088002 39.23002,8.853909 38.88334,8.490665 39.08624,8.405216 38.96561,8.494676 39.72335)))
+MULTIPOLYGON(((44.71873 29.20663,45.47203 29.47496,46.55759 29.10305,45.50752 28.77784,44.71873 29.20663)))
+MULTIPOLYGON(((130.9294 33.9484,130.9785 34.43993,131.4019 34.41845,132.6323 35.43069,135.2295 35.77887,135.3156 35.44886,135.4661 35.603,135.6297 35.4942,136.0833 35.66702,135.9685 36.00132,136.6254 36.61107,136.7425 37.3471,137.3331 37.52606,136.8657 37.10735,137.0636 37.10849,136.9882 36.87307,137.2243 36.73678,138.5621 37.37778,138.8298 37.79981,139.4192 38.14941,140.0642 39.58677,139.965 39.89338,139.7036 39.94135,140.0202 40.24436,139.863 40.60953,140.2527 40.79341,140.3431 41.25708,140.6445 41.1805,140.7352 40.83061,140.8726 41.01303,141.1376 40.86794,141.1875 41.28007,140.7697 41.14425,140.9178 41.54623,141.4743 41.42971,141.4514 40.63988,141.7782 40.34172,142.0742 39.55208,141.7379 39.02082,141.4525 38.66979,141.5247 38.26907,141.0862 38.38846,140.8953 38.04001,140.9852 37.00156,140.568 36.30336,140.8729 35.69378,140.5361 35.60752,140.3927 35.19065,139.8483 34.90217,139.7843 35.31156,140.1324 35.5697,139.784 35.6139,139.683 35.13995,139.5459 35.3041,139.1538 35.23222,139.1583 34.92938,138.8479 34.60121,138.8182 35.11343,138.5673 35.09829,138.2363 34.59475,137.0192 34.57833,137.3527 34.78025,136.9795 34.91299,136.9209 34.70311,136.9038 35.0886,136.7166 35.06303,136.5315 34.61195,136.9272 34.44617,136.907 34.27694,136.351 34.20865,136.2074 33.97331,135.8043 33.44193,135.4523 33.54549,135.0653 33.88164,135.2029 34.14472,135.0764 34.29442,135.4581 34.7013,134.3026 34.7299,133.9376 34.44866,133.491 34.51265,132.688 34.20469,132.4259 34.38474,132.1458 33.82857,131.7551 34.06356,131.035 33.92691,131.1104 33.61341,131.6702 33.66291,131.7408 33.46668,131.5164 33.26581,131.9093 33.25998,131.9002 32.92883,132.0904 32.92501,131.6984 32.60675,131.3469 31.35632,131.0969 31.45794,131.1316 31.26823,130.6621 30.98901,130.7197 31.7167,130.5322 31.51944,130.6386 31.18041,130.1068 31.40829,130.3368 31.60995,130.1779 32.08168,130.6299 32.77022,130.2592 33.20152,130.0821 32.84294,130.3482 32.84658,130.3627 32.68273,130.1771 32.58385,130.1964 32.77386,129.959 32.76047,129.7436 32.56274,129.8754 32.73706,129.6856 33.09111,130 32.829,129.5652 33.32096,129.8326 33.31048,129.8513 33.55061,129.9947 33.42612,130.9294 33.9484)),((145.5114 43.22366,143.9198 42.86976,143.4125 42.4386,143.2483 41.92071,141.6276 42.64253,141.0031 42.29575,140.4632 42.57674,140.2934 42.24724,141.1941 41.80054,140.6495 41.81721,140.2051 41.3923,139.9885 41.5498,140.1237 41.99354,139.7761 42.25787,139.8238 42.60303,140.5217 42.98658,140.3451 43.33046,141.1685 43.14311,141.4247 43.32488,141.3312 43.72747,141.6443 43.94796,141.7931 44.61361,141.5685 45.20618,141.6489 45.4501,141.9401 45.52314,143.0152 44.5451,144.3436 43.96353,144.7943 43.93336,145.3439 44.33778,145.0626 43.77736,145.3541 43.57341,145.1924 43.62068,145.3938 43.29514,145.2275 43.33104,145.5114 43.22366)),((134.5955 34.20631,134.749 33.83235,134.3161 33.57089,134.1839 33.24019,133.89 33.49704,133.2982 33.40092,133.0255 32.71769,132.381 33.0168,132.5585 33.22402,132.4267 33.45823,132.0275 33.3409,132.6566 33.69629,132.9484 34.13662,133.1368 33.91342,133.5213 33.96704,133.5594 34.25644,133.9341 34.38949,134.5955 34.20631)),((128.2996 26.7151,127.6633 26.07894,127.7156 26.43266,127.9858 26.57748,127.8856 26.70172,128.1226 26.65594,128.2625 26.87129,128.2996 26.7151)),((138.3738 38.21914,138.521 38.3264,138.4262 38.06371,138.5752 38.05661,138.2193 37.80915,138.3738 38.21914)))
+MULTIPOLYGON(((-77.64528 18.48845,-76.89505 18.4116,-76.18114 17.90755,-76.84061 17.99445,-77.17693 17.70355,-77.7407 17.85424,-78.36664 18.26574,-78.21104 18.46,-77.64528 18.48845)))
+MULTIPOLYGON(((35.64941 32.6873,35.80864 32.75319,36.84583 32.31248,38.80408 33.37191,39.31893 32.21677,37.00248 31.49365,37.99682 30.50064,37.50061 29.99781,36.75305 29.86721,36.07088 29.18588,34.96001 29.3589,34.96632 29.5476,35.47559 31.48824,35.55973 32.39043,35.64941 32.6873)))
+MULTIPOLYGON(((129.3704 28.10762,129.1419 28.24985,129.6908 28.51964,129.3704 28.10762)),((135 34.60735,134.9592 34.2672,134.664 34.23848,135 34.60735)))
+MULTIPOLYGON(((33.9945 4.214427,34.37846 4.611326,35.9477 4.629333,36.04136 4.447551,37.0419 4.375583,38.12922 3.616987,39.53289 3.402422,39.86957 3.874727,40.77492 4.281918,41.16927 3.94258,41.89908 3.975494,40.99211 2.829568,41.00099 -0.834049,41.56717 -1.662053,40.98409 -2.018724,40.83646 -2.021824,40.96167 -2.306771,40.81121 -2.278281,40.189 -2.728733,40.12308 -3.287777,39.77795 -3.587569,39.44699 -4.584176,39.22181 -4.678047,37.60839 -3.519971,37.58214 -2.989356,33.92483 -0.994076,33.90886 0.102833,34.51596 1.101287,34.7998 1.227813,35.03605 1.919515,34.92859 2.518256,34.45232 3.192519,34.46005 3.667987,34.1721 3.767278,33.9945 4.214427)))
+MULTIPOLYGON(((70.55601 42.47714,71.58846 42.96639,73.32719 42.53108,74.19781 43.23862,74.95803 43.12947,76.2627 43.12947,79.30737 43.29256,80.26365 42.6949,80.16733 42.63659,80.28261 42.05965,78.39241 41.41043,78.05938 41.03276,76.86404 41.02094,76.33176 40.35956,75.69683 40.29395,75.59311 40.65871,75.21906 40.44147,74.82812 40.52475,74.89946 40.33709,73.94488 40.02313,73.93794 39.59399,73.58203 39.28056,70.28378 39.75739,70.44686 40.30059,73.16536 41.11726,72.45782 41.60652,70.93612 41.71566,70.55601 42.47714)))
+MULTIPOLYGON(((105.2132 14.33601,105.3669 14.10214,106.1029 13.91008,106.0027 14.36157,106.5326 14.58762,106.968 14.30803,107.5446 14.68599,107.3392 14.11099,107.6185 13.51608,107.5572 12.36875,106.418 11.97237,106.4487 11.66724,105.8506 11.65794,106.1924 10.78987,105.7775 11.02648,105.3569 10.84966,105.1097 10.95593,104.8844 10.53115,104.4453 10.421,103.9025 10.65082,103.5692 10.53901,103.7203 10.85512,103.5521 11.16269,103.427 10.88745,103.1248 10.86612,103.115 11.45798,102.9195 11.63612,102.34 13.54311,102.6269 13.60597,103.0927 14.29263,103.6626 14.43951,104.8053 14.43433,105.0859 14.20729,105.2132 14.33601)))
+MULTIPOLYGON(((43.45427 -11.94077,43.21945 -11.75558,43.3312 -11.36282,43.45427 -11.94077)),((44.51069 -12.38046,44.20354 -12.16853,44.47016 -12.06774,44.51069 -12.38046)))
+MULTIPOLYGON(((130.6146 42.42395,130.6749 42.28362,130.3857 42.32814,129.7616 41.76048,129.7157 40.83027,129.2283 40.70313,128.3224 40,127.5643 39.83855,127.5665 39.30658,127.332 39.40328,127.3745 39.2047,128.3599 38.61244,128.0783 38.30883,127.1323 38.30494,126.6771 37.8218,126.4514 37.78783,126.4231 37.78357,125.5636 38.02898,125.7282 37.9121,125.3414 37.67334,125.5124 37.88852,124.9765 37.92745,125.2767 38.06451,124.6529 38.12884,124.9968 38.21886,124.9643 38.584,125.5526 38.68468,125.1264 38.87503,125.4436 39.55909,124.7627 39.77337,124.6071 39.58504,124.3644 40,124.8972 40.47795,126.0196 40.89744,126.6772 41.74695,128.1353 41.37826,128.3138 41.58303,128.0694 41.9782,128.9451 42.01748,129.3423 42.44767,129.7144 42.42675,129.8965 43.002,130.259 42.8958,130.6146 42.42395)))
+MULTIPOLYGON(((126.6771 37.8218,127.1323 38.30494,128.0783 38.30883,128.3599 38.61244,129.4268 37.05933,129.3786 36.02074,129.5847 36.01646,129.3842 35.50624,129.0415 35.0859,129.0398 35.0827,128.5895 35.20887,128.6321 35.06407,128.365 35.0426,128.4503 34.84069,128.0442 34.93248,128.0558 35.08058,127.588 34.9455,127.7715 34.85437,127.6454 34.62245,127.5117 34.88973,127.3483 34.83514,127.5127 34.58437,127.3306 34.43707,127.1136 34.54973,127.2376 34.77213,126.8874 34.4197,126.7662 34.61247,126.519 34.28574,126.5392 34.57703,126.2579 34.66254,126.6203 34.62637,126.3681 34.73677,126.6444 34.81292,126.3555 34.79034,126.4424 34.9732,126.2451 35.11051,126.4611 35.06792,126.2973 35.23034,126.6748 35.53216,126.4575 35.63457,126.9 35.90852,126.6087 35.88583,126.4885 36.72523,126.1189 36.70518,126.2992 36.97605,126.2664 36.80231,126.4277 36.90165,126.3263 36.99556,126.5649 36.88605,126.492 37.0564,126.8369 36.82073,127.0034 36.98733,126.6562 37.15142,126.8692 37.26259,126.5909 37.44984,126.5187 37.76182,126.7662 37.61766,126.6771 37.8218)),((126.5122 33.51381,126.9482 33.45398,126.2703 33.19129,126.1652 33.3327,126.5122 33.51381)))
+MULTIPOLYGON(((46.55759 29.10305,47.18075 30.02608,47.95707 30.01171,48.19046 29.54315,47.70333 29.37312,48.10133 29.34784,48.43147 28.53563,47.70495 28.52461,47.46055 29.00044,46.55759 29.10305)),((48.1397 29.91679,48.12482 29.94437,48.38211 29.75845,48.18782 29.58773,48.1397 29.91679)))
+MULTIPOLYGON(((-81.39859 19.39729,-81.36519 19.29706,-81.29838 19.34718,-81.13133 19.34718,-81.09792 19.29706,-81.24826 19.28036,-81.41529 19.28036,-81.432 19.38058,-81.39859 19.39729)))
+MULTIPOLYGON(((49.19137 46.35909,48.68242 47.33046,47.99833 48.01681,46.92366 48.89732,47.90125 51.14826,48.97592 50.75767,51.12978 52.02877,52.59729 52.12811,54.74889 51.14826,58.17159 51.14826,59.54202 50.95184,60.42253 50.85476,60.71603 51.14826,60.2261 52.22519,61.2037 53.30212,62.08421 53.30212,61.59654 53.79204,63.55172 54.08554,65.89974 54.47613,70.39936 55.45597,71.08571 54.57547,73.13797 53.88912,73.92139 53.69496,77.05058 54.67255,77.24701 54.37905,76.85642 53.98846,78.42102 52.71511,80.37846 50.75767,81.06255 51.24534,81.55247 51.05118,83.21414 51.24534,84.97516 49.77782,86.53976 50.07133,86.93111 49.11688,86.86476 49.1126,86.58855 48.543,85.73545 48.371,85.5416 47.93944,85.69684 47.23086,85.52972 47.0594,84.80595 46.82669,84.68604 47.00464,83.03088 47.21212,82.27198 45.57064,82.60367 45.43167,82.48621 45.12067,81.68958 45.36663,79.84063 44.89213,80.48974 44.71143,80.34283 44.4813,80.79986 43.17976,80.40971 43.0573,80.58799 42.89124,80.26365 42.6949,79.30737 43.29256,76.2627 43.12947,74.95803 43.12947,74.19781 43.23862,73.32719 42.53108,71.58846 42.96639,70.55601 42.47714,68.43591 41.33429,66.58804 42.09577,66.80507 42.80331,66.15273 43.56479,64.30486 43.61873,61.75071 43.78181,61.12239 44.6563,61.13844 44.67618,61.11451 44.66727,61.11324 44.66904,61.79484 44.93174,61.80758 45.11567,61.72933 44.94716,61.31798 45.10165,61.34788 45.34447,61.13265 45.3161,60.86492 45.77643,60.8772 46.10632,61.17527 46.17042,61.66479 46.78025,60.98714 46.47668,60.83824 46.76168,60.51076 46.7757,60.73715 46.64245,60.40186 46.49827,60.27652 46.70614,59.9384 46.40144,60.43949 46.2855,60.73527 46.33081,60.77562 46.17736,59.85021 46.09455,59.5675 46.3592,59.51931 45.82307,59.2774 45.76174,59.3783 46.04139,58.75704 45.86393,56.09795 45.19688,55.93486 41.55257,53.97785 42.20491,54.14094 42.80331,52.73736 42.72655,51.91213 42.82872,51.64697 43.18023,51.26829 43.15116,51.30716 43.46929,50.85681 44.14088,50.23559 44.39585,50.30873 44.64459,51.52919 44.52299,50.83926 44.82603,51.41844 45.36433,52.67431 45.3816,52.96412 45.38559,52.72464 45.61796,52.86669 45.62964,53.03076 46.59469,52.63223 46.87456,51.7043 46.872,51.74908 46.72523,51.24955 47.01562,50.45811 46.85718,49.72255 46.34251,49.15001 46.45202,49.19137 46.35909)))
+MULTIPOLYGON(((101.1547 21.56387,101.285 21.17868,101.7879 21.14003,101.7815 21.83249,101.547 22.25014,101.7469 22.50021,102.1496 22.40003,102.677 21.65939,102.8436 21.84679,102.986 21.69021,102.8097 21.26276,103.1761 20.85108,103.699 20.66491,104.1231 20.98185,104.6435 20.66785,104.3783 20.44445,104.9776 20,104.6509 19.62435,104.0453 19.70294,104.1264 19.50412,103.8763 19.31214,105.138 18.71571,105.1911 18.32619,106.5534 16.99335,106.6789 16.45194,106.8739 16.53206,107.4526 16.08298,107.2178 15.73087,107.6967 15.25985,107.4715 15.00654,107.5446 14.68599,106.968 14.30803,106.5326 14.58762,106.0027 14.36157,106.1029 13.91008,105.3669 14.10214,105.2132 14.33601,105.5351 14.55281,105.4707 15.3448,105.6378 15.65781,104.7471 16.5365,104.7039 17.53196,103.9733 18.33454,103.5137 18.43748,102.6675 17.80686,102.0844 18.21974,101.1601 17.46701,100.9601 17.57215,101.3553 19.04666,101.2857 19.57056,100.5158 19.52846,100.5814 20.16878,100.0931 20.35574,100.2595 20.74696,100.6474 20.87555,100.5156 20.89783,100.727 21.31212,101.1547 21.56387)))
+MULTIPOLYGON(((35.98031 34.64496,36.47128 34.63018,36.34557 34.51201,36.63919 34.2057,36.38395 33.82193,36.02116 33.76341,35.90757 33.43406,35.62841 33.25093,35.11546 33.09018,35.98031 34.64496)))
+MULTIPOLYGON(((-60.88248 13.92187,-60.9401 13.70614,-61.06706 13.78446,-60.94818 14.10146,-60.88248 13.92187)))
+MULTIPOLYGON(((79.91742 8.905259,80.1861 9.482726,79.90987 9.758654,80.24934 9.823592,80.8117 9.290943,81.19769 8.461504,81.35297 8.490927,81.87177 7.315879,81.71006 6.505597,80.58682 5.916833,80.13106 6.092922,79.84307 6.933345,79.69839 8.213809,79.78356 8.348022,79.82488 7.912805,79.91742 8.905259)))
+MULTIPOLYGON(((-10.28686 8.484799,-9.77296 8.551791,-9.480072 8.376794,-9.343918 7.748662,-9.477838 7.362011,-9.211778 7.385181,-9.104451 7.193552,-8.848072 7.263333,-8.666122 7.693086,-8.472179 7.554582,-8.27361 7.006707,-8.599302 6.505595,-7.901638 6.27985,-7.758396 5.953354,-7.422362 5.843457,-7.527073 4.357078,-9.02896 4.976782,-10.02147 5.9439,-11.37094 6.785412,-11.45917 6.929611,-10.60413 7.770212,-10.28686 8.484799)))
+MULTIPOLYGON(((27.12344 -29.57842,27.76015 -28.89541,28.66901 -28.57445,29.46576 -29.35254,29.16626 -29.92973,28.39915 -30.14675,28.11823 -30.66896,27.39462 -30.33049,27.12344 -29.57842)))
+MULTIPOLYGON(((21.27649 55.2457,21.21554 54.92387,20.59391 55,20.98837 55.27225,21.13474 55.67651,21.13117 55.6827,21.07143 56.06343,22 56.4148,24.45596 56.25781,24.89075 56.4469,25.09741 56.18651,25.68371 56.14792,26.61967 55.67435,26.44965 55.35035,26.87194 55.28482,25.75194 54.8152,25.55723 54.33265,25.79186 54.16851,25.51306 54.31833,24.76473 53.96052,23.50595 53.96659,23.38738 54.21452,22.78779 54.36525,22.68608 54.58844,22.89281 54.81372,22.58557 55.07003,21.27649 55.2457)))
+MULTIPOLYGON(((5.816617 49.54663,5.73455 49.89968,6.13802 50.1329,6.527001 49.81488,6.374592 49.45884,5.816617 49.54663)))
+MULTIPOLYGON(((24.35622 57.87815,25.29386 58.07761,26.50471 57.52006,27.32212 57.54839,27.85104 57.30485,27.66686 56.83715,27.9718 56.82376,28.24113 56.27555,27.60297 55.78648,26.61967 55.67435,25.68371 56.14792,25.09741 56.18651,24.89075 56.4469,24.45596 56.25781,22 56.4148,21.07143 56.06343,21.06604 56.83326,21.71081 57.57136,22.60883 57.76169,23.26426 57.09216,23.77018 56.96909,24.40896 57.25403,24.35622 57.87815)))
+MULTIPOLYGON(((11.56605 33.16901,12.31339 32.83547,13.38961 32.90039,15.21193 32.38599,15.74868 31.40099,17.84702 30.92648,19.02585 30.26951,19.6081 30.41167,20.05587 30.84785,20.15043 31.23724,19.92422 31.74471,20.12848 32.20301,21.62793 32.92353,23.11104 32.63566,23.09164 32.34143,23.32558 32.16043,24.9826 31.96675,25.14805 31.64858,24.86111 31.40591,25.01827 30.77798,24.6981 30.14885,24.99944 29.25016,25 21.9992,25 20,24 20,24 19.50804,15.99817 23.45037,14.99587 23.00189,14.18932 22.64448,13.48059 23.18613,11.97955 23.52503,11.60618 24.24904,10.23926 24.61171,10.04183 25.32771,9.387854 26.18385,9.927657 26.64288,9.773593 27.27238,9.962235 27.87777,9.877125 29.04413,9.395229 30.17122,9.575346 30.24043,10.27783 30.82461,10.1375 31.48572,10.29116 31.69012,11.52732 32.40281,11.56605 33.16901)))
+MULTIPOLYGON(((43.94985 -17.6231,44.44566 -16.68605,44.44888 -16.19563,44.99743 -16.19502,45.24511 -15.93451,45.29548 -16.14581,45.34951 -15.98366,45.60741 -16.08033,45.66762 -15.77411,46.06434 -15.87776,46.12192 -15.70968,46.55495 -16,46.32012 -15.66818,46.94991 -15.20294,46.94013 -15.55696,47.21299 -15.47386,47.04673 -15.19086,47.46684 -14.67156,47.50592 -15.07986,47.76294 -14.26077,48.00293 -14.15646,47.97754 -14.37735,48.02802 -14.0491,47.8978 -13.59387,48.03513 -13.52395,48.23207 -13.8117,48.32628 -13.5467,48.54916 -13.52377,48.47263 -13.3634,48.81197 -13.37247,48.94949 -12.82917,48.72057 -12.44364,48.9416 -12.48711,49.29308 -11.96339,49.37016 -12.20941,49.19624 -12.29652,49.54088 -12.3838,49.92963 -13.04408,50.48179 -15.32926,50.21931 -15.99049,49.86713 -15.41446,49.61515 -15.56046,49.82998 -16.84689,49.48369 -17.10523,49.42936 -18.16511,47.09993 -24.99274,45.15136 -25.60602,44.09486 -25.06348,43.69332 -24.39403,43.76323 -23.46284,43.37013 -22.85543,43.27704 -21.91154,43.49803 -21.32102,43.7304 -21.32144,44.50232 -20.02127,43.94985 -17.6231)))
+MULTIPOLYGON(((26.81927 48.25461,27.66181 48.82974,29.93356 46.90878,30.35117 46.57469,30.77076 46.5524,30.24746 45.88604,29.72769 45.58736,29.88055 45.67812,29.6388 45.83161,29.67573 45.21692,29.42979 45.44407,28.73659 45.22992,28.06982 45.59521,28.25912 46.44143,28.09873 46.99154,26.81927 48.25461)))
+MULTIPOLYGON(((168.6603 7.336993,168.8607 7.286891,168.7271 7.270186,168.6603 7.336993)))
+MULTIPOLYGON(((18.82852 45.89342,19.57521 46.17799,20.26995 46.12806,20.82344 45.77556,20.79429 45.48373,21.52709 45.16339,21.40279 44.78959,22.1509 44.47602,22.49272 44.70761,22.76005 44.56408,22.46022 44.46281,22.68183 44.21765,22.37304 43.81076,23.0071 43.19424,22.44953 42.83245,22.56844 42.48317,22.37164 42.32233,21.92253 42.33228,21.6559 42.26132,21.47828 42.33228,21.30066 42.11898,21.10499 42.15466,20.76739 42.06565,20.76739 41.90526,20.61688 41.83297,20.63682 41.97525,20.16859 42.51689,19.66689 42.62945,19.29396 42.18192,19.37668 41.85016,18.5575 42.40775,18.43905 42.54559,18.51002 42.56364,18.52357 42.584,18.58098 42.6703,18.52766 42.77695,18.45669 42.95498,18.68764 43.06163,18.59903 43.16829,18.72333 43.31063,18.88331 43.36395,19.02565 43.22161,19.11425 43.31063,18.97232 43.52393,19.11425 43.54198,19.29187 43.631,19.41658 43.54198,19.54087 43.68433,19.22091 43.98665,19.4699 43.93332,19.62988 44.02193,19.38089 44.16427,19.20327 44.23565,19.14994 44.37799,19.23896 44.60893,19.3452 44.87598,19.07898 44.84029,19.08731 44.85201,19.16758 44.96499,19.06093 45.00027,19.11425 45.16066,19.43422 45.23163,19.06093 45.33828,18.95427 45.6406,18.82852 45.89342)))
+MULTIPOLYGON(((-4.827674 24.9966,0 21.83772,1.166675 21.11889,1.172165 20.73779,1.634107 20.57896,1.798455 20.29978,3.231133 19.82456,3.10724 19.15906,3.294835 18.98319,4.242888 19.13672,4.241203 16.9877,4.076758 16.91231,3.872143 15.69188,3.527506 15.34149,1.32403 15.26515,0.956915 14.97472,0.229351 14.98967,-0.7192 15.08039,-1.991972 14.58708,-2.147321 14.24911,-2.852649 13.99764,-2.911576 13.64737,-3.279644 13.71579,-3.237766 13.30563,-3.433222 13.16286,-3.984532 13.49584,-4.355398 13.13399,-4.228288 12.77813,-4.489498 12.71048,-4.569054 12.1346,-5.409314 11.83188,-5.199527 11.43251,-5.496531 11.06307,-5.518916 10.43326,-6.172732 10.22263,-6.256417 10.73664,-6.444196 10.56543,-6.642263 10.67225,-6.672197 10.36513,-6.947465 10.36964,-7.030167 10.16143,-7.641548 10.48812,-7.978548 10.17511,-8.261836 10.47687,-8.323532 11.0482,-8.677261 10.95531,-8.37589 11.36748,-8.854325 11.62834,-8.80539 12.00517,-9.034279 12.42307,-9.362003 12.49567,-9.340386 12.24292,-9.699758 12.02382,-10.33932 12.22548,-10.69021 11.893,-10.9286 12.22242,-11.24695 11.99247,-11.46411 12.13361,-11.37946 12.41356,-11.36283 12.97394,-12.04093 13.6279,-11.94072 13.92137,-12.24192 14.76061,-11.80774 14.89681,-11.74731 15.45623,-11.49894 15.64284,-10.90292 15.10362,-10.72423 15.43658,-9.40824 15.43437,-9.332037 15.69228,-9.328486 15.49625,-5.506424 15.50797,-5.327115 16.33314,-5.6028 16.49943,-6.564405 25,-4.827674 24.9966)))
+MULTIPOLYGON(((92.60686 20.68616,92.61049 20.6864,92.61235 20.67968,92.60686 20.68616)))
+MULTIPOLYGON(((87.83231 49.175,88.192 49.28303,88.22323 49.48986,88.86329 49.45017,89.68183 49.70971,89.62073 49.97399,90.67541 50.16824,90.73773 50.48793,91.42917 50.45771,91.75664 50.72041,92.27581 50.71622,92.34013 50.893,92.61613 50.70516,93.00924 50.784,93.12958 50.56275,94.27628 50.5753,94.61906 50.03394,96.63409 49.98194,97.3162 49.75739,98.25439 50.25548,98.32318 50.54744,97.82797 51.01169,98.02279 51.41996,98.89359 52.14954,99.97604 51.75824,102.0688 51.3971,102.3017 50.59977,102.9157 50.31429,103.6905 50.13724,105.3573 50.4804,106.7247 50.327,107.1465 50.01965,107.9756 49.92023,107.9455 49.67678,108.5434 49.33666,110.7663 49.1451,112.7549 49.49241,114.3401 50.28222,115.4007 49.90234,116.2339 50.0324,116.7003 49.83983,115.4767 47.96859,115.9354 47.67554,116.8039 47.90002,117.3744 47.63805,117.8419 48.02544,118.4786 48,119.8565 47.21655,119.7014 47.19307,119.9207 46.7435,119.5133 46.41943,118.9783 46.81819,117.4388 46.57964,117.3657 46.34863,116.6052 46.297,116.2234 45.70384,115.721 45.43835,114.6434 45.4309,113.6466 44.76521,111.8645 45.0648,111.3868 44.34732,112.0054 43.77061,111.047 43.34341,110.4165 42.76889,109.2717 42.42277,107.4528 42.46183,105.0344 41.56764,104.534 41.66262,104.5437 41.88379,103.3221 41.90749,100.8255 42.65695,96.37058 42.71486,95.34509 44.04517,95.431 44.28123,94.69542 44.3477,93.50827 44.96534,90.87865 45.19198,90.66355 45.51682,91.01986 46.01566,90.91358 46.9533,90.0731 47.85859,89.79642 47.81815,89.56589 48.04869,89.04101 47.9473,88.5164 48.41327,87.97818 48.5092,88.08491 48.70694,87.74966 48.88459,87.91448 48.98592,87.83231 49.175)))
+MULTIPOLYGON(((-5.384489 35.91991,-5.336971 35.8774,-5.234484 35.55744,-4.694509 35.21396,-2.956949 35.33714,-2.926725 35.28344,-2.813016 35.11618,-2.902431 35.25594,-2.206259 35.09098,-1.745389 34.75318,-1.542218 32.9575,-0.991742 32.52681,-1.250021 32.33232,-1.205814 32.11682,-2.867483 32.10715,-2.829027 31.77569,-3.656205 31.61393,-3.807284 31.22201,-3.586124 30.90655,-4.82199 30.64122,-5.108271 30.017,-7.640522 29.38141,-8.669257 28.71986,-8.670276 27.66212,-13.16859 27.66702,-12.90705 27.95427,-12.30218 27.97571,-11.45002 28.34365,-10.22215 29.30859,-9.646635 30.15814,-9.60318 30.39591,-9.894488 30.63796,-9.846688 31.39382,-9.264161 32.17827,-9.277806 32.55085,-8.515005 33.26479,-6.963262 33.9288,-5.923534 35.79824,-5.384489 35.91991)))
+MULTIPOLYGON(((145.6087 14.90391,145.6255 15.12106,145.7591 15.2714,145.7925 15.17117,145.6087 14.90391)),((145.0742 14.10212,145.2246 14.20234,145.3081 14.16893,145.1912 14.05201,145.0742 14.10212)),((145.6422 18.84606,145.7257 18.67901,145.6087 18.67901,145.6422 18.84606)),((145.6087 16.40727,145.709 16.37386,145.6087 16.30704,145.6087 16.40727)))
+MULTIPOLYGON(((-61.2269 14.79864,-60.88121 14.77388,-60.84352 14.40422,-61.08501 14.46286,-61.2269 14.79864)))
+MULTIPOLYGON(((-8.673868 27.29807,-4.827674 24.9966,-6.564405 25,-5.6028 16.49943,-5.327115 16.33314,-5.506424 15.50797,-9.328486 15.49625,-9.332037 15.69228,-9.40824 15.43437,-10.72423 15.43658,-10.90292 15.10362,-11.49894 15.64284,-11.74731 15.45623,-11.80774 14.89681,-12.24192 14.76061,-13.23643 15.61703,-13.3739 16.05435,-13.83995 16.1071,-14.33291 16.64259,-16.26278 16.52475,-16.50577 16.06219,-16.02789 18.17116,-16.19354 18.94203,-16.53949 19.38191,-16.28629 19.53273,-16.46858 19.42866,-16.19995 20.20925,-16.48839 20.72809,-16.53293 20.55799,-16.6788 20.67878,-16.84644 21.26954,-17.05185 20.77416,-16.91926 21.33035,-13.00176 21.33081,-13.05887 23.0585,-12.75983 23.38755,-12 23.45452,-12.00389 25.99864,-8.674157 25.99761,-8.673868 27.29807)))
+MULTIPOLYGON(((57.60295 -19.98763,57.72297 -20.43411,57.30263 -20.47056,57.60295 -19.98763)))
+MULTIPOLYGON(((73.24704 6.986212,73.31384 6.90269,73.21363 6.819168,73.24704 6.986212)),((73.78156 -0.380253,73.91519 -0.413662,73.83167 -0.48048,73.78156 -0.380253)),((73.63122 1.924907,73.64793 1.858089,73.59781 1.82468,73.5477 1.891498,73.63122 1.924907)),((73.41406 5.716712,73.48088 5.616486,73.38065 5.599782,73.41406 5.716712)),((73.5644 4.630949,73.63122 4.564132,73.5477 4.48061,73.5644 4.630949)),((73.5477 0.120867,73.63122 0.137571,73.63122 0.003936,73.5477 0.120867)),((73.1134 6.919394,73.16352 6.852577,73.06329 6.78577,73.1134 6.919394)),((73.36395 -0.83126,73.38065 -0.931487,73.28045 -0.898078,73.36395 -0.83126)),((73.04659 7.069734,73.16352 7.103142,73.16352 7.036325,73.04659 7.069734)),((73.16352 -0.647512,73.26375 -0.680921,73.19693 -0.731034,73.16352 -0.647512)),((73.71474 2.375914,73.74815 2.292392,73.66463 2.292392,73.71474 2.375914)),((73.48088 1.791272,73.49758 1.724454,73.41406 1.640932,73.48088 1.791272)),((73.48088 -0.647512,73.5477 -0.647512,73.49758 -0.747739,73.48088 -0.647512)),((73.5644 2.559651,73.63122 2.542947,73.59781 2.459425,73.5644 2.559651)),((73.49758 3.010658,73.5644 2.993954,73.5477 2.910432,73.49758 3.010658)),((73.84837 2.125348,73.89849 2.091939,73.81496 2.041826,73.84837 2.125348)),((73.58111 0.521761,73.68134 0.571874,73.64793 0.505057,73.58111 0.521761)),((72.79602 2.743399,72.91296 2.726695,72.86284 2.693286,72.79602 2.743399)))
+MULTIPOLYGON(((32.95351 -9.401445,33.93895 -9.711681,34.0363 -9.49193,34.30602 -9.740206,34.53863 -10.05235,34.63319 -11.1177,34.95793 -11.57134,34.64264 -11.58251,34.41465 -12.19816,34.52367 -13.35815,35.08227 -13.68788,35.91682 -14.89119,35.81857 -16.02424,35.40392 -16.12876,35.14883 -16.55797,35.30424 -17.11892,35.09425 -17.123,35.15962 -16.84059,34.25424 -15.90769,34.60411 -15.2672,34.5158 -14.56037,34.3589 -14.38926,33.68045 -14.60495,33.20901 -14.00362,33.02915 -14.04606,32.67395 -13.60776,33.0166 -13.21101,33.01505 -12.65771,33.54823 -12.35774,33.26135 -12.14225,33.22755 -11.42278,33.40601 -11.16108,33.2459 -10.89392,33.70504 -10.56948,32.95351 -9.401445)))
+MULTIPOLYGON(((-112.2979 29.21396,-113.0753 30.66136,-113.1236 31.23038,-114.956 31.91462,-114.7782 31.65857,-114.8879 31.1645,-114.6643 30.20063,-113.6344 29.27282,-113.5213 28.89904,-112.8416 28.4421,-112.7692 27.86483,-111.9514 27.09634,-111.7618 26.55508,-111.8496 26.8779,-111.5661 26.70953,-111.301 25.77688,-110.6538 24.80308,-110.6074 24.25615,-110.3103 24.1663,-110.2412 24.35156,-109.4027 23.46491,-109.5213 23.1222,-110 22.8937,-110.3254 23.57928,-111.7797 24.54576,-112.1637 24.90137,-112.169 24.92215,-112.1769 24.95252,-112.1536 24.97824,-112.16 25.16634,-112.1881 25.98791,-113.2353 26.78338,-113.1632 26.99011,-113.263 26.75141,-113.5997 26.71311,-115.0034 27.71741,-115.0786 27.8477,-114.3144 27.87504,-114.1031 27.60114,-113.9136 27.71301,-114.1413 27.72984,-114.166 27.9437,-114.1692 27.94229,-114.0947 28.55332,-114.9635 29.37366,-115.697 29.75217,-116.0529 30.78753,-116.3307 30.95913,-116.6818 31.54971,-116.6073 31.84644,-117.1236 32.53462,-114.717 32.71676,-114.8062 32.49187,-111.0648 31.32881,-108.2059 31.33134,-108.2035 31.78346,-106.5211 31.77821,-104.921 30.60049,-104.5407 29.68035,-103.3844 29.02264,-103.1495 28.97568,-102.6814 29.72309,-102.3142 29.87947,-101.4006 29.76785,-99.51466 27.56314,-99.08967 26.40093,-97.37753 25.83655,-97.15015 25.94769,-97.42307 25.34037,-97.76283 25.36551,-97.73684 24.77798,-97.81365 24.55242,-97.77628 24,-97.6758 24.51143,-97.79669 22.20284,-97.33157 21.57589,-97.41952 21.21629,-97.16896 20.67244,-96.44569 19.86379,-95.93621 18.88182,-94.7949 18.52908,-94.48807 18.14931,-91.99119 18.72085,-91.5381 18.44302,-91.22063 18.74888,-91.49359 18.81255,-90.72387 19.37765,-90.32948 21.01364,-88.59792 21.53474,-87.09799 21.60572,-86.73654 21.1376,-87.41928 20.22597,-87.46362 19.78516,-87.72881 19.67433,-87.65773 19.49923,-87.40913 19.58409,-87.6864 19.24184,-87.45303 19.3207,-87.83448 18.17945,-88.07471 18.49161,-88.03753 18.86504,-88.3055 18.48507,-88.51293 18.46227,-88.84317 17.8665,-89.0387 18.00308,-89.14696 17.8095,-90.98163 17.81522,-90.99025 17.2585,-91.43755 17.25004,-90.38557 16.40808,-90.42336 16.09669,-91.72518 16.0801,-92.21432 15.26208,-92.05993 15.07075,-92.24149 14.53962,-93.85432 16,-94.72378 16.19503,-94.58032 16.31958,-94.8553 16.43175,-95.06493 16.28778,-94.82529 16.2805,-95.10141 16.23738,-94.75913 16.20415,-96.23109 15.67138,-97.79529 15.96518,-98.77 16.54596,-99.69207 16.70072,-101.0581 17.26851,-101.9591 17.96553,-103.4816 18.31849,-103.9728 18.86589,-105.0295 19.37303,-105.6995 20.39069,-105.2608 20.57193,-105.5466 20.79482,-105.2436 21.06258,-105.1953 21.45812,-105.6662 22.01355,-105.8376 22.67778,-106.977 23.92292,-108.0076 24.6607,-108.0709 25.09311,-108.7889 25.38165,-108.6973 25.52733,-109.3975 25.63853,-109.2658 26.50163,-109.7904 26.72504,-109.9626 27.10275,-110.5221 27.29557,-110.5075 27.86071,-111.1019 27.93795,-112.2875 29.19471,-112.2862 29.22792,-112.2979 29.21396)),((-112.2979 29.21396,-112.2875 29.19471,-112.3058 28.74643,-112.581 28.87606,-112.2979 29.21396)))
+MULTIPOLYGON(((117.6765 5.97528,117.6747 5.971512,117.9811 6.066454,118.1282 5.847018,117.9425 5.655738,118.3515 5.822273,119.205 5.426463,119.2635 5.210077,118.1249 4.878731,118.4181 4.644211,118.5428 4.349458,117.977 4.222434,117.6489 4.415679,117.5858 4.17752,117.2388 4.373793,115.8762 4.389797,115.5595 3.917913,115.5618 3.159515,115.0891 2.823322,115.2373 2.511148,114.8113 2.264977,114.8729 1.922119,114.5663 1.433472,113.9698 1.446303,113.6582 1.210515,112.9738 1.407019,112.9943 1.578012,112.4924 1.577371,111.8283 0.987671,111.2186 1.088406,110.5719 0.855222,109.6592 1.619646,109.6417 2.081388,109.9139 1.691883,110.2983 1.653294,110.3332 1.807999,110.6513 1.428853,110.7839 1.581164,111.3176 1.338974,110.9865 1.568877,111.3488 2.131454,111.1572 2.156086,111.2116 2.422667,111.3576 2.383279,111.4584 2.488615,111.6337 2.855534,113.017 3.17411,114.0715 4.588868,114.6437 4.006352,114.8755 4.359025,114.7719 4.728659,115.0064 4.891522,115.0336 4.797955,115.0898 4.385616,115.3376 4.305109,115.1529 4.908361,115.5131 5.033322,115.6052 5.227926,115.3665 5.389658,115.5952 5.630774,115.8733 5.581436,116.7415 7.032845,116.7812 6.563479,117.1325 7.009437,117.2941 6.61086,117.7346 6.428298,117.6765 5.97528)),((100.1211 6.422595,100.2888 6.7026,100.8171 6.436154,100.8508 6.231196,101.1082 6.253929,100.9842 5.799289,101.1384 5.610009,101.584 5.933687,101.8259 5.731784,102.0921 6.243936,103.1023 5.404828,103.4439 4.780984,103.4437 2.911093,103.8276 2.581701,104.2891 1.367801,103.9711 1.621413,103.9434 1.415829,103.7047 1.331343,103.5108 1.262738,103.3437 1.55732,101.2889 2.955697,101.2439 3.352402,100.5609 4.306905,100.6641 4.684416,100.362 5.085588,100.3516 5.972256,100.1211 6.422595)))
+MULTIPOLYGON(((34.95793 -11.57134,35.64745 -11.59284,35.83432 -11.40724,36.18958 -11.71623,37.02496 -11.56913,37.45184 -11.73482,37.92789 -11.29055,38.48034 -11.41681,39.24163 -11.17998,40.39444 -10.51768,40.64163 -10.69449,40.35606 -11.33262,40.46063 -12.50205,40.62346 -12.78335,40.40431 -12.95219,40.58856 -12.96936,40.52758 -14.16551,40.72264 -14.19849,40.62603 -14.5654,40.8135 -14.40475,40.8381 -14.82999,40.61849 -14.85911,40.77884 -14.99763,40.49853 -15.1752,40.67694 -15.25073,40.55643 -15.49374,39.78497 -16.28246,39.85743 -16.4415,39.06789 -17.00679,38.06876 -17.18328,37.36107 -17.6303,36.31637 -18.87488,35.69125 -19.11693,34.89563 -19.84631,34.64858 -19.65181,34.72627 -20.54937,34.72777 -20.55013,35.1021 -20.93992,34.98402 -21.11549,35.34348 -22.1861,35.54524 -22.19043,35.60454 -22.92652,35.33002 -23.67928,35.34169 -23.99519,35.55148 -23.79219,35.50026 -24.11318,35.13178 -24.6007,33.21906 -25.34035,32.45242 -25.97557,32.67982 -26.39493,32.96269 -26.08695,32.89597 -26.85684,32.13366 -26.83497,31.98213 -25.95205,31.99045 -24.31326,31.31127 -22.41774,32.48002 -21.32811,32.48854 -20.62747,33.01094 -20.01879,32.70041 -18.94058,33.05502 -18.36191,33.04526 -17.34697,32.83567 -16.92076,32.97855 -16.70721,31.24465 -16,30.42459 -16,30.41826 -15.61757,30.21732 -14.99723,33.20901 -14.00362,33.68045 -14.60495,34.3589 -14.38926,34.5158 -14.56037,34.60411 -15.2672,34.25424 -15.90769,35.15962 -16.84059,35.09425 -17.123,35.30424 -17.11892,35.14883 -16.55797,35.40392 -16.12876,35.81857 -16.02424,35.91682 -14.89119,35.08227 -13.68788,34.52367 -13.35815,34.41465 -12.19816,34.64264 -11.58251,34.95793 -11.57134)))
+MULTIPOLYGON(((23.42815 -17.63928,24.72062 -17.50023,25.2567 -17.78792,24.19486 -18.01912,23.61286 -18.50405,23.29662 -17.99752,20.99883 -18.31788,21.00174 -22.00384,20 -22.00178,20.00024 -24.75299,19.99676 -28.43311,19.56238 -28.53189,19.17275 -28.95783,18.17901 -28.91589,17.40949 -28.72295,17.37844 -28.29535,17.08332 -28.03777,16.47328 -28.58356,15.70359 -27.99036,15.29395 -27.31786,14.82919 -25.74554,14.87734 -25.0899,14.45738 -24.0687,14.44809 -23.148,14.72931 -23.23087,14.66691 -22.64301,14.52676 -22.68227,12.60813 -19.15822,12.02966 -18.48881,11.73316 -17.81028,11.75755 -17.25208,13.37857 -16.97535,13.95689 -17.43337,18.42207 -17.39404,18.91064 -17.8228,20.81847 -18.04176,23.42815 -17.63928)))
+MULTIPOLYGON(((165.8344 -21.38717,166.9273 -22.0894,167.0057 -22.32611,166.768 -22.3962,164.9405 -21.35858,163.9879 -20.10739,165.2365 -20.78086,165.8344 -21.38717)),((167.045 -20.94816,167.1951 -20.67421,167.4529 -21.06541,167.3363 -21.18629,167.045 -20.94816)),((168.02 -21.65969,167.8031 -21.37832,168.1286 -21.44526,168.02 -21.65969)))
+MULTIPOLYGON(((11.97955 23.52503,13.48059 23.18613,14.18932 22.64448,14.99587 23.00189,15.19843 21.49131,15.99564 20.34847,15.72462 19.76368,15.50555 16.89787,13.47883 14.46007,13.63455 13.71068,12.87706 13.49705,12.47672 13.06241,11.52219 13.35306,10.66923 13.3569,10.06089 13.20342,9.650239 12.80361,8.969789 12.83305,7.82488 13.33957,6.934086 12.98861,6.433632 13.59198,5.526512 13.89201,4.464738 13.70343,4.130281 13.47263,4.096463 12.99607,3.642556 12.52015,3.605074 11.69697,2.805825 12.41742,2.387346 12.24222,2.405395 11.90161,2.059467 12.35238,2.274273 12.42838,2.098688 12.72653,1.570111 12.6313,0.992786 13.05922,0.991821 13.37092,1.280971 13.35863,0.398786 14.02787,0.167995 14.52335,0.229351 14.98967,0.956915 14.97472,1.32403 15.26515,3.527506 15.34149,3.872143 15.69188,4.076758 16.91231,4.241203 16.9877,4.242888 19.13672,5.817081 19.43771,7.445678 20.84247,11.97955 23.52503)))
+MULTIPOLYGON(((13.63455 13.71068,14.08543 13.07806,14.17308 12.4051,14.6782 12.16546,14.63724 11.5288,13.98038 11.30761,13.69474 10.96683,13.21933 9.542589,12.85477 9.384972,12.79066 8.759627,12.23703 8.428885,11.84693 7.079654,11.35264 6.502454,11.10094 6.541077,10.57661 7.161691,10.49373 6.899972,10.1549 7.03955,9.784036 6.796423,9.706893 6.51328,8.841041 5.824076,8.816417 5.184829,8.527482 4.726633,8.288529 4.853129,8.279236 4.538615,6.084265 4.277556,5.621665 4.61497,5.38742 5.391228,4.529322 6.304786,2.709604 6.36882,2.780915 9.065207,3.088169 9.101578,3.850976 10.59981,3.495874 11.29233,3.605074 11.69697,3.642556 12.52015,4.096463 12.99607,4.130281 13.47263,4.464738 13.70343,5.526512 13.89201,6.433632 13.59198,6.934086 12.98861,7.82488 13.33957,8.969789 12.83305,9.650239 12.80361,10.06089 13.20342,10.66923 13.3569,11.52219 13.35306,12.47672 13.06241,12.87706 13.49705,13.63455 13.71068)))
+MULTIPOLYGON(((-87.31461 12.98241,-86.70654 13.29538,-86.76284 13.77312,-86.34616 13.76178,-86.01214 14.07706,-85.75548 13.8319,-85.18357 14.25056,-84.89904 14.80938,-84.46906 14.61453,-83.15781 14.99208,-83.57407 13.39966,-83.64787 11.6028,-83.87389 11.37332,-83.69353 10.93761,-83.92849 10.70754,-84.67788 11.07886,-84.91411 10.94132,-85.60976 11.21682,-85.69843 11.07388,-87.68703 12.90361,-87.57708 13.08299,-87.31461 12.98241)))
+MULTIPOLYGON(((4.222384 51.33163,4.201276 51.38792,4.13561 51.36447,4.025384 51.40903,4.016003 51.48642,4.091051 51.43013,4.213003 51.42075,4.288051 51.46297,4.234109 51.4958,4.048835 51.52864,3.971442 51.58492,4.058217 51.58492,4.156717 51.58492,4.156717 51.65059,4.255217 51.61776,4.344337 51.63886,4.419384 51.6717,4.574171 51.68342,4.705504 51.70453,4.81573 51.72564,4.750063 51.73736,4.541337 51.71626,4.353717 51.72564,4.255217 51.75847,4.069943 51.83586,3.99255 51.95547,4.180169 52.04459,4.365444 52.18765,4.550717 52.45031,4.67267 52.71298,4.738337 52.94281,4.804003 52.94281,4.881396 52.86542,4.968171 52.89826,5.054944 52.90998,5.111231 52.84431,5.111231 52.77161,5.162826 52.73643,5.228492 52.74582,5.287123 52.74112,5.287123 52.69188,5.233183 52.64497,5.125301 52.61683,5.071361 52.64262,5.015075 52.61214,5.080742 52.49018,5.01742 52.44328,5.080742 52.42921,4.956444 52.35885,5.031492 52.33071,5.120612 52.31898,5.183933 52.30257,5.244909 52.30491,5.341063 52.26739,5.399694 52.23924,5.523993 52.25566,5.566207 52.3096,5.676433 52.36354,5.793696 52.41279,5.861708 52.47611,5.859363 52.53709,5.796041 52.57227,5.849981 52.59806,5.645946 52.60979,5.58966 52.64262,5.592005 52.75989,5.6436 52.80914,5.716303 52.8279,5.645946 52.84431,5.561516 52.82555,5.484123 52.84197,5.413766 52.83025,5.348099 52.87715,5.404385 52.89826,5.40673 52.9991,5.383279 53.07415,5.448946 53.21721,5.580279 53.30398,5.845291 53.36965,5.976624 53.38138,6.140792 53.39076,6.183005 53.32509,6.206459 53.39076,6.370625 53.40248,6.764627 53.47988,6.851399 53.40248,6.928792 53.33682,7.048399 53.28288,7.158627 53.25004,7.179733 53.17265,7.137519 53.12809,7.179733 52.98738,7.048399 52.87715,7.060126 52.62386,6.973351 52.63559,6.698958 52.64732,6.720066 52.56992,6.675507 52.52536,6.7529 52.47142,6.872507 52.42686,6.994459 52.48315,7.060126 52.38465,7.015567 52.29553,7.060126 52.25331,6.884233 52.13136,6.731792 52.09853,6.687233 52.02114,6.80684 52.01176,6.851399 51.94609,6.797459 51.90153,6.666125 51.90153,6.424565 51.83586,6.281507 51.85697,6.140792 51.90153,6.150171 51.83586,5.953171 51.83586,5.953171 51.74909,6.018838 51.70453,6.117339 51.6928,6.107958 51.61776,6.227565 51.51925,6.239291 51.42075,6.194732 51.34336,6.084505 51.25424,6.096231 51.1792,6.173625 51.21203,6.194732 51.14636,5.986005 51.03613,5.943792 51.08069,5.878123 51.03613,5.899231 50.97047,6.030564 50.97047,6.030564 50.9048,6.107958 50.9048,6.096231 50.83913,6.030564 50.82741,6.025336 50.75425,5.821838 50.76174,5.678778 50.76174,5.645946 50.86024,5.767898 50.93763,5.800732 51.05724,5.878123 51.13464,5.800732 51.16747,5.711612 51.18858,5.570898 51.21203,5.592005 51.27769,5.514612 51.31991,5.448946 51.26597,5.219111 51.22141,5.20973 51.33163,5.132337 51.26597,5.06667 51.36447,5.099504 51.44186,5.022111 51.48642,4.968171 51.3973,4.771171 51.3973,4.848564 51.48642,4.759444 51.48642,4.67267 51.42075,4.517883 51.40903,4.541337 51.4747,4.38655 51.46297,4.442835 51.35274,4.311502 51.38792,4.222384 51.33163)),((5.455981 52.55116,5.514612 52.5582,5.573243 52.59103,5.634219 52.59103,5.73272 52.57462,5.791351 52.56758,5.854672 52.52771,5.8406 52.46908,5.756171 52.41279,5.674088 52.39403,5.573243 52.37058,5.540409 52.31664,5.507576 52.26504,5.397349 52.25097,5.294159 52.30725,5.198003 52.33305,5.134682 52.32836,5.153444 52.39403,5.411421 52.49488,5.455981 52.55116)),((4.222384 51.33163,4.123883 51.28942,3.983169 51.25659,3.887015 51.21203,3.753336 51.2261,3.720502 51.27535,3.553989 51.3246,3.474252 51.2988,3.476597 51.23314,3.338228 51.27769,3.31712 51.33633,3.369472 51.37461,3.467216 51.41137,3.600895 51.37854,3.718157 51.34336,3.840109 51.34805,3.924538 51.36447,3.952681 51.41607,4.011312 51.39496,4.072289 51.35509,4.128574 51.32225,4.222384 51.33163)),((3.40155 51.54036,3.500049 51.58258,3.56337 51.59665,3.619656 51.57554,3.659526 51.5216,3.720502 51.51456,3.781478 51.54036,3.887015 51.54271,3.971442 51.52864,4.016003 51.50753,3.999586 51.43717,3.9433 51.46062,3.879979 51.44186,3.854181 51.38792,3.753336 51.39027,3.65249 51.46062,3.556334 51.44421,3.483632 51.48173,3.429692 51.51456,3.40155 51.54036)),((3.973788 51.84524,4.037109 51.81241,4.123883 51.7913,4.196586 51.76081,4.269289 51.71391,4.360754 51.69515,4.313848 51.65293,4.248181 51.65293,4.177824 51.67873,4.119193 51.69984,4.044145 51.71391,4.023039 51.7913,3.933919 51.80537,3.870598 51.77958,3.847145 51.83821,3.973788 51.84524)),((3.793204 51.74674,3.933919 51.73502,3.985514 51.68577,4.076979 51.667,4.116848 51.65293,4.023039 51.62714,3.931574 51.6201,3.865907 51.6459,3.826037 51.6928,3.76037 51.69984,3.692358 51.66935,3.647799 51.70922,3.713466 51.73502,3.793204 51.74674)),((4.806348 53.12574,4.879051 53.175,4.92361 53.13278,4.91423 53.0718,4.86967 53.0249,4.801658 52.99676,4.747718 52.97096,4.72192 53.0249,4.754754 53.0765,4.806348 53.12574)),((5.216766 53.39545,5.507576 53.4447,5.559171 53.43766,5.493505 53.41655,5.460672 53.39545,5.387969 53.3931,5.336373 53.37669,5.240219 53.36027,5.183933 53.33682,5.165171 53.36027,5.216766 53.39545)),((3.596204 51.60134,3.720502 51.60134,3.840109 51.61306,3.877634 51.55443,3.774442 51.56147,3.718157 51.52864,3.645454 51.56147,3.596204 51.60134)),((5.636564 53.46346,5.728029 53.44939,5.852327 53.46112,5.941446 53.45877,5.88985 53.44001,5.800732 53.43063,5.716303 53.43063,5.674088 53.41421,5.622492 53.42828,5.60373 53.45408,5.636564 53.46346)),((5.008039 53.28757,5.050254 53.30398,5.094813 53.31102,5.120612 53.28991,5.001003 53.2688,4.982243 53.24066,4.932992 53.20548,4.862634 53.19845,4.890778 53.22659,4.970516 53.2688,5.008039 53.28757)),((6.138446 53.49395,6.27447 53.50567,6.307303 53.49629,6.236946 53.46815,6.154862 53.46581,6.12672 53.44939,6.100922 53.46581,6.138446 53.49395)),((6.419876 53.54085,6.483197 53.51974,6.42691 53.51506,6.396423 53.53382,6.419876 53.54085)))
+MULTIPOLYGON(((21.84207 70.15152,21.97319 70.33302,22.2882 70.28674,22.21218 70.13094,22.55299 70.11597,22.35402 70.26537,22.82551 70.11418,22.99043 70.13941,23.14568 69.96069,23.01921 69.92293,23.46515 69.97898,23.18046 70.2192,23.86261 70.49794,24.32043 70.45166,24.09572 70.53973,24.29384 70.68726,24.68787 70.62997,24.2305 70.83685,24.83872 70.9241,25.90773 70.86875,25.04135 70.50842,25.27655 70.47153,24.93924 70.23252,24.98052 70.04855,26.6761 70.96709,26.68946 70.75258,26.32351 70.65202,26.63604 70.68196,26.4777 70.36253,27.10075 70.46803,26.96149 70.58899,27.28107 70.58844,27.11594 70.74791,27.66703 70.80116,27.10248 70.93214,27.54397 70.95575,27.64564 71.1329,28.54985 70.96791,27.8016 70.79721,28.13842 70.73431,27.63552 70.62026,28.31022 70.69151,27.86082 70.43165,28.52319 70.45166,28.52629 70.73009,28.83331 70.8766,31.05219 70.36028,30.15698 70.0697,28.74352 70.16062,29.67748 69.97577,29.35053 69.86671,29.74806 69.89113,29.48698 69.6563,30.11405 69.68554,30.17638 69.88417,30.37833 69.84275,30.32192 69.66548,30.83539 69.78523,30.92936 69.57227,30.11127 69.66338,30.10989 69.46273,28.92693 69.05738,28.82457 69.2292,29.33293 69.49054,27.96325 70.09605,25.97886 69.71546,25.70955 69.25553,25.78341 69.02026,24.90355 68.55798,23.95907 68.83519,23.16076 68.62904,22.37394 68.72049,21.64404 69.27008,20.55732 69.0625,20.06123 69.05964,20.34719 68.81397,19.97152 68.56113,20.2639 68.49102,19.95874 68.35111,18.41782 68.58438,18.12506 68.53831,18.15558 68.20344,17.90159 67.96887,17.28317 68.12019,16.74116 67.92086,16.10075 67.43378,16.40015 67.04433,15.37616 66.48485,15.49498 66.2817,14.51744 66.13348,14.51194 65.30472,13.63731 64.58576,14.10011 64.46725,14.13239 64.1923,13.95622 64.01196,12.68735 63.98003,11.97954 63.26993,12.22478 63.00294,12.05315 62.61018,12.31056 62.26601,12.13189 61.72578,12.87404 61.36028,12.67642 61.06058,12.22046 61.01215,12.6107 60.42669,12.4589 60.05256,11.84861 59.839,11.65688 58.90471,11.20772 59.08662,10.74242 59.21956,10.58851 59.76298,10.79186 59.84684,10.53784 59.89065,10.51422 59.51633,10.21649 59.74139,10.5291 59.30939,10.31263 59.05987,9.517869 59.1284,9.753135 58.99102,9.071466 58.75585,9.207537 58.66503,8.242558 58.12066,8.038828 58.23193,7.058003 57.97793,6.876623 58.19601,6.557533 58.11429,6.914882 58.28115,6.66843 58.26048,6.050154 58.37374,5.488884 58.75281,5.580944 59.0373,5.745366 58.85494,6.287653 58.843,6.144905 58.95353,5.891702 59.08628,6.555896 59.31867,6.021346 59.34036,6.609819 59.55851,6.14249 59.49675,5.865594 59.54847,5.669926 59.39749,5.872622 59.33651,5.645582 59.26267,5.377397 59.42097,5.354337 59.26957,5.221019 59.52766,6.371719 59.87321,5.664391 59.85282,6.309535 60.12941,6.07875 60.19475,6.353264 60.36945,6.671223 60.40372,6.544109 60.07598,6.687149 60.38522,7.103882 60.48833,6.220839 60.46949,5.825242 59.98647,5.581362 60.16747,5.762334 60.39264,5.443075 60.13733,5.248583 60.21247,5.299051 60.52531,5.532582 60.43325,5.544197 60.43011,5.708794 60.65871,5.660356 60.66037,5.582963 60.66302,5.43147 60.65918,5.272727 60.76728,5.588912 60.87415,5.273562 60.81738,5.249347 60.82107,5.017087 60.96661,5.195727 60.97346,5.55893 61.06534,5.695195 61.08549,5.791351 61.09957,5.833564 61.07846,5.882814 61.11833,5.98366 61.11129,6.039946 61.08315,6.185351 61.09488,6.270331 61.03673,6.413271 61.00889,6.638805 61.17937,7.008846 61.06535,6.846293 60.88282,7.127317 60.86863,7.03549 61.10806,7.704967 61.23224,7.328164 61.29511,6.969072 61.16276,6.595055 61.21049,6.748674 61.41132,6.475671 61.11507,6.30256 61.10785,6.204113 61.1582,6.093886 61.13709,5.993042 61.15585,5.793696 61.1582,5.638909 61.13943,5.549871 61.09982,4.986366 61.28486,5.340508 61.36329,4.980358 61.41684,5.4542 61.58797,5.007262 61.60167,5.408236 61.64253,4.968744 61.72462,5.426607 61.91809,5.982037 61.84818,5.924161 61.68971,6.032152 61.84679,6.838664 61.86786,5.140533 61.95007,5.141387 61.95128,5.430501 62.01894,5.114 62.10267,5.226726 62.20879,5.45742 62.00763,5.621748 62.06984,5.4958 62.20156,6.310968 62.06096,5.937289 62.22519,6.332246 62.38054,6.556844 62.10916,6.658926 62.19667,6.404811 62.36027,6.717857 62.45584,7.011213 62.29262,6.884479 62.09021,7.209925 62.10387,6.968877 62.11902,7.040806 62.28042,7.423234 62.26151,6.65845 62.47693,6.269083 62.58661,7.564664 62.50094,7.787214 62.57508,7.407303 62.63333,8.147413 62.68806,6.987703 62.72311,7.237048 62.81256,6.897095 62.91248,7.403111 63.00898,7.500012 62.938,7.555977 62.9989,8.001214 62.96955,8.102819 63.12164,8.306108 62.85692,8.695156 62.82569,8.175073 63.12996,8.484628 63.16019,8.969247 63.20753,8.615882 63.32793,8.883061 63.41566,8.9576 63.42763,8.985616 63.43121,9.436234 63.38131,9.15294 63.49339,9.747838 63.65078,9.982463 63.44253,9.8304 63.32309,10.89838 63.45858,10.72612 63.62346,11.48346 63.79624,11.07235 63.86567,11.4907 64.00929,11.23665 64.03039,11.38492 64.1105,10.60142 63.81313,10.94973 63.911,10.94455 63.74199,10 63.48926,9.809731 63.66524,10.12201 63.78666,9.561911 63.77358,10.21547 63.92772,9.95276 63.91139,10.12348 63.96981,9.95577 63.95246,10.03705 64.1037,10.67308 64.361,10.51963 64.44307,10.83173 64.37196,10.64976 64.45038,10.95751 64.61182,11.33908 64.4626,11.21798 64.31768,11.6893 64.46881,11.44312 64.51115,11.78494 64.59402,11.45601 64.59724,11.84772 64.79591,11.6978 64.84655,11.26072 64.7318,11.7552 65.01889,12.38212 65.17827,12.25053 65.23299,12.41924 65.36651,11.98542 65.23069,12.28498 65.58868,12.76865 65.46489,12.36043 65.63313,12.65575 65.65398,12.66485 65.92242,13.2088 65.8272,12.92165 66.00634,12.66613 66.03586,12.84315 66.13247,13.82388 66.14137,13.60046 66.23106,14.17114 66.32902,13.04136 66.17626,13.56458 66.30881,13.00419 66.33389,13.16111 66.46726,12.96768 66.53413,13.52345 66.58945,13.16226 66.66192,13.55189 66.72039,13.98573 66.80309,13.49166 66.95868,14.22807 66.99952,14.50419 67.24226,15.47197 67.1009,15.17461 67.33096,14.3141 67.2567,15.00751 67.5779,15.77652 67.37537,15.51575 67.45078,15.89476 67.58096,15.21906 67.55827,15.46124 67.59695,15.1717 67.6355,15.30596 67.74119,15.84335 67.69236,15.38452 67.88085,15.0626 67.78135,14.75179 67.81334,15.00795 67.91244,15.98013 67.97713,15.28366 68.02984,16.05567 68.26249,16.21682 67.89803,16.51566 67.82095,16.2466 67.90721,16.184 68.02721,16.38955 67.96309,16.73819 68.08881,16.28369 68.11938,16.6081 68.187,16.1689 68.32867,16.81884 68.15864,16.27487 68.37633,17.18027 68.39504,17.35028 68.20119,17.30406 68.42419,17.91361 68.42042,16.50356 68.44904,16.59055 68.63325,17.38981 68.73111,17.80978 68.74881,17.47015 68.83342,17.85003 68.86791,17.4722 68.99735,18.15218 69.15166,17.96909 69.23325,18.15841 69.46892,18.4974 69.23608,18.99115 69.29081,18.44538 69.4445,19.01626 69.47414,19.24318 69.52424,18.96236 69.54367,19.11832 69.74664,19.73742 69.80253,19.48765 69.40062,19.73866 69.60735,20.1421 69.58543,19.77212 69.68628,20.34433 69.95657,20.35719 69.61816,19.92563 69.27035,20.42307 69.58904,20.91118 69.47294,20.46038 69.76516,20.60266 69.81219,21.05739 69.96253,20.84925 69.85654,21.12836 69.80554,21.33885 69.90916,21.23839 70.0144,22.1411 69.74796,21.88229 69.84032,22.06984 70.03361,21.77377 70.04034,22.06465 70.12924,21.84207 70.15152)),((16.23835 68.5464,16.23503 68.54613,15.65811 68.31426,15.32005 68.36246,15.57218 68.50522,14.97887 68.31692,15.35949 68.50402,15.20224 68.57796,15.62283 68.62086,15.43368 68.71577,15.70119 68.69968,15.45875 68.75798,15.63318 68.95781,15.96381 68.89573,15.7635 68.74171,16.00945 68.77895,15.7222 68.53527,16.26578 68.74454,16.08812 68.82629,16.25584 68.92373,16.59678 68.83749,16.51619 68.56886,16.23835 68.5464)),((17.86936 69.45183,18.06351 69.49537,17.8777 69.31853,18.00643 69.1969,16.77182 69.10138,17.20649 69.20067,16.8796 69.20518,17.18257 69.35673,16.86032 69.38138,17.67585 69.47153,17.485 69.60749,17.86936 69.45183)),((22.59373 70.64883,23.50484 70.78535,22.92434 70.53392,22.07697 70.4828,22.3043 70.60646,21.95986 70.66729,22.59373 70.64883)),((23.16913 70.27516,22.81106 70.41317,23.56939 70.62529,23.63326 70.44396,23.16913 70.27516)),((19.14832 70.07784,19.68089 69.97761,19.07579 69.79224,18.70502 69.92783,19.14832 70.07784)),((18.92441 69.82628,19.05021 69.76727,18.74888 69.56024,18.00589 69.56647,18.92441 69.82628)),((16.09279 69.18268,15.4134 68.90026,15.84895 69.25932,16.12759 69.32863,16.09279 69.18268)),((14.2677 68.28825,13.45181 68.09159,13.6646 68.31562,14.2677 68.28825)),((15 68.38623,14.19797 68.18076,14.41151 68.39838,15 68.38623)),((25.98209 71.14107,25.90011 71.01073,26.21401 71.06045,26.07679 70.98218,25.24771 71.03871,25.98209 71.14107)),((21.8353 70.1522,21.17303 70.21849,21.55424 70.32643,21.8353 70.1522)),((11.12816 64.96505,11.37226 64.94659,11.14611 64.82578,10.74204 64.86393,11.12816 64.96505)))
+MULTIPOLYGON(((81.05566 30.20446,81.19847 30.02989,81.40681 30.41374,82.14826 30.32864,82.19776 30.09251,83.23838 29.58295,83.54865 29.19856,84.09618 29.27633,84.15152 28.88498,84.85825 28.56832,85.1314 28.67791,85.11485 28.33332,85.49779 28.32973,86.04537 27.90898,86.16701 28.17015,86.41976 27.9102,86.7031 28.10784,87.13796 27.82401,88.13596 27.87923,87.9837 27.12124,88.18853 26.76687,88.02405 26.36578,87.32799 26.35671,87.06647 26.58938,86.72475 26.42732,86.34086 26.6219,85.85046 26.56794,85.62429 26.88045,85.20665 26.76708,84.64421 27.04913,84.62772 27.32822,84.1551 27.51991,83.31216 27.33275,82.76105 27.50681,82.70869 27.7071,81.89027 27.85854,80.0665 28.83346,80.36317 29.74552,81.05566 30.20446)))
+MULTIPOLYGON(((173.9964 -41.19994,173.9924 -40.97184,174.3091 -40.99643,173.9084 -41.27447,174.1897 -41.23452,174.03 -41.44682,174.2724 -41.74858,173.2549 -42.9416,172.6731 -43.19185,172.8073 -43.58964,172.6532 -43.64121,173.0494 -43.6531,173.1068 -43.83355,172.3805 -43.8531,171.4624 -44.2086,170.5057 -45.88421,170.7407 -45.87521,170.1664 -46.03535,169.8104 -46.44553,169.3551 -46.63894,168.3276 -46.62592,168.3372 -46.39865,167.7338 -46.36562,167.6788 -46.13684,166.6541 -46.20186,166.9069 -45.92653,166.5555 -46.0769,166.7539 -45.94624,166.4405 -45.99981,166.4442 -45.81805,166.9687 -45.719,166.7124 -45.60304,167.0025 -45.48468,166.6618 -45.55541,166.8969 -45.43191,166.8359 -45.27074,167.0119 -45.36002,167.1845 -45.31486,166.97 -45.13329,167.814 -44.59441,168.3659 -44.00691,168.8066 -43.96864,170.7672 -42.9087,171.1402 -42.56164,171.4547 -41.75324,172.0582 -41.39113,172.1071 -40.88616,172.9104 -40.52041,172.6532 -40.65624,173.0605 -40.86075,173.0746 -41.27824,173.9737 -40.89411,173.7549 -41.26729,173.9964 -41.19994)),((174.3094 -36.30801,174.3664 -36.11094,174.2299 -36.26088,173.9713 -36.11866,174.1787 -36.33075,174.0383 -36.39416,173.0493 -35.18896,173.1573 -35.00779,172.6389 -34.47308,173.038 -34.40247,173.2464 -34.97886,173.3985 -34.78116,173.4103 -34.97341,174.0756 -35.11601,174.1067 -35.33955,174.3306 -35.17216,174.5901 -35.85564,174.462 -35.95218,174.7551 -36.32113,174.6783 -36.60498,174.8815 -36.8723,175.5585 -37.18783,175.3252 -36.47904,175.5318 -36.54259,175.6052 -36.7577,175.8139 -36.71889,175.6707 -36.88263,175.8243 -36.85992,176.1529 -37.63459,177.148 -37.99561,177.988 -37.53841,178.5509 -37.6825,178.2861 -38.52654,177.9391 -38.71741,177.9992 -39.11107,177.8618 -39.26913,177.6937 -39.05359,177.043 -39.19933,176.8686 -40.13,175.9584 -41.24759,175.2365 -41.61131,175.2044 -41.42995,174.8683 -41.41119,174.8864 -41.23567,174.6116 -41.28827,174.8501 -41.09486,175.244 -40.50157,175.1102 -40.03469,173.7513 -39.30873,174.5628 -38.83226,174.81 -38.0105,174.7645 -37.34124,174.1525 -36.47236,174.4451 -36.64529,174.3094 -36.30801)),((167.9923 -47.11349,167.4458 -47.26273,167.7847 -46.68311,168.1631 -46.89505,167.9174 -46.96764,168.2014 -46.92371,168.2191 -47.09335,167.9923 -47.11349)),((166.2163 -50.85637,165.8886 -50.83928,166.0643 -50.52962,166.2821 -50.5443,166.075 -50.71669,166.2163 -50.85637)))
+MULTIPOLYGON(((55.21152 22.69804,55.48066 23.9653,56.02393 24.07637,55.7797 24.23422,55.81068 24.87648,56.01702 24.96965,56.11956 24.73428,56.37507 24.97792,57.15146 23.95011,58.75342 23.51822,59.50596 22.54907,59.79465 22.53149,59.80586 22.22342,58.51667 20.41323,58.19778 20.40164,58.1912 20.61224,57.82123 20.1942,57.67968 19.67735,57.84337 19.00342,56.83932 18.77858,56.35007 17.91949,55.42701 17.81874,55.04304 17.02286,54.07638 16.99513,53.0783 16.64576,51.88201 18.57879,52.0007 19.00233,55 20.00092,55.66659 21.99673,55.21152 22.69804)),((56.08878 26.07641,56.36845 26.19224,56.2636 25.63005,56.08878 26.07641)))
+MULTIPOLYGON(((-81.75515 7.34421,-81.89146 7.516112,-81.74836 7.643628,-81.58934 7.326368,-81.75515 7.34421)))
+MULTIPOLYGON(((-75.2882 -0.093691,-75.10118 -0.163096,-74.48315 -0.697625,-73.38068 -1.800092,-73.19693 -2.301213,-71.14234 -2.36803,-70.20691 -2.635289,-70.59111 -3.854687,-69.95342 -4.230484,-71.10893 -4.372511,-72.34502 -4.773405,-72.89562 -5.136259,-73.16131 -6.48023,-73.74282 -6.897146,-73.69297 -7.315934,-73.9537 -7.348258,-73.98156 -7.553418,-72.94584 -8.990152,-73.19613 -9.418253,-72.36356 -9.490671,-72.16473 -10.00232,-71.28828 -9.995796,-70.4999 -9.431578,-70.61765 -11.00737,-69.56644 -10.95666,-68.6793 -12.49715,-68.96119 -12.85152,-69.07586 -13.6541,-68.84068 -14.21027,-69.3628 -14.80396,-69.12598 -15.25612,-69.41386 -15.62077,-69.23594 -16.14303,-68.81416 -16.33753,-69.64076 -17.28202,-69.46265 -17.50755,-69.799 -17.65035,-69.94788 -18.24803,-70.37419 -18.34973,-71.38322 -17.70824,-71.51504 -17.26545,-75.19878 -15.38405,-76.27729 -14.2076,-76.3952 -13.90756,-76.20631 -13.3999,-77.17233 -12.08666,-77.30103 -11.52143,-77.66255 -11.29718,-78.75967 -8.604612,-79.98344 -6.742804,-81.14457 -5.980618,-81.06863 -5.787531,-80.84117 -5.841435,-80.84823 -5.533973,-81.19141 -5.215608,-81.06191 -5.03185,-81.32584 -4.679606,-81.24965 -4.270189,-80.21902 -3.437626,-80.15477 -3.910297,-80.47536 -4.054242,-80.30513 -4.200802,-80.44341 -4.436912,-80.13631 -4.285207,-79.61343 -4.442309,-79.26035 -4.967359,-78.9999 -4.979351,-78.61257 -4.475154,-78.32841 -3.441479,-78.13014 -3.516708,-78.19521 -3.364114,-77.79285 -2.984906,-76.62732 -2.590585,-75.53837 -1.536144,-75.36436 -0.955734,-75.18459 -0.970688,-75.24495 -0.534989,-75.62195 -0.108895,-75.2882 -0.093691)))
+MULTIPOLYGON(((140.999 -2.608743,144.1146 -3.808876,144.1956 -3.822025,144.1997 -3.824358,144.2385 -3.82054,144.3123 -3.815015,144.3343 -3.821932,144.4263 -3.80323,145.8048 -4.849302,145.7606 -5.474028,147.3366 -5.918141,147.8046 -6.317366,147.7639 -6.694505,146.9345 -6.711218,147.1799 -7.463336,148.1337 -8.066836,148.6026 -9.083832,149.2981 -9.020769,149.2463 -9.507924,150.0552 -9.686542,149.7133 -9.812922,149.8595 -10,150.8737 -10.22459,150.3429 -10.33383,150.6933 -10.56322,150.4249 -10.69422,149.8812 -10.57376,150.0898 -10.47519,150.093 -10.47522,150.1029 -10.44177,148.7363 -10.1607,147.7295 -10.10448,146.9023 -9.270635,147.0222 -9.051986,146.5969 -8.999637,146.1151 -8.137254,145.813 -7.90257,144.8635 -7.778987,144.9334 -7.632177,144.5779 -7.640738,144.5248 -7.431922,144.518 -7.686209,144.3904 -7.486765,144.5048 -7.812098,144.2164 -7.666005,144.1159 -7.786599,143.7076 -7.516954,143.8409 -7.796087,143.9221 -8.003697,143.7794 -7.899379,143.8682 -8.049958,143.4788 -7.997828,143.2546 -7.792652,143.4337 -8.02028,143.4603 -8.0582,143.6114 -8.236415,142.9742 -8.341662,142.1535 -8.239811,143.109 -8.455365,143.406 -8.76221,143.3776 -9.006149,142.6406 -9.333755,142.218 -9.148643,142.1993 -8.909586,142.0811 -9.179693,142.026 -8.974239,141.9197 -9.200983,141.0214 -9.131344,141.0218 -6.898336,140.8429 -6.611421,141.0003 -6.31305,140.999 -2.608743)),((149.9601 -5.417626,150.0392 -5.010802,150.1875 -5.059336,150.0886 -5.51531,150.6727 -5.546333,151.3457 -4.915129,151.6375 -4.942677,151.5182 -4.188996,151.944 -4.343509,152.1659 -4.141066,152.3988 -4.333271,152.3288 -4.838703,151.9495 -4.999009,152.0783 -5.449806,151.4851 -5.514403,151.18 -5.957832,149.9992 -6.309951,149.3246 -6.054186,149.0372 -6.161993,148.3565 -5.742074,148.343 -5.492445,149.2194 -5.582567,149.9601 -5.417626)),((150.8843 -2.680818,152.0497 -3.243535,152.9324 -3.979725,153.1121 -4.38087,152.8719 -4.854138,152.3373 -3.637312,150.7177 -2.758145,150.8843 -2.680818)),((154.7747 -5.559685,154.7062 -5.408555,155.0605 -5.543166,155.814 -6.365134,155.9051 -6.800642,155.335 -6.726784,155.209 -6.317973,154.7417 -5.944575,154.7747 -5.559685)),((146.7999 -1.970029,147.3455 -2.041809,146.5556 -2.254868,146.57 -1.988917,146.7999 -1.970029)),((150.5663 -9.368417,150.9251 -9.685266,150.4405 -9.63889,150.5663 -9.368417)),((151.2724 -9.932449,151.2201 -10.19261,150.9637 -10.10765,150.7396 -9.739069,151.1077 -10.04107,151.2724 -9.932449)),((152.5086 -8.994152,153.0195 -9.162484,152.7328 -9.263479,152.5086 -8.994152)),((150.2314 -2.38647,150.4418 -2.657031,149.9557 -2.506341,150.2314 -2.38647)),((153.2103 -11.32783,153.7687 -11.62338,153.2572 -11.51046,153.2103 -11.32783)))
+MULTIPOLYGON(((121.7873 13.93721,121.7853 13.93825,121.2876 13.5966,120.8871 13.6927,120.8761 13.90552,120.6582 13.77089,120.5929 14.22979,120.9611 14.63483,120.5994 14.90262,120.4764 14.4093,120.2979 14.82682,120.0843 14.78565,119.7568 16.16742,119.8844 16.39118,120.1015 16.05869,120.4222 16.16321,120.3483 17.684,120.5638 18.49328,120.8483 18.65069,121.928 18.26576,122.2396 18.51276,122.1636 17.61864,122.5278 17.09649,122.2289 16.38917,121.9998 16.02581,122.1405 16.2638,121.5523 15.89799,121.6386 15.71886,121.3716 15.31909,121.7339 14.69525,121.6042 14.6623,121.7421 14.15639,122.2307 13.89511,122.1637 14.16183,122.6816 14.34383,123.0428 14.10384,123.12 13.73078,123.3128 13.78915,123.338 14.10619,123.4253 13.9227,123.7137 13.9427,123.9701 13.71217,123.5844 13.7222,123.532 13.56439,123.869 13.22884,123.7555 13.06432,124.1972 13.04049,124.1405 12.67423,123.9965 12.54283,123.793 12.83673,124.029 12.96995,123.7361 12.84538,123.3181 13.00962,123.1909 13.42915,122.5336 13.9643,122.5994 13.16033,121.7873 13.93721)),((126.5723 7.723431,126.4573 6.997792,126.3432 6.801862,126.152 6.904821,126.1886 6.273873,125.8481 7.36192,125.3809 6.801755,125.7129 6.106777,125.3304 5.555425,125.2493 6.098561,124.9493 5.855325,124.1787 6.215242,123.9426 6.821443,124.2444 7.407478,123.7181 7.792254,123.4275 7.815274,123.4097 7.358588,123.1175 7.513375,123.1223 7.758925,122.8112 7.435522,122.8513 7.716344,122.6105 7.767706,122.1555 6.915938,121.8941 7.106333,122.2274 7.963125,122.9892 8.200829,123.0273 8.485272,123.3913 8.726957,123.7582 8.600774,123.749 8,124.2303 8.218649,124.3832 8.593207,124.7511 8.500415,124.8039 9.003431,125.0972 8.826818,125.2063 9.095564,125.5185 9.0111,125.435 9.824158,126.0498 9.236019,126.2115 9.309255,126.337 8.843996,126.0872 8.612478,126.3959 8.505733,126.3786 7.832776,126.5723 7.723431)),((124.9084 11.39225,125.0264 11.77384,124.3999 12.18456,124.2628 12.56041,125.0252 12.55442,125.036 12.54425,125.5185 12.19497,125.4449 11.59937,125.7613 11.04088,124.988 11.2848,125.2646 10.36711,125.13 10.16527,124.9844 10.38388,125.033 10.00383,124.7753 10.1434,124.7825 10.78576,124.6132 10.99946,124.3793 10.91966,124.315 11.56559,124.4894 11.3262,124.9084 11.39225)),((122.7102 10,122.9528 10.89416,123.5094 10.94045,123.136 9.834645,123.2061 9.094457,122.9357 9.083772,122.3838 9.710353,122.4516 9.975727,122.7102 10)),((119.5589 11.06492,119.5594 11.0585,119.7004 10.49537,118.7495 9.927208,118.4893 9.295677,117.201 8.332909,117.6331 9.049329,119.2562 10.49023,119.2226 10.95388,119.4584 10.72194,119.3015 11.00448,119.3027 11.01071,119.4851 11.42674,119.5589 11.06492)),((122.6271 10.78448,121.916 10.44899,122.1013 11.65333,121.8874 11.90057,122.5928 11.50883,122.8269 11.61428,122.8843 11.43027,123.1525 11.59888,123.1274 11.17202,122.6271 10.78448)),((121.3782 12.29665,121.0932 12.26944,120.3186 13.48308,120.9868 13.52215,121.5578 13.12539,121.3782 12.29665)),((123.9202 11.87073,123.5354 12.21131,123.167 11.90774,123.2414 12.60446,123.9022 12.20752,124.0702 11.85565,124.0612 11.72544,123.9202 11.87073)),((123.9401 10.30818,123.9386 10.30701,123.3019 9.517315,123.9996 11.27327,123.9401 10.30818)),((124.1776 10.15537,124.1808 10.15591,124.5681 10.02752,124.605 9.804487,124.2449 9.599773,123.785 9.754159,124.1776 10.15537)),((124.2058 13.51797,124.0243 13.66346,124.2089 14.10054,124.4219 13.79581,124.2058 13.51797)),((121.9572 6.702037,122.3251 6.620943,121.9587 6.404049,121.7925 6.627535,121.9572 6.702037)),((120.0858 12.16537,120.3364 11.99266,119.9799 12.00516,119.8614 12.31052,120.0858 12.16537)),((125.6463 10.25395,125.6114 9.817491,125.4814 10.11613,125.6328 10.47033,125.6463 10.25395)),((121.8192 15,122.047 15.00603,121.9518 14.631,121.8192 15)),((121.2289 6.000042,121.4256 5.983068,121.2756 5.853281,120.8687 5.94961,121.2289 6.000042)),((122.0228 13.19721,121.8664 13.57089,122.1221 13.45867,122.0228 13.19721)))
+MULTIPOLYGON(((74.57156 37.03444,75.14687 37.01989,75.4545 36.72161,75.85235 36.6753,76.17518 35.83339,76.56726 35.91782,77.18671 35.52834,77.8409 35.50421,76.68182 34.75959,75.74921 34.51583,74.37554 34.80344,73.94156 34.6772,73.76322 34.35963,73.97623 34.26481,73.88322 34.04995,74.26275 33.97429,73.95624 33.72029,74.18707 33.45552,74.01427 33.19825,74.53153 32.74073,74.69702 32.83971,74.69842 32.48494,75.37476 32.22432,74.54382 31.8223,74.53585 31.15423,74.6857 31.06146,73.93529 30.46296,73.96526 30.19131,73.39652 29.93901,72.94442 29.0341,72.39619 28.77465,71.89957 27.9642,70.86549 27.70511,70.36617 28.00825,69.57813 27.16549,69.51545 26.74006,70.16774 26.55075,70.09608 25.94432,70.27539 25.71132,70.65932 25.70151,71.1244 24.40936,69.97868 24.16505,68.82635 24.3084,68.74924 23.96205,68.31957 23.92002,67.46552 23.90661,67.29723 24.30736,67.52905 24.33453,67.41748 24.47749,67.31557 24.58925,67.32438 24.59338,67.42773 24.68052,67.41364 24.69534,67.24619 24.72478,66.65139 24.82935,66.74201 25.18326,66.54139 25.6426,66.09185 25.47961,66.51988 25.40648,64.78055 25.34775,64.61661 25.1546,64.02867 25.46499,64.06428 25.32833,63.60587 25.37063,63.49269 25.19816,62.49446 25.25285,61.76439 25.03278,61.61045 25.19495,61.84788 26.22814,62.43453 26.56814,63.16919 26.64729,63.31746 27.13866,62.78297 27.23428,62.79194 28.2771,61.80416 28.64017,60.8786 29.86178,62.45577 29.38897,64.10529 29.37748,66.23059 29.84671,66.38657 30.93392,66.73107 31.21251,67.76277 31.32756,67.55399 31.5288,68.16888 31.83424,68.91688 31.60471,69.31762 31.92807,69.2407 32.46139,69.5071 33.02904,70.32659 33.34047,69.89754 34.02774,71.06528 34.05179,71.17126 34.35826,70.99556 34.55477,71.6749 35.19654,71.54667 35.72023,71.20142 36.03578,71.63596 36.47205,71.85727 36.39943,72.6316 36.84843,74.05276 36.82872,74.57156 37.03444)))
+MULTIPOLYGON(((14.61713 53.84257,14.21288 53.86478,14.22437 53.92654,14.69307 53.99624,14.66894 53.90725,17.98088 54.83335,18.73148 54.68366,18.39455 54.74372,18.7814 54.35429,19.87666 54.63707,19.2318 54.33939,19.37303 54.22312,19.78606 54.43672,22.78779 54.36525,23.38738 54.21452,23.50595 53.96659,23.92022 53.15824,23.91802 52.67258,23.17688 52.28258,23.65413 52.07933,23.54564 51.606,24.15068 50.87114,23.96477 50.80079,24.10886 50.63593,22.68042 49.56676,22.89656 49.00924,22.57044 49.08673,21.63166 49.44709,20.32678 49.40271,19.79252 49.19341,19.47433 49.60033,18.98867 49.39638,18.85366 49.56773,18.57495 49.92144,17.78249 50.01773,17.59099 50.15761,17.68593 50.32611,16.91216 50.44516,17.01608 50.22456,16.63588 50.10873,16.19747 50.4337,16.3499 50.65818,15.38146 50.77971,15.17237 51.02024,14.82523 50.87399,15.03887 51.27147,14.58629 51.82447,14.75716 52.06902,14.53389 52.39124,14.63822 52.57733,14.12299 52.8411,14.45072 53.26357,14.26866 53.69652,14.59569 53.5862,14.61713 53.84257)))
+MULTIPOLYGON(((-82.5631 9.566999,-82.17525 9.193913,-82.26879 9.010703,-81.81246 8.938623,-81.88934 9.18726,-81.29579 8.775654,-79.80585 9.374632,-79.63265 9.616993,-78.97169 9.564364,-79.05305 9.442777,-78.04528 9.236524,-77.36086 8.686984,-77.17687 7.926277,-77.57512 7.508054,-77.74377 7.724391,-77.88682 7.220824,-78.44577 8.062403,-78.15136 8.415541,-77.80226 8.131576,-78.08723 8.470945,-78.25148 8.380498,-78.23177 8.546016,-78.36933 8.421503,-78.41398 8.56051,-78.41977 8.348485,-78.62105 8.770122,-79.39434 9.023646,-80.48365 8.204998,-80.00105 7.462819,-80.87225 7.198997,-81.05313 7.923686,-81.214 7.884013,-81.228 7.604705,-81.53633 7.712834,-81.75175 8.198595,-82.16496 8.162915,-82.21665 8.378905,-82.83902 8.291308,-82.89683 8.032975,-83.03423 8.364222,-82.714 8.931086,-82.93277 9.07554,-82.93756 9.473368,-82.5631 9.566999)))
+MULTIPOLYGON(((-67.1852 18.26983,-67.09653 18.51993,-65.99045 18.46575,-65.595 18.22752,-65.92176 17.97407,-67.18151 17.93584,-67.1852 18.26983)))
+MULTIPOLYGON(((-8.917275 39.01782,-9.13045 38.70432,-9.495944 38.7795,-9.407098 39.35523,-9.069618 39.58304,-8.608323 40.7261,-8.656229 40.85842,-8.751431 40.64624,-8.799806 41.90958,-8.199442 42.14565,-8.095398 41.80145,-6.571484 41.96747,-6.5545 41.69159,-6.184047 41.58385,-6.93036 41.034,-6.776533 40.36558,-7.018512 40.18777,-6.874694 40,-7.012062 39.67205,-7.524928 39.65641,-6.953342 39.029,-7.330624 38.43736,-6.951722 38.14727,-7.415919 37.7572,-7.457407 37.41022,-7.404598 37.1709,-7.875167 36.98083,-8.503443 37.15196,-8.993265 37.02172,-8.725278 37.6787,-8.906224 38.48983,-8.622249 38.40612,-8.743523 38.55943,-9.216735 38.41735,-9.26402 38.67098,-8.953477 38.6875,-8.917275 39.01782)),((-28.7643 38.6737,-28.01261 38.38972,-28.8311 38.35632,-28.7643 38.6737)),((-25.8411 37.87191,-25.13953 37.8218,-25.60724 37.65475,-25.8411 37.87191)),((-17.22564 32.84394,-16.67172 32.74069,-16.93982 32.6294,-17.22564 32.84394)),((-28.54714 38.77393,-28.32998 38.77393,-28.02932 38.62358,-28.17966 38.57347,-28.54714 38.77393)),((-31.28659 39.57571,-31.06945 39.45878,-31.06945 39.32515,-31.28659 39.35855,-31.28659 39.57571)),((-25.25646 36.9866,-25.02259 36.9866,-25.0393 36.85297,-25.27316 36.85297,-25.25646 36.9866)),((-27.27764 38.80733,-27.04378 38.70711,-27.27764 38.54007,-27.27764 38.80733)),((-28.04602 39.14142,-27.86227 39.04119,-27.9792 38.97438,-28.09613 39.0579,-28.04602 39.14142)))
+MULTIPOLYGON(((134.6175 7.721193,134.6676 7.637671,134.5841 7.353697,134.5006 7.353697,134.4672 7.437219,134.534 7.487332,134.5173 7.570854,134.6342 7.637671,134.6175 7.721193)),((134.4505 7.353697,134.4505 7.303584,134.4338 7.236777,134.3503 7.220073,134.3503 7.270186,134.3837 7.236777,134.4338 7.286891,134.4505 7.353697)),((134.2667 7.069734,134.2834 7.01962,134.2333 6.969507,134.25 7.01962,134.2667 7.069734)),((134.1331 6.936099,134.1665 6.90269,134.1331 6.869281,134.1331 6.936099)))
+MULTIPOLYGON(((-62.64708 -22.24563,-62.27002 -20.56706,-61.7347 -19.62802,-59.98358 -19.29404,-59.11981 -19.34715,-58.1924 -19.79767,-58.16346 -20.16246,-57.82151 -20.94222,-57.98896 -22.08457,-56.83665 -22.30044,-56.40335 -22.07751,-55.86168 -22.2791,-55.6128 -22.65852,-55.39753 -23.9739,-54.66784 -23.81538,-54.31655 -24.01433,-54.59636 -25.59497,-54.80127 -26.65639,-55.42037 -26.99908,-55.7326 -27.4448,-56.11202 -27.30512,-56.37604 -27.60447,-56.59883 -27.44798,-56.85005 -27.60421,-58.00693 -27.26365,-58.59655 -27.30121,-58.18894 -26.64248,-58.15548 -26.18055,-57.56323 -25.55561,-57.66761 -25.27694,-60.04662 -24.01213,-60.98194 -23.81165,-62.64708 -22.24563)))
+MULTIPOLYGON(((50.82992 24.74214,50.76339 25.4989,50.85052 25.64467,50.92041 25.47988,50.99568 25.97755,51.26283 26.15473,51.60325 25.71651,51.48189 25.50295,51.63665 25.0143,51.35101 24.61598,51.26202 24.6087,51.11311 24.48294,50.82992 24.74214)))
+MULTIPOLYGON(((55.51909 -20.87204,55.83528 -21.13003,55.79983 -21.3466,55.30052 -21.22212,55.29248 -20.9104,55.51909 -20.87204)))
+MULTIPOLYGON(((22.90599 47.95905,23.18665 48.11842,24.57831 47.96524,24.91005 47.72233,26.81927 48.25461,28.09873 46.99154,28.25912 46.44143,28.06982 45.59521,28.73659 45.22992,29.42979 45.44407,29.67573 45.21692,29.60929 44.85711,29.09656 44.75714,28.65602 44.33971,28.58377 43.73735,27.03238 44.15238,26.13661 43.98953,25.5627 43.64891,24.18021 43.68976,22.88669 43.84492,23.04128 44.08787,22.68183 44.21765,22.46022 44.46281,22.76005 44.56408,22.49272 44.70761,22.1509 44.47602,21.40279 44.78959,21.52709 45.16339,20.79429 45.48373,20.82344 45.77556,20.26995 46.12806,21.17978 46.30436,22.03673 47.53268,22.90599 47.95905)))
+MULTIPOLYGON(((29.59532 -1.392395,29.82593 -1.314871,29.92129 -1.48405,30.47686 -1.062396,30.89596 -2.078556,30.81868 -2.364058,30.56441 -2.417881,29.95822 -2.325547,29.86715 -2.76578,29.36887 -2.840679,29.07672 -2.592048,29.03217 -2.749662,28.87052 -2.419076,29.59532 -1.392395)))
+MULTIPOLYGON(((39.31893 32.21677,42.9772 30.72498,43.0655 30.4107,43.66146 30.3756,43.59605 29.60304,44.71873 29.20663,45.50752 28.77784,46.55759 29.10305,47.46055 29.00044,47.70495 28.52461,48.43147 28.53563,48.84699 27.61473,49.31306 27.47198,49.13666 27.40769,49.37329 27.13253,49.58826 27.17681,50.17196 26.63334,49.9974 26.75092,50.23676 26.31022,50.00939 25.98298,50.82992 24.74214,51.11311 24.48294,51.11637 24.26911,51.75201 23.86324,52.0006 23.00111,55.00691 22.49706,55.21152 22.69804,55.66659 21.99673,55 20.00092,52.0007 19.00233,48.76487 18.2688,46.33119 15.61425,46.32877 16.34975,46.08288 16.48298,44.36618 17.39002,43.86814 17.31088,43.34187 17.58682,43.23257 17.2722,43.21629 17.22469,43.23682 16.65217,42.77824 16.3692,42.31212 17.44274,41.63613 17.99704,41.26306 18.60587,40.75253 19.77845,39.70105 20.41832,39.28145 20.96123,39.1375 21.76241,38.94618 21.91311,39.09587 22.36292,38.60019 23.57171,37.94745 24.20642,37.42712 24.36739,37.15151 24.83314,37.24831 25.16879,35.22016 28.04927,34.57586 28.09255,34.96001 29.3589,36.07088 29.18588,36.75305 29.86721,37.50061 29.99781,37.99682 30.50064,37.00248 31.49365,39.31893 32.21677)))
+MULTIPOLYGON(((160.8149 -9.825731,159.8227 -9.801437,159.5989 -9.300936,160.3808 -9.415167,160.8149 -9.825731)),((161.3096 -10.19486,162.0749 -10.46595,162.3956 -10.82947,161.7573 -10.75466,161.3096 -10.19486)),((158.5452 -7.640836,158.5434 -7.639532,158.4251 -7.507535,158.7296 -7.575862,159.5331 -8.083711,159.9023 -8.583666,158.5452 -7.640836)),((161.3722 -9.522727,161.3738 -9.537572,160.7969 -9.07138,160.5489 -8.358188,161.002 -8.631818,160.9321 -8.813795,161.3722 -9.522727)),((157.5381 -7.373233,157.0112 -7.289949,156.4032 -6.736026,156.4874 -6.592081,157.55 -7.374984,157.5381 -7.373233)),((157.7509 -8.23035,157.8013 -8.660317,157.5421 -8.252825,157.2074 -8.316396,157.5024 -7.945463,157.7509 -8.23035)))
+MULTIPOLYGON(((25 21.9992,31.31852 22.0064,31.4745 22.22508,31.4121 22.00813,33.16651 22.00619,33.56408 21.72539,34.00521 21.77233,34.16069 22.2071,34.69196 22.29791,34.95135 22.85757,35.21217 22.7873,35.62337 23.14688,35.84367 22.76245,36.89112 22.06415,36.9726 21.39592,37.31501 21.06388,37.1324 21.22809,37.08739 21.05591,37.40939 18.87394,38.56443 18.00309,38.26013 17.55859,37.5153 17.33686,37.39465 17.04713,37.00204 17.06818,36.96253 16.28581,36.43877 15.15664,36.56107 14.25609,36.37843 13.54732,36.15517 12.68091,35.68944 12.66013,35.06233 11.74959,34.97515 10.90899,34.78151 10.70829,34.60198 10.90413,34.29985 10.58783,34.13977 8.595025,33.7691 8.362971,33.2178 8.430296,33.00082 7.873695,33.67129 7.693246,34.19323 7.038556,34.93832 6.551554,35.12726 5.62447,35.30796 5.341023,35.8614 5.314649,35.9477 4.629333,34.37846 4.611326,33.9945 4.214427,33.50901 3.748913,33.02008 3.887586,32.19777 3.515032,31.81783 3.827985,31.53893 3.654138,31.17384 3.793183,30.85357 3.48639,29.61472 4.660875,29.2455 4.344783,28.77811 4.558043,28.37458 4.275577,27.46342 5.016153,27.16044 5.767366,26.45115 6.085776,26.28659 6.46246,26.41443 6.643824,25.20037 7.488982,25.18009 7.902913,24.86475 8.180498,24.20358 8.303996,24.25266 8.711761,23.52011 8.726969,23.66824 9.891512,22.88134 10.9309,22.94528 11.41724,22.56609 11.62066,22.45838 12.62413,21.94108 12.63553,21.85074 12.87154,22.28421 13.34969,22.09221 13.7762,22.57632 14.17612,22.38421 14.50674,22.94006 15.10751,22.93059 15.55081,23.12228 15.7099,24.00159 15.70492,24 19.50804,24 20,25 20,25 21.9992)))
+MULTIPOLYGON(((20.55732 69.0625,23.65582 67.96259,23.40979 67.49654,23.78639 67.42785,23.5792 67.16257,24.01554 66.82013,23.65543 66.30672,24.15595 65.81819,23.79421 65.79698,23.06765 65.88229,23.23356 65.77407,23.10046 65.69971,22.63185 65.91102,22.67175 65.75342,22.20244 65.76402,22.14694 65.61271,22.40484 65.54126,22.03564 65.59631,22.09975 65.51413,22.08755 65.51017,21.44492 65.38924,21.74555 65.19302,21.23984 65.33414,21.59233 65.13867,21.00386 64.84528,21.61457 64.4379,21.075 64.22844,20.67546 63.79464,19.66945 63.43396,19.45469 63.57586,19.04459 63.1942,18.72535 63.29103,18.89701 63.21093,18.21487 63.01419,18.55248 62.95926,18.12101 62.76802,17.63623 63.16147,17.99957 62.66323,17.39172 62.44689,17.40183 62.41244,17.66954 62.23135,17.31168 61.85648,17.49206 61.61866,17.10894 61.70771,17.26128 61.65739,17.04956 61.57509,17.16948 61.43436,17.23318 60.89976,17.08458 60.90046,17.30548 60.67878,17.31552 60.67511,17.74145 60.49643,17.99307 60.60161,18.91607 59.93686,18.73001 59.75701,19.07313 59.72053,18.34891 59.38919,17.96753 59.43769,18.32234 59.27012,18.47579 59.17046,18.20595 59.02012,17.90366 58.85171,17.67621 59.17817,17.51422 58.77985,16.20383 58.64122,16.95583 58.48086,16.31331 58.49336,16.80689 58.33369,16.63668 58.34548,16.82097 58.31331,16.83426 58.12677,16.61994 58.20142,16.74702 58.02753,16.80994 57.87129,16.48153 57.89133,16.65873 57.76301,16.41756 57.92513,16.74178 57.70049,16.54031 57.72862,16.71506 57.48856,16.47146 57.26032,16.58572 57.04582,15.85938 56.07094,14.69408 56.15786,14.78384 56.03181,14.25196 55.87392,14.36262 55.554,14.18751 55.38017,12.81369 55.37869,13.06721 55.67295,12.44831 56.29349,12.78139 56.21265,12.61948 56.41773,12.87763 56.42852,12.91182 56.6227,12.35429 56.92632,12.12287 57.42981,11.95449 57.35889,11.72845 57.70001,11.9201 58.35195,11.5245 58.24786,11.7182 58.43204,11.58298 58.47839,11.42335 58.26945,11.46331 58.45503,11.24383 58.35351,11.25737 58.53282,11.25648 58.55013,11.20772 59.08662,11.65688 58.90471,11.84861 59.839,12.4589 60.05256,12.6107 60.42669,12.22046 61.01215,12.67642 61.06058,12.87404 61.36028,12.13189 61.72578,12.31056 62.26601,12.05315 62.61018,12.22478 63.00294,11.97954 63.26993,12.68735 63.98003,13.95622 64.01196,14.13239 64.1923,14.10011 64.46725,13.63731 64.58576,14.51194 65.30472,14.51744 66.13348,15.49498 66.2817,15.37616 66.48485,16.40015 67.04433,16.10075 67.43378,16.74116 67.92086,17.28317 68.12019,17.90159 67.96887,18.15558 68.20344,18.12506 68.53831,18.41782 68.58438,19.95874 68.35111,20.2639 68.49102,19.97152 68.56113,20.34719 68.81397,20.06123 69.05964,20.55732 69.0625),(12.31084 58.38442,12.57811 58.46795,12.49459 58.35101,12.61152 58.38442,12.79527 58.48465,12.9957 58.58488,13.14604 58.58488,13.17945 58.48465,13.36319 58.60158,13.61376 58.6851,13.73069 58.71849,13.91442 58.85212,14.04805 59.05258,13.91442 58.95235,13.88101 59.05258,14.04805 59.18621,14.04805 59.28644,13.88101 59.23632,13.7641 59.28644,13.71399 59.35326,13.54694 59.31985,13.56365 59.23632,13.46342 59.20292,13.36319 59.31985,13.04581 59.25303,13.12933 59.10269,13.17945 58.88553,12.77856 59.00246,12.46118 58.73519,12.66163 58.61829,12.31084 58.38442)),((18.80105 57.83535,19.10913 57.81799,18.81418 57.73992,18.77971 57.4671,18.94515 57.42034,18.136 56.90984,18.3084 57.09709,18.11047 57.52665,18.80105 57.83535)),((16.41026 56.19281,16.38081 56.52638,17.12928 57.35426,16.41026 56.19281)))
+MULTIPOLYGON(((16.11189 46.87151,16.65091 46.53329,16.50937 46.52197,16.30014 46.53714,16.28532 46.38754,16.10608 46.38754,16.06127 46.32756,15.80758 46.2083,15.64316 46.19313,15.55354 46.14832,15.68797 45.98391,15.64316 45.87946,15.3743 45.7895,15.3743 45.62508,15.23987 45.44584,14.95619 45.52064,14.85175 45.47583,14.58289 45.64025,14.41847 45.49065,14.00036 45.47583,13.8063 45.41586,13.49747 45.47862,13.49323 45.486,13.72107 45.59447,13.90781 45.6393,13.47854 46.00447,13.66695 46.18206,13.38307 46.30019,13.71563 46.52403,14.56157 46.37804,15.03901 46.65263,16.03466 46.6609,16.11189 46.87151)))
+MULTIPOLYGON(((-8.163539 71.14302,-7.940665 71.16119,-7.980974 71.02014,-9.078603 70.8614,-8.163539 71.14302)),((-53.94928 71.16938,-53.59618 71.3135,-53.376 71.11485,-53.94928 71.16938)))
+MULTIPOLYGON(((18.85366 49.56773,18.98867 49.39638,19.47433 49.60033,19.79252 49.19341,20.32678 49.40271,21.63166 49.44709,22.57044 49.08673,22.13036 48.3819,21.72957 48.35518,21.4518 48.58484,20.51103 48.54143,19.93207 48.13028,19.63655 48.24422,18.83232 48.04372,18.86988 47.80854,18.68 47.75199,17.78487 47.73532,17.16273 48.00808,16.84774 48.37205,16.92182 48.69472,17.03227 48.76385,17.15153 48.85381,17.31595 48.83865,17.56964 48.85381,17.86849 48.98824,18.01774 49.06304,18.12219 49.1823,18.12219 49.2571,18.34624 49.31708,18.33142 49.39188,18.57029 49.46633,18.7347 49.45151,18.85366 49.56773)))
+MULTIPOLYGON(((-13.30763 9.037539,-12.78951 9.300714,-12.43174 9.881638,-11.20675 10.00043,-10.66331 9.30055,-10.73339 9.084249,-10.46939 8.67458,-10.71892 8.27101,-10.28686 8.484799,-10.60413 7.770212,-11.45917 6.929611,-12.51441 7.385785,-12.30025 7.382319,-12.48358 7.449021,-12.37687 7.543462,-12.47503 7.781277,-12.78423 7.797123,-13.2902 8.419016,-12.92804 8.56413,-13.17512 8.531333,-13.30763 9.037539)))
+MULTIPOLYGON(((-16.50577 16.06219,-16.26278 16.52475,-14.33291 16.64259,-13.83995 16.1071,-13.3739 16.05435,-13.23643 15.61703,-12.24192 14.76061,-11.94072 13.92137,-12.04093 13.6279,-11.36283 12.97394,-11.37946 12.41356,-12.35323 12.30727,-13.0606 12.47781,-13.07347 12.63898,-13.70903 12.67622,-15.17925 12.68079,-15.66585 12.4283,-16.71754 12.32819,-16.76155 12.54338,-16.40078 12.57309,-16.7681 12.56695,-16.75583 13.06425,-15.81226 13.1591,-15.80781 13.34109,-15.29622 13.36043,-15.1106 13.58946,-14.36912 13.22905,-13.80755 13.38672,-15.07115 13.82657,-15.48113 13.58728,-16.56014 13.58879,-16.51591 13.85931,-16.69994 13.77484,-16.72587 13.99647,-16.77232 13.83145,-17.15847 14.62255,-17.53524 14.74664,-16.99009 15.08517,-16.50577 16.06219)))
+MULTIPOLYGON(((42.96164 10.98441,43.25469 11.4696,43.95675 10.68133,44.56458 10.3796,45.80741 10.86752,46.44966 10.68072,47.42209 11.17539,49.42203 11.33354,50.43153 11.6704,50.77378 11.98437,51.28105 11.83807,51.0172 10.41967,51.2337 10.43215,51.17758 10.56051,51.41303 10.43968,50.89915 10.31001,50.82713 9.417613,47.93942 4.438889,46.00196 2.423229,44.60449 1.596498,42.07595 -0.838695,41.83284 -1.175312,41.56717 -1.662053,41.00099 -0.834049,40.99211 2.829568,41.89908 3.975494,42.08767 4.179365,42.83331 4.270625,43.65907 4.868027,44.98174 4.917296,47.98618 8,46.9897 8,44.00586 8.996557,42.83263 10.27788,42.68301 10.60633,42.96164 10.98441)))
+MULTIPOLYGON(((-57.14622 5.999986,-57.14113 5.816273,-56.94384 6.00015,-55.91341 5.780722,-55.82718 5.953795,-54.83414 5.99401,-54.02424 5.823861,-54.01162 5.621387,-54.47425 4.903628,-54.3625 4.046188,-53.97749 3.601097,-54.52573 2.303486,-54.93989 2.632479,-55.37018 2.407456,-55.94821 2.532005,-56.13354 2.256321,-55.91082 1.882989,-56.48025 1.941472,-57.2044 2.833982,-57.30506 3.373516,-57.67311 3.381816,-58.0864 4.131202,-57.87356 4.904678,-57.19182 5.169795,-57.34863 5.312995,-57.14622 5.999986)))
+MULTIPOLYGON(((6.546042 0.352522,6.768535 0.294206,6.52479 0.024766,6.546042 0.352522)))
+MULTIPOLYGON(((11.89043 79.78609,12.30052 79.66035,12.1985 79.84067,13.85463 79.86784,13.96915 79.77794,13.7401 79.68999,12.3925 79.57956,13.49319 79.5741,13.22422 79.46852,14.01854 79.26618,14.14412 79.34093,13.84003 79.53727,14.73645 79.78636,15.26308 79.6091,15.75435 79.23559,15.64764 79.10672,16.52278 78.91335,15.61462 79.80681,16.44942 80.05889,18.05725 79.71346,17.56195 79.55282,17.76587 79.54418,17.65998 79.36821,18.30262 79.6245,18.86415 79.44118,18.60848 79.25294,18.90725 79.16695,21.52265 78.75532,18.96081 78.47273,19.05066 78.11738,18.37228 78.03956,18.30932 77.53676,17.70638 77.50509,17.31409 77.04971,17.068 77.05907,17.31506 76.96965,16.8949 76.80209,17.09303 76.64012,16.29881 76.57001,16.32986 76.71011,15.51376 76.87786,16.50116 77.01035,15.15264 77.03728,14.41185 77.19664,13.94165 77.52817,16.22956 77.43284,14.74774 77.65439,17.10048 77.78341,16.7587 77.88144,17.01988 77.93037,13.98495 77.72104,13.60757 78.05173,14.35501 77.96799,14.21214 78.10292,15.79702 78.34637,17.30019 78.42036,16.31411 78.45432,16.86323 78.66039,16.5398 78.72538,15.42297 78.46151,15.14858 78.60475,15.46802 78.63663,15.36961 78.84654,14.96843 78.59409,14.44135 78.68501,14.62225 78.55595,14.42493 78.47829,14.78641 78.37439,12.99782 78.20219,12.38307 78.49169,13.21738 78.54404,12.0367 78.60847,11.56738 78.74433,11.93077 78.83366,11.34544 78.97346,12.50275 78.91492,11.67208 79.0742,12.13165 79.29768,11.19189 79.11697,10.66446 79.53889,11.89043 79.78609)),((22.68399 80.33907,22.79388 80.5107,23.32733 80.41931,23.09837 80.38505,23.31011 80.33836,22.99885 80.17566,23.15994 80.11221,24.47143 80.3606,27.23061 80.07037,25.71329 79.62428,25.87874 79.51979,25.75757 79.44138,24.10345 79.23221,20.75345 79.36063,19.61994 79.60561,21.08651 79.53838,20.4556 79.66674,21.66445 79.80612,18.786 79.7125,18.08923 79.90682,18.9279 80.05235,17.70056 80.13579,19.42172 80.1133,18.99864 80.34449,19.78 80.21519,19.91125 80.37697,19.39987 80.43407,19.6448 80.50684,20.89507 80.19829,21.85966 80.25248,21.6327 80.13216,22.32095 80,22.58008 80.30102,22.33769 80.3866,22.68399 80.33907)),((22.43988 78.22848,24.3713 77.83358,23.92713 77.63831,24.14765 77.57308,22.68183 77.24064,22.55412 77.29334,22.79028 77.47029,22.52024 77.61302,20.8684 77.44043,21.55337 77.90948,20.82459 78.11438,22.43988 78.22848)),((-90.12866 13.73827,-89.52058 14.22222,-89.57234 14.40572,-89.34995 14.42176,-88.4948 13.85812,-87.75652 13.8623,-87.81824 13.40119,-87.89957 13.14959,-88.46616 13.15169,-90.12866 13.73827)),((21.63919 78.62122,22.13163 78.47421,22.04444 78.26186,20.72989 78.23103,20.59167 78.44015,20.16912 78.48421,21.63919 78.62122)),((31.65179 80.04832,31.45267 80.1118,31.6112 80.18989,32.63564 80.31588,33.49709 80.19212,31.65179 80.04832)),((10.64388 78.8913,12.14691 78.20528,11.03502 78.47587,10.50603 78.79975,10.64388 78.8913)),((28.4277 78.97012,29.69242 78.9026,28.08719 78.79597,27.87254 78.85575,28.4277 78.97012)),((26.61912 78.66003,26.39926 78.78109,26.54684 78.81599,27.00123 78.70078,26.61912 78.66003)),((18.98674 74.5161,19.29377 74.4603,19.06211 74.34914,18.7672 74.48451,18.98674 74.5161)))
+MULTIPOLYGON(((35.80864 32.75319,35.64941 32.6873,35.62841 33.25093,35.90757 33.43406,36.02116 33.76341,36.38395 33.82193,36.63919 34.2057,36.34557 34.51201,36.47128 34.63018,35.98031 34.64496,35.97204 35.2588,35.72723 35.5843,35.92172 35.93049,36.16907 35.81543,36.39755 36.22324,36.70071 36.24428,36.55289 36.49698,36.67554 36.8456,37.091 36.62365,38.25282 36.91349,39.22735 36.665,40.78173 37.12058,41.55814 37.08523,42.22494 37.31915,42.36371 37.10926,41.29453 36.35617,41.39429 35.63027,41.01237 34.41986,38.80408 33.37191,36.84583 32.31248,35.80864 32.75319)))
+MULTIPOLYGON(((31.98213 -25.95205,32.13366 -26.83497,31.97532 -27.31699,31.53687 -27.31616,30.81216 -26.82551,30.83329 -26.418,31.32036 -25.74403,31.98213 -25.95205)))
+MULTIPOLYGON(((14.99587 23.00189,15.99817 23.45037,24 19.50804,24.00159 15.70492,23.12228 15.7099,22.93059 15.55081,22.94006 15.10751,22.38421 14.50674,22.57632 14.17612,22.09221 13.7762,22.28421 13.34969,21.85074 12.87154,21.94108 12.63553,22.45838 12.62413,22.56609 11.62066,22.94528 11.41724,22.88134 10.9309,21.83262 10.83948,21.67271 10.23371,20.43423 9.153878,19.02328 8.995074,18.86246 8.852613,19.12222 8.671246,18.61805 8.052467,17.67167 7.982768,16.84385 7.529787,16.59592 7.88019,15.97481 7.483338,15.50748 7.527468,15.59733 7.767455,15.20761 8.610803,14.50994 9.032372,14.01946 9.670767,14.23641 9.997405,15.67966 10,15.14594 10.53835,15.11895 11.79355,14.83153 12.6285,14.45988 13.0745,14.08543 13.07806,13.63455 13.71068,13.47883 14.46007,15.50555 16.89787,15.72462 19.76368,15.99564 20.34847,15.19843 21.49131,14.99587 23.00189)))
+MULTIPOLYGON(((-0.142005 11.13898,0.912155 10.99649,0.774575 10.38476,1.355205 10,1.341589 9.54626,1.624833 9.042293,1.57392 6.688242,1.806693 6.28424,1.627816 6.225748,1.191781 6.104417,0.530341 6.825836,0.725227 8.284056,0.381674 8.749467,0.562796 9.40219,0.227102 9.455466,0.392497 10.30426,-0.063918 10.64102,0.022753 11.08191,-0.142005 11.13898)))
+MULTIPOLYGON(((100.0931 20.35574,100.5814 20.16878,100.5158 19.52846,101.2857 19.57056,101.3553 19.04666,100.9601 17.57215,101.1601 17.46701,102.0844 18.21974,102.6675 17.80686,103.5137 18.43748,103.9733 18.33454,104.7039 17.53196,104.7471 16.5365,105.6378 15.65781,105.4707 15.3448,105.5351 14.55281,105.2132 14.33601,105.0859 14.20729,104.8053 14.43433,103.6626 14.43951,103.0927 14.29263,102.6269 13.60597,102.34 13.54311,102.9195 11.63612,102.6046 12.21878,102.5811 12.04519,102.2926 12.18562,101.8354 12.6748,100.8566 12.64322,100.9773 13.47675,100.2692 13.52427,99.95284 13.30872,100.0208 12.18722,99.14848 10.347,99.25865 9.21736,99.83924 9.303065,100.5397 7.273146,101.0186 6.850026,101.5334 6.860398,102.0921 6.243936,101.8259 5.731784,101.584 5.933687,101.1384 5.610009,100.9842 5.799289,101.1082 6.253929,100.8508 6.231196,100.8171 6.436154,100.2888 6.7026,100.1211 6.422595,99.71484 6.893289,99.71948 6.901778,99.59379 7.374567,99.40384 7.300714,99.26925 7.660047,99.04448 7.695403,99.10603 7.952439,98.75483 8.138763,98.69901 8.308032,98.39011 8.129838,98.38534 8.133008,98.21206 8.573505,98.56767 9.880453,98.68176 10.17759,98.77948 10.67773,99.66872 11.81529,99.10999 13.06757,99.11597 13.89081,98.61044 14.31464,98.1906 15.11106,98.58364 15.36202,98.56137 16.05271,98.84703 16.14147,98.9175 16.39474,98.68119 16.26792,98.50951 16.94456,97.69774 17.8203,97.6436 18.28764,97.34662 18.57051,97.76765 18.57921,97.67117 18.94544,98.04517 19.80859,98.92458 19.74414,99.07542 20.09255,99.53727 20.14476,99.46452 20.38927,100.0931 20.35574)))
+MULTIPOLYGON(((70.93612 41.71566,72.45782 41.60652,73.16536 41.11726,70.44686 40.30059,70.28378 39.75739,73.58203 39.28056,73.5577 39.25914,73.84548 38.97701,73.7812 38.61199,74.86215 38.50415,74.89603 37.66544,75.13383 37.43744,74.87856 37.23569,74.356 37.41876,73.65158 37.23478,73.76276 37.43214,73.30843 37.46241,71.66684 36.67787,71.4258 37.06402,71.58373 37.91962,71.24846 37.9254,71.36493 38.24717,70.98909 38.48343,70.17991 37.94419,70.30613 37.69593,70.1679 37.52888,69.53245 37.59031,69.25591 37.09871,68.89037 37.32844,68.00586 36.92937,67.75214 37.21798,67.62237 37.22717,68.48985 38.39752,68.32677 38.99591,67.89272 39.21294,67.45741 39.64825,70.93612 41.71566)))
+MULTIPOLYGON(((52.73736 42.72655,54.14094 42.80331,53.97785 42.20491,55.93486 41.55257,57.23954 41.33429,57.23954 41.82354,58.97827 42.74936,60.06592 42.04183,60.44603 40.89898,62.23996 40.35579,63.65252 39.32208,65.3373 38.5606,65.64548 37.38977,65.52431 37.23418,64.75661 37.10646,64.44881 36.237,63.12922 35.86929,63.24798 35.69232,63.09636 35.42773,62.74783 35.26518,62.30208 35.14109,62.0574 35.43748,61.27663 35.61316,61.14761 36.65593,60.37067 36.62425,60.05066 37.01224,59.55383 37.12253,59.34782 37.51545,57.51798 37.91442,57.23291 38.26714,55.47419 38.08433,54.85671 37.76054,54.67566 37.44039,53.89781 37.34081,53.83055 38.52482,53.99278 38.93935,53.53237 39.33275,53.17293 39.37973,53.18463 39.21556,53.0963 39.43308,53.28534 39.69695,53.23618 39.54518,53.6595 39.568,53.43864 39.70164,53.44873 39.98264,52.88393 40.02711,52.94738 39.85824,52.73585 40.08132,52.91964 40.89231,53.59774 40.84504,54.0318 40.57281,54.30402 40.7359,54.63019 41.11726,54.41191 41.38949,54.0318 41.82354,53.70563 42.04183,52.99935 41.98788,52.81438 41.2697,52.41895 42.08253,52.68018 42.55856,52.55398 42.72366,52.70261 42.57597,52.73736 42.72655)))
+MULTIPOLYGON(((8.641963 36.94693,9.755942 37.34962,9.813557 37.1471,10.2789 37.18811,10.13229 37.14772,10.38788 36.72108,11.04808 37.08922,11.12227 36.84296,10.57805 36.39962,10.48948 36.04889,11.04988 35.63386,11.16134 35.23075,10.72583 34.65115,10.11265 34.30937,10.00903 34.0055,10.44824 33.63025,10.73653 33.70676,10.75259 33.48042,11.05261 33.62707,11.18444 33.21049,11.56605 33.16901,11.52732 32.40281,10.29116 31.69012,10.1375 31.48572,10.27783 30.82461,9.575346 30.24043,9.129236 32,8.353506 32.51591,8.326456 32.80933,7.738455 33.25135,7.533545 33.79332,7.636226 34.19632,8.31266 34.72816,8.473442 35.24205,8.255554 35.76288,8.409268 36.42483,8.154936 36.49945,8.641963 36.94693)),((10.93262 33.87753,11.07154 33.80139,10.88713 33.63782,10.74518 33.8871,10.93262 33.87753)))
+MULTIPOLYGON(((41.547 41.52649,42.52033 41.44005,42.82929 41.58788,42.85301 41.56945,43.67179 40.93345,43.65548 40.11077,44.41919 40,44.82024 39.62525,44.61477 39.77621,44.42366 39.4098,44.04729 39.37641,44.31766 38.38543,44.50953 38.32789,44.23886 37.88711,44.63467 37.72633,44.80497 37.14814,44.31998 36.96706,44.14184 37.31565,43.85316 37.19084,42.80326 37.37804,42.36371 37.10926,42.22494 37.31915,41.55814 37.08523,40.78173 37.12058,39.22735 36.665,38.25282 36.91349,37.091 36.62365,36.67554 36.8456,36.55289 36.49698,36.70071 36.24428,36.39755 36.22324,36.16907 35.81543,35.92172 35.93049,35.79093 36.31989,36.19867 36.59865,36.02021 36.93353,35.34907 36.54282,34.65621 36.80597,33.9586 36.21222,32.80812 36.01908,32.02614 36.54405,31.00871 36.86121,30.63026 36.85546,30.40457 36.20012,29.67679 36.12218,29.11926 36.37487,29.09581 36.68213,28.84761 36.59026,28.45742 36.8829,27.98264 36.55764,28.1247 36.80329,27.40521 36.66545,28.03409 36.78895,28.32711 37.0551,27.26519 36.9681,27.61315 37.27448,27.19638 37.35196,27.21101 37.59679,27.00681 37.6661,27.23981 37.73287,27.27196 37.96629,26.23426 38.27596,26.51241 38.41988,26.3595 38.65775,26.67268 38.31821,27.1592 38.46755,26.72291 38.6533,27.06037 38.87019,26.61069 39.28137,26.93734 39.57529,26.06342 39.4862,26.18284 40,26.71473 40.3956,27.288 40.48043,27.43316 40.33316,27.88348 40.3839,27.78122 40.53607,28.03737 40.48919,27.96021 40.36108,29.05984 40.37062,28.78209 40.53698,28.97738 40.64876,29.94561 40.74962,29.35839 40.76603,29.0421 40.97464,29.09707 41.18399,31.23326 41.10408,32.27687 41.72291,33.33943 42.02536,34.71677 41.94685,35 42.08839,35.22164 42.0157,35.09207 41.91779,35.29425 41.70956,35.98152 41.736,36.43448 41.24112,36.81222 41.35863,38.35494 40.90874,39.42577 41.10553,40.22606 40.92389,41.547 41.52649)),((26.36189 41.71968,27.08228 42.09672,28.03134 41.98704,28.27519 41.50606,29.11266 41.24482,28.99239 41.0156,27.52145 40.98276,26.19533 40.04464,26.21911 40.32451,26.83944 40.61272,26.04115 40.74553,26.35771 40.95393,26.33243 41.26126,26.63687 41.35608,26.36189 41.71968)))
+MULTIPOLYGON(((-61.49664 10.62091,-61.61113 10.744,-60.91115 10.83435,-60.9945 10.1307,-61.91985 10.04083,-61.47605 10.25937,-61.49664 10.62091)))
+MULTIPOLYGON(((120.4372 22.46492,120.0475 23.04844,120.1485 23.67498,121.0282 25.02177,121.5832 25.29271,122.0004 25.01018,121.4075 23.1227,120.9715 22.5533,120.8572 21.90316,120.4372 22.46492)))
+MULTIPOLYGON(((30.47686 -1.062396,33.92483 -0.994076,37.58214 -2.989356,37.60839 -3.519971,39.22181 -4.678047,38.77885 -6.030701,38.85862 -6.388468,39.55244 -7.021945,39.25142 -7.817995,39.44592 -7.832924,39.26825 -8.322478,39.49911 -8.976987,39.71642 -9.999192,40.1954 -10.25691,40.44312 -10.34902,40.39444 -10.51768,39.24163 -11.17998,38.48034 -11.41681,37.92789 -11.29055,37.45184 -11.73482,37.02496 -11.56913,36.18958 -11.71623,35.83432 -11.40724,35.64745 -11.59284,34.95793 -11.57134,34.63319 -11.1177,34.53863 -10.05235,34.30602 -9.740206,34.0363 -9.49193,33.93895 -9.711681,32.95351 -9.401445,31.98438 -9.071177,31.37501 -8.587209,31.07797 -8.621837,30.77425 -8.22436,30.25485 -7.048671,29.61157 -6.304459,29.39148 -4.44525,30.0348 -4.273422,30.83693 -3.25414,30.84607 -2.977164,30.40339 -2.860481,30.56441 -2.417881,30.81868 -2.364058,30.89596 -2.078556,30.47686 -1.062396)),((39.21043 -5.941314,39.32874 -5.737778,39.53308 -6.467469,39.21427 -6.250589,39.21043 -5.941314)),((39.74304 -5.428621,39.68135 -4.868561,39.87556 -4.981088,39.74304 -5.428621)))
+MULTIPOLYGON(((31.65407 52.23735,31.90463 52.23735,32.87347 52.48791,34.46033 52.27075,36.56504 50.18275,37.40024 50.26627,40.0896 49.5146,40.47378 48.12815,39.58847 47.87761,39.2142 47.2791,37.59052 47.09627,36.81785 46.69179,36.38628 46.70972,36.11586 46.48625,36.24526 46.63953,35.92154 46.6566,35.04019 46.08367,35.35799 46.35327,35.1688 46.49597,34.80906 46.16551,35.53008 45.28258,35.83474 45.46763,36.58466 45.4371,36.42466 45.07668,35.53499 45.12379,35.09064 44.79358,33.74446 44.39071,33.38176 44.58884,33.54525 44.62583,33.58496 45.05432,33.06531 45.37609,32.48293 45.39583,33.17711 45.80716,33.68655 45.84929,33.59453 46.16362,32.53133 46.07453,31.77245 46.31574,31.79509 46.3282,32.02471 46.45077,31.51475 46.5784,32.42399 46.49025,31.99723 46.64642,31.97508 46.87891,31.87895 46.63408,31.45643 46.63771,31.59144 46.85146,31.41255 46.62546,30.77076 46.5524,30.35117 46.57469,29.93356 46.90878,27.66181 48.82974,26.81927 48.25461,24.91005 47.72233,24.57831 47.96524,23.18665 48.11842,22.90599 47.95905,22.13036 48.3819,22.57044 49.08673,22.89656 49.00924,22.68042 49.56676,24.10886 50.63593,23.96477 50.80079,24.15068 50.87114,23.54564 51.606,23.65413 52.07933,24.52147 51.93666,26.19187 51.93666,28.07942 51.85316,30.48478 51.35204,30.48478 51.76965,31.06944 52.02019,31.65407 52.23735)))
+MULTIPOLYGON(((30.85357 3.48639,31.17384 3.793183,31.53893 3.654138,31.81783 3.827985,32.19777 3.515032,33.02008 3.887586,33.50901 3.748913,33.9945 4.214427,34.1721 3.767278,34.46005 3.667987,34.45232 3.192519,34.92859 2.518256,35.03605 1.919515,34.7998 1.227813,34.51596 1.101287,33.90886 0.102833,33.92483 -0.994076,30.47686 -1.062396,29.92129 -1.48405,29.82593 -1.314871,29.59532 -1.392395,29.96222 0.806247,31.30536 2.11931,30.74787 2.452595,30.85357 3.48639)))
+MULTIPOLYGON(((40.4982 64.58804,40.46845 64.76054,40.22547 64.94896,39.72263 65.33889,39.79567 65.59131,42.11118 66.48769,43.2719 66.4053,43.68024 66.23746,43.34723 66.03854,43.84738 66.18501,44.17996 65.88619,44.0629 66.22952,44.59214 66.65333,44.36386 66.76524,44.52662 66.9026,43.76951 67.1933,44.36264 68.03293,44.21439 68.01942,44.22059 68.27728,43.24859 68.66807,46.01463 68.41569,46.53052 68.12004,46.64486 67.8047,45.28561 67.69849,44.83464 67.31074,45.59736 67.1552,45.96432 66.81135,47.60315 66.88747,47.85191 67.58661,49.05906 67.61958,48.59493 67.91588,49.16038 67.85266,52.21257 68.56967,52.04908 68.48449,52.32349 68.46231,52.16533 68.3642,52.3156 68.30717,52.76698 68.47396,52.28752 68.59131,53.4089 68.89153,54.57985 68.98077,53.6156 68.89829,54.01173 68.82616,53.71263 68.59383,53.95472 68.39748,53.17437 68.21862,54.10674 68.2326,53.98693 67.98674,54.5131 68.29504,54.8065 68.1053,55.37011 68.54394,57.25057 68.52147,57.84937 68.74605,57.223 68.71465,59.25395 68.9797,58.98732 68.91112,59.518 68.72781,59.17303 68.65864,59.11363 68.4057,59.5261 68.33306,59.9503 68.45369,59.79534 68.62407,59.93134 68.70433,61.05845 68.88011,61.03838 68.88482,60.21699 69.621,60.79217 69.61872,60.72264 69.80666,61.11454 69.86349,62.99968 69.69743,67.24409 68.78218,68.22919 68.36031,68.25536 68.13668,68.60745 68.25223,69.11288 68.8591,68.11576 69.22112,68.16456 69.51521,66.83138 69.57138,66.95551 70.02274,67.43639 70.02869,67.12791 70.21162,67.39177 70.71281,66.70394 70.75124,66.99422 71.06039,66.76869 71.10617,68.38193 71.72099,68.93552 72.6562,69.33884 72.93552,72.80556 72.67517,72.59679 72.49133,72.82123 72.26434,72.33573 71.70651,71.83425 71.47982,72.83222 70.8599,72.76084 70.38735,72.38226 70.29165,72.68154 69.80001,72.48732 69.09171,73.57745 68.40405,73.09379 68.21263,73.1148 67.68429,72.60365 67.57751,71.83182 66.8844,69.46434 66.83599,69.3957 66.84477,68.77541 66.87087,69.09662 66.85677,68.93073 66.77065,69.4444 66.48854,72.23521 66.24488,72.43066 66.34689,72.32212 66.49529,73.87228 66.98717,73.93364 67.28817,74.72758 67.66803,74.79773 68.02816,74.31217 68.37022,74.48479 68.71322,76.08697 68.98926,76.5548 68.98781,76.61222 68.75387,77.31255 68.49063,77.12122 68.29233,77.31305 68.2412,77.26963 67.87434,77.04356 67.78649,77.68127 67.57762,77.60342 67.32716,78.50276 67.55064,78.86246 67.44662,79.24853 67.46408,78.96108 67.56729,78.94048 67.57267,77.44583 67.75995,77.47778 68.11363,78.14926 68.2606,77.60535 68.9053,75.96492 69.25705,73.80424 69.15645,73.91005 69.42621,73.5434 69.76466,74.31156 70.59469,73.61063 71.17639,72.98857 71.39926,73.5285 71.79546,74.99432 72.17144,75.06522 72.43623,74.76619 72.79434,75.45364 72.7438,75.28986 72.6942,75.63506 72.52459,75.47609 72.48546,75.68069 72.26163,75.22124 71.82691,75.49261 71.52242,75.20242 71.41418,75.79678 71.21141,77.77612 71.11064,78.39359 70.89378,78.27691 71.23857,76.69088 71.46069,76.00571 71.88631,76.79454 72.05392,78.10931 71.86156,78.21709 72,77.4099 72.06577,77.45277 72.20925,78.58257 72.26272,78.42407 72.3854,80.60556 72.09982,81.66299 71.68432,83.29488 71.68005,82.99944 71.40204,82.24258 71.25033,82.3485 70.93884,82.31001 70.64695,81.8099 70.21137,82.16143 70.45351,82.2735 70.29804,82.01897 70.28139,82.30015 70.14621,83.2096 69.90781,83.24867 69.8892,83.77528 69.7759,84.55149 69.6089,82.99222 70.27865,83.78537 70.45268,83.16048 71.11007,83.65169 71.62679,82.69587 71.8626,81.96449 72.33777,80.86139 72.43805,80.9379 72.60798,80.6855 72.67693,80.88707 72.91771,80.39501 73.16862,80.80965 73.19363,80.34986 73.28944,80.73617 73.4298,80.53416 73.54296,87.10263 73.84702,86.92329 74.02316,87.45389 74.07528,85.88815 74.3277,87.17338 74.37474,85.75124 74.65343,86.12072 74.83515,86.95792 74.59921,86.75347 74.7044,87.07306 74.72179,87.39427 74.94709,87.19801 74.98438,87.75072 74.9974,86.91621 75.07461,88.24816 75.13549,89.31824 75.51092,94.10726 75.91436,92.87063 75.88627,93.25022 76.11229,96.27627 76.08806,95.74909 75.82893,97.86251 75.97079,97.57423 76.03993,98.85695 76.2539,99.62257 76.0811,98.90095 76.47694,101.1246 76.54408,101.3212 76.70045,100.9524 76.84142,101.831 77.2554,104.2699 77.7341,106.2977 77.38107,104.2433 77.08313,107.3375 77.00635,107.5192 76.89897,106.443 76.56705,106.6031 76.47375,107.8927 76.52532,108.2866 76.75023,111.1754 76.77437,112.2495 76.47242,111.949 76.21558,112.3797 76.45283,112.8291 76.32292,112.488 76.23377,112.8628 76.13111,112.616 76.05174,113.3615 76.12112,112.9721 76.23279,113.2978 76.25297,113.6963 75.92709,113.9153 75.82427,113.5698 75.55331,113.7027 75.5052,113.5097 75.21039,111.7962 74.65242,109.8146 74.3123,108.4026 73.80742,107.8388 73.61809,106.1248 73.63555,107.0381 73.47591,106.1297 73.25927,105.7222 72.88139,105.2557 72.7831,105.4756 72.73537,105.9836 72.83233,106.3659 73.17737,108.5141 73.09115,108.4078 73.22441,108.5719 73.25546,108.2182 73.28064,110.8843 73.67241,109.5322 73.81839,110.2815 74.0203,111.2097 73.95999,112.4997 73.70094,112.9769 73.77522,112.8309 73.99158,113.4104 73.67712,113.2003 73.44453,113.5003 73.23686,114.0947 73.35608,113.5004 73.50938,115.5634 73.71088,118.6769 73.56088,118.9708 73.45742,118.4137 73.41178,118.5285 73.1794,119.6601 73.06912,123.3167 72.91902,123.7384 73.10506,123.28 73.40218,123.5281 73.39699,123.3472 73.47871,123.4497 73.65491,124.0174 73.60087,124.3694 73.79802,125.8276 73.41653,126.3199 73.55521,126.4518 73.35116,127.5778 73.47348,127.6355 73.47205,129.59 72.96128,129.1243 72.97086,129.4959 72.78333,129.1618 72.73604,129.5358 72.6479,128.8208 72.52156,129.4513 72.4347,129.5534 72.30589,129.3843 72.26398,129.5975 72.21251,129.3865 72.15844,129.5636 72.12707,128.8878 71.97224,128.6988 71.92895,128.6362 71.94373,128.9815 71.70985,129.2763 71.80444,129.1129 72.01095,129.6087 71.70439,128.9315 71.57364,129.2364 71.59631,130.3671 70.89893,130.8608 70.96175,131.0625 70.70415,131.6902 70.92168,132.5729 71.87852,133.0328 71.96686,133.3548 71.84568,132.9982 71.94799,132.783 71.76508,133.8568 71.40441,136.0339 71.62562,138.0704 71.20733,137.8487 71.37183,138.1637 71.57501,138.8426 71.6299,139.2666 71.39725,140.0983 71.50949,139.7735 71.68717,139.8388 71.85428,139.3816 71.94949,140.246 72.21105,139.1692 72.26443,139.6177 72.48666,141.3139 72.57973,140.7365 72.87749,149.2062 72.22298,150.1067 71.85908,149.3367 71.88045,149.0834 71.67314,151.6954 71.26807,151.713 71.25865,152.1391 70.99513,151.7218 70.97195,152.5646 70.81894,156.0465 71.08228,158.7075 70.92345,159.9792 70.46207,160.1172 70.25779,159.7738 69.81796,160.9725 69.62244,161.0263 69.2377,161.2215 69.24902,161.0883 69.44078,161.3897 69.4291,161.3494 69.40311,162.371 69.67098,164.0496 69.74959,166.964 69.47414,167.8068 69.7632,168.2799 69.54607,168.2843 69.22865,169.3423 69.08469,169.7411 68.75729,171.0659 69.05031,170.682 69.56557,170.2026 69.58692,170.6343 69.758,170.5643 70.12776,173.7909 69.8038,176.1116 69.87669,179.4197 69.22298,180 68.9799,180 65.02738,178.8075 64.64135,177.6429 64.6922,177.4137 64.81152,177.5019 64.92024,177.0816 64.74984,176.0597 64.94259,175.2051 64.72363,176.1688 64.8891,176.4533 64.69538,176.1862 64.58507,177.5198 64.73763,177.429 64.4826,177.8132 64.25166,178.2536 64.17886,178.12 64.22968,178.2907 64.40369,178.8925 63.41894,179.452 63.10777,179.2701 62.97346,179.6192 62.73449,179.0978 62.26967,177.6348 62.55209,176.5866 62.42043,173.847 61.6418,173.5636 61.73421,173.2633 61.42944,172.7489 61.41278,172.9379 61.26349,172.3469 61.20689,172.4081 61.00858,172.0536 61.09628,172.2234 60.95269,172.1035 60.85878,171.3967 60.665,170.6454 60.40097,170.2911 59.92762,169.6336 60.43815,168.4464 60.59834,167.0502 60.40269,166.2707 59.81704,166.0909 59.8105,166.3746 60.4078,166.24 60.46817,165.0332 60.09874,165.2342 59.99067,164.8569 59.78123,164.4278 60.10614,164.2141 59.85516,164.0721 59.89318,164.2796 60.01299,163.521 59.89087,163.2021 59.56166,163.3551 59.27268,163.0838 59.23968,163.2493 59.05433,162.9561 59.17841,163.0654 58.97657,162.4494 58.67765,162.0021 58.01287,162.2491 57.80532,162.7065 57.94735,163.3258 57.72046,162.7876 57.3412,162.7829 56.7809,163.2412 56.75031,163.3694 56.18514,163.0621 56.00956,162.6219 56.23159,162.0919 56.08207,161.7373 55.36121,162.1218 54.75227,161.7202 54.50799,160.8624 54.5628,160.1082 54.2086,159.8451 53.71445,160.0222 53.08755,159.8089 53.2661,158.7123 52.87762,158.4234 53.00522,158.6305 52.90941,158.5603 52.61988,158.3935 52.64318,158.5713 52.31472,157.9021 51.62428,156.6593 50.86994,156.7605 51.07053,156.5413 51.28904,156.4923 51.90914,156.7105 51.8815,156.4947 51.91913,156.1519 52.81838,155.5514 55.19243,155.9887 56.6876,156.8744 57.25745,156.8673 57.80712,157.4541 57.79598,159.0855 58.43304,159.8571 59.12571,161.9278 60.20634,162.0992 60.48243,163.7921 60.83236,163.5069 61.00426,164.0238 61.31402,163.7576 61.46215,164.0654 61.67899,164.1724 62.27046,165.2439 62.48683,164.607 62.67488,163.3364 62.53108,163.1359 62.40726,163.3882 62.33088,163.078 62.21904,163.2021 62.05662,162.9864 61.80394,163.3342 61.65603,163.021 61.51144,162.8369 61.71045,162.3857 61.66236,160.9308 60.89475,160.1639 60.57072,160.4399 61.03279,159.7995 60.92818,160.0079 61.10957,159.7951 61.25835,160.4229 61.75961,160.304 61.93589,159.5865 61.6531,159.5894 61.83051,159.152 61.92044,157.4807 61.78186,156.6845 61.51326,156.6568 61.19573,154.2198 59.86475,154.3706 59.5775,154.2277 59.67112,154.0861 59.4099,154.9751 59.49475,155.1808 59.17505,154.0432 59.04596,153.3904 59.242,152.914 58.90635,152.3564 59.05696,151.3481 58.83426,151.1249 59.09921,152.2895 59.24113,151.7448 59.29918,151.4154 59.6009,150.7724 59.4345,149.4405 59.75829,149.0761 59.6445,149.2266 59.46195,148.7599 59.48039,148.9989 59.36822,148.9313 59.23401,146.4515 59.46267,146.3467 59.19883,146.0414 59.14101,145.833 59.23767,145.9671 59.40066,145.6967 59.42324,143.2337 59.39624,142.4727 59.20366,140.7734 58.29924,140.4895 57.84279,138.4361 56.84101,138.1087 56.56901,138.2255 56.42478,135.1824 54.85205,135.7502 54.55546,136.8388 54.64153,136.6783 53.91805,136.8132 53.7657,137.1954 53.84193,137.1976 54.21048,137.7376 54.31787,137.3189 54.0434,137.8613 53.96548,137.3189 53.52874,137.9556 53.57482,138.5752 53.99004,138.2628 53.55909,138.4603 53.52062,138.7668 53.98464,138.6587 54.28512,139.7839 54.28809,140.5466 53.64368,141.4027 53.29984,141.3632 53.0809,140.8756 53.08162,141.2346 52.8625,141.1224 52.39187,141.5463 52.15199,140.748 51.46471,140.8812 51.42624,140.4351 50.71279,140.5111 50.14814,140.6872 50.09215,140.4038 49.87887,140.5435 49.56638,140.2066 48.9751,140.3876 48.97366,140.1729 48.44787,139.2884 47.8131,138.1118 46.23507,134.7779 43.30216,133.0457 42.67246,133.0037 42.84996,132.3224 42.84124,132.3058 43.33993,131.957 43.05519,132.0724 43.31266,131.7984 43.3347,131.2139 42.55295,130.66 42.66169,130.8689 42.52186,130.6749 42.28362,130.6146 42.42395,130.4051 42.72232,131.1066 42.91479,131.3084 43.39982,131.2931 44.0797,130.9542 44.85416,131.4698 44.95948,131.8915 45.33602,132.942 45.01337,133.131 45.12125,133.1559 45.4652,133.9099 46.26525,134.1813 47.32342,134.7739 47.72915,134.5513 47.99365,134.7118 48.27581,134.5697 48.36628,133.1603 48.1057,132.6697 47.94657,132.562 47.71522,131 47.6912,130.651 48.10178,130.8255 48.30009,130.5245 48.61383,130.6731 48.86701,130.2226 48.86702,129.4714 49.4316,128.2506 49.49959,127.523 49.81782,127.5981 50.21679,127.3414 50.31707,127.2946 50.74709,126.9202 51.06199,126.9743 51.31988,126.8254 51.27232,126.9158 51.38577,126.4619 51.94272,126.5565 52.12088,125.9655 52.62254,126.102 52.77266,125.6722 52.85682,125.6005 53.0746,124.8751 53.09429,123.5218 53.55318,120.8139 53.26356,120.0243 52.76811,120.0612 52.58407,120.721 52.54308,120.6102 52.34472,120.7782 52.15837,120.0925 51.67718,119.2803 50.6097,119.1163 50.38475,119.3606 50.16798,119.1975 50.01209,118.5626 49.92574,117.8546 49.5054,116.7003 49.83983,116.2339 50.0324,115.4007 49.90234,114.3401 50.28222,112.7549 49.49241,110.7663 49.1451,108.5434 49.33666,107.9455 49.67678,107.9756 49.92023,107.1465 50.01965,106.7247 50.327,105.3573 50.4804,103.6905 50.13724,102.9157 50.31429,102.3017 50.59977,102.0688 51.3971,99.97604 51.75824,98.89359 52.14954,98.02279 51.41996,97.82797 51.01169,98.32318 50.54744,98.25439 50.25548,97.3162 49.75739,96.63409 49.98194,94.61906 50.03394,94.27628 50.5753,93.12958 50.56275,93.00924 50.784,92.61613 50.70516,92.34013 50.893,92.27581 50.71622,91.75664 50.72041,91.42917 50.45771,90.73773 50.48793,90.67541 50.16824,89.62073 49.97399,89.68183 49.70971,88.86329 49.45017,88.22323 49.48986,88.192 49.28303,87.83231 49.175,86.93111 49.11688,86.53976 50.07133,84.97516 49.77782,83.21414 51.24534,81.55247 51.05118,81.06255 51.24534,80.37846 50.75767,78.42102 52.71511,76.85642 53.98846,77.24701 54.37905,77.05058 54.67255,73.92139 53.69496,73.13797 53.88912,71.08571 54.57547,70.39936 55.45597,65.89974 54.47613,63.55172 54.08554,61.59654 53.79204,62.08421 53.30212,61.2037 53.30212,60.2261 52.22519,60.71603 51.14826,60.42253 50.85476,59.54202 50.95184,58.17159 51.14826,54.74889 51.14826,52.59729 52.12811,51.12978 52.02877,48.97592 50.75767,47.90125 51.14826,46.92366 48.89732,47.99833 48.01681,48.68242 47.33046,49.19137 46.35909,49.22092 46.2927,49.04577 46.36475,48.71399 45.91456,48.72657 45.62616,48.54764 45.95636,48.49978 45.67001,48.35889 45.823,48.42334 45.5986,47.85413 45.72282,47.87246 45.47527,47.66007 45.64598,47.19746 44.84016,46.69099 44.57006,47.52176 43.77692,47.74323 43.90609,47.46127 43.03159,47.75621 42.63647,48.75009 41.69004,47.19468 41.89426,47.16404 41.89426,41.57566 43.84114,39.25613 43.92894,38.74588 44.29795,36.60306 45.20868,36.98147 45.27539,36.62472 45.3024,36.79005 45.4361,37.53011 45.37588,37.94805 46.01265,38.14619 45.99788,38.28967 46.26418,37.70404 46.70001,38.59312 46.65932,38.39439 46.72139,38.49885 46.87507,39.30454 47.02416,39.2142 47.2791,39.58847 47.87761,40.47378 48.12815,40.0896 49.5146,37.40024 50.26627,36.56504 50.18275,34.46033 52.27075,32.87347 52.48791,31.90463 52.23735,31.85452 53.12265,32.32224 53.49015,31.10284 54.37546,31.23648 55.46122,28.58053 55.8454,28.24113 56.27555,27.9718 56.82376,27.66686 56.83715,27.85104 57.30485,27.32212 57.54839,27.82688 57.85849,27.44971 58.50935,27.54815 58.86166,28.18678 59.30873,28.04841 59.47015,28.11032 59.79525,28.35409 59.65744,29.1304 59.98737,30.2407 59.91512,29.87385 60.16388,28.62092 60.3523,28.4467 60.54326,28.71409 60.43666,28.55463 60.60149,28.74478 60.72201,28.74918 60.73083,27.8018 60.5494,30.94843 62.31269,31.58095 62.90803,29.98095 63.75448,30.55125 64.11019,30.05301 64.40425,30.08586 64.77503,29.59626 64.98994,29.89286 65.10344,29.60952 65.25109,29.88122 65.56409,29.73441 65.62791,30.12272 65.66451,30.10133 65.83206,29.02974 66.91658,30.03453 67.66936,28.65979 68.19511,28.45037 68.54767,28.80354 68.87493,28.43475 68.90842,28.92693 69.05738,30.10989 69.46273,30.11127 69.66338,30.92936 69.57227,30.83539 69.78523,31.42713 69.70583,31.256 69.57366,31.81601 69.65076,31.78155 69.8315,32.08978 69.76392,31.91456 69.94856,33.08357 69.74338,32.85202 69.56254,31.96296 69.62888,32.52147 69.50045,32.2112 69.41406,33.06524 69.45255,32.82973 69.28968,33.50263 69.39146,33.22475 69.25066,33.43694 69.16953,33.82619 69.30338,35.70131 69.1909,35.72731 69.00615,35.81894 69.18346,36.28549 69.09692,38.44433 68.29055,39.65535 68.01017,39.84422 68.03217,39.75326 68.16006,40.47012 67.71731,41.04241 67.62479,40.95098 67.44229,41.38123 67.11272,41.2007 66.81772,40.37266 66.37833,39.10674 66.09283,37.91672 66.07623,34.48362 66.53726,34.16911 66.78398,33.51696 66.71313,32.85182 66.96944,32.96323 67.08738,32.36699 67.15379,31.85411 67.12916,33.27506 66.61634,33.22582 66.62206,32.87348 66.5225,33.67265 66.33282,33.00989 66.25372,34.10589 66.22401,34.85258 65.85934,34.64494 65.78228,34.79813 65.58572,34.67695 65.44629,34.28074 65.37086,34.78024 64.99444,34.95678 64.83234,34.73631 64.74281,34.9715 64.61633,34.77781 64.51678,34.97318 64.42013,37.36407 63.79004,38.0781 64,37.89503 64.21313,38.04221 64.32653,37.33078 64.34241,36.53646 64.71412,36.43211 64.91527,36.80934 64.95979,36.83111 65.14846,38.35836 64.84514,38.01637 64.7575,38.01634 64.58232,38.43861 64.80898,40.40347 64.54486,40.4071 64.54437,40.4982 64.58804)),((113.1439 75.63515,113.5698 75.55331,113.1439 75.63515)),((54.3793 73.35465,54.02171 73.36783,54.72594 73.64162,55.98956 73.63071,55.12049 73.70009,55.40813 73.77931,53.96772 73.62244,53.67546 73.79038,54.87809 73.92935,54.59021 73.99638,55.02927 74.15511,56.35002 74.0074,55.10872 74.24159,55.83978 74.26353,55.34871 74.41091,56.24519 74.48576,55.57513 74.62938,56.96211 74.68848,55.88097 74.78727,56.72857 74.93738,55.90469 74.96282,55.83951 75.13445,56.07654 75.19372,56.44022 75.04382,57.0579 75.37331,57.88976 75.31409,57.56399 75.47554,58.25322 75.58334,58.05564 75.66513,60.27382 76.09396,60.81613 76.11137,60.44459 75.9996,60.77626 75.98638,61.18348 76.10476,60.93505 76.14227,61.08066 76.26304,64.74003 76.34335,67.53819 76.99086,68.46478 76.96027,69.07032 76.7047,68.29228 76.25085,61.33072 75.31985,60.76073 75.01344,59.99205 74.98163,60.65992 74.9114,60.16818 74.86159,60.30886 74.74047,59.46324 74.79279,59.77039 74.57285,59.16003 74.73829,59.15107 74.422,58.22176 74.54754,58.72907 74.22041,58.28712 74.16139,58.5358 74.1158,58.12624 74.14595,58.16906 73.97439,57.48231 74.1876,57.19032 74.07583,57.88987 73.90184,57.67302 73.71262,56.59261 73.88577,57.61684 73.61811,56.40674 73.73714,57.22775 73.47999,56.74327 73.23316,56.12612 73.2616,55.76121 73.51465,55.93729 73.29726,55.60111 73.30964,56.55836 73.14988,55.51849 72.93986,56.23978 72.94689,56.09948 72.78261,55.45324 72.80682,55.90625 72.65137,55.63417 72.6834,55.58838 72.52284,55.08148 72.58209,55.54156 72.50906,55.12175 72.44775,55.45898 72.42695,55.29251 72.27692,55.57356 72.17113,55.14277 71.90808,55.5059 71.88631,56.19815 71.1861,57.58368 70.71062,56.74617 70.67592,57.28765 70.54507,55.41106 70.73708,55.16938 70.54546,54.50415 70.80718,54.75187 70.63685,53.33661 70.86486,53.74715 70.81517,53.56914 71.0859,54.25019 71.09013,53.33504 71.32735,53.49966 71.54619,52.9458 71.37142,52.5448 71.7139,52.45138 71.46111,51.5713 71.57182,51.43204 71.82805,51.57411 72.05993,52.45331 72.05089,52.68928 72.44264,53.28335 72.56269,52.70363 72.6193,53.69415 72.64285,52.40007 72.71584,53.2043 72.87841,53.62158 72.88132,53.06304 72.94883,53.37401 73.01066,53.16602 73.06858,53.37839 73.21882,54.3793 73.35465)),((-174.3079 67.0621,-171.7201 66.95611,-169.8248 66.16167,-169.7244 66.01048,-170.597 65.8501,-170.5831 65.60438,-171.474 65.83848,-170.98 65.58222,-171.0532 65.46355,-172.7096 65.67041,-172.3483 65.41756,-172.0769 65.47713,-172.2142 65.31131,-172.0752 65.08668,-172.897 64.84093,-172.742 64.76914,-172.9763 64.56869,-172.2269 64.40627,-172.9542 64.49267,-172.8122 64.35699,-173.3679 64.29704,-173.1589 64.44193,-173.3445 64.60548,-173.3007 64.43904,-173.627 64.32809,-174.2284 64.65853,-175.8762 65,-175.7211 65.1405,-176.0213 65.45609,-177.2098 65.53393,-177.2124 65.53264,-178.211 65.45192,-178.3044 65.45457,-178.9054 66.03407,-178.4771 66.12198,-178.4686 66.38958,-178.8343 66.15221,-179.0378 66.36443,-179.3858 66.30019,-179.2209 66.15373,-179.6719 66.15983,-179.7817 65.94515,-179.2594 65.5298,-180 65.02757,-179.9922 68.9772,-175.2816 67.66474,-174.725 67.24392,-174.9096 67.08244,-174.7011 66.72852,-174.9572 66.65952,-174.4307 66.52804,-174.3758 66.32382,-173.685 66.4394,-174.2487 66.49675,-173.9197 66.66508,-174.0034 66.98097,-174.5595 67.02987,-174.3079 67.0621)),((94.85079 80.07516,91.46669 80.25947,92.76982 80.33351,91.98838 80.40828,92.87981 80.47652,93.38114 80.76008,92.58621 80.72775,93.15398 80.93066,95.23175 81.16602,95.88255 81.25642,98.00768 80.66081,96.72164 80.71401,97.22813 80.62313,97.11929 80.50292,97.46917 80.29011,95.25292 80.10089,98.11304 80.06406,96.48049 79.71849,97.73301 79.81091,97.22299 79.59293,98.52047 79.87872,98.51108 80.04414,99.3255 80.05867,100.155 79.78369,99.86949 79.74901,99.84386 79.27608,99.22449 79.27998,100.0486 78.94768,98.41129 78.77001,94.90891 79.04713,94.38945 79.24464,94.4147 79.48191,93.7023 79.56838,93.07658 79.56699,94.73635 79.77637,94.3811 79.98315,94.85079 80.07516)),((143.2503 53.13401,143.252 53.12804,143.2672 53.07361,143.2793 52.94373,143.2823 52.9357,143.1921 51.88258,143.203 51.51143,143.3579 51.64766,143.7874 50.31884,144.7516 48.65234,144.0328 49.25991,142.9817 49.12775,142.5602 47.70694,143.1654 46.84499,143.4839 46.81414,143.6175 46.36786,143.4172 46.02223,143.3074 46.50419,142.6902 46.75058,142.4091 46.57967,142.0823 45.88929,141.8132 46.53418,142.0507 47.05016,141.9675 47.6134,142.2061 47.98304,141.8423 48.76961,142.1384 49.51562,142.0402 50.55153,142.2494 51.14658,141.6261 51.88739,141.9199 53.05185,141.7533 53.36644,142.6693 53.49287,142.4826 53.65508,142.7896 53.70277,142.6899 53.84386,142.5829 53.69141,142.6888 53.93698,142.2618 54.30004,142.5674 54.20958,142.7047 54.41357,142.9934 54.07883,142.8093 53.86835,143.2503 53.13401)),((139.0953 76.12658,140.9257 75.6274,141.0737 75.63609,140.9017 75.77117,141.0425 76.05117,141.7269 75.99868,141.4122 76.17501,145.4137 75.49647,144.872 75.42966,144.9884 75.27302,144.4229 75.05519,143.5228 75.05939,143.7205 74.94658,143.4369 74.88986,142.4319 74.80753,141.97 74.92403,142.3792 74.91918,142.2506 75.01884,139.9866 74.79781,139.691 74.97329,139.1797 74.63687,138.1431 74.77855,136.9512 75.34443,137.3091 75.47742,137.0095 75.59011,137.1664 75.72011,137.6106 75.78152,137.4847 75.9388,139.0953 76.12658)),((101.303 79.10058,101.8027 79.33735,102.3329 79.18193,102.3337 79.39771,102.9123 79.35831,103.1973 79.28683,102.4189 78.78143,103.87 79.16038,104.6946 78.86359,104.0856 78.85116,105.2044 78.79447,105.3864 78.53106,104.8528 78.31322,99.6047 77.95125,99.49225 78.02908,99.69765 78.16306,100.647 78.59775,100.3885 78.60424,100.5102 78.70333,101.2791 78.73557,100.8691 78.84018,101.0734 78.99502,101.6654 78.95022,101.1168 79.03197,101.303 79.10058)),((20.55576 55,20.59391 55,21.21554 54.92387,21.27649 55.2457,22.58557 55.07003,22.89281 54.81372,22.68608 54.58844,22.78779 54.36525,19.78606 54.43672,20.41205 54.68088,19.90449 54.63435,19.98434 54.96437,20.55576 55)),((146.3992 75.53217,147.026 75.32156,147.6312 75.44278,148.5786 75.37303,148.6227 75.1993,150.984 75.12556,150.6666 74.86657,148.2744 74.77046,146.1782 75.21423,146.3992 75.53217)),((142.0395 73.91537,143.3762 73.58673,143.6094 73.21416,139.8039 73.40452,140.6203 73.51381,141.1651 73.8659,142.0395 73.91537)),((-178.7127 71.57099,-178.5214 71.54985,-178.0889 71.46845,-177.5347 71.27624,-177.5925 71.10806,-179.5624 70.86082,-180 70.97481,-180 71.52834,-178.7127 71.57099)),((49.24596 80.57323,49.67633 80.68885,49.01678 80.78114,50.16521 80.94427,51.00276 80.85762,50.21344 80.74879,51.78249 80.70227,48.7802 80.37305,48.53498 80.27302,49.1139 80.16965,48.34258 80.07372,46.73793 80.30825,48.05873 80.30078,47.60544 80.39422,48.23674 80.44434,47.41751 80.4552,49.24596 80.57323)),((48.22332 68.86259,48.34939 69.30089,48.66958 69.44836,49.33182 69.49265,50.30279 69.12757,48.82998 68.72256,48.22332 68.86259)),((62.09539 80.84077,62.07396 80.59004,61.15728 80.36612,59.33807 80.48501,59.77873 80.80766,62.09539 80.84077)),((12.31084 58.38442,12.66163 58.61829,12.46118 58.73519,12.77856 59.00246,13.17945 58.88553,13.12933 59.10269,13.04581 59.25303,13.36319 59.31985,13.46342 59.20292,13.56365 59.23632,13.54694 59.31985,13.71399 59.35326,13.7641 59.28644,13.88101 59.23632,14.04805 59.28644,14.04805 59.18621,13.88101 59.05258,13.91442 58.95235,14.04805 59.05258,13.91442 58.85212,13.73069 58.71849,13.61376 58.6851,13.36319 58.60158,13.17945 58.48465,13.14604 58.58488,12.9957 58.58488,12.79527 58.48465,12.61152 58.38442,12.49459 58.35101,12.57811 58.46795,12.31084 58.38442)),((65 81.17093,65.38487 80.91269,64.90041 80.76444,63.13629 80.63741,62.5206 80.78021,65 81.17093)),((59.13943 70.41869,60.55285 69.79707,59.99367 69.65714,58.80408 69.96742,58.41834 70.25581,58.81364 70.2038,58.52017 70.33682,59.13943 70.41869)),((57.17137 80.30888,57.0096 80.45027,59.31664 80.32092,58.0207 80.16171,57.19404 80.28905,57.0572 80.06345,55.82498 80.0899,56.15305 80.17767,55.94777 80.30117,57.00672 80.33948,57.17137 80.30888)),((179.9832 71.53181,180 70.97478,178.7495 70.78169,178.6146 71.01589,179.9832 71.53181)),((48.46035 80.73998,48.71847 80.62312,47.6736 80.76824,46.27543 80.44254,44.88595 80.59377,47.43914 80.852,48.46035 80.73998)),((70.51064 73.46571,71.27184 73.42784,71.64835 73.17366,69.93626 73.0087,69.98754 73.38631,70.51064 73.46571)),((91.24138 80.03845,93.90546 79.91269,91.7907 79.64763,91.27856 79.74815,92.40354 79.76885,91.2904 79.83881,91.45201 79.9135,91.24138 80.03845)),((112.5646 74.52036,113.4315 74.43113,112.8444 74.08443,111.4898 74.29467,112.041 74.36967,112.0178 74.54803,112.5646 74.52036)),((168.2988 70.01192,169.4584 69.81021,169.2016 69.55118,168.3798 69.63025,167.7772 69.81078,168.2988 70.01192)),((56.58947 80.74642,56.51231 80.74235,54.49223 80.99286,54.86309 81.09415,57.83117 80.76485,56.86874 80.69815,56.58947 80.74642)),((164.3488 59.1195,164.6138 59.22999,164.6557 58.87013,163.4157 58.54025,163.9315 58.99274,163.7042 58.9957,164.3488 59.1195)),((148.6178 45.48572,148.8774 45.5299,148.8486 45.32803,147.6669 44.9995,146.8553 44.45377,147.9398 45.42991,148.2573 45.25557,148.6178 45.48572)),((137.4374 55,137.6375 55.1948,138.2235 55.02222,137.7161 54.60864,137.4762 54.86153,137.241 54.7595,137.4374 55)),((155.8906 50.68039,156.1315 50.75882,156.1692 50.59876,155.8898 50.24759,155.2271 50.05127,155.2115 50.29393,155.6408 50.37805,155.8906 50.68039)),((55.76814 81.30657,57.96063 81.29467,56.42086 81.15563,55.57701 81.202,55.49142 81.31632,55.76814 81.30657)),((165.8757 55.34595,166.2677 55.31407,166.6672 54.66467,165.6879 55.28865,165.8757 55.34595)),((140.6796 74.27116,141.1109 74.21584,141.0288 73.99573,140.5486 73.90372,140.203 74.07412,140.6796 74.27116)),((52.45782 80.18242,52.21942 80.24835,53.0352 80.38749,53.94748 80.23,52.45782 80.18242)),((70.74767 66.65314,70.77215 66.69656,70.79721 66.73404,71.59683 66.82323,71.54283 66.62331,70.82758 66.63313,71.02138 66.54991,70.73387 66.48704,70.33683 66.56591,70.74767 66.65314)),((79.37695 72.9934,79.52377 72.71258,78.60709 72.83343,79.17096 73.0929,79.37695 72.9934)),((82.91557 70.55383,82.65272 70.76055,82.84393 70.94331,83.11126 70.74729,83.03121 70.65115,82.94832 70.55158,82.96266 70.3782,82.46949 70.59068,82.62025 70.76324,82.91557 70.55383)),((77.81749 72.5938,78.31659 72.39473,76.84759 72.30229,77.81749 72.5938)),((135.6288 75.69395,135.7461 75.87301,136.2386 75.62299,135.5795 75.36459,135.6288 75.69395)),((61.33288 81.10697,61.58058 81.01769,61.10041 80.90437,60.00123 80.97356,61.33288 81.10697)),((57.81933 80.81454,56.10005 81.09599,58.3001 80.91582,57.81933 80.81454)),((146.159 44.26355,145.4329 43.71735,146.0931 44.48294,146.5776 44.45213,146.159 44.26355)),((96.33821 76.09833,95.31268 76.22487,96.41329 76.30412,96.69438 76.23248,96.33821 76.09833)),((52.92279 71.31572,53.26419 71.18941,53.0453 70.93996,52.63523 71.2747,52.23945 71.28942,52.92279 71.31572)),((57.81965 81.52337,58.57087 81.43438,58.30226 81.37794,56.83438 81.4653,57.81965 81.52337)),((58.57271 81.83858,59.37563 81.8244,58.18936 81.68636,57.91254 81.81087,58.57271 81.83858)),((150.4105 46.22131,150.5818 46.22425,150.1453 45.89111,149.416 45.57236,150.4105 46.22131)),((74.48667 73.11058,74.89085 73.0414,74.7 73.06737,74.64056 72.85061,74.07414 72.98733,74.48667 73.11058)),((55 80.8735,55.97357 80.76895,54.19998 80.77751,55 80.8735)),((90.92747 81.03186,90.07881 81.10547,91.60179 81.17816,90.92747 81.03186)),((76.83112 79.47069,76.17468 79.64875,77.60796 79.49898,76.83112 79.47069)),((50 80.22242,50.38718 80.19159,50.12312 80.05275,49.54557 80.15204,50 80.22242)),((82.23524 70.44041,82.39281 70.59411,82.93291 70.36163,82.2646 70.40834,82.23524 70.44041)),((95.76112 77.07336,96.58344 77.13605,95.73912 76.91894,96.01563 77.0155,95.30161 76.97751,95.76112 77.07336)),((112.435 76.61292,112.7757 76.52644,112.6381 76.424,112.0189 76.60962,112.435 76.61292)),((54.14156 80.59067,54.54229 80.47465,53.8903 80.4479,53.83424 80.56947,54.14156 80.59067)),((-40.83127 64.92065,-40.22419 64.44716,-40.53018 64.49117,-40.83127 64.92065)),((59.02744 81.29298,58.52892 81.34538,59.23543 81.42448,59.35094 81.32401,59.02744 81.29298)),((137.3113 71.47205,137.2906 71.47357,137.9337 71.57602,137.7808 71.40367,137.3113 71.47205)),((86.89864 74.80553,86.23676 74.88707,87.04796 74.99056,86.72055 74.90353,86.89864 74.80553)),((57.50334 81.0971,56.99825 81.16486,58.09269 81.18685,57.50334 81.0971)),((58.41065 80.92764,57.86178 81.03998,58.6842 81.02501,58.41065 80.92764)))
+MULTIPOLYGON(((-73.98766 40.71467,-74.27888 40.49207,-73.99971 40.47089,-74.10079 39.75806,-74.14362 39.98888,-74.44784 39.3762,-74.50224 39.34725,-74.53178 39.33154,-74.53561 39.31553,-74.77111 39.0632,-74.77276 39.05719,-74.97454 38.93808,-74.89513 39.15727,-75.62909 39.59673,-75.09157 38.79139,-75.06089 38.60616,-75.2858 38.58674,-75.06735 38.599,-75.07094 38.43824,-75.19289 38.26284,-75.90184 37.18869,-75.81254 37.71569,-75.64317 37.97321,-75.8979 37.92933,-75.75179 38.08444,-75.95638 38.12623,-75.86815 38.35305,-76.0362 38.21486,-76.28024 38.48143,-76.13392 38.53638,-76.29053 38.62801,-75.97314 38.60062,-76.24818 38.76892,-76.2859 38.75221,-76.16158 38.86921,-76.14548 38.87322,-76.36966 38.92945,-76.14722 38.99947,-76.27785 39.14784,-75.95139 39.58261,-76.58588 39.17646,-76.39847 39.01405,-76.61121 38.9714,-76.32822 38.03932,-77.02212 38.49105,-77.21246 38.39021,-76.24836 37.89038,-76.36376 37.60291,-76.90633 37.97502,-76.30454 37.55298,-76.27406 37.30688,-76.46321 37.24319,-76.80559 37.48755,-76.30595 37.00014,-76.9477 37.22442,-76.44678 36.90483,-76.00096 36.92537,-75.91353 36.64815,-76.03982 36.49754,-75.79812 36.07376,-76.14029 36.28764,-76.07106 36.13816,-76.7242 35.95586,-76.05511 35.98423,-76.03706 35.64447,-75.81004 35.95577,-75.73165 35.62489,-76.16335 35.32164,-76.9315 35.44542,-76.47143 35.25912,-76.98331 35.00599,-76.28406 34.94073,-77.799 34.21786,-78.01891 33.8899,-78.77863 33.7722,-79.25211 33.11812,-80.00917 32.61446,-80.54631 32.5124,-80.55367 32.33615,-80.55548 32.33134,-80.83809 32.47521,-80.67422 32.21772,-81.20229 31.736,-81.48198 30.9878,-81.24987 29.76809,-80.52784 28.46446,-80.58482 28.15488,-80.0308 26.79992,-80.1182 25.90679,-80.42825 25.24681,-80.24875 25.33744,-80.57894 24.94721,-80.46434 25.20786,-81.13786 25.15631,-81.13807 25.3254,-80.89446 25.24905,-81.34302 25.81616,-81.73025 25.91104,-82.00932 26.49358,-81.75209 26.72557,-82.05271 26.54706,-82.02471 26.97271,-82.22161 26.97569,-82.1507 26.79684,-82.28456 26.81848,-82.69652 27.47772,-82.39742 27.94416,-82.53821 27.83809,-82.70294 28.04263,-82.65002 27.70326,-82.85555 27.86606,-82.60386 28.71526,-82.7988 29.17272,-83.03533 29.16673,-84.17139 30.21199,-84.46233 30.01124,-84.35007 29.89636,-85.37386 29.71445,-85.59927 30.10895,-85.73322 30.18143,-85.58951 30.3044,-85.84467 30.28739,-85.73206 30.12306,-86.44302 30.48984,-87.18488 30.34152,-86.87053 30.43526,-87.033 30.62559,-87.09432 30.43402,-87.18123 30.57686,-87.26764 30.33824,-87.54722 30.27342,-87.42487 30.39606,-87.5643 30.30103,-87.74482 30.28814,-87.98131 30.75492,-88.13259 30.30797,-88.95489 30.45198,-89.71393 30.16832,-90.15164 30.40045,-90.37897 30.06391,-89.75442 30.07346,-89.77032 30.06277,-89.62153 29.86591,-89.41939 30.02819,-89.33909 29.77735,-89.7756 29.6011,-89.02319 29.21291,-89.11143 29.0893,-89.41136 28.92029,-89.46288 29.24842,-89.82258 29.30713,-89.76371 29.47885,-89.94997 29.53209,-90.21764 29.53438,-90.04221 29.44281,-90.09554 29.20963,-89.95142 29.25688,-90.1577 29.10529,-90.34677 29.29484,-90.60876 29.30393,-90.64472 29.13036,-91.10709 29.28798,-91.24968 29.62971,-91.28576 29.4684,-91.38747 29.65893,-91.55258 29.51426,-91.61654 29.74265,-91.96894 29.83194,-92.20219 29.75024,-92.00992 29.60893,-92.28888 29.52802,-93.33588 29.76046,-93.28835 30.05209,-93.3742 29.82718,-93.36663 29.82329,-93.83128 29.68867,-93.7466 30,-93.93451 29.79722,-93.91193 29.76888,-94.76105 29.35688,-94.46409 29.55338,-94.77911 29.52567,-94.80283 29.76133,-95.07311 29.56185,-94.90401 29.41694,-95.29653 28.92581,-96.36286 28.39534,-95.97602 28.65344,-96.40722 28.71888,-96.47455 28.56593,-96.66185 28.69107,-96.39734 28.43298,-96.66584 28.30939,-96.79382 28.48027,-96.78293 28.22418,-97.2196 28.07308,-97.02608 28.02376,-97.39124 27.81165,-97.24153 27.68693,-97.40581 27.32655,-97.76814 27.45467,-97.77904 27.27712,-97.42342 27.25967,-97.5862 26.84757,-97.16439 26.06026,-97.15015 25.94769,-97.37753 25.83655,-99.08967 26.40093,-99.51466 27.56314,-101.4006 29.76785,-102.3142 29.87947,-102.6814 29.72309,-103.1495 28.97568,-103.3844 29.02264,-104.5407 29.68035,-104.921 30.60049,-106.5211 31.77821,-108.2035 31.78346,-108.2059 31.33134,-111.0648 31.32881,-114.8062 32.49187,-114.717 32.71676,-117.1236 32.53462,-117.5182 33.34199,-118.4071 33.74527,-118.5426 34.04146,-120.6398 34.56411,-120.6491 35.14135,-121.9019 36.30948,-121.8971 36.96305,-122.4039 37.19444,-122.513 37.77975,-122.109 37.5172,-122.4274 37.9653,-122.2615 38.06841,-122.5253 38.14785,-122.5284 37.81554,-123.0203 37.99454,-122.9987 38.29549,-123.7235 38.91683,-123.8505 39.83137,-124.4054 40.44267,-124.0549 41.53893,-124.5614 42.83796,-124.1643 43.81684,-123.9344 45.41414,-124.0222 46.22642,-123.4921 46.26481,-124.0838 46.26403,-124.0609 46.63499,-123.9417 46.41284,-123.938 46.43478,-123.7937 46.66664,-124.135 46.90166,-123.8255 46.96188,-124.1712 46.92815,-124.7278 48.38123,-123.1781 48.1437,-122.5823 48,-122.769 48.22422,-122.6079 48.41058,-122.5031 48.29779,-122.7331 48.22487,-122.5391 48.01093,-122.1737 48,-122.7561 49.00119,-95.16467 48.99572,-95.16843 49.38861,-94.82763 49.31594,-94.59069 48.72066,-93.76878 48.51838,-92.98031 48.63298,-92.37912 48.23077,-92.08531 48.36502,-91.58295 48.04938,-90.86729 48.24529,-90.75883 48.08698,-89.56577 47.99149,-89.8007 47.86091,-90.43546 47.72727,-90.88647 47.56023,-91.63815 47.00898,-92.05575 46.77515,-92.02234 46.69162,-91.78848 46.69162,-91.32077 46.82526,-90.88647 46.9756,-90.78624 46.89207,-90.95329 46.55799,-90.70272 46.65821,-90.46887 46.55799,-89.91763 46.70833,-89.39981 46.89207,-89.08244 47.02569,-88.69825 47.25955,-88.26393 47.4433,-87.89645 47.46,-87.76282 47.39318,-88.23052 47.20944,-88.44769 46.92548,-87.84634 46.89207,-87.59578 46.74174,-87.39533 46.52458,-86.71047 46.49117,-86.25947 46.65821,-85.77505 46.70833,-85.00666 46.75844,-84.98995 46.49117,-84.57236 46.39095,-84.10887 46.51847,-84.15475 46.32413,-84.07124 46.15709,-83.83737 46.04015,-83.58682 46.09027,-83.45319 45.97336,-83.65363 45.90654,-84.08794 45.97336,-84.3719 45.92324,-84.63918 46.00677,-84.7394 45.83972,-85.02336 46.02345,-85.47437 46.10697,-85.608 45.97336,-86.17594 45.92324,-86.4265 45.7562,-86.74388 45.80631,-86.81068 45.7395,-87.01114 45.78961,-87.36192 45.45552,-87.61249 44.97112,-87.82964 44.87089,-87.99667 44.62033,-87.79623 44.63703,-87.57908 44.82078,-87.34521 45.05462,-87.01114 45.30518,-86.97773 45.15484,-87.56237 44.35305,-87.52896 44.23613,-87.72942 44.00229,-87.71272 43.78513,-87.86304 43.41763,-87.91315 43.11695,-87.81293 42.73277,-87.81293 42.28176,-87.62919 41.93099,-87.41203 41.64701,-87.11137 41.64701,-86.82739 41.76394,-86.56013 42.06462,-86.30957 42.38198,-86.20935 42.68266,-86.22606 42.96664,-86.35968 43.26729,-86.47661 43.61808,-86.4265 43.80183,-86.52673 44.01899,-86.40979 44.18601,-86.25947 44.48669,-86.25947 44.65373,-86.15924 44.70385,-86.0256 44.9043,-85.54118 45.12143,-85.65812 44.98782,-85.608 44.77066,-85.40755 44.8876,-85.37415 45.02123,-85.37415 45.17155,-85.29063 45.30518,-85.04007 45.32189,-85.00666 45.40541,-85.09018 45.42211,-85.12359 45.57245,-85.00666 45.70609,-84.72269 45.72279,-84.22157 45.58916,-84.13805 45.50563,-83.45319 45.33859,-83.28615 45.03793,-83.41978 45.08802,-83.43648 44.98782,-83.30286 44.87089,-83.33627 44.55351,-83.53671 44.23613,-83.55341 44.11919,-83.85408 43.95217,-83.97101 43.76842,-83.72045 43.55127,-83.55341 43.6849,-83.36966 43.88535,-83.11911 44.01899,-82.91866 44.0691,-82.68481 43.93547,-82.61799 43.6849,-82.51776 43.20047,-82.37823 42.95786,-82.50106 42.64925,-82.6681 42.53232,-82.6514 42.64925,-82.75163 42.64925,-82.83514 42.61584,-82.88525 42.48221,-82.91866 42.33187,-83.13581 42.24835,-83.18593 42.01451,-83.38637 41.88087,-83.45319 41.73053,-83.36966 41.66372,-83.15252 41.6136,-82.95206 41.53008,-82.75163 41.53008,-82.51776 41.39645,-82.31732 41.42986,-82.10017 41.49667,-81.74938 41.49667,-81.3819 41.71383,-80.5968 41.93099,-79.7449 42.29846,-79.36071 42.4655,-79.14355 42.56573,-79.00992 42.68266,-78.90971 42.73277,-78.92641 42.91652,-79.00992 42.98334,-79.02663 43.06686,-79.07674 43.11695,-79.07674 43.23388,-78.52551 43.33411,-77.72372 43.33411,-77.55667 43.23388,-77.00545 43.284,-76.53773 43.46775,-76.25376 43.53456,-76.22035 43.6682,-76.25376 43.80183,-76.27047 43.88535,-76.18694 43.85195,-76.15353 43.88535,-76.32058 44.00229,-76.3874 44.0691,-76.33729 44.20272,-76.13676 44.30282,-75 44.97811,-74.66793 45.0026,-71.53727 45,-71.2938 45.29987,-70.86777 45.23078,-70.25917 45.88986,-70.30109 46.19219,-69.98644 46.6995,-69.22559 47.45865,-68.89502 47.17887,-68.2367 47.3573,-67.78654 47.06619,-67.81347 45.68372,-67.4472 45.60041,-67.46207 45.24411,-67.09035 45.07576,-66.97901 44.86927,-66.97279 44.85178,-68.03481 44.4864,-68.05862 44.32999,-68.26769 44.49398,-68.33674 44.22467,-68.37878 44.42384,-68.59048 44.4096,-68.53169 44.22762,-68.83547 44.31098,-68.75982 44.5208,-69.0632 44.44376,-69.14104 43.99013,-69.83807 43.70461,-70.09378 43.85207,-70.33942 43.54007,-70.71558 43.15908,-70.83032 42.68554,-70.59549 42.63744,-70.99018 42.45941,-70.92501 42.25277,-70.27111 41.70403,-70.05318 41.79193,-70.01534 41.54635,-70.16691 41.6892,-70.69456 41.52509,-70.61455 41.7685,-71.1951 41.45945,-71.17753 41.71644,-71.38929 41.80583,-71.48842 41.36469,-72.05358 41.32679,-72.95657 41.3075,-73.97534 40.73178,-73.48306 40.91101,-72.26098 41.14254,-72.8671 40.74208,-73.94196 40.54873,-73.98766 40.71467)),((-163.3118 54.81525,-163.0629 54.6576,-163.3772 54.74283,-164.6413 54.38886,-164.9407 54.52951,-164.4837 54.91759,-163.6624 55.03736,-163.3441 54.83573,-163.3372 55.08929,-162.4657 55.36859,-162.6259 55.43608,-162.0495 55.78507,-160.8524 55.93177,-160.8582 55.92899,-161.0182 55.89508,-160.7998 55.71012,-160.6521 55.7272,-160.7831 55.88313,-160.2531 55.76408,-160.5772 55.91076,-160.3845 56.25481,-158.8871 56.88484,-158.6865 56.78305,-158.3461 57.25614,-157.59 57.49617,-157.5875 58.12745,-157.3654 58.23081,-157.5424 58.38252,-156.9806 58.72009,-157.0166 58.96766,-158.185 58.61168,-158.5711 58.80559,-158.3128 59.02414,-158.4411 59.07678,-158.9048 58.7387,-158.6999 58.49014,-158.9013 58.39078,-159.4952 58.81642,-159.595 58.95609,-159.9049 58.76834,-160.3585 59.07383,-161.7632 58.55006,-162.1709 58.65134,-161.7583 58.7966,-162.0437 59.2616,-161.708 59.5,-162.2101 60.03709,-164.1409 59.84983,-164.0991 59.99654,-165.1321 60.4314,-164.9695 60.53978,-165.424 60.55106,-164.9691 60.72097,-165.1989 60.9812,-165.0142 61.05541,-165.5829 61.0985,-165.8922 61.33951,-165.7713 61.50361,-166.1927 61.58073,-165.7774 61.67631,-166.1053 61.80931,-165.6114 61.85868,-165.7494 62.07237,-164.8031 62.59517,-164.8902 62.78291,-164.5801 63.14024,-163.6942 63.13641,-163.6978 63.13167,-163.3801 63.04647,-163.374 63.04673,-162.6747 63.2249,-162.3155 63.54072,-161.4539 63.45604,-160.9041 63.65336,-160.7725 63.76305,-160.9707 64.22994,-161.5331 64.38034,-160.7877 64.62657,-160.8719 64.83627,-162.1718 64.67966,-162.7818 64.32538,-163.1263 64.64933,-163.3835 64.58038,-163.0243 64.51266,-163.1719 64.40102,-163.7706 64.57379,-165.0079 64.43317,-166.2234 64.58187,-166.866 65.11819,-166.3538 65.28329,-168.0989 65.6843,-165.4601 66.40849,-163.8464 66.55461,-163.8254 66.27031,-164.1963 66.19578,-163.7607 66.06143,-160.9987 66.189,-161.5263 66.39742,-161.9032 66.26526,-161.8764 66.51309,-162.6142 66.85083,-162.3184 66.94808,-161.5822 66.44195,-161.254 66.53391,-161.8801 66.71859,-161.4751 66.95222,-163.6951 67.10671,-164.1368 67.61349,-166.8384 68.34132,-166.3245 68.44492,-166.214 68.88184,-163.6908 69.07616,-163.1904 69.35981,-163.0165 69.8117,-162.2426 70.2306,-160.8289 70.37325,-159.2807 70.86278,-158.0181 70.83276,-156.6366 71.33396,-155.5239 71.10973,-156.1185 70.96185,-156.0081 70.75265,-155.2838 70.80817,-155.5184 70.94434,-155.0838 71.13541,-154.1833 70.76878,-152.2759 70.84442,-152.4758 70.63707,-152.0516 70.58219,-152.6021 70.54787,-151.7417 70.54659,-151.9826 70.43184,-149.7749 70.4884,-144.9519 69.95982,-143.2119 70.11563,-141.7768 69.78617,-141.5222 69.72273,-140.9922 69.64477,-141 60.32135,-139.9773 60.18466,-139.069 60.35199,-139.1862 60.09261,-137.5982 59.24158,-137.5208 58.91674,-137.0443 59.04448,-136.908 58.93143,-137.1353 58.83219,-136.6631 58.85749,-136.3393 58.68591,-136.544 58.61201,-136.0841 58.51116,-136.27 58.31458,-136.5195 58.45139,-136.3575 58.30202,-136.5997 58.368,-136.6454 58.20665,-138.4911 59.16981,-138.5062 59.18807,-139.845 59.53186,-139.4628 59.70977,-139.6285 59.89356,-139.4766 59.99577,-139.2926 59.56239,-139.2775 59.82567,-139.0525 59.83709,-139.505 60.05507,-139.8247 59.81968,-140.3441 59.6939,-141.4605 59.88712,-141.2092 59.97616,-141.5211 60.15619,-141.3711 60.03001,-141.7118 59.94888,-144.2539 60.02664,-143.9819 60.04849,-144.2098 60.1423,-144.0527 60.17208,-144.939 60.28714,-144.7309 60.45918,-145.9393 60.45403,-145.615 60.65666,-146.6579 60.68088,-146.096 60.8329,-146.574 60.84092,-146.7665 60.94191,-146.5761 61.04969,-147.3946 60.87113,-147.4206 61.01629,-147.5608 60.90497,-147.5164 61.14316,-147.6087 60.85125,-147.8926 60.82516,-148.0778 60.92884,-147.702 61.27226,-148.3547 60.80513,-148.7281 60.78513,-148.3756 60.76402,-148.4439 60.61724,-148.2374 60.76137,-148.4564 60.52448,-148.2922 60.43117,-147.9706 60.4977,-148.4518 60.18188,-148.1278 60.16656,-148.6429 59.91554,-149.1312 59.96432,-149.0347 60.0953,-149.3028 59.86865,-149.4395 60.12162,-149.608 59.78474,-149.7503 59.94116,-149.7457 59.63845,-150.0383 59.79882,-149.9222 59.68707,-150.2544 59.49024,-150.403 59.46766,-150.2297 59.73192,-150.9671 59.20012,-151.0537 59.30308,-151.9818 59.25793,-150.9246 59.7938,-151.4259 59.6,-151.8739 59.77604,-151.2194 60.526,-151.4176 60.71933,-150.382 61.03511,-149.0046 60.81922,-150.0739 61.16158,-149.3179 61.47567,-149.606 61.4985,-149.9874 61.2362,-150.6608 61.31284,-151.7396 60.91568,-151.7137 60.71682,-152.7225 60.24483,-152.5715 60.07566,-152.7069 59.92014,-153.2222 59.86509,-152.9938 59.80837,-153.2179 59.63506,-153.4599 59.78601,-154.2697 59.13859,-153.2531 58.84842,-154.1002 58.47763,-153.9881 58.39185,-154.3578 58.28476,-154.106 58.27777,-154.2155 58.13839,-155.0318 58.02443,-155.3048 57.72335,-155.6132 57.79116,-155.7351 57.53984,-156.5415 57.323,-156.3225 57.28986,-156.5606 56.97707,-157.4294 56.86127,-157.4624 56.62349,-158.1378 56.53439,-157.8667 56.47111,-158.3311 56.48208,-158.6678 56.26998,-158.1181 56.23659,-158.4115 56,-158.589 56.03551,-158.4534 56.18475,-158.6719 56.13659,-158.6633 55.94858,-159.5238 55.88407,-159.6756 55.60098,-159.5802 55.80091,-159.8493 55.84003,-160.4965 55.47541,-160.589 55.60629,-161.2391 55.3546,-161.4995 55.36195,-161.3553 55.61101,-161.5749 55.61732,-162.0401 55.22236,-161.9562 55.10414,-162.4821 55.05943,-162.3513 55.10466,-162.6655 55.29094,-162.5593 54.95132,-163.1694 55.13439,-163.0305 54.94361,-163.3118 54.81525)),((-135.8469 58.89944,-135.8505 58.89988,-136.1996 59.06943,-136.2365 58.75393,-137.0295 59.04845,-136.5758 59.17006,-136.2238 59.54335,-136.3462 59.60201,-135.4831 59.80002,-135.0289 59.56924,-134.96 59.2839,-133.3731 58.42699,-131.8473 56.66231,-132.422 56.67813,-132.4644 56.68121,-132.3622 56.82113,-132.9363 56.98676,-132.8037 57.09358,-133.5601 57.18224,-133.125 57.32744,-133.459 57.36337,-133.3336 57.44502,-133.6653 57.65044,-132.8832 57.49903,-133.5611 57.90702,-133.8342 57.9334,-133.3651 58.13492,-134.0368 58.05956,-133.9623 58.37809,-134.2288 58.21161,-134.7482 58.38002,-134.9315 58.8606,-135.1371 58.85104,-135.2646 59.2278,-135.084 59.2575,-135.33 59.23457,-135.3009 59.46252,-135.399 59.28764,-135.7105 59.46354,-135.2865 59.09553,-135.6129 59.25718,-135.1324 58.62214,-135.1394 58.20765,-135.5006 58.51162,-135.4605 58.37596,-135.9107 58.38246,-135.8239 58.60376,-136.0757 58.82156,-135.8906 58.88184,-135.8469 58.89944)),((-131.4072 55.92048,-131.5047 55.9255,-131.8433 55.94298,-131.9871 55.49357,-132.2825 55.7568,-131.9978 55.77553,-131.9654 56.17038,-131.5796 56.19768,-132.0562 56.36025,-131.9158 56.20236,-132.0612 56.11211,-132.3834 56.48544,-132.0971 56.36389,-132.3552 56.5911,-131.8436 56.64807,-130.1073 56.12453,-130.0106 55.903,-130.1724 55.74739,-129.9916 55.27802,-130.8241 54.76537,-130.9813 55.06348,-130.685 55.02736,-130.4683 55.33473,-130.7463 55.09144,-131.0682 55.11845,-130.621 55.29547,-130.8686 55.31176,-130.6357 55.64803,-130.8528 55.5455,-130.695 55.74617,-130.9036 55.70945,-130.8224 55.89029,-131.2092 55.91026,-130.9401 55.61683,-131.1602 55.19368,-131.3153 55.24173,-131.1985 55.39494,-131.4606 55.27512,-131.2745 55.42735,-131.3607 55.64489,-131.3237 55.43304,-131.4842 55.32287,-131.5127 55.50412,-131.5441 55.28986,-131.832 55.44715,-131.7183 55.53416,-131.5097 55.72923,-131.7366 55.7197,-131.4915 55.78184,-131.7132 55.82529,-131.4072 55.92048)),((-153.3376 57.72657,-153.3712 57.74371,-153.0456 57.81606,-153.2995 57.99662,-152.8133 57.91498,-152.8703 57.71915,-152.5912 57.92455,-152.3309 57.82117,-152.5607 57.71542,-152.4753 57.59804,-152.1607 57.58718,-152.3257 57.4308,-152.955 57.51889,-152.6267 57.40254,-152.7039 57.27811,-153.1571 57.36072,-152.9608 57.24783,-153.5417 57.17791,-153.7643 57.04919,-153.5808 57.04416,-153.6935 56.86005,-154.1497 56.75021,-153.7805 57.16878,-154.3138 56.84157,-154.8015 57.34629,-154.2051 57.66127,-153.6342 57.27068,-153.8784 57.64111,-153.5563 57.59649,-153.9379 57.80788,-153.624 57.88089,-153.4883 57.6131,-153.3376 57.72657)),((-170.4665 63.69576,-170.1065 63.4633,-168.6935 63.29181,-169.646 62.93705,-170.6081 63.36638,-171.5592 63.32071,-171.8498 63.48646,-171.7477 63.78433,-171.0882 63.57101,-170.4665 63.69576)),((-155.8214 20.26227,-154.8099 19.52062,-155.6782 18.91368,-155.9115 19.08803,-156.064 19.73091,-155.8214 20.26227)),((-133.3409 56.15327,-133.4346 56.15383,-133.6185 56.35644,-133.1687 56.32695,-132.9283 56.01316,-132.1383 55.45164,-132.5629 55.62103,-132.7275 55.34566,-132.4034 55.50951,-132.2799 55.4394,-132.4626 55.30733,-132.0925 55.27504,-132.4612 55.255,-132.3522 55.12712,-131.9989 55.26527,-132.3091 54.97902,-131.9803 55.03589,-132.1091 54.89707,-131.9522 54.78738,-132.298 54.71325,-132.38 55.08428,-132.4185 54.90588,-132.6053 54.96308,-132.5462 55.27383,-132.8183 55.18702,-132.827 55.1898,-133.2666 55.33158,-132.8578 55.34531,-133.136 55.46057,-132.9061 55.4766,-133.0885 55.55095,-132.9306 55.6254,-133.3878 55.62629,-133.1231 55.88276,-133.3409 56.15327)),((-136.0277 57.63404,-136.4137 57.82458,-136.3414 58.00237,-136.0057 57.83541,-136.4374 58.11353,-136.2693 58.22203,-136.0856 58.05678,-136.1544 58.21832,-135.7835 58.28746,-135.4844 58.16914,-135.7815 58.05488,-135.662 57.94392,-135.4055 58.14022,-134.9211 58.01601,-134.9289 57.84575,-135.2126 57.94773,-134.9355 57.80661,-135.1396 57.77315,-135.8926 58.00011,-135.4488 57.73281,-134.9276 57.76072,-134.8205 57.50137,-135.8171 57.77138,-135.5519 57.5846,-135.6969 57.36984,-136.0277 57.63404)),((-166.6097 60.3063,-165.6767 60.28886,-165.7247 60.05902,-165.5313 59.97916,-166.1926 59.75154,-167.142 60.00245,-167.4644 60.2093,-166.6097 60.3063)),((-134.5746 57.50663,-134.9407 58.4068,-134.6886 58.16124,-134.159 58.15123,-133.7952 57.6204,-134.3071 58.08672,-134.2957 57.83427,-133.8517 57.46404,-134.0966 57.466,-133.8503 57.36563,-134.1855 57.39364,-134.1002 57.24289,-134.6138 57.01692,-134.636 57.23553,-134.4292 57.30422,-134.5662 57.39762,-134.31 57.33554,-134.5746 57.50663)),((-135 56.66066,-135.2205 56.69049,-135.0134 56.81931,-135.3687 56.82158,-135.1266 56.92055,-135.3732 56.98154,-135.1087 56.98485,-135.6827 57.35492,-135.4757 57.35841,-135.5391 57.50872,-134.8422 57.26068,-134.6162 56.25714,-135.0521 56.53246,-134.82 56.74903,-135 56.66066)),((-133.7692 57.07434,-133.0985 56.99616,-132.9275 56.66636,-133.3631 56.8431,-133.0823 56.53033,-133.6454 56.43599,-133.6748 56.85608,-134.0408 57.02184,-133.7692 57.07434)),((-167.165 53.46146,-167.1005 53.52244,-167.0679 53.69091,-166.697 53.71228,-167.0854 53.91864,-166.209 53.9269,-166.6214 53.73442,-166.281 53.67983,-167.0431 53.44606,-167.6623 53.23619,-167.8523 53.30897,-167.165 53.46146)),((-133.9783 56.78539,-134.0442 56.64763,-133.8751 56.80941,-133.7001 56.58777,-133.9291 56.61729,-133.847 56.28588,-133.9743 56.36905,-133.9592 56.08216,-134.1241 56.26134,-134.1201 56.00291,-134.2826 56.35555,-134.0297 56.49991,-134.3151 56.56498,-134.0739 56.64552,-134.4165 56.83759,-133.9783 56.78539)),((-152.6732 58.07205,-153.226 58.18698,-152.8566 58.15434,-153.0927 58.27364,-152.7662 58.24134,-152.8927 58.40862,-152.1259 58.39702,-152.1506 58.2206,-151.9891 58.35028,-152.117 58.15111,-152.291 58.26395,-152.6732 58.07205)),((-147.469 60.08747,-147.1641 60.37337,-146.919 60.30186,-147.4848 59.85359,-147.9342 59.78352,-147.469 60.08747)),((-169.0627 52.83848,-168.6944 53.22089,-168.3516 53.25216,-168.345 53.4724,-167.7847 53.50721,-169.0627 52.83848)),((-174.5944 52.14303,-174.2772 52.20985,-174.4551 52.31911,-174.2674 52.40174,-173.9942 52.35456,-174.192 52.21893,-174.0914 52.10121,-175.3323 52.02393,-174.5944 52.14303)),((172.9132 52.741,172.4553 52.91609,172.6431 52.99778,173.4343 52.8462,172.9132 52.741)),((-156.6385 21.02172,-155.9847 20.71651,-156.4117 20.58434,-156.6385 21.02172)),((-157.956 21.69758,-157.7007 21.2627,-158.2339 21.48015,-157.956 21.69758)),((-132.5264 56.30662,-132.0966 56.10926,-132.2534 56.13256,-132.2148 55.92873,-132.4478 55.95982,-132.4533 56.16851,-132.6512 56.04821,-132.5264 56.30662)),((-177.904 51.59604,-178.2183 51.88571,-177.6081 51.8522,-177.904 51.59604)),((-176.936 51.5904,-176.9 51.80798,-176.7023 51.78551,-176.7704 51.96286,-176.4208 51.83135,-176.936 51.5904)),((-146.6152 60.23754,-146.4897 60.36406,-146.7288 60.34592,-146.6284 60.48171,-146.0841 60.40246,-146.6152 60.23754)),((-159.3872 22.22399,-159.4408 21.88081,-159.7891 22.0198,-159.3872 22.22399)),((-135.8291 57.29532,-135.617 57.23064,-135.6234 57.01297,-135.8496 57.00298,-135.8291 57.29532)),((-160 55.19365,-159.8708 55.28981,-159.8226 55.1287,-160.2164 54.8604,-160 55.19365)),((-173.4906 52.0243,-174.0453 52.13379,-172.9588 52.09604,-173.4906 52.0243)),((-132.6985 56.69904,-132.5312 56.58294,-132.9468 56.51829,-132.8091 56.61177,-132.9688 56.80367,-132.6985 56.69904)),((-177.6402 51.65364,-177.0416 51.90232,-177.1393 51.7084,-177.6402 51.65364)),((-72.47688 40.84109,-72.33081 41.03508,-71.85998 41.07202,-72.47688 40.84109)),((-161.0746 58.54728,-161.1766 58.69509,-160.6864 58.82161,-161.0746 58.54728)),((-165.8907 54.03064,-166.1153 54.12124,-165.9812 54.21906,-165.6628 54.11871,-165.8907 54.03064)),((-160.4965 55.30745,-160.8161 55.1173,-160.8698 55.32278,-160.4965 55.30745)))
+MULTIPOLYGON(((-58.1342 -33.02597,-58.20473 -31.87094,-57.79935 -30.8506,-57.87759 -30.51556,-57.61797 -30.17916,-57.22708 -30.28558,-56.83579 -30.0911,-56.0214 -30.78441,-56.00782 -31.06264,-55.62381 -30.8503,-55.2451 -31.25673,-54.52603 -31.50096,-53.71415 -32.10408,-53.59493 -32.43153,-53.07554 -32.73903,-53.51495 -33.16332,-53.52446 -33.68903,-53.37161 -33.75053,-54.14246 -34.68089,-54.94716 -34.98082,-55.46095 -34.73521,-56.15804 -34.93877,-57.12647 -34.46138,-57.8563 -34.48499,-58.22089 -34.15302,-58.43656 -33.52903,-58.35335 -33.13548,-58.1342 -33.02597)))
+MULTIPOLYGON(((61.11451 44.66727,61.13844 44.67618,61.12239 44.6563,61.75071 43.78181,64.30486 43.61873,66.15273 43.56479,66.80507 42.80331,66.58804 42.09577,68.43591 41.33429,70.55601 42.47714,70.93612 41.71566,67.45741 39.64825,67.89272 39.21294,68.32677 38.99591,68.48985 38.39752,67.62237 37.22717,66.31045 37.32011,65.76604 37.54458,65.64548 37.38977,65.3373 38.5606,63.65252 39.32208,62.23996 40.35579,60.44603 40.89898,60.06592 42.04183,58.97827 42.74936,57.23954 41.82354,57.23954 41.33429,55.93486 41.55257,56.09795 45.19688,58.75704 45.86393,59.3783 46.04139,59.2774 45.76174,59.51931 45.82307,59.5675 46.3592,59.85021 46.09455,60.77562 46.17736,60.73527 46.33081,60.43949 46.2855,59.9384 46.40144,60.27652 46.70614,60.40186 46.49827,60.73715 46.64245,60.51076 46.7757,60.83824 46.76168,60.98714 46.47668,61.66479 46.78025,61.17527 46.17042,60.8772 46.10632,60.86492 45.77643,61.13265 45.3161,61.34788 45.34447,61.31798 45.10165,61.72933 44.94716,61.80758 45.11567,61.79484 44.93174,61.11324 44.66904,61.11451 44.66727)))
+MULTIPOLYGON(((-61.2097 9.584465,-61.20908 9.58693,-60.79706 9.37693,-60.8659 9.036358,-60.8682 9.030631,-60.89254 8.908685,-60.90077 8.851967,-60.84422 8.841609,-60.85171 8.832647,-60.98471 8.571118,-59.99787 8.557567,-59.80846 8.273121,-60.71212 7.539176,-60.61609 7.206539,-60.28549 7.074996,-61.14338 6.717797,-61.11466 6.199507,-61.39627 5.961447,-60.73177 5.19614,-60.59009 4.941295,-60.97837 4.522421,-61.34529 4.530355,-61.93494 4.116556,-62.73957 4.032468,-62.7561 3.674234,-64.61086 4.251375,-64.08481 3.603836,-64.29391 3.170593,-64.24787 2.527704,-63.81604 2.314885,-63.37712 2.423593,-63.41759 2.133158,-64.04498 2.034915,-64.34303 1.39162,-64.39851 1.539462,-65.38742 0.863895,-66.31854 0.743681,-66.86983 1.225646,-67.19505 2.391271,-67.61562 2.812483,-67.85923 2.789513,-67.30263 3.397936,-67.87634 4.521809,-67.85004 5.290832,-67.47605 6.194591,-69.44788 6.114453,-70.08932 7.002468,-72.01836 7.011073,-72.48071 7.484616,-72.38087 8.321577,-72.76882 9.106619,-73.01078 9.296101,-73.37431 9.179666,-72.48579 11.09459,-72.23744 11.15238,-71.96606 11.65008,-71.32639 11.84789,-71.9631 11.56015,-71.57778 10.70763,-72.12893 9.81395,-71.99763 9.446594,-71.71617 9.391037,-71.70588 9.052748,-71.0612 9.319377,-71.02335 9.715961,-71.58749 10.80117,-70.0476 11.44202,-70 11.66138,-70.22527 11.61711,-70.29669 11.86659,-70.01847 12.20115,-69.61324 11.46071,-68.82822 11.44149,-68.4013 11.18558,-68.12967 10.48547,-66.23213 10.64486,-65.78642 10.20939,-65.09121 10.04332,-64.181 10.47311,-63.66295 10.47305,-64.22894 10.5008,-64.26272 10.66255,-61.8549 10.7554,-62.9038 10.52107,-62.33775 9.809538,-62.20023 10.02041,-61.2097 9.584465)),((-64.2709 11.06305,-64.04752 10.98658,-63.87902 11.16968,-63.77856 10.97322,-64.05508 10.86034,-64.40665 10.96881,-64.2709 11.06305)))
+MULTIPOLYGON(((-64.89504 17.71018,-64.79482 17.7937,-64.57767 17.74359,-64.89504 17.71018)),((-64.67789 18.42846,-64.56097 18.44516,-64.62778 18.39505,-64.728 18.37834,-64.67789 18.42846)))
+MULTIPOLYGON(((102.1496 22.40003,102.4978 22.78027,103.0307 22.44462,103.3324 22.82147,103.9694 22.50606,104.1109 22.80446,104.7335 22.82427,104.8184 23.12538,105.3316 23.38878,105.8806 22.92103,106.8187 22.81807,106.565 22.45686,106.697 21.96585,107.0213 21.94991,107.3836 21.59821,108.0241 21.55152,107.3848 21.27126,107.3558 21.00552,106.8705 20.92064,106.6408 21.04128,106.8109 20.67578,106.5614 20.68176,106.571 20.28312,105.9396 19.96568,105.7968 19.60766,105.5902 19.02375,105.812 18.43896,106.4377 18.11997,106.629 17.46822,107.8197 16.29067,108.0252 16.34285,108.2069 16,108.3356 16.12037,108.9428 15.24303,109.4633 12.87732,109.4454 12.56257,109.3441 12.79624,109.193 12.62406,109.2862 11.87812,109.1334 11.90551,109.2358 11.72428,109.0223 11.35512,107.9945 10.70015,107.1188 10.4191,106.7409 10.45916,106.534 9.574359,106.2877 9.605159,106.1819 9.359591,104.8384 8.559973,104.8611 9.710616,105.1106 9.944055,104.7842 10.21045,104.6006 10.13844,104.4453 10.421,104.8844 10.53115,105.1097 10.95593,105.3569 10.84966,105.7775 11.02648,106.1924 10.78987,105.8506 11.65794,106.4487 11.66724,106.418 11.97237,107.5572 12.36875,107.6185 13.51608,107.3392 14.11099,107.5446 14.68599,107.4715 15.00654,107.6967 15.25985,107.2178 15.73087,107.4526 16.08298,106.8739 16.53206,106.6789 16.45194,106.5534 16.99335,105.1911 18.32619,105.138 18.71571,103.8763 19.31214,104.1264 19.50412,104.0453 19.70294,104.6509 19.62435,104.9776 20,104.3783 20.44445,104.6435 20.66785,104.1231 20.98185,103.699 20.66491,103.1761 20.85108,102.8097 21.26276,102.986 21.69021,102.8436 21.84679,102.677 21.65939,102.1496 22.40003)))
+MULTIPOLYGON(((166.8918 -15.17098,167.0802 -14.93592,167.2465 -15.51878,166.8311 -15.66659,166.6198 -15.38821,166.609 -14.62651,166.8918 -15.17098)),((167.3787 -16,167.7624 -16.55241,167.4264 -16.53896,167.3899 -16.18786,167.1528 -16.08714,167.2089 -15.88183,167.3787 -16)),((168.1579 -16.10152,168.2923 -16.3483,167.9197 -16.26694,168.1579 -16.10152)),((169.0475 -18.63596,169.2877 -19.00046,168.9952 -18.8801,169.0475 -18.63596)),((168.2862 -17.55591,168.5589 -17.78741,168.1829 -17.74683,168.2862 -17.55591)))
+MULTIPOLYGON(((-172.418 -13.4522,-172.2043 -13.57168,-172.228 -13.80045,-172.5263 -13.80205,-172.7986 -13.51573,-172.418 -13.4522)),((-171.8288 -13.78687,-171.4302 -14.04094,-171.9154 -13.99943,-172.054 -13.86133,-171.8288 -13.78687)))
+MULTIPOLYGON(((43.21629 17.22469,43.23257 17.2722,43.34187 17.58682,43.86814 17.31088,44.36618 17.39002,46.08288 16.48298,46.32877 16.34975,46.33119 15.61425,48.76487 18.2688,52.0007 19.00233,51.88201 18.57879,53.0783 16.64576,52.45185 16.42215,52.14711 15.95149,52.22734 15.6352,51.66716 15.33482,49.40985 14.65454,48.68648 14.03903,47.96798 14.04398,46.69682 13.42517,45.66945 13.34684,44.89632 12.77472,43.46087 12.67452,42.88342 14.86844,42.86375 15.11969,42.59566 15.23652,42.8068 15.28345,42.77824 16.3692,43.23682 16.65217,43.21629 17.22469)))
+MULTIPOLYGON(((29.36078 -22.19663,31.31127 -22.41774,31.99045 -24.31326,31.98213 -25.95205,31.32036 -25.74403,30.83329 -26.418,30.81216 -26.82551,31.53687 -27.31616,31.97532 -27.31699,32.13366 -26.83497,32.89597 -26.85684,32.40335 -28.5225,31.43322 -29.19788,29.90961 -31.38778,27.89992 -33.04585,26.62374 -33.72743,25.66923 -33.78168,25.69934 -34.03587,25.00793 -33.95828,24.83034 -34.21434,22.57194 -33.99672,21.81955 -34.38114,20.75139 -34.39661,20.00533 -34.83983,19.29433 -34.63351,19.13797 -34.30788,18.82177 -34.38503,18.79114 -34.08531,18.37985 -34.27206,18.43716 -33.70218,17.8457 -32.82472,18.31321 -32.56527,18.28197 -31.89546,17.35824 -30.48131,16.47328 -28.58356,17.08332 -28.03777,17.37844 -28.29535,17.40949 -28.72295,18.17901 -28.91589,19.17275 -28.95783,19.56238 -28.53189,19.99676 -28.43311,20.00024 -24.75299,20.67549 -25.45156,20.83805 -25.95612,20.61319 -26.47431,20.69333 -26.90725,21.69972 -26.86086,22.56291 -26.22073,23.01187 -25.29341,23.46499 -25.27447,23.90865 -25.62613,24.65421 -25.81951,25.58393 -25.63317,25.87019 -24.75385,26.42155 -24.63555,26.8654 -24.26007,27.00567 -23.64784,27.74442 -23.23639,28.34627 -22.57694,29.36078 -22.19663),(27.12344 -29.57842,27.39462 -30.33049,28.11823 -30.66896,28.39915 -30.14675,29.16626 -29.92973,29.46576 -29.35254,28.66901 -28.57445,27.76015 -28.89541,27.12344 -29.57842)),((14.44809 -23.148,14.52676 -22.68227,14.66691 -22.64301,14.72931 -23.23087,14.44809 -23.148)))
+MULTIPOLYGON(((25.27033 -17.79891,26.69029 -18.07947,27.03777 -17.96473,27.82958 -16.96254,28.80209 -16.50385,28.91203 -15.94682,29.56215 -15.64117,30.41826 -15.61757,30.42459 -16,31.24465 -16,32.97855 -16.70721,32.83567 -16.92076,33.04526 -17.34697,33.05502 -18.36191,32.70041 -18.94058,33.01094 -20.01879,32.48854 -20.62747,32.48002 -21.32811,31.31127 -22.41774,29.36078 -22.19663,29 -21.77173,28.01623 -21.57341,27.68603 -21.06585,27.72207 -20.51928,27.28722 -20.49983,27.20168 -20.08701,26.16599 -19.54607,25.27033 -17.79891)))
+MULTIPOLYGON(((30.77425 -8.22436,31.07797 -8.621837,31.37501 -8.587209,31.98438 -9.071177,32.95351 -9.401445,33.70504 -10.56948,33.2459 -10.89392,33.40601 -11.16108,33.22755 -11.42278,33.26135 -12.14225,33.54823 -12.35774,33.01505 -12.65771,33.0166 -13.21101,32.67395 -13.60776,33.02915 -14.04606,33.20901 -14.00362,30.21732 -14.99723,30.41826 -15.61757,29.56215 -15.64117,28.91203 -15.94682,28.80209 -16.50385,27.82958 -16.96254,27.03777 -17.96473,26.69029 -18.07947,25.27033 -17.79891,25.2567 -17.78792,24.72062 -17.50023,23.42815 -17.63928,21.99966 -16.19787,21.9999 -13.00472,24.04029 -12.99056,23.9036 -12.83371,24.07812 -12.36638,23.9957 -10.89157,24.38296 -11.09247,24.28872 -11.38917,24.44542 -11.4757,25.3518 -11.19585,25.33671 -11.62697,25.98967 -11.94062,26.88356 -11.98459,27.20575 -11.56842,27.65628 -12.28707,28.4416 -12.51617,29.00366 -13.41588,29.58906 -13.21372,29.80896 -13.45514,29.80884 -12.15971,29.48926 -12.23857,29.49944 -12.46983,29.05881 -12.38911,28.43867 -11.83067,28.69705 -9.806156,28.36363 -9.308095,28.89654 -8.794926,28.90192 -8.474615,30.77425 -8.22436)))
+MULTIPOLYGON(((27.46342 5.016153,28.37458 4.275577,28.77811 4.558043,29.2455 4.344783,29.61472 4.660875,30.85357 3.48639,30.74787 2.452595,31.30536 2.11931,29.96222 0.806247,29.59532 -1.392395,28.87052 -2.419076,29.03217 -2.749662,29.24615 -3.070362,29.39148 -4.44525,29.61157 -6.304459,30.25485 -7.048671,30.77425 -8.22436,28.90192 -8.474615,28.89654 -8.794926,28.36363 -9.308095,28.69705 -9.806156,28.43867 -11.83067,29.05881 -12.38911,29.49944 -12.46983,29.48926 -12.23857,29.80884 -12.15971,29.80896 -13.45514,29.58906 -13.21372,29.00366 -13.41588,28.4416 -12.51617,27.65628 -12.28707,27.20575 -11.56842,26.88356 -11.98459,25.98967 -11.94062,25.33671 -11.62697,25.3518 -11.19585,24.44542 -11.4757,24.28872 -11.38917,24.38296 -11.09247,23.9957 -10.89157,23.08404 -11.12396,22.56217 -11.03055,22.27194 -11.24606,22.32795 -10.38512,21.79289 -9.420432,21.95976 -8.496954,21.74475 -7.932942,21.78059 -7.283893,20.54168 -7.28143,20.62715 -6.913397,19.54379 -6.999425,19.3744 -8,18.53232 -7.920376,17.58297 -8.129065,16.95371 -7.203343,16.59974 -5.918555,12.96863 -5.906919,12.4657 -6.017591,12.46839 -6.015355,12.47843 -5.991628,12.4728 -5.990575,12.20663 -5.769247,12.5351 -5.733854,12.47494 -5.075711,13.1025 -4.646508,13.43464 -4.919622,13.7292 -4.709084,13.73834 -4.44858,14.40724 -4.279238,14.41206 -4.893814,14.69051 -4.917224,15.5615 -4.04695,15.91541 -3.934902,16.22239 -3.296272,16.20089 -2.197611,16.8458 -1.263571,17.70007 -0.567603,18.09457 2.23824,18.6351 3.471089,18.54905 4.316255,19.42282 5.128375,19.8252 5.09344,20.60624 4.403446,22.26635 4.114358,22.55044 4.21542,22.90667 4.817867,23.42093 4.588927,24.39604 5.112711,25.08842 4.937803,25.54606 5.386098,26.50912 5.043906,27.14294 5.204216,27.46342 5.016153)))
+MULTIPOLYGON(((50.544687 26.14707,50.588199 26.175003,50.644797 26.194206,50.632258 26.034066,50.594499 25.958531,50.537276 26.039707,50.541161 26.077232,50.544687 26.14707)))
diff --git a/libs/geometry/example/ml01_multipolygon_simplify.cpp b/libs/geometry/example/ml01_multipolygon_simplify.cpp
new file mode 100644
index 000000000..71933db35
--- /dev/null
+++ b/libs/geometry/example/ml01_multipolygon_simplify.cpp
@@ -0,0 +1,67 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Multipolygon DP simplification example from the mailing list discussion
+// about the DP algorithm issue:
+// http://lists.osgeo.org/pipermail/ggl/2011-September/001533.html
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/foreach.hpp>
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_xy;
+ typedef boost::geometry::model::polygon<point_xy > polygon;
+ typedef boost::geometry::model::ring<point_xy > ring;
+ typedef boost::geometry::model::multi_polygon<polygon > multi_polygon;
+
+ multi_polygon original_1;
+ multi_polygon simplified_1;
+
+ // Values between 0..1 and simplified with 1/2048
+ boost::geometry::read_wkt("MULTIPOLYGON(((0.561648 1,1 1,1 0,0.468083 0,0.52758 0.00800554,0.599683 0.0280924,0.601611 0.265374,0.622693 0.316765,0.69507 0.357497,0.695623 0.429711,0.655111 0.502298,0.696467 0.543147,0.840712 0.593546,0.882583 0.66546,0.852357 0.748213,0.84264 0.789567,0.832667 0.841202,0.832667 0.841202,0.740538 0.873004,0.617349 0.905045,0.566576 0.977697,0.561648 1)),((0 0.801979,0.0308575 0.786234,0.0705513 0.631135,0.141616 0.527248,0.233985 0.505872,0.264777 0.526263,0.336631 0.505009,0.356603 0.422321,0.355803 0.350038,0.375252 0.205364,0.415206 0.0709182,0.45479 0,0 0,0 0,0 0.801979)))", original_1);
+
+ std::cout << "Original: \n" << boost::geometry::num_points(original_1) << " points.\n\n";
+
+ boost::geometry::simplify(original_1, simplified_1, 1.0 / 2048.0);
+
+ std::cout << "Polygon with values 0..1 and simplified with 1.0 / 2048.0 \n"
+ << "Result: \n" << boost::geometry::wkt(simplified_1) << "\n" << boost::geometry::num_points(simplified_1) << " points.\n\n";
+
+ // Multiply every points from original_1 by 2047
+ multi_polygon original_2(original_1);
+ BOOST_FOREACH(polygon& p, original_2)
+ {
+ BOOST_FOREACH(point_xy& pt, p.outer())
+ {
+ pt.x(pt.x() * 2047.0);
+ pt.y(pt.y() * 2047.0);
+ }
+
+ BOOST_FOREACH(ring& r, p.inners())
+ {
+ BOOST_FOREACH(point_xy& pt, r)
+ {
+ pt.x(pt.x() * 2047.0);
+ pt.y(pt.y() * 2047.0);
+ }
+ }
+ }
+
+ multi_polygon simplified_2;
+ boost::geometry::simplify(original_2, simplified_2, 1.0);
+ std::cout << "Same values but multiplied by 2047.0 and simplified with 1.0\n"
+ << "Result: \n" << boost::geometry::wkt(simplified_2) << "\n" << boost::geometry::num_points(simplified_2) << " points.\n";
+
+ return 0;
+}
+
diff --git a/libs/geometry/example/ml01_multipolygon_simplify.vcproj b/libs/geometry/example/ml01_multipolygon_simplify.vcproj
new file mode 100644
index 000000000..fe5492da9
--- /dev/null
+++ b/libs/geometry/example/ml01_multipolygon_simplify.vcproj
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="ml01_multipolygon_simplify"
+ ProjectGUID="{E7BFC111-F0E5-420F-869C-1FC3212270B5}"
+ RootNamespace="ml01_multipolygon_simplify"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ml01_multipolygon_simplify"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ml01_multipolygon_simplify"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\ml01_multipolygon_simplify.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/ml02_distance_strategy.cpp b/libs/geometry/example/ml02_distance_strategy.cpp
new file mode 100644
index 000000000..8506339e4
--- /dev/null
+++ b/libs/geometry/example/ml02_distance_strategy.cpp
@@ -0,0 +1,36 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+//
+// Multipolygon DP simplification example from the mailing list discussion
+// about the DP algorithm issue:
+// http://lists.osgeo.org/pipermail/ggl/2011-September/001533.html
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/strategies/cartesian/distance_pythagoras.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+using namespace boost::geometry;
+
+int main()
+{
+ typedef model::d2::point_xy<double> point_xy;
+
+ point_xy p1(0.0, 0.0);
+ point_xy p2(5.0, 0.0);
+
+ // 1) This is direct call to Pythagoras algo
+ typedef strategy::distance::pythagoras<point_xy, point_xy, double> strategy1_type;
+ strategy1_type strategy1;
+ strategy1_type ::calculation_type d1 = strategy1.apply(p1, p2);
+
+ // 2) This is what is effectively called by simplify
+ typedef strategy::distance::comparable::pythagoras<point_xy, point_xy, double> strategy2_type;
+ strategy2_type strategy2;
+ strategy2_type::calculation_type d2 = strategy2.apply(p1, p2);
+
+ return 0;
+}
diff --git a/libs/geometry/example/ml02_distance_strategy.vcproj b/libs/geometry/example/ml02_distance_strategy.vcproj
new file mode 100644
index 000000000..0b04ecfac
--- /dev/null
+++ b/libs/geometry/example/ml02_distance_strategy.vcproj
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="ml02_distance_strategy"
+ ProjectGUID="{E7BFC111-F0E5-420F-869C-1FC3212270B5}"
+ RootNamespace="ml02_distance_strategy"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ml02_distance_strategy"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ml02_distance_strategy"
+ ConfigurationType="1"
+ InheritedPropertySheets=".\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\ml02_distance_strategy.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/contrib/gd-2.0.35/boost_geometry_readme.txt b/libs/geometry/example/with_external_libs/contrib/gd-2.0.35/boost_geometry_readme.txt
new file mode 100644
index 000000000..93d331a30
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/contrib/gd-2.0.35/boost_geometry_readme.txt
@@ -0,0 +1,20 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright Barend Gehrels 2010, Geodan, Amsterdam, the Netherlands
+// 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)
+
+
+
+Download gd from
+http://www.libgd.org/
+(currently from: https://bitbucket.org/pierrejoye/gd-libgd/downloads)
+
+and extract to this folder.
+(currently: extract from ../src/ into this folder)
+
+Nothing has to be installed.
+
+This is used in x02_gd_example.cpp
+
diff --git a/libs/geometry/example/with_external_libs/contrib/shapelib-1.3.0b2/boost_geometry_readme.txt b/libs/geometry/example/with_external_libs/contrib/shapelib-1.3.0b2/boost_geometry_readme.txt
new file mode 100644
index 000000000..19426e75f
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/contrib/shapelib-1.3.0b2/boost_geometry_readme.txt
@@ -0,0 +1,24 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library) test file
+//
+// Copyright Barend Gehrels 2010, Geodan, Amsterdam, the Netherlands
+// 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)
+
+
+
+Download shapelib from
+http://shapelib.maptools.org/
+or http://download.osgeo.org/shapelib/
+
+and extract to this folder.
+
+
+Install at least the following files:
+- shpopen.c
+- shapefil.h
+- dbfopen.c
+
+For new shapelibs:
+- safileio.c
+
diff --git a/libs/geometry/example/with_external_libs/contrib/soci-3.1.0/boost_geometry_readme.txt b/libs/geometry/example/with_external_libs/contrib/soci-3.1.0/boost_geometry_readme.txt
new file mode 100644
index 000000000..39470eb9d
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/contrib/soci-3.1.0/boost_geometry_readme.txt
@@ -0,0 +1,18 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright Barend Gehrels 2010, Geodan, Amsterdam, the Netherlands
+// 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)
+
+
+
+Download soci from
+http://soci.sourceforge.net
+and extract to this folder.
+
+Nothing has to be installed.
+
+This is used in the examples x03_*_soci_example.cpp
+
+
diff --git a/libs/geometry/example/with_external_libs/gd.vsprops b/libs/geometry/example/with_external_libs/gd.vsprops
new file mode 100644
index 000000000..209165c2e
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/gd.vsprops
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="gd"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(GD)&quot;"
+ PreprocessorDefinitions="NONDLL"
+ />
+ <UserMacro
+ Name="GD"
+ Value="contrib/gd-2.0.35"
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/example/with_external_libs/postgresql.vsprops b/libs/geometry/example/with_external_libs/postgresql.vsprops
new file mode 100644
index 000000000..6a95d3e1c
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/postgresql.vsprops
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="postgresql"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(POSTGRESQL_ROOT)/include"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libpq.lib"
+ AdditionalLibraryDirectories="$(POSTGRESQL_ROOT)/lib"
+ />
+ <UserMacro
+ Name="POSTGRESQL_ROOT"
+ Value="c:\software\PostgreSQL\8.4"
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/example/with_external_libs/qt.vsprops b/libs/geometry/example/with_external_libs/qt.vsprops
new file mode 100644
index 000000000..8de8e56ac
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/qt.vsprops
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="qt"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(QT)\include;$(QT)\include\QtGui;$(QT)\include\QtCore"
+ PreprocessorDefinitions="QT_NO_DEBUG;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="qtmain.lib QtGui4.lib QtCore4.lib"
+ AdditionalLibraryDirectories="$(QT)\lib"
+ IgnoreDefaultLibraryNames="msvcrt.lib"
+ />
+ <UserMacro
+ Name="QT"
+ Value="c:\software\libraries\Qt\4.7.1"
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/example/with_external_libs/shapelib.vsprops b/libs/geometry/example/with_external_libs/shapelib.vsprops
new file mode 100644
index 000000000..fcd579559
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/shapelib.vsprops
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="shapelib"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(SHAPELIB)"
+ />
+ <UserMacro
+ Name="SHAPELIB"
+ Value=".\contrib\shapelib-1.3.0b2"
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/example/with_external_libs/soci.vsprops b/libs/geometry/example/with_external_libs/soci.vsprops
new file mode 100644
index 000000000..c397b1241
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/soci.vsprops
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="soci"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(SOCI_ROOT)/src/core&quot;;&quot;$(SOCI_ROOT)/src/backends/postgresql&quot;"
+ PreprocessorDefinitions="SOCI_USE_BOOST;SOCI_LIB_PREFIX=\&quot;libsoci_\&quot;;SOCI_LIB_SUFFIX=\&quot;.so\&quot;"
+ />
+ <UserMacro
+ Name="SOCI_ROOT"
+ Value="contrib/soci-3.1.0"
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/example/with_external_libs/wxwidgets.vsprops b/libs/geometry/example/with_external_libs/wxwidgets.vsprops
new file mode 100644
index 000000000..a5a0836fc
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/wxwidgets.vsprops
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="wxwidgets"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(WXWIDGETS)\lib\vc_lib\mswd;$(WXWIDGETS)\include;$(WXWIDGETS)\include\msvc;"
+ PreprocessorDefinitions="NOPCH;__WXMSW__"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(WXWIDGETS)\lib\vc_lib"
+ />
+ <UserMacro
+ Name="WXWIDGETS"
+ Value="c:\software\libraries\wxWidgets-2.8.10"
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/example/with_external_libs/x01_qt_example.cpp b/libs/geometry/example/with_external_libs/x01_qt_example.cpp
new file mode 100644
index 000000000..4ccade27a
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x01_qt_example.cpp
@@ -0,0 +1,81 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+// Qt Example
+
+// Qt is a well-known and often used platform independent windows library
+
+// To build and run this example:
+// 1) download (from http://qt.nokia.com), configure and make QT
+// 2) if necessary, adapt Qt clause in include path (note there is a Qt property sheet)
+
+#include <sstream>
+
+#include <QtGui>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+
+
+// Adapt a QPointF such that it can be handled by Boost.Geometry
+BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(QPointF, double, cs::cartesian, x, y, setX, setY)
+
+// Adapt a QPolygonF as well.
+// A QPolygonF has no holes (interiors) so it is similar to a Boost.Geometry ring
+BOOST_GEOMETRY_REGISTER_RING(QPolygonF)
+
+
+int main(int argc, char *argv[])
+{
+ // This usage QApplication and QLabel is adapted from
+ // http://en.wikipedia.org/wiki/Qt_(toolkit)#Qt_hello_world
+ QApplication app(argc, argv);
+
+ // Declare a Qt polygon. The Qt Polygon can be used
+ // in Boost.Geometry, just by its oneline registration above.
+ QPolygonF polygon;
+
+ // Use Qt to add points to polygon
+ polygon
+ << QPointF(10, 20) << QPointF(20, 30)
+ << QPointF(30, 20) << QPointF(20, 10)
+ << QPointF(10, 20);
+
+ // Use Boost.Geometry e.g. to calculate area
+ std::ostringstream out;
+ out << "Boost.Geometry area: " << boost::geometry::area(polygon) << std::endl;
+
+ // Some functionality is defined in both Qt and Boost.Geometry
+ QPointF p(20,20);
+ out << "Qt contains: "
+ << (polygon.containsPoint(p, Qt::WindingFill) ? "yes" : "no")
+ << std::endl
+ << "Boost.Geometry within: "
+ << (boost::geometry::within(p, polygon) ? "yes" : "no")
+ << std::endl;
+ // Detail: if point is ON boundary, Qt says yes, Boost.Geometry says no.
+
+ // Qt defines an iterator
+ // (which is required for of the Boost.Geometry ring-concept)
+ // such that Boost.Geometry can use the points of this polygon
+ QPolygonF::const_iterator it;
+ for (it = polygon.begin(); it != polygon.end(); ++it)
+ {
+ // Stream Delimiter-Separated, just to show something Boost.Geometry can do
+ out << boost::geometry::dsv(*it) << std::endl;
+ }
+
+ // Stream the polygon as well
+ out << boost::geometry::dsv(polygon) << std::endl;
+
+ // Just show what we did in a label
+ QLabel label(out.str().c_str());
+ label.show();
+ return app.exec();
+}
+
diff --git a/libs/geometry/example/with_external_libs/x01_qt_example.sln b/libs/geometry/example/with_external_libs/x01_qt_example.sln
new file mode 100644
index 000000000..6af3e9304
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x01_qt_example.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x01_qt_example", "x01_qt_example.vcproj", "{242C6ADC-3A10-4B69-81F7-5669E0582A8B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Debug|Win32.Build.0 = Debug|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Release|Win32.ActiveCfg = Release|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/example/with_external_libs/x01_qt_example.vcproj b/libs/geometry/example/with_external_libs/x01_qt_example.vcproj
new file mode 100644
index 000000000..eba736e3f
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x01_qt_example.vcproj
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="x01_qt_example"
+ ProjectGUID="{242C6ADC-3A10-4B69-81F7-5669E0582A8B}"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x01_qt_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\qt.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x01_qt_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\qt.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\x01_qt_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/x02_gd_example.cpp b/libs/geometry/example/with_external_libs/x02_gd_example.cpp
new file mode 100644
index 000000000..f5441d589
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x02_gd_example.cpp
@@ -0,0 +1,144 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+//
+// GD example
+
+// GD is a well-known and often used graphic library to write GIF (and other formats)
+
+// To build and run this example:
+// 1) download GD from http://www.libgd.org (currently gd-2.0.35 is assumed)
+// 2) add 11 files
+// gd.c, gd_gd.c, gd_gif_out.c, gd_io*.c, gd_security.c, gd_topal.c, gdhelpers.c, gdtables.c
+// to the project or makefile or jamfile
+// 3) for windows, add define NONDLL to indicate GD is not used as a DLL
+// (Note that steps 2 and 3 are done in the MSVC gd_example project file and property sheets)
+
+#include <cmath>
+#include <cstdio>
+#include <vector>
+
+#include <fstream>
+#include <sstream>
+
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/extensions/gis/latlong/latlong.hpp>
+#include <boost/geometry/extensions/gis/geographic/strategies/area_huiller_earth.hpp>
+
+
+#include <gd.h>
+
+namespace bg = boost::geometry;
+
+
+// ----------------------------------------------------------------------------
+// Read an ASCII file containing WKT's
+// (note this function is shared by various examples)
+// ----------------------------------------------------------------------------
+template <typename Geometry>
+inline void read_wkt(std::string const& filename, std::vector<Geometry>& geometries)
+{
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ if (! line.empty())
+ {
+ Geometry geometry;
+ bg::read_wkt(line, geometry);
+ geometries.push_back(geometry);
+ }
+ }
+ }
+}
+
+
+int main()
+{
+ // Adapt if necessary
+ std::string filename = "../data/world.wkt";
+
+
+ // The world is measured in latlong (degrees), so latlong is appropriate.
+ // We ignore holes in this sample (below)
+ typedef bg::model::ll::point<bg::degree> point_type;
+ typedef bg::model::polygon<point_type> polygon_type;
+ typedef bg::model::multi_polygon<polygon_type> country_type;
+
+ std::vector<country_type> countries;
+
+ // Read (for example) world countries
+ read_wkt(filename, countries);
+
+
+ // Create a GD image.
+ // A world map, as world.shp, is usually mapped in latitude-longitude (-180..180 and -90..90)
+ // For this example we use a very simple "transformation"
+ // mapping to 0..720 and 0..360
+ const double factor = 2.0;
+ gdImagePtr im = gdImageCreateTrueColor(int(360 * factor), int(180 * factor));
+
+ // Allocate three colors
+ int blue = gdImageColorResolve(im, 0, 52, 255);
+ int green = gdImageColorResolve(im, 0, 255, 0);
+ int black = gdImageColorResolve(im, 0, 0, 0);
+
+ // Paint background in blue
+ gdImageFilledRectangle(im, 0, 0, im->sx, im->sy, blue);
+
+ // Paint all countries in green
+ BOOST_FOREACH(country_type const& country, countries)
+ {
+ BOOST_FOREACH(polygon_type const& polygon, country)
+ {
+ // Ignore holes, so take only exterior ring
+ bg::model::ring<point_type> const& ring = bg::exterior_ring(polygon);
+
+ // If wished, suppress too small polygons.
+ // (Note that even in latlong, area is calculated in square meters)
+ double const a = bg::area(ring);
+ if (std::fabs(a) > 5000.0e6)
+ {
+ int const n = ring.size();
+ gdPoint* points = new gdPoint[n];
+
+ for (int i = 0; i < n; i++)
+ {
+ // Translate lon/lat or x/y to GD x/y points
+ points[i].x = int(factor * (bg::get<0>(ring[i]) + 180.0));
+ points[i].y = im->sy - int(factor * (bg::get<1>(ring[i]) + 90.0));
+ }
+
+ // Draw the polygon...
+ gdImageFilledPolygon(im, points, n, green);
+ // .. and the outline in black...
+ gdImagePolygon(im, points, n, black);
+
+ delete[] points;
+ }
+ }
+ }
+
+ // Use GD to create a GIF file
+ std::FILE* out = std::fopen("world.gif", "wb");
+ if (out != NULL)
+ {
+ gdImageGif(im, out);
+ std::fclose(out);
+ }
+
+ gdImageDestroy(im);
+
+ return 0;
+}
diff --git a/libs/geometry/example/with_external_libs/x02_gd_example.sln b/libs/geometry/example/with_external_libs/x02_gd_example.sln
new file mode 100644
index 000000000..1ab96a86f
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x02_gd_example.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x02_gd_example", "x02_gd_example.vcproj", "{A73F21AC-6F32-41A9-A86C-53BD4DC84B05}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A73F21AC-6F32-41A9-A86C-53BD4DC84B05}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A73F21AC-6F32-41A9-A86C-53BD4DC84B05}.Debug|Win32.Build.0 = Debug|Win32
+ {A73F21AC-6F32-41A9-A86C-53BD4DC84B05}.Release|Win32.ActiveCfg = Release|Win32
+ {A73F21AC-6F32-41A9-A86C-53BD4DC84B05}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/example/with_external_libs/x02_gd_example.vcproj b/libs/geometry/example/with_external_libs/x02_gd_example.vcproj
new file mode 100644
index 000000000..20471a0a6
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x02_gd_example.vcproj
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x02_gd_example"
+ ProjectGUID="{A73F21AC-6F32-41A9-A86C-53BD4DC84B05}"
+ RootNamespace="x02_gd_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x02_gd_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\gd.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="../../../.."
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x02_gd_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\gd.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ WholeProgramOptimization="false"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="../../../.."
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="GD"
+ >
+ <File
+ RelativePath="$(GD)\gd.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gd_color.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gd_gd.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gd_gif_out.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gd_io.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gd_io_dp.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gd_io_file.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gd_io_ss.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gd_security.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gd_topal.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gdhelpers.c"
+ >
+ </File>
+ <File
+ RelativePath="$(GD)\gdtables.c"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x02_gd_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/x03_a_soci_example.cpp b/libs/geometry/example/with_external_libs/x03_a_soci_example.cpp
new file mode 100644
index 000000000..5b509057f
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x03_a_soci_example.cpp
@@ -0,0 +1,78 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+// SOCI example
+
+// a: using boost::tuple to retrieve points
+
+// SOCI is a generic C++ template interface to access relational databases
+
+// To build and run this example:
+// 1) download SOCI from http://soci.sourceforge.net/
+// 2) put it in contrib/soci-3.0.0 (or another version/folder, but then update this VCPROJ)
+// 3) adapt your makefile or use this VCPROJ file
+// (note that SOCI sources are included directly, building SOCI is not necessary)
+// 4) load the demo-data, see script data/cities.sql (for PostgreSQL)
+
+#include <soci.h>
+#include <soci-postgresql.h>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/optional.hpp>
+#include <boost/timer.hpp>
+#include <boost/random.hpp>
+#include <boost/tuple/tuple.hpp>
+
+#include <iostream>
+#include <istream>
+#include <ostream>
+#include <sstream>
+#include <string>
+#include <exception>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);
+
+
+int main()
+{
+ try
+ {
+ soci::session sql(soci::postgresql, "dbname=ggl user=ggl password=ggl");
+
+ int count;
+ sql << "select count(*) from cities", soci::into(count);
+ std::cout << "# Capitals: " << count << std::endl;
+
+ typedef std::vector<boost::tuple<double, double> > V;
+
+ soci::rowset<boost::tuple<double, double> > rows
+ = sql.prepare << "select x(location),y(location) from cities";
+ V vec;
+ std::copy(rows.begin(), rows.end(), std::back_inserter(vec));
+
+ for (V::const_iterator it = vec.begin(); it != vec.end(); ++it)
+ {
+ std::cout << it->get<0>() << " " << it->get<1>() << std::endl;
+ }
+ // Calculate distances
+ for (V::const_iterator it1 = vec.begin(); it1 != vec.end(); ++it1)
+ {
+ for (V::const_iterator it2 = vec.begin(); it2 != vec.end(); ++it2)
+ {
+ std::cout << boost::geometry::dsv(*it1) << " " << boost::geometry::distance(*it1, *it2) << std::endl;
+ }
+ }
+ }
+ catch (std::exception const &e)
+ {
+ std::cerr << "Error: " << e.what() << '\n';
+ }
+ return 0;
+}
diff --git a/libs/geometry/example/with_external_libs/x03_a_soci_example.vcproj b/libs/geometry/example/with_external_libs/x03_a_soci_example.vcproj
new file mode 100644
index 000000000..2f6665a51
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x03_a_soci_example.vcproj
@@ -0,0 +1,744 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x03_a_soci_example"
+ ProjectGUID="{C3B3143D-F354-4036-9DA1-5975D8A4F166}"
+ RootNamespace="x03_a_soci_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)/x03_a_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\soci.vsprops;.\postgresql.vsprops"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x03_a_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\soci.vsprops;.\postgresql.vsprops"
+ CharacterSet="0"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="soci_postgresql"
+ >
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\common.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\factory.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\row-id.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\standard-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\standard-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\vector-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\vector-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="soci_core"
+ >
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\backend-loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\connection-pool.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\once-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\prepare-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\procedure.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\ref-counted-prepare-info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\ref-counted-statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\row.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\rowid.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\transaction.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\values.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x03_a_soci_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/x03_b_soci_example.cpp b/libs/geometry/example/with_external_libs/x03_b_soci_example.cpp
new file mode 100644
index 000000000..59eaf6d2f
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x03_b_soci_example.cpp
@@ -0,0 +1,100 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+// SOCI example
+
+// b: using WKT to retrieve points
+
+// To build and run this example, see comments in example a
+
+#include <soci.h>
+#include <soci-postgresql.h>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/optional.hpp>
+#include <boost/timer.hpp>
+#include <boost/random.hpp>
+#include <boost/tuple/tuple.hpp>
+
+#include <iostream>
+#include <istream>
+#include <ostream>
+#include <sstream>
+#include <string>
+#include <exception>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+struct city
+{
+ boost::geometry::model::point<float, 2, boost::geometry::cs::geographic<boost::geometry::degree> > location;
+ std::string name;
+};
+
+namespace soci
+{
+ template <>
+ struct type_conversion<city>
+ {
+ typedef soci::values base_type;
+
+ static void from_base(const base_type& v, soci::indicator ind, city& value)
+ {
+ try
+ {
+ value.name = v.get<std::string>("name");
+ boost::geometry::read_wkt(v.get<std::string>("wkt"), value.location);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ }
+
+ static void to_base(const city& value, base_type& v, soci::indicator& ind)
+ {
+ v.set("name", value.name);
+ std::ostringstream out;
+ out << boost::geometry::wkt(value.location);
+ v.set("wkt", out.str());
+ ind = i_ok;
+ }
+ };
+}
+
+int main()
+{
+ try
+ {
+ soci::session sql(soci::postgresql, "dbname=ggl user=ggl password=ggl");
+
+
+ typedef std::vector<city> V;
+
+ soci::rowset<city> rows = sql.prepare << "select name,astext(location) as wkt from cities";
+ V vec;
+ std::copy(rows.begin(), rows.end(), std::back_inserter(vec));
+
+ for (V::const_iterator it = vec.begin(); it != vec.end(); ++it)
+ {
+ static const double sqrkm = 1000.0 * 1000.0;
+ std::cout << it->name
+ << " " << boost::geometry::dsv(it->location)
+ //<< " " << boost::geometry::area(it->shape) / sqrkm << " km2"
+ << std::endl;
+ }
+ }
+ catch (std::exception const &e)
+ {
+ std::cerr << "Error: " << e.what() << '\n';
+ }
+ return 0;
+}
diff --git a/libs/geometry/example/with_external_libs/x03_b_soci_example.vcproj b/libs/geometry/example/with_external_libs/x03_b_soci_example.vcproj
new file mode 100644
index 000000000..35781e542
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x03_b_soci_example.vcproj
@@ -0,0 +1,744 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x03_b_soci_example"
+ ProjectGUID="{5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}"
+ RootNamespace="x03_b_soci_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)/x03_b_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\soci.vsprops;.\postgresql.vsprops"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x03_b_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\soci.vsprops;.\postgresql.vsprops"
+ CharacterSet="0"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="soci_postgresql"
+ >
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\common.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\factory.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\row-id.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\standard-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\standard-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\vector-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\vector-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="soci_core"
+ >
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\backend-loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\connection-pool.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\once-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\prepare-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\procedure.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\ref-counted-prepare-info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\ref-counted-statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\row.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\rowid.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\transaction.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\values.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x03_b_soci_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/x03_c_soci_example.cpp b/libs/geometry/example/with_external_libs/x03_c_soci_example.cpp
new file mode 100644
index 000000000..d9739763f
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x03_c_soci_example.cpp
@@ -0,0 +1,118 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+//
+// 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)
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// SOCI example
+
+// c: using WKB to retrieve geometries
+
+// SOCI is a generic C++ template interface to access relational databases
+
+// To build and run this example, see comments in example a
+// Alternatively compile composing and executing compiler command directoy in examples directory,
+// for example using GCC compiler:
+// g++ -I../../../boost -I/home/mloskot/usr/include/soci \
+// -I /home/mloskot/usr/include/soci/postgresql -I/usr/include/postgresql \
+// -L/home/mloskot/usr/lib -lsoci_core-gcc-3_0 -lsoci_postgresql-gcc-3_0 x03_c_soci_example.cpp
+
+#include <soci.h>
+#include <soci-postgresql.h>
+
+#include <exception>
+#include <iostream>
+#include <iterator>
+#include <string>
+#include <vector>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/extensions/gis/io/wkb/read_wkb.hpp>
+#include <boost/geometry/extensions/gis/io/wkb/utility.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+// user-defined type with GGL geometry
+struct tree
+{
+ int id;
+ boost::geometry::model::point<float, 2, boost::geometry::cs::geographic<boost::geometry::degree> > location;
+};
+
+// conversion of row of result to user-defined type - performs WKB parsing
+namespace soci
+{
+ template <>
+ struct type_conversion<tree>
+ {
+ typedef soci::values base_type;
+
+ static void from_base(base_type const& v, soci::indicator ind, tree& value)
+ {
+ try
+ {
+ value.id = v.get<int>("id");
+
+ // intermediate step: hex-encoded binary string to raw WKB
+ std::string const& hex = v.get<std::string>("wkb");
+ std::vector<unsigned char> wkb;
+ if (!boost::geometry::hex2wkb(hex, std::back_inserter(wkb)))
+ throw std::runtime_error("hex2wkb translation failed");
+
+ // parse WKB and construct point geometry
+ if (!boost::geometry::read_wkb(wkb.begin(), wkb.end(), value.location))
+ throw std::runtime_error("read_wkb failed");
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ }
+
+ static void to_base(tree const& value, base_type& v, soci::indicator& ind)
+ {
+ throw std::runtime_error("todo: wkb writer not yet implemented");
+ }
+ };
+}
+
+int main()
+{
+ try
+ {
+ // establish database connection
+ soci::session sql(soci::postgresql, "dbname=ggl user=ggl password=ggl");
+
+ // construct schema of table for trees (point geometries)
+ sql << "DELETE FROM geometry_columns WHERE f_table_name = 'trees'";
+ sql << "DROP TABLE IF EXISTS trees CASCADE";
+ sql << "CREATE TABLE trees (id INTEGER)";
+ sql << "SELECT AddGeometryColumn('trees', 'geom', -1, 'POINT', 2)";
+
+ // insert sample data using plain WKT input
+ sql << "INSERT INTO trees VALUES(1, ST_GeomFromText('POINT(1.23 2.34)', -1))";
+ sql << "INSERT INTO trees VALUES(2, ST_GeomFromText('POINT(3.45 4.56)', -1))";
+ sql << "INSERT INTO trees VALUES(3, ST_GeomFromText('POINT(5.67 6.78)', -1))";
+ sql << "INSERT INTO trees VALUES(4, ST_GeomFromText('POINT(7.89 9.01)', -1))";
+
+ // query data in WKB form and read to geometry object
+ typedef std::vector<tree> trees_t;
+ soci::rowset<tree> rows = (sql.prepare << "SELECT id, encode(ST_AsBinary(geom), 'hex') AS wkb FROM trees");
+ trees_t trees;
+ std::copy(rows.begin(), rows.end(), std::back_inserter(trees));
+
+ // print trees output
+ for (trees_t::const_iterator it = trees.begin(); it != trees.end(); ++it)
+ {
+ std::cout << "Tree #" << it->id << " located at\t" << boost::geometry::wkt(it->location) << std::endl;
+ }
+ }
+ catch (std::exception const &e)
+ {
+ std::cerr << "Error: " << e.what() << '\n';
+ }
+ return 0;
+}
+
diff --git a/libs/geometry/example/with_external_libs/x03_c_soci_example.vcproj b/libs/geometry/example/with_external_libs/x03_c_soci_example.vcproj
new file mode 100644
index 000000000..05a4ae022
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x03_c_soci_example.vcproj
@@ -0,0 +1,744 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x03_c_soci_example"
+ ProjectGUID="{5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}"
+ RootNamespace="x03_c_soci_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)/x03_c_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\soci.vsprops;.\postgresql.vsprops"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x03_c_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\soci.vsprops;.\postgresql.vsprops"
+ CharacterSet="0"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="soci_postgresql"
+ >
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\common.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\factory.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\row-id.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\standard-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\standard-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\vector-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\vector-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="soci_core"
+ >
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\backend-loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\connection-pool.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\once-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\prepare-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\procedure.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\ref-counted-prepare-info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\ref-counted-statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\row.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\rowid.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\transaction.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\values.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x03_c_soci_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/x03_d_soci_example.cpp b/libs/geometry/example/with_external_libs/x03_d_soci_example.cpp
new file mode 100644
index 000000000..26b59a72b
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x03_d_soci_example.cpp
@@ -0,0 +1,84 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+//
+// 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)
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// SOCI example
+
+// d: using WKB to retrieve geometries
+
+// SOCI is a generic C++ template interface to access relational databases
+
+// To build and run this example, see comments in example a
+// Alternatively compile composing and executing compiler command directoy in examples directory,
+// for example using GCC compiler:
+// g++ -I../../../boost -I/home/mloskot/usr/include/soci \
+// -I /home/mloskot/usr/include/soci/postgresql -I/usr/include/postgresql \
+// -L/home/mloskot/usr/lib -lsoci_core-gcc-3_0 -lsoci_postgresql-gcc-3_0 x03_c_soci_example.cpp
+
+#include <soci.h>
+#include <soci-postgresql.h>
+
+#include <exception>
+#include <iostream>
+#include <iterator>
+#include <string>
+#include <vector>
+
+#include <boost/geometry.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/extensions/gis/io/wkb/read_wkb.hpp>
+#include <boost/geometry/extensions/gis/io/wkb/utility.hpp>
+
+int main()
+{
+ try
+ {
+ // establish database connection
+ soci::session sql(soci::postgresql, "dbname=ggl user=ggl password=ggl");
+
+ // construct schema of table for trees (point geometries)
+ sql << "DELETE FROM geometry_columns WHERE f_table_name = 'parcels'";
+ sql << "DROP TABLE IF EXISTS parcels CASCADE";
+ sql << "CREATE TABLE parcels (id INTEGER)";
+ sql << "SELECT AddGeometryColumn('parcels', 'geom', -1, 'GEOMETRY', 2)";
+
+ // insert sample data using plain WKT input
+ sql << "INSERT INTO parcels VALUES(1, ST_GeomFromText('POLYGON ((10 10, 10 20, 20 20, 20 15, 10 10))', -1))";
+ sql << "INSERT INTO parcels VALUES(2, ST_GeomFromText('POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0))', -1))";
+ sql << "INSERT INTO parcels VALUES(3, ST_GeomFromText('POLYGON((1 1,2 1,2 2,1 2,1 1))', -1))";
+
+ // query data in WKB form and read to geometry object
+ soci::rowset<std::string> rows = (sql.prepare << "SELECT encode(ST_AsBinary(geom), 'hex') AS wkb FROM parcels");
+
+ // calculate area of each parcel
+ for (soci::rowset<std::string>::iterator it = rows.begin(); it != rows.end(); ++it)
+ {
+ // parse WKB and construct geometry object
+ std::string const& hex = *it;
+ std::vector<unsigned char> wkb;
+ if (!boost::geometry::hex2wkb(*it, std::back_inserter(wkb)))
+ throw std::runtime_error("hex2wkb translation failed");
+
+ boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > parcel;
+ if (!boost::geometry::read_wkb(wkb.begin(), wkb.end(), parcel))
+ throw std::runtime_error("read_wkb failed");
+
+ double a = boost::geometry::area(parcel);
+ std::cout << "Parcel geometry: " << boost::geometry::wkt(parcel) << std::endl
+ << "\thas area is " << a << " in coordinate units" << std::endl;
+ }
+ }
+ catch (std::exception const &e)
+ {
+ std::cerr << "Error: " << e.what() << '\n';
+ }
+ return 0;
+}
+
diff --git a/libs/geometry/example/with_external_libs/x03_d_soci_example.vcproj b/libs/geometry/example/with_external_libs/x03_d_soci_example.vcproj
new file mode 100644
index 000000000..d699d5186
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x03_d_soci_example.vcproj
@@ -0,0 +1,744 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x03_d_soci_example"
+ ProjectGUID="{5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}"
+ RootNamespace="x03_d_soci_example"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)/x03_d_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\soci.vsprops;.\postgresql.vsprops"
+ CharacterSet="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x03_d_soci_example"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\soci.vsprops;.\postgresql.vsprops"
+ CharacterSet="0"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="soci_postgresql"
+ >
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\common.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\factory.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\row-id.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\standard-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\standard-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\vector-into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\backends\postgresql\vector-use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\pgsql\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="soci_core"
+ >
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\backend-loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\blob.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\connection-pool.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\error.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\into-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\once-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\prepare-temp-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\procedure.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\ref-counted-prepare-info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\ref-counted-statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\row.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\rowid.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\session.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\statement.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\transaction.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\use-type.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(SOCI_ROOT)\src\core\values.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\core\"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x03_d_soci_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/x03_soci_examples.sln b/libs/geometry/example/with_external_libs/x03_soci_examples.sln
new file mode 100644
index 000000000..49ea1a3be
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x03_soci_examples.sln
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x03_a_soci_example", "x03_a_soci_example.vcproj", "{C3B3143D-F354-4036-9DA1-5975D8A4F166}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x03_b_soci_example", "x03_b_soci_example.vcproj", "{5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x03_c_soci_example", "x03_c_soci_example.vcproj", "{5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x03_d_soci_example", "x03_d_soci_example.vcproj", "{5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C3B3143D-F354-4036-9DA1-5975D8A4F166}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C3B3143D-F354-4036-9DA1-5975D8A4F166}.Debug|Win32.Build.0 = Debug|Win32
+ {C3B3143D-F354-4036-9DA1-5975D8A4F166}.Release|Win32.ActiveCfg = Release|Win32
+ {C3B3143D-F354-4036-9DA1-5975D8A4F166}.Release|Win32.Build.0 = Release|Win32
+ {5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}.Debug|Win32.Build.0 = Debug|Win32
+ {5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}.Release|Win32.ActiveCfg = Release|Win32
+ {5EFD08EE-10CB-4D3E-9907-4E9A7F3AB1C1}.Release|Win32.Build.0 = Release|Win32
+ {5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}.Debug|Win32.Build.0 = Debug|Win32
+ {5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}.Release|Win32.ActiveCfg = Release|Win32
+ {5EFD08FE-10CB-4D3E-9907-4E9A2F3AB1C1}.Release|Win32.Build.0 = Release|Win32
+ {5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}.Debug|Win32.Build.0 = Debug|Win32
+ {5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}.Release|Win32.ActiveCfg = Release|Win32
+ {5EFD08FE-10CB-4D3E-9917-4E9A2F3AB1C1}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.cpp b/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.cpp
new file mode 100644
index 000000000..1a8bde389
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.cpp
@@ -0,0 +1,389 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+//
+// wxWidgets World Mapper example
+
+
+// #define EXAMPLE_WX_USE_GRAPHICS_CONTEXT 1
+
+#include <fstream>
+#include <sstream>
+
+#include <boost/foreach.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/scoped_array.hpp>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
+
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+#include <boost/geometry/extensions/algorithms/selected.hpp>
+
+
+// wxWidgets, if these headers are NOT found, adapt include path (and lib path)
+
+#include "wx/wx.h"
+#include "wx/math.h"
+#include "wx/stockitem.h"
+
+
+#ifdef EXAMPLE_WX_USE_GRAPHICS_CONTEXT
+#include "wx/graphics.h"
+#include "wx/dcgraph.h"
+#endif
+
+typedef boost::geometry::model::d2::point_xy<double> point_2d;
+typedef boost::geometry::model::multi_polygon
+ <
+ boost::geometry::model::polygon<point_2d>
+ > country_type;
+
+// Adapt wxWidgets points to Boost.Geometry points such that they can be used
+// in e.g. transformations (see below)
+BOOST_GEOMETRY_REGISTER_POINT_2D(wxPoint, int, cs::cartesian, x, y)
+BOOST_GEOMETRY_REGISTER_POINT_2D(wxRealPoint, double, cs::cartesian, x, y)
+
+
+// wxWidgets draws using wxPoint*, so we HAVE to use that.
+// Therefore have to make a wxPoint* array
+// 1) compatible with Boost.Geometry
+// 2) compatible with Boost.Range (required by Boost.Geometry)
+// 3) compatible with std::back_inserter (required by Boost.Geometry)
+
+// For compatible 2):
+typedef std::pair<wxPoint*,wxPoint*> wxPointPointerPair;
+
+// For compatible 1):
+BOOST_GEOMETRY_REGISTER_RING(wxPointPointerPair);
+
+
+// For compatible 3):
+// Specialize back_insert_iterator for the wxPointPointerPair
+// (has to be done within "namespace std")
+namespace std
+{
+
+template <>
+class back_insert_iterator<wxPointPointerPair>
+ : public std::iterator<std::output_iterator_tag, void, void, void, void>
+{
+public:
+
+ typedef wxPointPointerPair container_type;
+
+ explicit back_insert_iterator(wxPointPointerPair& x)
+ : current(boost::begin(x))
+ , end(boost::end(x))
+ {}
+
+ inline back_insert_iterator<wxPointPointerPair>&
+ operator=(wxPoint const& value)
+ {
+ // Check if not passed beyond
+ if (current != end)
+ {
+ *current++ = value;
+ }
+ return *this;
+ }
+
+ // Boiler-plate
+ inline back_insert_iterator<wxPointPointerPair>& operator*() { return *this; }
+ inline back_insert_iterator<wxPointPointerPair>& operator++() { return *this; }
+ inline back_insert_iterator<wxPointPointerPair>& operator++(int) { return *this; }
+
+private:
+ boost::range_iterator<wxPointPointerPair>::type current, end;
+};
+
+} // namespace std
+
+
+// ----------------------------------------------------------------------------
+// Read an ASCII file containing WKT's
+// ----------------------------------------------------------------------------
+template <typename Geometry, typename Box>
+inline void read_wkt(std::string const& filename, std::vector<Geometry>& geometries, Box& box)
+{
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ if (! line.empty())
+ {
+ Geometry geometry;
+ boost::geometry::read_wkt(line, geometry);
+ geometries.push_back(geometry);
+ boost::geometry::expand(box, boost::geometry::return_envelope<Box>(geometry));
+ }
+ }
+ }
+}
+
+
+// ----------------------------------------------------------------------------
+class HelloWorldFrame: public wxFrame
+{
+public:
+ HelloWorldFrame(wxFrame *frame, wxString const& title, wxPoint const& pos, wxSize const& size);
+
+ void OnCloseWindow(wxCloseEvent& );
+ void OnExit(wxCommandEvent& );
+
+ DECLARE_EVENT_TABLE()
+};
+
+
+// ----------------------------------------------------------------------------
+class HelloWorldCanvas: public wxWindow
+{
+public:
+ HelloWorldCanvas(wxFrame *frame);
+
+private:
+ void DrawCountries(wxDC& dc);
+ void DrawCountry(wxDC& dc, country_type const& country);
+
+ void OnPaint(wxPaintEvent& );
+ void OnMouseMove(wxMouseEvent&);
+
+ typedef boost::geometry::strategy::transform::map_transformer
+ <
+ point_2d, wxPoint,
+ true, true
+ > map_transformer_type;
+
+ typedef boost::geometry::strategy::transform::inverse_transformer
+ <
+ wxPoint, point_2d
+ > inverse_transformer_type;
+
+ boost::shared_ptr<map_transformer_type> m_map_transformer;
+ boost::shared_ptr<inverse_transformer_type> m_inverse_transformer;
+
+ boost::geometry::model::box<point_2d> m_box;
+ std::vector<country_type> m_countries;
+ int m_focus;
+
+ wxBrush m_orange;
+ wxFrame* m_owner;
+
+DECLARE_EVENT_TABLE()
+};
+
+
+
+// ----------------------------------------------------------------------------
+class HelloWorldApp: public wxApp
+{
+public:
+ bool OnInit()
+ {
+ // Create the main frame window
+ HelloWorldFrame *frame = new HelloWorldFrame(NULL, _T("Boost.Geometry for wxWidgets - Hello World!"), wxDefaultPosition, wxSize(640, 480));
+
+ wxMenu *file_menu = new wxMenu;
+ file_menu->Append(wxID_EXIT, wxGetStockLabel(wxID_EXIT));
+ wxMenuBar* menuBar = new wxMenuBar;
+ menuBar->Append(file_menu, _T("&File"));
+ frame->SetMenuBar(menuBar);
+
+ int width, height;
+ frame->GetClientSize(&width, &height);
+
+ (void) new HelloWorldCanvas(frame);
+
+ // Show the frame
+ frame->Show(true);
+
+ return true;
+ }
+};
+
+
+
+// ----------------------------------------------------------------------------
+HelloWorldFrame::HelloWorldFrame(wxFrame *frame, wxString const& title, wxPoint const& pos, wxSize const& size)
+ : wxFrame(frame, wxID_ANY, title, pos, size, wxDEFAULT_FRAME_STYLE | wxFULL_REPAINT_ON_RESIZE )
+{
+ CreateStatusBar(2);
+}
+
+
+void HelloWorldFrame::OnExit(wxCommandEvent& )
+{
+ this->Destroy();
+}
+
+void HelloWorldFrame::OnCloseWindow(wxCloseEvent& )
+{
+ static bool destroyed = false;
+ if (! destroyed)
+ {
+ this->Destroy();
+ destroyed = true;
+ }
+}
+
+
+// ----------------------------------------------------------------------------
+HelloWorldCanvas::HelloWorldCanvas(wxFrame *frame)
+ : wxWindow(frame, wxID_ANY)
+ , m_owner(frame)
+ , m_focus(-1)
+{
+ boost::geometry::assign_inverse(m_box);
+ read_wkt("../data/world.wkt", m_countries, m_box);
+ m_orange = wxBrush(wxColour(255, 128, 0), wxSOLID);
+}
+
+
+
+void HelloWorldCanvas::OnMouseMove(wxMouseEvent &event)
+{
+ namespace bg = boost::geometry;
+
+ if (m_inverse_transformer)
+ {
+ // Boiler-plate wxWidgets code
+ wxClientDC dc(this);
+ PrepareDC(dc);
+ m_owner->PrepareDC(dc);
+
+ // Transform the point to Lon/Lat
+ point_2d point;
+ bg::transform(event.GetPosition(), point, *m_inverse_transformer);
+
+ // Determine selected object
+ int i = 0;
+ int previous_focus = m_focus;
+ m_focus = -1;
+ BOOST_FOREACH(country_type const& country, m_countries)
+ {
+ if (bg::selected(country, point, 0))
+ {
+ m_focus = i;
+ }
+ i++;
+ }
+
+ // On change:
+ if (m_focus != previous_focus)
+ {
+ // Undraw old focus
+ if (previous_focus >= 0)
+ {
+ dc.SetBrush(*wxWHITE_BRUSH);
+ DrawCountry(dc, m_countries[previous_focus]);
+ }
+ // Draw new focus
+ if (m_focus >= 0)
+ {
+ dc.SetBrush(m_orange);
+ DrawCountry(dc, m_countries[m_focus]);
+ }
+ }
+
+ // Create a string and set it in the status text
+ std::ostringstream out;
+ out << "Position: " << point.x() << ", " << point.y();
+ m_owner->SetStatusText(wxString(out.str().c_str(), wxConvUTF8));
+ }
+}
+
+
+
+void HelloWorldCanvas::OnPaint(wxPaintEvent& )
+{
+#if defined(EXAMPLE_WX_USE_GRAPHICS_CONTEXT)
+ wxPaintDC pdc(this);
+ wxGCDC gdc(pdc);
+ wxDC& dc = (wxDC&) gdc;
+#else
+ wxPaintDC dc(this);
+#endif
+
+ PrepareDC(dc);
+
+ static bool running = false;
+ if (! running)
+ {
+ running = true;
+
+ // Update the transformers
+ wxSize sz = dc.GetSize();
+ m_map_transformer.reset(new map_transformer_type(m_box, sz.x, sz.y));
+ m_inverse_transformer.reset(new inverse_transformer_type(*m_map_transformer));
+
+ DrawCountries(dc);
+
+ running = false;
+ }
+}
+
+
+void HelloWorldCanvas::DrawCountries(wxDC& dc)
+{
+ namespace bg = boost::geometry;
+
+ dc.SetBackground(*wxLIGHT_GREY_BRUSH);
+ dc.Clear();
+
+ BOOST_FOREACH(country_type const& country, m_countries)
+ {
+ DrawCountry(dc, country);
+ }
+ if (m_focus != -1)
+ {
+ dc.SetBrush(m_orange);
+ DrawCountry(dc, m_countries[m_focus]);
+ }
+}
+
+
+void HelloWorldCanvas::DrawCountry(wxDC& dc, country_type const& country)
+{
+ namespace bg = boost::geometry;
+
+ BOOST_FOREACH(bg::model::polygon<point_2d> const& poly, country)
+ {
+ // Use only exterior ring, holes are (for the moment) ignored. This would need
+ // a holey-polygon compatible wx object
+
+ std::size_t n = boost::size(bg::exterior_ring(poly));
+
+ boost::scoped_array<wxPoint> points(new wxPoint[n]);
+
+ wxPointPointerPair pair = std::make_pair(points.get(), points.get() + n);
+ bg::transform(bg::exterior_ring(poly), pair, *m_map_transformer);
+
+ dc.DrawPolygon(n, points.get());
+ }
+}
+
+// ----------------------------------------------------------------------------
+
+
+BEGIN_EVENT_TABLE(HelloWorldFrame, wxFrame)
+ EVT_CLOSE(HelloWorldFrame::OnCloseWindow)
+ EVT_MENU(wxID_EXIT, HelloWorldFrame::OnExit)
+END_EVENT_TABLE()
+
+
+BEGIN_EVENT_TABLE(HelloWorldCanvas, wxWindow)
+ EVT_PAINT(HelloWorldCanvas::OnPaint)
+ EVT_MOTION(HelloWorldCanvas::OnMouseMove)
+END_EVENT_TABLE()
+
+
+IMPLEMENT_APP(HelloWorldApp)
diff --git a/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.sln b/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.sln
new file mode 100644
index 000000000..9761bba39
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x04_wxwidgets_world_mapper", "x04_wxwidgets_world_mapper.vcproj", "{DD1D469B-29A8-4873-A596-9CCCB24F54FA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {DD1D469B-29A8-4873-A596-9CCCB24F54FA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DD1D469B-29A8-4873-A596-9CCCB24F54FA}.Debug|Win32.Build.0 = Debug|Win32
+ {DD1D469B-29A8-4873-A596-9CCCB24F54FA}.Release|Win32.ActiveCfg = Release|Win32
+ {DD1D469B-29A8-4873-A596-9CCCB24F54FA}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.vcproj b/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.vcproj
new file mode 100644
index 000000000..3d4ed9ab1
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper.vcproj
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="x04_wxwidgets_world_mapper"
+ ProjectGUID="{DD1D469B-29A8-4873-A596-9CCCB24F54FA}"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x04_wxwidgets_world_mapper"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\wxwidgets.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/EHsc "
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;__WXDEBUG__"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG,__WXMSW__,__WXDEBUG__,_WINDOWS,NOPCH"
+ Culture="1033"
+ AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswd;.\..\..\include;.;.\..\..\samples"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="wxmsw28d_core.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.lib wxexpatd.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib odbc32.lib gdiplus.lib"
+ SuppressStartupBanner="true"
+ IgnoreDefaultLibraryNames=""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x04_wxwidgets_world_mapper"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\wxwidgets.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/EHsc "
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_WINDOWS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ RuntimeTypeInfo="true"
+ PrecompiledHeaderFile=""
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="__WXMSW__,_WINDOWS,NOPCH"
+ Culture="1033"
+ AdditionalIncludeDirectories=".\..\..\lib\vc_lib\msw;.\..\..\include;.;.\..\..\samples"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="wxmsw28_core.lib wxbase28.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregex.lib wxexpat.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib odbc32.lib gdiplus.lib"
+ SuppressStartupBanner="true"
+ AdditionalLibraryDirectories=""
+ ProgramDatabaseFile=""
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="x04_wxwidgets_world_mapper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\x04_wxwidgets_world_mapper_readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper_readme.txt b/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper_readme.txt
new file mode 100644
index 000000000..ed3df6cb0
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x04_wxwidgets_world_mapper_readme.txt
@@ -0,0 +1,31 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright Barend Gehrels 2010, Geodan, Amsterdam, the Netherlands
+// 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)
+
+
+
+wxWidgets World Mapper example
+
+It will show a basic wxWidgets window, displaying world countries, highlighting the country under
+the mouse, and indicating position of the mouse in latitude/longitude and in pixels.
+
+
+To compile this program:
+
+Install wxWidgets (if not done before)
+Install Boost (if not done before)
+
+Using MSVC:
+ - edit the file wxwidgets.vsprops
+ - set the UserMacro WXWIDGETS to point to your wxWidgets distribution
+ - edit the file boost.vsprops
+ - set the UserMacro BOOST_ROOT to point to your Boost distribution
+ - alternatively you can include Boost and/or wxWidgets in your standard include path
+
+Using Linux/gcc
+ - check if installation is OK, http://wiki.wxwidgets.org/Installing_and_configuring_under_Ubuntu
+ - compile using e.g. gcc -o x04_wxwidgets -I../../../.. x04_wxwidgets_world_mapper.cpp `wx-config --cxxflags` `wx-config --libs`
+
diff --git a/libs/geometry/example/with_external_libs/x05_shapelib_example.cpp b/libs/geometry/example/with_external_libs/x05_shapelib_example.cpp
new file mode 100644
index 000000000..d9fd73115
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x05_shapelib_example.cpp
@@ -0,0 +1,118 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+//
+// SHAPELIB example
+
+// Shapelib is a well-known and often used library to read (and write) shapefiles by Frank Warmerdam
+
+// To build and run this example:
+// 1) download shapelib from http://shapelib.maptools.org/
+// 2) extract and put the source "shpopen.cpp" in project or makefile
+// 3) download a shapefile, for example world countries from http://aprsworld.net/gisdata/world
+// Alternativelly, install Shapelib using OSGeo4W installer from http://trac.osgeo.org/osgeo4w/
+// that provides Windows binary packages
+
+#include "shapefil.h"
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+using namespace boost::geometry;
+
+template <typename T, typename F>
+void read_shapefile(const std::string& filename, std::vector<T>& polygons, F functor)
+{
+ try
+ {
+ SHPHandle handle = SHPOpen(filename.c_str(), "rb");
+ if (handle <= 0)
+ {
+ throw std::string("File " + filename + " not found");
+ }
+
+ int nShapeType, nEntities;
+ double adfMinBound[4], adfMaxBound[4];
+ SHPGetInfo(handle, &nEntities, &nShapeType, adfMinBound, adfMaxBound );
+
+ for (int i = 0; i < nEntities; i++)
+ {
+ SHPObject* psShape = SHPReadObject(handle, i );
+
+ // Read only polygons, and only those without holes
+ if (psShape->nSHPType == SHPT_POLYGON && psShape->nParts == 1)
+ {
+ T polygon;
+ functor(psShape, polygon);
+ polygons.push_back(polygon);
+ }
+ SHPDestroyObject( psShape );
+ }
+ SHPClose(handle);
+ }
+ catch(const std::string& s)
+ {
+ throw s;
+ }
+ catch(...)
+ {
+ throw std::string("Other exception");
+ }
+}
+
+
+template <typename T>
+void convert(SHPObject* psShape, T& polygon)
+{
+ double* x = psShape->padfX;
+ double* y = psShape->padfY;
+ for (int v = 0; v < psShape->nVertices; v++)
+ {
+ typename point_type<T>::type point;
+ assign_values(point, x[v], y[v]);
+ append(polygon, point);
+ }
+}
+
+
+int main()
+{
+ std::string filename = "c:/data/spatial/shape/world_free/world.shp";
+
+ typedef model::polygon<model::d2::point_xy<double> > polygon_2d;
+ std::vector<polygon_2d> polygons;
+
+ try
+ {
+ read_shapefile(filename, polygons, convert<polygon_2d>);
+ }
+ catch(const std::string& s)
+ {
+ std::cout << s << std::endl;
+ return 1;
+ }
+
+ // Do something with the polygons, for example simplify them
+ for (std::vector<polygon_2d>::iterator it = polygons.begin(); it != polygons.end(); it++)
+ {
+ polygon_2d p;
+ simplify(*it, p, 0.01);
+ std::cout << it->outer().size() << "," << p.outer().size() << std::endl;
+ *it = p;
+ }
+ std::cout << "Simplified " << polygons.size() << std::endl;
+
+ double sum = 0;
+ for (std::vector<polygon_2d>::const_iterator it = polygons.begin(); it != polygons.end(); it++)
+ {
+ sum += area(*it);
+ }
+ std::cout << "Total area of " << polygons.size() << " polygons, total: " << sum << std::endl;
+
+ return 0;
+}
diff --git a/libs/geometry/example/with_external_libs/x05_shapelib_example.sln b/libs/geometry/example/with_external_libs/x05_shapelib_example.sln
new file mode 100644
index 000000000..48693bb6a
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x05_shapelib_example.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x05_shapelib_example", "x05_shapelib_example.vcproj", "{92ECE1AC-1A5D-4554-A8AD-690AC266210D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {92ECE1AC-1A5D-4554-A8AD-690AC266210D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {92ECE1AC-1A5D-4554-A8AD-690AC266210D}.Debug|Win32.Build.0 = Debug|Win32
+ {92ECE1AC-1A5D-4554-A8AD-690AC266210D}.Release|Win32.ActiveCfg = Release|Win32
+ {92ECE1AC-1A5D-4554-A8AD-690AC266210D}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/example/with_external_libs/x05_shapelib_example.vcproj b/libs/geometry/example/with_external_libs/x05_shapelib_example.vcproj
new file mode 100644
index 000000000..d9c6a1d3f
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x05_shapelib_example.vcproj
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="x05_shapelib_example"
+ ProjectGUID="{92ECE1AC-1A5D-4554-A8AD-690AC266210D}"
+ RootNamespace="shapelib"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\shapelib"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\shapelib.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(OSGEO4W_HOME)/lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\shapelib"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\shapelib.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="2"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ WholeProgramOptimization="false"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="kernel32.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(OSGEO4W_HOME)/lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="SHAPELIB"
+ >
+ <File
+ RelativePath="$(SHAPELIB)\dbfopen.c"
+ >
+ </File>
+ <File
+ RelativePath="$(SHAPELIB)\safileio.c"
+ >
+ </File>
+ <File
+ RelativePath="$(SHAPELIB)\shpopen.c"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\x05_shapelib_example.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/x06_qt_world_mapper.cpp b/libs/geometry/example/with_external_libs/x06_qt_world_mapper.cpp
new file mode 100644
index 000000000..8f0cf3477
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x06_qt_world_mapper.cpp
@@ -0,0 +1,162 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+// Qt World Mapper Example
+
+// Qt is a well-known and often used platform independent windows library
+
+// To build and run this example:
+// 1) download (from http://qt.nokia.com), configure and make QT
+// 2) if necessary, adapt Qt clause in include path (note there is a Qt property sheet)
+
+#include <fstream>
+
+#include <QtGui>
+#include <QWidget>
+#include <QObject>
+#include <QPainter>
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry/geometry.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/ring.hpp>
+
+#include <boost/geometry/extensions/algorithms/selected.hpp>
+
+
+
+// Adapt a QPointF such that it can be handled by Boost.Geometry
+BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(QPointF, double, cs::cartesian, x, y, setX, setY)
+
+// Adapt a QPolygonF as well.
+// A QPolygonF has no holes (interiors) so it is similar to a Boost.Geometry ring
+BOOST_GEOMETRY_REGISTER_RING(QPolygonF)
+
+
+typedef boost::geometry::model::d2::point_xy<double> point_2d;
+typedef boost::geometry::model::multi_polygon
+ <
+ boost::geometry::model::polygon<point_2d>
+ > country_type;
+
+
+class WorldMapper : public QWidget
+{
+ public:
+ WorldMapper(std::vector<country_type> const& countries, boost::geometry::model::box<point_2d> const& box)
+ : m_countries(countries)
+ , m_box(box)
+ {
+ setPalette(QPalette(QColor(200, 250, 250)));
+ setAutoFillBackground(true);
+ }
+
+ protected:
+ void paintEvent(QPaintEvent*)
+ {
+ map_transformer_type transformer(m_box, this->width(), this->height());
+
+ QPainter painter(this);
+ painter.setBrush(Qt::green);
+ painter.setRenderHint(QPainter::Antialiasing);
+
+ BOOST_FOREACH(country_type const& country, m_countries)
+ {
+ typedef boost::range_value<country_type>::type polygon_type;
+ BOOST_FOREACH(polygon_type const& polygon, country)
+ {
+ typedef boost::geometry::ring_type<polygon_type>::type ring_type;
+ ring_type const& ring = boost::geometry::exterior_ring(polygon);
+
+ // This is the essention:
+ // Directly transform from a multi_polygon (ring-type) to a QPolygonF
+ QPolygonF qring;
+ boost::geometry::transform(ring, qring, transformer);
+
+ painter.drawPolygon(qring);
+ }
+ }
+ }
+
+ private:
+ typedef boost::geometry::strategy::transform::map_transformer
+ <
+ point_2d, QPointF,
+ true, true
+ > map_transformer_type;
+
+ std::vector<country_type> const& m_countries;
+ boost::geometry::model::box<point_2d> const& m_box;
+ };
+
+
+class MapperWidget : public QWidget
+{
+ public:
+ MapperWidget(std::vector<country_type> const& countries, boost::geometry::model::box<point_2d> const& box, QWidget *parent = 0)
+ : QWidget(parent)
+ {
+ WorldMapper* mapper = new WorldMapper(countries, box);
+
+ QPushButton *quit = new QPushButton(tr("Quit"));
+ quit->setFont(QFont("Times", 18, QFont::Bold));
+ connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(mapper);
+ layout->addWidget(quit);
+ setLayout(layout);
+ }
+
+};
+
+
+// ----------------------------------------------------------------------------
+// Read an ASCII file containing WKT's
+// ----------------------------------------------------------------------------
+template <typename Geometry, typename Box>
+inline void read_wkt(std::string const& filename, std::vector<Geometry>& geometries, Box& box)
+{
+ std::ifstream cpp_file(filename.c_str());
+ if (cpp_file.is_open())
+ {
+ while (! cpp_file.eof() )
+ {
+ std::string line;
+ std::getline(cpp_file, line);
+ if (! line.empty())
+ {
+ Geometry geometry;
+ boost::geometry::read_wkt(line, geometry);
+ geometries.push_back(geometry);
+ boost::geometry::expand(box, boost::geometry::return_envelope<Box>(geometry));
+ }
+ }
+ }
+}
+
+
+int main(int argc, char *argv[])
+{
+ std::vector<country_type> countries;
+ boost::geometry::model::box<point_2d> box;
+ boost::geometry::assign_inverse(box);
+ read_wkt("../data/world.wkt", countries, box);
+
+ QApplication app(argc, argv);
+ MapperWidget widget(countries, box);
+ widget.setWindowTitle("Boost.Geometry for Qt - Hello World!");
+ widget.setGeometry(50, 50, 800, 500);
+ widget.show();
+ return app.exec();
+}
diff --git a/libs/geometry/example/with_external_libs/x06_qt_world_mapper.sln b/libs/geometry/example/with_external_libs/x06_qt_world_mapper.sln
new file mode 100644
index 000000000..32cfaf4ad
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x06_qt_world_mapper.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x06_qt_world_mapper", "x06_qt_world_mapper.vcproj", "{242C6ADC-3A10-4B69-81F7-5669E0582A8B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Debug|Win32.Build.0 = Debug|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Release|Win32.ActiveCfg = Release|Win32
+ {242C6ADC-3A10-4B69-81F7-5669E0582A8B}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/example/with_external_libs/x06_qt_world_mapper.vcproj b/libs/geometry/example/with_external_libs/x06_qt_world_mapper.vcproj
new file mode 100644
index 000000000..efee2124e
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x06_qt_world_mapper.vcproj
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="x06_qt_world_mapper"
+ ProjectGUID="{242C6ADC-3A10-4B69-81F7-5669E0582A8B}"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x06_qt_world_mapper"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\qt.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\x06_qt_world_mapper"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;.\qt.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\x06_qt_world_mapper.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\x06_qt_world_mapper_readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/example/with_external_libs/x06_qt_world_mapper_readme.txt b/libs/geometry/example/with_external_libs/x06_qt_world_mapper_readme.txt
new file mode 100644
index 000000000..8c67025e2
--- /dev/null
+++ b/libs/geometry/example/with_external_libs/x06_qt_world_mapper_readme.txt
@@ -0,0 +1,31 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright Barend Gehrels 2011, Geodan, Amsterdam, the Netherlands
+// 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)
+
+Qt World Mapper example
+
+It will show a basic Qt Widget, displaying world countries
+
+To compile this program:
+
+Install Qt (if not done before)
+Install Boost (if not done before)
+
+Using MSVC:
+ - edit the file qt.vsprops
+ - set the UserMacro QT to point to your Qt distribution
+ - edit the file boost.vsprops
+ - set the UserMacro BOOST_ROOT to point to your Boost distribution
+ - alternatively you can include Boost and/or Qt in your standard include path
+
+Using Linux/gcc
+ - install Qt with sudo apt-get install libqt4-dev
+ - run qmake -project
+ - edit the generated file "with_external_libs.pro" and delete all lines but the x06_qt_world_mapper.cpp
+ - run qmake
+ - edit the generated Makefile, if necessary, and add -I../../../.. to include Boost and Boost.Geometry
+ - run make
+
diff --git a/libs/geometry/index.html b/libs/geometry/index.html
new file mode 100644
index 000000000..0942ef1ee
--- /dev/null
+++ b/libs/geometry/index.html
@@ -0,0 +1,16 @@
+
+<!--
+Copyright 2010 Barend Gehrels.
+Distributed under 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)
+-->
+
+<html>
+<head>
+ <meta http-equiv="refresh" content="0; URL=doc/html/index.html">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="doc/html/index.html">doc/html/index.html</a>
+</body>
+</html>
diff --git a/libs/geometry/index/example/3d_benchmark.cpp b/libs/geometry/index/example/3d_benchmark.cpp
new file mode 100644
index 000000000..251817681
--- /dev/null
+++ b/libs/geometry/index/example/3d_benchmark.cpp
@@ -0,0 +1,161 @@
+// Boost.Geometry Index
+// Additional tests
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <iostream>
+#include <boost/geometry/index/rtree.hpp>
+
+#include <boost/chrono.hpp>
+#include <boost/foreach.hpp>
+#include <boost/random.hpp>
+
+int main()
+{
+ namespace bg = boost::geometry;
+ namespace bgi = bg::index;
+ typedef boost::chrono::thread_clock clock_t;
+ typedef boost::chrono::duration<float> dur_t;
+
+ size_t values_count = 500000;
+ size_t queries_count = 200000;
+
+ std::vector< boost::tuple<float, float, float> > coords;
+
+ //randomize values
+ {
+ boost::mt19937 rng;
+ //rng.seed(static_cast<unsigned int>(std::time(0)));
+ float max_val = static_cast<float>(values_count / 2);
+ boost::uniform_real<float> range(-max_val, max_val);
+ boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > rnd(rng, range);
+
+ coords.reserve(values_count);
+
+ std::cout << "randomizing data\n";
+ for ( size_t i = 0 ; i < values_count ; ++i )
+ {
+ coords.push_back(boost::make_tuple(rnd(), rnd(), rnd()));
+ }
+ std::cout << "randomized\n";
+ }
+
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P;
+ typedef bg::model::box<P> B;
+ //typedef bgi::rtree<B, bgi::linear<32, 8> > RT;
+ //typedef bgi::rtree<B, bgi::quadratic<32, 8> > RT;
+ typedef bgi::rtree<B, bgi::rstar<8, 3> > RT;
+
+ std::cout << "sizeof rtree: " << sizeof(RT) << std::endl;
+
+ for (;;)
+ {
+ RT t;
+
+ // inserting test
+ {
+ clock_t::time_point start = clock_t::now();
+ for (size_t i = 0 ; i < values_count ; ++i )
+ {
+ float x = boost::get<0>(coords[i]);
+ float y = boost::get<1>(coords[i]);
+ float z = boost::get<2>(coords[i]);
+ B b(P(x - 0.5f, y - 0.5f, z - 0.5f), P(x + 0.5f, y + 0.5f, z + 0.5f));
+
+ t.insert(b);
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - insert " << values_count << '\n';
+ }
+
+ std::vector<B> result;
+ result.reserve(100);
+ B result_one;
+
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < queries_count ; ++i )
+ {
+ float x = boost::get<0>(coords[i]);
+ float y = boost::get<1>(coords[i]);
+ float z = boost::get<2>(coords[i]);
+ result.clear();
+ t.query(bgi::intersects(B(P(x - 10, y - 10, z - 10), P(x + 10, y + 10, z + 10))), std::back_inserter(result));
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(B) " << queries_count << " found " << temp << '\n';
+ }
+
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < queries_count / 2 ; ++i )
+ {
+ float x1 = boost::get<0>(coords[i]);
+ float y1 = boost::get<1>(coords[i]);
+ float z1 = boost::get<2>(coords[i]);
+ float x2 = boost::get<0>(coords[i+1]);
+ float y2 = boost::get<1>(coords[i+1]);
+ float z2 = boost::get<2>(coords[i+1]);
+ float x3 = boost::get<0>(coords[i+2]);
+ float y3 = boost::get<1>(coords[i+2]);
+ float z3 = boost::get<2>(coords[i+2]);
+ result.clear();
+ t.query(
+ bgi::intersects(B(P(x1 - 10, y1 - 10, z1 - 10), P(x1 + 10, y1 + 10, z1 + 10)))
+ &&
+ !bgi::within(B(P(x2 - 10, y2 - 10, z2 - 10), P(x2 + 10, y2 + 10, z2 + 10)))
+ &&
+ !bgi::overlaps(B(P(x3 - 10, y3 - 10, z3 - 10), P(x3 + 10, y3 + 10, z3 + 10)))
+ ,
+ std::back_inserter(result)
+ );
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(i && !w && !o) " << queries_count << " found " << temp << '\n';
+ }
+
+ result.clear();
+
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < queries_count / 10 ; ++i )
+ {
+ float x = boost::get<0>(coords[i]) - 100;
+ float y = boost::get<1>(coords[i]) - 100;
+ float z = boost::get<2>(coords[i]) - 100;
+ result.clear();
+ temp += t.query(bgi::nearest(P(x, y, z), 5), std::back_inserter(result));
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(nearest(P, 5)) " << (queries_count / 10) << " found " << temp << '\n';
+ }
+
+ {
+ clock_t::time_point start = clock_t::now();
+ for (size_t i = 0 ; i < values_count / 10 ; ++i )
+ {
+ float x = boost::get<0>(coords[i]);
+ float y = boost::get<1>(coords[i]);
+ float z = boost::get<2>(coords[i]);
+ B b(P(x - 0.5f, y - 0.5f, z - 0.5f), P(x + 0.5f, y + 0.5f, z + 0.5f));
+
+ t.remove(b);
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - remove " << values_count / 10 << '\n';
+ }
+
+ std::cout << "------------------------------------------------\n";
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/index/example/Jamfile.v2 b/libs/geometry/index/example/Jamfile.v2
new file mode 100644
index 000000000..2067e8d7c
--- /dev/null
+++ b/libs/geometry/index/example/Jamfile.v2
@@ -0,0 +1,54 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2013 Mateusz Loskot, London, UK.
+#
+# 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)
+
+# Usage:
+# Build as optimised for proper benchmarking:
+# b2 variant=release threading=multi
+# b2 variant=release threading=multi link=static runtime-link=static
+#
+# Set GLUT_ROOT to installation prefix of GLUT or, for Windows,
+# it may be all-in-one directory with GLUT header and binaries.
+
+import os ;
+
+project boost-geometry-index-example
+ : requirements
+ <source>/boost//headers
+ ;
+
+local GLUT_ROOT = [ os.environ GLUT_ROOT ] ;
+if $(GLUT_ROOT)
+{
+ local glut_name = glut ;
+ if [ os.name ] = NT
+ {
+ glut_name = glut32 ;
+ }
+
+ lib glut
+ :
+ :
+ <name>$(glut_name)
+ <search>$(GLUT_ROOT)
+ <search>$(GLUT_ROOT)/lib
+ :
+ :
+ <include>$(GLUT_ROOT)
+ <include>$(GLUT_ROOT)/include
+ ;
+}
+
+exe random_test : random_test.cpp ;
+link benchmark.cpp /boost//chrono : <threading>multi ;
+link benchmark2.cpp /boost//chrono : <threading>multi ;
+link benchmark3.cpp /boost//chrono : <threading>multi ;
+link benchmark_experimental.cpp /boost//chrono : <threading>multi ;
+if $(GLUT_ROOT)
+{
+ link glut_vis.cpp glut ;
+}
diff --git a/libs/geometry/index/example/benchmark.cpp b/libs/geometry/index/example/benchmark.cpp
new file mode 100644
index 000000000..269ea4533
--- /dev/null
+++ b/libs/geometry/index/example/benchmark.cpp
@@ -0,0 +1,157 @@
+// Boost.Geometry Index
+// Additional tests
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <iostream>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <boost/chrono.hpp>
+#include <boost/foreach.hpp>
+#include <boost/random.hpp>
+
+int main()
+{
+ namespace bg = boost::geometry;
+ namespace bgi = bg::index;
+ typedef boost::chrono::thread_clock clock_t;
+ typedef boost::chrono::duration<float> dur_t;
+
+ size_t values_count = 1000000;
+ size_t queries_count = 100000;
+ size_t nearest_queries_count = 10000;
+ unsigned neighbours_count = 10;
+
+ std::vector< std::pair<float, float> > coords;
+
+ //randomize values
+ {
+ boost::mt19937 rng;
+ //rng.seed(static_cast<unsigned int>(std::time(0)));
+ float max_val = static_cast<float>(values_count / 2);
+ boost::uniform_real<float> range(-max_val, max_val);
+ boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > rnd(rng, range);
+
+ coords.reserve(values_count);
+
+ std::cout << "randomizing data\n";
+ for ( size_t i = 0 ; i < values_count ; ++i )
+ {
+ coords.push_back(std::make_pair(rnd(), rnd()));
+ }
+ std::cout << "randomized\n";
+ }
+
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P;
+ typedef bg::model::box<P> B;
+ typedef bgi::rtree<B, bgi::linear<16, 4> > RT;
+ //typedef bgi::rtree<B, bgi::quadratic<8, 3> > RT;
+ //typedef bgi::rtree<B, bgi::rstar<8, 3> > RT;
+
+ std::cout << "sizeof rtree: " << sizeof(RT) << std::endl;
+
+ for (;;)
+ {
+ RT t;
+
+ // inserting test
+ {
+ clock_t::time_point start = clock_t::now();
+ for (size_t i = 0 ; i < values_count ; ++i )
+ {
+ float x = coords[i].first;
+ float y = coords[i].second;
+ B b(P(x - 0.5f, y - 0.5f), P(x + 0.5f, y + 0.5f));
+
+ t.insert(b);
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - insert " << values_count << '\n';
+ }
+
+ std::vector<B> result;
+ result.reserve(100);
+ B result_one;
+
+ {
+ 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();
+ t.query(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(B) " << queries_count << " found " << temp << '\n';
+ }
+
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < queries_count / 2 ; ++i )
+ {
+ float x1 = coords[i].first;
+ float y1 = coords[i].second;
+ float x2 = coords[i+1].first;
+ float y2 = coords[i+1].second;
+ float x3 = coords[i+2].first;
+ float y3 = coords[i+2].second;
+ result.clear();
+ t.query(
+ bgi::intersects(B(P(x1 - 10, y1 - 10), P(x1 + 10, y1 + 10)))
+ &&
+ !bgi::within(B(P(x2 - 10, y2 - 10), P(x2 + 10, y2 + 10)))
+ &&
+ !bgi::overlaps(B(P(x3 - 10, y3 - 10), P(x3 + 10, y3 + 10)))
+ ,
+ std::back_inserter(result)
+ );
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(i && !w && !o) " << queries_count << " found " << temp << '\n';
+ }
+
+ result.clear();
+
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < nearest_queries_count ; ++i )
+ {
+ float x = coords[i].first + 100;
+ float y = coords[i].second + 100;
+ result.clear();
+ temp += t.query(bgi::nearest(P(x, y), neighbours_count), std::back_inserter(result));
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(nearest(P, " << neighbours_count << ")) " << nearest_queries_count << " found " << temp << '\n';
+ }
+
+ {
+ clock_t::time_point start = clock_t::now();
+ for (size_t i = 0 ; i < values_count / 10 ; ++i )
+ {
+ float x = coords[i].first;
+ float y = coords[i].second;
+ B b(P(x - 0.5f, y - 0.5f), P(x + 0.5f, y + 0.5f));
+
+ t.remove(b);
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - remove " << values_count / 10 << '\n';
+ }
+
+ std::cout << "------------------------------------------------\n";
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/index/example/benchmark2.cpp b/libs/geometry/index/example/benchmark2.cpp
new file mode 100644
index 000000000..eedeac1b8
--- /dev/null
+++ b/libs/geometry/index/example/benchmark2.cpp
@@ -0,0 +1,85 @@
+// Boost.Geometry Index
+// Compare performance with std::set using 1-dimensional object
+// (i.e. angle, or number line coordiante)
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <iostream>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <boost/chrono.hpp>
+#include <boost/foreach.hpp>
+#include <boost/random.hpp>
+#include <set>
+
+int main()
+{
+ namespace bg = boost::geometry;
+ namespace bgi = bg::index;
+ typedef boost::chrono::thread_clock clock_t;
+ typedef boost::chrono::duration<float> dur_t;
+
+ size_t values_count = 1001;
+ size_t count_start = 10;
+ size_t count_stop = 1000;
+ size_t count_step = 10;
+ size_t insrem_count = 3000000;
+
+ typedef bg::model::point<float, 1, bg::cs::cartesian> P;
+ //typedef bgi::rtree<P, bgi::linear<8, 3> > RT;
+ typedef bgi::rtree<P, bgi::quadratic<8, 3> > RT;
+ //typedef bgi::rtree<P, bgi::rstar<8, 3> > RT;
+
+ RT t;
+ std::set<float> s;
+ size_t val_i = 0;
+ for ( size_t curr_count = count_start ; curr_count < count_stop ; curr_count += count_step )
+ {
+ // inserting test
+ {
+ for (; val_i < curr_count ; ++val_i )
+ {
+ float v = val_i / 100.0f;
+ P p(v);
+ t.insert(p);
+ s.insert(v);
+ }
+
+ float v = (val_i+1) / 100.0f;
+ P test_p(v);
+
+ std::cout << t.size() << ' ';
+
+ clock_t::time_point start = clock_t::now();
+
+ for (size_t i = 0 ; i < insrem_count ; ++i )
+ {
+ t.insert(test_p);
+ t.remove(test_p);
+ }
+
+ dur_t time = clock_t::now() - start;
+ std::cout << time.count() << ' ';
+
+ start = clock_t::now();
+
+ for (size_t i = 0 ; i < insrem_count ; ++i )
+ {
+ s.insert(v);
+ s.erase(v);
+ }
+
+ time = clock_t::now() - start;
+ std::cout << time.count() << ' ';
+ }
+
+ std::cout << '\n';
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/index/example/benchmark3.cpp b/libs/geometry/index/example/benchmark3.cpp
new file mode 100644
index 000000000..6898e4eb8
--- /dev/null
+++ b/libs/geometry/index/example/benchmark3.cpp
@@ -0,0 +1,98 @@
+// Boost.Geometry Index
+// Additional tests
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <iostream>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <boost/chrono.hpp>
+#include <boost/foreach.hpp>
+#include <boost/random.hpp>
+#include <set>
+
+int main()
+{
+ namespace bg = boost::geometry;
+ namespace bgi = bg::index;
+ typedef boost::chrono::thread_clock clock_t;
+ typedef boost::chrono::duration<float> dur_t;
+
+ size_t stored_count = 100000;
+
+ std::vector< std::pair<float, float> > coords;
+
+ //randomize values
+ {
+ boost::mt19937 rng;
+ //rng.seed(static_cast<unsigned int>(std::time(0)));
+ float max_val = static_cast<float>(stored_count / 10);
+ boost::uniform_real<float> range(-max_val, max_val);
+ boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > rnd(rng, range);
+
+ coords.reserve(stored_count);
+
+ std::cout << "randomizing data\n";
+ for ( size_t i = 0 ; i < stored_count ; ++i )
+ {
+ coords.push_back(std::make_pair(rnd(), rnd()));
+ }
+ std::cout << "randomized\n";
+ }
+
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P;
+ typedef bgi::rtree<P, bgi::dynamic_linear > RTL;
+ typedef bgi::rtree<P, bgi::dynamic_quadratic > RTQ;
+ typedef bgi::rtree<P, bgi::dynamic_rstar > RTR;
+
+ for ( size_t m = 4 ; m < 33 ; m += 2 )
+ {
+ size_t mm = ::ceil(m / 3.0f);
+
+ RTL rtl(bgi::dynamic_linear(m, mm));
+ RTQ rtq(bgi::dynamic_quadratic(m, mm));
+ RTR rtr(bgi::dynamic_rstar(m, mm));
+
+ std::cout << m << ' ' << mm << ' ';
+
+ // inserting test
+ {
+ clock_t::time_point start = clock_t::now();
+ for (size_t i = 0 ; i < stored_count ; ++i )
+ {
+ P p(coords[i].first, coords[i].second);
+ rtl.insert(p);
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time.count() << ' ';
+
+ start = clock_t::now();
+ for (size_t i = 0 ; i < stored_count ; ++i )
+ {
+ P p(coords[i].first, coords[i].second);
+ rtq.insert(p);
+ }
+ time = clock_t::now() - start;
+ std::cout << time.count() << ' ';
+
+ start = clock_t::now();
+ for (size_t i = 0 ; i < stored_count ; ++i )
+ {
+ float v = i / 100.0f;
+ P p(coords[i].first, coords[i].second);
+ rtr.insert(p);
+ }
+ time = clock_t::now() - start;
+ std::cout << time.count() << ' ';
+ }
+
+ std::cout << '\n';
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/index/example/benchmark_experimental.cpp b/libs/geometry/index/example/benchmark_experimental.cpp
new file mode 100644
index 000000000..5d9c229a3
--- /dev/null
+++ b/libs/geometry/index/example/benchmark_experimental.cpp
@@ -0,0 +1,407 @@
+// Boost.Geometry Index
+// Additional tests
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#define BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+#define BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_TYPE_ERASED_ITERATORS
+
+#include <iostream>
+
+#include <boost/chrono.hpp>
+#include <boost/foreach.hpp>
+#include <boost/random.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+
+namespace bg = boost::geometry;
+namespace bgi = bg::index;
+
+typedef bg::model::point<double, 2, bg::cs::cartesian> P;
+typedef bg::model::box<P> B;
+typedef bg::model::linestring<P> LS;
+typedef bg::model::segment<P> S;
+typedef B V;
+//typedef P V;
+
+template <typename V>
+struct generate_value {};
+
+template <>
+struct generate_value<B>
+{
+ static inline B apply(float x, float y) { return B(P(x - 0.5f, y - 0.5f), P(x + 0.5f, y + 0.5f)); }
+};
+
+template <>
+struct generate_value<P>
+{
+ static inline P apply(float x, float y) { return P(x, y); }
+};
+
+//#include <boost/geometry/extensions/nsphere/nsphere.hpp>
+//typedef bg::model::nsphere<P, double> NS;
+//typedef NS V;
+//
+//template <>
+//struct generate_value<NS>
+//{
+// static inline NS apply(float x, float y) { return NS(P(x, y), 0.5); }
+//};
+
+template <typename I1, typename I2, typename O>
+void mycopy(I1 first, I2 last, O o)
+{
+ for ( ; first != last ; ++o, ++first )
+ *o = *first;
+}
+
+//#define BOOST_GEOMETRY_INDEX_BENCHMARK_DEBUG
+
+int main()
+{
+ typedef boost::chrono::thread_clock clock_t;
+ typedef boost::chrono::duration<float> dur_t;
+
+#ifndef BOOST_GEOMETRY_INDEX_BENCHMARK_DEBUG
+ size_t values_count = 1000000;
+ size_t queries_count = 100000;
+ size_t nearest_queries_count = 10000;
+ unsigned neighbours_count = 10;
+ size_t path_queries_count = 2000;
+ size_t path_queries_count2 = 10000;
+ unsigned path_values_count = 10;
+#else
+ size_t values_count = 1000;
+ size_t queries_count = 1;
+ size_t nearest_queries_count = 1;
+ unsigned neighbours_count = 10;
+ size_t path_queries_count = 1;
+ size_t path_queries_count2 = 1;
+ unsigned path_values_count = 10;
+#endif
+
+ float max_val = static_cast<float>(values_count / 2);
+ std::vector< std::pair<float, float> > coords;
+ std::vector<V> values;
+
+ //randomize values
+ {
+ boost::mt19937 rng;
+ //rng.seed(static_cast<unsigned int>(std::time(0)));
+ boost::uniform_real<float> range(-max_val, max_val);
+ boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > rnd(rng, range);
+
+ coords.reserve(values_count);
+
+ std::cout << "randomizing data\n";
+ for ( size_t i = 0 ; i < values_count ; ++i )
+ {
+ float x = rnd();
+ float y = rnd();
+ coords.push_back(std::make_pair(x, y));
+ values.push_back(generate_value<V>::apply(x, y));
+ }
+ std::cout << "randomized\n";
+ }
+
+ typedef bgi::rtree<V, bgi::linear<16, 4> > RT;
+ //typedef bgi::rtree<V, bgi::quadratic<16, 4> > RT;
+ //typedef bgi::rtree<V, bgi::rstar<16, 4> > RT;
+
+ std::cout << "sizeof rtree: " << sizeof(RT) << std::endl;
+
+ for (;;)
+ {
+ std::vector<V> result;
+ result.reserve(100);
+ B result_one;
+
+ // packing test
+ {
+ clock_t::time_point start = clock_t::now();
+
+ RT t(values.begin(), values.end());
+
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - pack " << values_count << '\n';
+
+ {
+ 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();
+ t.query(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(B) " << queries_count << " found " << temp << '\n';
+ }
+ }
+
+ RT t;
+
+ // inserting test
+ {
+ clock_t::time_point start = clock_t::now();
+ t.insert(values);
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - insert " << values_count << '\n';
+ }
+
+
+
+ {
+ 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();
+ t.query(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(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 << " - qbegin(B) qend(B) " << queries_count << " found " << temp << '\n';
+ }
+ {
+ 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();
+ mycopy(
+ t.qbegin(bgi::intersects(B(P(x - 10, y - 10), P(x + 10, y + 10)))),
+ t.qend(),
+ std::back_inserter(result));
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - qbegin(B) qend() " << queries_count << " found " << temp << '\n';
+ }
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_TYPE_ERASED_ITERATORS
+ {
+ 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();
+ RT::const_query_iterator first = t.qbegin(bgi::intersects(B(P(x - 10, y - 10), P(x + 10, y + 10))));
+ RT::const_query_iterator last = t.qend(bgi::intersects(B(P(x - 10, y - 10), P(x + 10, y + 10))));
+ std::copy(first, last, std::back_inserter(result));
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - type-erased qbegin(B) qend(B) " << queries_count << " found " << temp << '\n';
+ }
+#endif
+#endif
+
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < queries_count / 2 ; ++i )
+ {
+ float x1 = coords[i].first;
+ float y1 = coords[i].second;
+ float x2 = coords[i+1].first;
+ float y2 = coords[i+1].second;
+ float x3 = coords[i+2].first;
+ float y3 = coords[i+2].second;
+ result.clear();
+ t.query(
+ bgi::intersects(B(P(x1 - 10, y1 - 10), P(x1 + 10, y1 + 10)))
+ &&
+ !bgi::within(B(P(x2 - 10, y2 - 10), P(x2 + 10, y2 + 10)))
+ &&
+ !bgi::covered_by(B(P(x3 - 10, y3 - 10), P(x3 + 10, y3 + 10)))
+ ,
+ std::back_inserter(result)
+ );
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(i && !w && !c) " << queries_count << " found " << temp << '\n';
+ }
+
+ result.clear();
+
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < nearest_queries_count ; ++i )
+ {
+ float x = coords[i].first + 100;
+ float y = coords[i].second + 100;
+ result.clear();
+ temp += t.query(bgi::nearest(P(x, y), neighbours_count), std::back_inserter(result));
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(nearest(P, " << neighbours_count << ")) " << nearest_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 < nearest_queries_count ; ++i )
+ {
+ float x = coords[i].first + 100;
+ float y = coords[i].second + 100;
+ result.clear();
+ std::copy(
+ t.qbegin(bgi::nearest(P(x, y), neighbours_count)),
+ t.qend(bgi::nearest(P(x, y), neighbours_count)),
+ std::back_inserter(result));
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - qbegin(nearest(P, " << neighbours_count << ")) qend(n) " << nearest_queries_count << " found " << temp << '\n';
+ }
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < nearest_queries_count ; ++i )
+ {
+ float x = coords[i].first + 100;
+ float y = coords[i].second + 100;
+ result.clear();
+ mycopy(
+ t.qbegin(bgi::nearest(P(x, y), neighbours_count)),
+ t.qend(),
+ std::back_inserter(result));
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - qbegin(nearest(P, " << neighbours_count << ")) qend() " << nearest_queries_count << " found " << temp << '\n';
+ }
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_TYPE_ERASED_ITERATORS
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < nearest_queries_count ; ++i )
+ {
+ float x = coords[i].first;
+ float y = coords[i].second;
+ result.clear();
+ RT::const_query_iterator first = t.qbegin(bgi::nearest(P(x, y), neighbours_count));
+ RT::const_query_iterator last = t.qend(bgi::nearest(P(x, y), neighbours_count));
+ std::copy(first, last, std::back_inserter(result));
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - type-erased qbegin(nearest(P, " << neighbours_count << ")) qend(n) " << nearest_queries_count << " found " << temp << '\n';
+ }
+#endif
+
+ {
+ LS ls;
+ ls.resize(6);
+
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < path_queries_count ; ++i )
+ {
+ float x = coords[i].first;
+ float y = coords[i].second;
+ for ( int i = 0 ; i < 3 ; ++i )
+ {
+ float foo = i*max_val/300;
+ ls[2*i] = P(x, y+foo);
+ ls[2*i+1] = P(x+max_val/100, y+foo);
+ }
+ result.clear();
+ t.query(bgi::path(ls, path_values_count), std::back_inserter(result));
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(path(LS6, " << path_values_count << ")) " << path_queries_count << " found " << temp << '\n';
+ }
+
+ {
+ LS ls;
+ ls.resize(2);
+
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < path_queries_count2 ; ++i )
+ {
+ float x = coords[i].first;
+ float y = coords[i].second;
+ ls[0] = P(x, y);
+ ls[1] = P(x+max_val/100, y+max_val/100);
+ result.clear();
+ t.query(bgi::path(ls, path_values_count), std::back_inserter(result));
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(path(LS2, " << path_values_count << ")) " << path_queries_count2 << " found " << temp << '\n';
+ }
+
+ {
+ clock_t::time_point start = clock_t::now();
+ size_t temp = 0;
+ for (size_t i = 0 ; i < path_queries_count2 ; ++i )
+ {
+ float x = coords[i].first;
+ float y = coords[i].second;
+ S seg(P(x, y), P(x+max_val/100, y+max_val/100));
+ result.clear();
+ t.query(bgi::path(seg, path_values_count), std::back_inserter(result));
+ temp += result.size();
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - query(path(S, " << path_values_count << ")) " << path_queries_count2 << " found " << temp << '\n';
+ }
+#endif
+ {
+ clock_t::time_point start = clock_t::now();
+ for (size_t i = 0 ; i < values_count / 10 ; ++i )
+ {
+ float x = coords[i].first;
+ float y = coords[i].second;
+
+ t.remove(generate_value<V>::apply(x, y));
+ }
+ dur_t time = clock_t::now() - start;
+ std::cout << time << " - remove " << values_count / 10 << '\n';
+ }
+
+ std::cout << "------------------------------------------------\n";
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/index/example/glut_vis.cpp b/libs/geometry/index/example/glut_vis.cpp
new file mode 100644
index 000000000..d6a434707
--- /dev/null
+++ b/libs/geometry/index/example/glut_vis.cpp
@@ -0,0 +1,722 @@
+// Boost.Geometry Index
+// Additional tests
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <GL/glut.h>
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/index/detail/rtree/utilities/gl_draw.hpp>
+#include <boost/geometry/index/detail/rtree/utilities/print.hpp>
+#include <boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp>
+#include <boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp>
+#include <boost/geometry/index/detail/rtree/utilities/statistics.hpp>
+
+namespace bg = boost::geometry;
+namespace bgi = bg::index;
+
+typedef bg::model::point<float, 2, boost::geometry::cs::cartesian> P;
+typedef bg::model::box<P> B;
+//bgi::rtree<B> t(2, 1);
+typedef bg::model::linestring<P> LS;
+typedef bg::model::ring<P> R;
+typedef bg::model::polygon<P> Poly;
+typedef bg::model::multi_polygon<Poly> MPoly;
+
+typedef bgi::rtree<
+ B,
+ bgi::rstar<4, 2>
+> RTree;
+RTree t;
+std::vector<B> vect;
+
+size_t found_count = 0;
+P search_point;
+size_t count = 5;
+std::vector<B> nearest_boxes;
+B search_box;
+R search_ring;
+Poly search_poly;
+MPoly search_multi_poly;
+LS search_path;
+
+enum query_mode_type {
+ qm_knn, qm_c, qm_d, qm_i, qm_o, qm_w, qm_nc, qm_nd, qm_ni, qm_no, qm_nw, qm_all, qm_ri, qm_pi, qm_mpi, qm_path
+} query_mode = qm_knn;
+
+bool search_valid = false;
+
+void query_knn()
+{
+ float x = ( rand() % 1000 ) / 10.0f;
+ float y = ( rand() % 1000 ) / 10.0f;
+
+ search_point = P(x, y);
+ nearest_boxes.clear();
+ found_count = t.query(
+ bgi::nearest(search_point, count),
+ std::back_inserter(nearest_boxes)
+ );
+
+ if ( found_count > 0 )
+ {
+ std::cout << "search point: ";
+ bgi::detail::utilities::print_indexable(std::cout, search_point);
+ std::cout << "\nfound: ";
+ for ( size_t i = 0 ; i < nearest_boxes.size() ; ++i )
+ {
+ bgi::detail::utilities::print_indexable(std::cout, nearest_boxes[i]);
+ std::cout << '\n';
+ }
+ }
+ else
+ std::cout << "nearest not found\n";
+}
+
+void query_path()
+{
+ float x = ( rand() % 1000 ) / 10.0f;
+ float y = ( rand() % 1000 ) / 10.0f;
+ float w = 20 + ( rand() % 1000 ) / 100.0f;
+ float h = 20 + ( rand() % 1000 ) / 100.0f;
+
+ search_path.resize(10);
+ float yy = y-h;
+ for ( int i = 0 ; i < 5 ; ++i, yy += h / 2 )
+ {
+ search_path[2 * i] = P(x-w, yy);
+ search_path[2 * i + 1] = P(x+w, yy);
+ }
+
+ nearest_boxes.clear();
+ found_count = t.query(
+ bgi::detail::path<LS>(search_path, count),
+ std::back_inserter(nearest_boxes)
+ );
+
+ if ( found_count > 0 )
+ {
+ std::cout << "search path: ";
+ BOOST_FOREACH(P const& p, search_path)
+ bgi::detail::utilities::print_indexable(std::cout, p);
+ std::cout << "\nfound: ";
+ for ( size_t i = 0 ; i < nearest_boxes.size() ; ++i )
+ {
+ bgi::detail::utilities::print_indexable(std::cout, nearest_boxes[i]);
+ std::cout << '\n';
+ }
+ }
+ else
+ std::cout << "values on path not found\n";
+}
+
+template <typename Predicate>
+void query()
+{
+ if ( query_mode != qm_all )
+ {
+ float x = ( rand() % 1000 ) / 10.0f;
+ float y = ( rand() % 1000 ) / 10.0f;
+ float w = 10 + ( rand() % 1000 ) / 100.0f;
+ float h = 10 + ( rand() % 1000 ) / 100.0f;
+
+ search_box = B(P(x - w, y - h), P(x + w, y + h));
+ nearest_boxes.clear();
+ found_count = t.query(Predicate(search_box), std::back_inserter(nearest_boxes) );
+ }
+ else
+ {
+ search_box = t.bounds();
+ nearest_boxes.clear();
+ found_count = t.query(Predicate(search_box), std::back_inserter(nearest_boxes) );
+ }
+
+ if ( found_count > 0 )
+ {
+ std::cout << "search box: ";
+ bgi::detail::utilities::print_indexable(std::cout, search_box);
+ std::cout << "\nfound: ";
+ for ( size_t i = 0 ; i < nearest_boxes.size() ; ++i )
+ {
+ bgi::detail::utilities::print_indexable(std::cout, nearest_boxes[i]);
+ std::cout << '\n';
+ }
+ }
+ else
+ std::cout << "boxes not found\n";
+}
+
+template <typename Predicate>
+void query_ring()
+{
+ float x = ( rand() % 1000 ) / 10.0f;
+ float y = ( rand() % 1000 ) / 10.0f;
+ float w = 10 + ( rand() % 1000 ) / 100.0f;
+ float h = 10 + ( rand() % 1000 ) / 100.0f;
+
+ search_ring.clear();
+ search_ring.push_back(P(x - w, y - h));
+ search_ring.push_back(P(x - w/2, y - h));
+ search_ring.push_back(P(x, y - 3*h/2));
+ search_ring.push_back(P(x + w/2, y - h));
+ search_ring.push_back(P(x + w, y - h));
+ search_ring.push_back(P(x + w, y - h/2));
+ search_ring.push_back(P(x + 3*w/2, y));
+ search_ring.push_back(P(x + w, y + h/2));
+ search_ring.push_back(P(x + w, y + h));
+ search_ring.push_back(P(x + w/2, y + h));
+ search_ring.push_back(P(x, y + 3*h/2));
+ search_ring.push_back(P(x - w/2, y + h));
+ search_ring.push_back(P(x - w, y + h));
+ search_ring.push_back(P(x - w, y + h/2));
+ search_ring.push_back(P(x - 3*w/2, y));
+ search_ring.push_back(P(x - w, y - h/2));
+ search_ring.push_back(P(x - w, y - h));
+
+ nearest_boxes.clear();
+ found_count = t.query(Predicate(search_ring), std::back_inserter(nearest_boxes) );
+
+ if ( found_count > 0 )
+ {
+ std::cout << "search ring: ";
+ BOOST_FOREACH(P const& p, search_ring)
+ {
+ bgi::detail::utilities::print_indexable(std::cout, p);
+ std::cout << ' ';
+ }
+ std::cout << "\nfound: ";
+ for ( size_t i = 0 ; i < nearest_boxes.size() ; ++i )
+ {
+ bgi::detail::utilities::print_indexable(std::cout, nearest_boxes[i]);
+ std::cout << '\n';
+ }
+ }
+ else
+ std::cout << "boxes not found\n";
+}
+
+template <typename Predicate>
+void query_poly()
+{
+ float x = ( rand() % 1000 ) / 10.0f;
+ float y = ( rand() % 1000 ) / 10.0f;
+ float w = 10 + ( rand() % 1000 ) / 100.0f;
+ float h = 10 + ( rand() % 1000 ) / 100.0f;
+
+ search_poly.clear();
+ search_poly.outer().push_back(P(x - w, y - h));
+ search_poly.outer().push_back(P(x - w/2, y - h));
+ search_poly.outer().push_back(P(x, y - 3*h/2));
+ search_poly.outer().push_back(P(x + w/2, y - h));
+ search_poly.outer().push_back(P(x + w, y - h));
+ search_poly.outer().push_back(P(x + w, y - h/2));
+ search_poly.outer().push_back(P(x + 3*w/2, y));
+ search_poly.outer().push_back(P(x + w, y + h/2));
+ search_poly.outer().push_back(P(x + w, y + h));
+ search_poly.outer().push_back(P(x + w/2, y + h));
+ search_poly.outer().push_back(P(x, y + 3*h/2));
+ search_poly.outer().push_back(P(x - w/2, y + h));
+ search_poly.outer().push_back(P(x - w, y + h));
+ search_poly.outer().push_back(P(x - w, y + h/2));
+ search_poly.outer().push_back(P(x - 3*w/2, y));
+ search_poly.outer().push_back(P(x - w, y - h/2));
+ search_poly.outer().push_back(P(x - w, y - h));
+
+ search_poly.inners().push_back(Poly::ring_type());
+ search_poly.inners()[0].push_back(P(x - w/2, y - h/2));
+ search_poly.inners()[0].push_back(P(x + w/2, y - h/2));
+ search_poly.inners()[0].push_back(P(x + w/2, y + h/2));
+ search_poly.inners()[0].push_back(P(x - w/2, y + h/2));
+ search_poly.inners()[0].push_back(P(x - w/2, y - h/2));
+
+ nearest_boxes.clear();
+ found_count = t.query(Predicate(search_poly), std::back_inserter(nearest_boxes) );
+
+ if ( found_count > 0 )
+ {
+ std::cout << "search poly outer: ";
+ BOOST_FOREACH(P const& p, search_poly.outer())
+ {
+ bgi::detail::utilities::print_indexable(std::cout, p);
+ std::cout << ' ';
+ }
+ std::cout << "\nfound: ";
+ for ( size_t i = 0 ; i < nearest_boxes.size() ; ++i )
+ {
+ bgi::detail::utilities::print_indexable(std::cout, nearest_boxes[i]);
+ std::cout << '\n';
+ }
+ }
+ else
+ std::cout << "boxes not found\n";
+}
+
+template <typename Predicate>
+void query_multi_poly()
+{
+ float x = ( rand() % 1000 ) / 10.0f;
+ float y = ( rand() % 1000 ) / 10.0f;
+ float w = 10 + ( rand() % 1000 ) / 100.0f;
+ float h = 10 + ( rand() % 1000 ) / 100.0f;
+
+ search_multi_poly.clear();
+
+ search_multi_poly.push_back(Poly());
+ search_multi_poly[0].outer().push_back(P(x - w, y - h));
+ search_multi_poly[0].outer().push_back(P(x - w/2, y - h));
+ search_multi_poly[0].outer().push_back(P(x, y - 3*h/2));
+ search_multi_poly[0].outer().push_back(P(x + w/2, y - h));
+ search_multi_poly[0].outer().push_back(P(x + w, y - h));
+ search_multi_poly[0].outer().push_back(P(x + w, y - h/2));
+ search_multi_poly[0].outer().push_back(P(x + 3*w/2, y));
+ search_multi_poly[0].outer().push_back(P(x + w, y + h/2));
+ search_multi_poly[0].outer().push_back(P(x + w, y + h));
+ search_multi_poly[0].outer().push_back(P(x + w/2, y + h));
+ search_multi_poly[0].outer().push_back(P(x, y + 3*h/2));
+ search_multi_poly[0].outer().push_back(P(x - w/2, y + h));
+ search_multi_poly[0].outer().push_back(P(x - w, y + h));
+ search_multi_poly[0].outer().push_back(P(x - w, y + h/2));
+ search_multi_poly[0].outer().push_back(P(x - 3*w/2, y));
+ search_multi_poly[0].outer().push_back(P(x - w, y - h/2));
+ search_multi_poly[0].outer().push_back(P(x - w, y - h));
+
+ search_multi_poly[0].inners().push_back(Poly::ring_type());
+ search_multi_poly[0].inners()[0].push_back(P(x - w/2, y - h/2));
+ search_multi_poly[0].inners()[0].push_back(P(x + w/2, y - h/2));
+ search_multi_poly[0].inners()[0].push_back(P(x + w/2, y + h/2));
+ search_multi_poly[0].inners()[0].push_back(P(x - w/2, y + h/2));
+ search_multi_poly[0].inners()[0].push_back(P(x - w/2, y - h/2));
+
+ search_multi_poly.push_back(Poly());
+ search_multi_poly[1].outer().push_back(P(x - 2*w, y - 2*h));
+ search_multi_poly[1].outer().push_back(P(x - 6*w/5, y - 2*h));
+ search_multi_poly[1].outer().push_back(P(x - 6*w/5, y - 6*h/5));
+ search_multi_poly[1].outer().push_back(P(x - 2*w, y - 6*h/5));
+ search_multi_poly[1].outer().push_back(P(x - 2*w, y - 2*h));
+
+ search_multi_poly.push_back(Poly());
+ search_multi_poly[2].outer().push_back(P(x + 6*w/5, y + 6*h/5));
+ search_multi_poly[2].outer().push_back(P(x + 2*w, y + 6*h/5));
+ search_multi_poly[2].outer().push_back(P(x + 2*w, y + 2*h));
+ search_multi_poly[2].outer().push_back(P(x + 6*w/5, y + 2*h));
+ search_multi_poly[2].outer().push_back(P(x + 6*w/5, y + 6*h/5));
+
+ nearest_boxes.clear();
+ found_count = t.query(Predicate(search_multi_poly), std::back_inserter(nearest_boxes) );
+
+ if ( found_count > 0 )
+ {
+ std::cout << "search multi_poly[0] outer: ";
+ BOOST_FOREACH(P const& p, search_multi_poly[0].outer())
+ {
+ bgi::detail::utilities::print_indexable(std::cout, p);
+ std::cout << ' ';
+ }
+ std::cout << "\nfound: ";
+ for ( size_t i = 0 ; i < nearest_boxes.size() ; ++i )
+ {
+ bgi::detail::utilities::print_indexable(std::cout, nearest_boxes[i]);
+ std::cout << '\n';
+ }
+ }
+ else
+ std::cout << "boxes not found\n";
+}
+
+void search()
+{
+ namespace d = bgi::detail;
+
+ if ( query_mode == qm_knn )
+ query_knn();
+ else if ( query_mode == qm_c )
+ query< d::spatial_predicate<B, d::covered_by_tag, false> >();
+ else if ( query_mode == qm_d )
+ query< d::spatial_predicate<B, d::disjoint_tag, false> >();
+ else if ( query_mode == qm_i )
+ query< d::spatial_predicate<B, d::intersects_tag, false> >();
+ else if ( query_mode == qm_o )
+ query< d::spatial_predicate<B, d::overlaps_tag, false> >();
+ else if ( query_mode == qm_w )
+ query< d::spatial_predicate<B, d::within_tag, false> >();
+ else if ( query_mode == qm_nc )
+ query< d::spatial_predicate<B, d::covered_by_tag, true> >();
+ else if ( query_mode == qm_nd )
+ query< d::spatial_predicate<B, d::disjoint_tag, true> >();
+ else if ( query_mode == qm_ni )
+ query< d::spatial_predicate<B, d::intersects_tag, true> >();
+ else if ( query_mode == qm_no )
+ query< d::spatial_predicate<B, d::overlaps_tag, true> >();
+ else if ( query_mode == qm_nw )
+ query< d::spatial_predicate<B, d::within_tag, true> >();
+ else if ( query_mode == qm_all )
+ query< d::spatial_predicate<B, d::intersects_tag, false> >();
+ else if ( query_mode == qm_ri )
+ query_ring< d::spatial_predicate<R, d::intersects_tag, false> >();
+ else if ( query_mode == qm_pi )
+ query_poly< d::spatial_predicate<Poly, d::intersects_tag, false> >();
+ else if ( query_mode == qm_mpi )
+ query_multi_poly< d::spatial_predicate<MPoly, d::intersects_tag, false> >();
+ else if ( query_mode == qm_path )
+ query_path();
+
+ search_valid = true;
+}
+
+void draw_knn_area(float min_distance, float max_distance)
+{
+ float x = boost::geometry::get<0>(search_point);
+ float y = boost::geometry::get<1>(search_point);
+ float z = bgi::detail::rtree::utilities::view<RTree>(t).depth();
+
+ // search point
+ glBegin(GL_TRIANGLES);
+ glVertex3f(x, y, z);
+ glVertex3f(x + 1, y, z);
+ glVertex3f(x + 1, y + 1, z);
+ glEnd();
+
+ // search min circle
+
+ glBegin(GL_LINE_LOOP);
+ for(float a = 0 ; a < 3.14158f * 2 ; a += 3.14158f / 180)
+ glVertex3f(x + min_distance * ::cos(a), y + min_distance * ::sin(a), z);
+ glEnd();
+
+ // search max circle
+
+ glBegin(GL_LINE_LOOP);
+ for(float a = 0 ; a < 3.14158f * 2 ; a += 3.14158f / 180)
+ glVertex3f(x + max_distance * ::cos(a), y + max_distance * ::sin(a), z);
+ glEnd();
+}
+
+void draw_path(LS const& ls)
+{
+ glBegin(GL_LINE_STRIP);
+
+ BOOST_FOREACH(P const& p, ls)
+ {
+ float x = boost::geometry::get<0>(p);
+ float y = boost::geometry::get<1>(p);
+ float z = bgi::detail::rtree::utilities::view<RTree>(t).depth();
+ glVertex3f(x, y, z);
+ }
+
+ glEnd();
+}
+
+template <typename Box>
+void draw_box(Box const& box)
+{
+ float x1 = boost::geometry::get<bg::min_corner, 0>(box);
+ float y1 = boost::geometry::get<bg::min_corner, 1>(box);
+ float x2 = boost::geometry::get<bg::max_corner, 0>(box);
+ float y2 = boost::geometry::get<bg::max_corner, 1>(box);
+ float z = bgi::detail::rtree::utilities::view<RTree>(t).depth();
+
+ // search box
+ glBegin(GL_LINE_LOOP);
+ glVertex3f(x1, y1, z);
+ glVertex3f(x2, y1, z);
+ glVertex3f(x2, y2, z);
+ glVertex3f(x1, y2, z);
+ glEnd();
+}
+
+template <typename Range>
+void draw_ring(Range const& range)
+{
+ float z = bgi::detail::rtree::utilities::view<RTree>(t).depth();
+
+ // search box
+ glBegin(GL_LINE_LOOP);
+
+ BOOST_FOREACH(P const& p, range)
+ {
+ float x = boost::geometry::get<0>(p);
+ float y = boost::geometry::get<1>(p);
+
+ glVertex3f(x, y, z);
+ }
+ glEnd();
+}
+
+template <typename Polygon>
+void draw_polygon(Polygon const& polygon)
+{
+ draw_ring(polygon.outer());
+ BOOST_FOREACH(Poly::ring_type const& r, polygon.inners())
+ draw_ring(r);
+}
+
+template <typename MultiPolygon>
+void draw_multi_polygon(MultiPolygon const& multi_polygon)
+{
+ BOOST_FOREACH(Poly const& p, multi_polygon)
+ draw_polygon(p);
+}
+
+void render_scene(void)
+{
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ bgi::detail::rtree::utilities::gl_draw(t);
+
+ if ( search_valid )
+ {
+ glColor3f(1.0f, 0.5f, 0.0f);
+
+ if ( query_mode == qm_knn )
+ draw_knn_area(0, 0);
+ else if ( query_mode == qm_ri )
+ draw_ring(search_ring);
+ else if ( query_mode == qm_pi )
+ draw_polygon(search_poly);
+ else if ( query_mode == qm_mpi )
+ draw_multi_polygon(search_multi_poly);
+ else if ( query_mode == qm_path )
+ draw_path(search_path);
+ else
+ draw_box(search_box);
+
+ for ( size_t i = 0 ; i < nearest_boxes.size() ; ++i )
+ bgi::detail::utilities::gl_draw_indexable(
+ nearest_boxes[i],
+ bgi::detail::rtree::utilities::view<RTree>(t).depth());
+ }
+
+ glFlush();
+}
+
+void resize(int w, int h)
+{
+ if ( h == 0 )
+ h = 1;
+
+ //float ratio = float(w) / h;
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+
+ glViewport(0, 0, w, h);
+
+ //gluPerspective(45, ratio, 1, 1000);
+ glOrtho(-150, 150, -150, 150, -150, 150);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ /*gluLookAt(
+ 120.0f, 120.0f, 120.0f,
+ 50.0f, 50.0f, -1.0f,
+ 0.0f, 1.0f, 0.0f);*/
+ gluLookAt(
+ 50.0f, 50.0f, 75.0f,
+ 50.0f, 50.0f, -1.0f,
+ 0.0f, 1.0f, 0.0f);
+
+ glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
+ glLineWidth(1.5f);
+
+ srand(1);
+}
+
+void mouse(int button, int state, int /*x*/, int /*y*/)
+{
+ if ( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN )
+ {
+ float x = ( rand() % 100 );
+ float y = ( rand() % 100 );
+ float w = ( rand() % 2 ) + 1;
+ float h = ( rand() % 2 ) + 1;
+
+ B b(P(x - w, y - h),P(x + w, y + h));
+
+ boost::geometry::index::insert(t, b);
+ vect.push_back(b);
+
+ std::cout << "inserted: ";
+ bgi::detail::utilities::print_indexable(std::cout, b);
+ std::cout << '\n';
+
+ std::cout << ( bgi::detail::rtree::utilities::are_boxes_ok(t) ? "boxes OK\n" : "WRONG BOXES!\n" );
+ std::cout << ( bgi::detail::rtree::utilities::are_levels_ok(t) ? "levels OK\n" : "WRONG LEVELS!\n" );
+ std::cout << "\n";
+
+ search_valid = false;
+ }
+ else if ( button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN )
+ {
+ if ( vect.empty() )
+ return;
+
+ size_t i = rand() % vect.size();
+ B b = vect[i];
+
+ bgi::remove(t, b);
+ vect.erase(vect.begin() + i);
+
+ std::cout << "removed: ";
+ bgi::detail::utilities::print_indexable(std::cout, b);
+ std::cout << '\n';
+
+ std::cout << ( bgi::detail::rtree::utilities::are_boxes_ok(t) ? "boxes OK\n" : "WRONG BOXES!\n" );
+ std::cout << ( bgi::detail::rtree::utilities::are_levels_ok(t) ? "levels OK\n" : "WRONG LEVELS!\n" );
+ std::cout << "\n";
+
+ search_valid = false;
+ }
+ else if ( button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN )
+ {
+ search();
+ }
+
+ glutPostRedisplay();
+}
+
+std::string current_line;
+
+void keyboard(unsigned char key, int /*x*/, int /*y*/)
+{
+ if ( key == '\r' || key == '\n' )
+ {
+ if ( current_line == "t" )
+ {
+ std::cout << "\n";
+ bgi::detail::rtree::utilities::print(std::cout, t);
+ std::cout << "\n";
+ }
+ else if ( current_line == "rand" )
+ {
+ for ( size_t i = 0 ; i < 35 ; ++i )
+ {
+ float x = ( rand() % 100 );
+ float y = ( rand() % 100 );
+ float w = ( rand() % 2 ) + 1;
+ float h = ( rand() % 2 ) + 1;
+
+ B b(P(x - w, y - h),P(x + w, y + h));
+
+ boost::geometry::index::insert(t, b);
+ vect.push_back(b);
+
+ std::cout << "inserted: ";
+ bgi::detail::utilities::print_indexable(std::cout, b);
+ std::cout << '\n';
+ }
+
+ std::cout << ( bgi::detail::rtree::utilities::are_boxes_ok(t) ? "boxes OK\n" : "WRONG BOXES!\n" );
+ std::cout << ( bgi::detail::rtree::utilities::are_levels_ok(t) ? "levels OK\n" : "WRONG LEVELS!\n" );
+ std::cout << "\n";
+
+ search_valid = false;
+
+ glutPostRedisplay();
+ }
+ else if ( current_line == "bulk" )
+ {
+ vect.clear();
+
+ for ( size_t i = 0 ; i < 35 ; ++i )
+ {
+ float x = ( rand() % 100 );
+ float y = ( rand() % 100 );
+ float w = ( rand() % 2 ) + 1;
+ float h = ( rand() % 2 ) + 1;
+
+ B b(P(x - w, y - h),P(x + w, y + h));
+ vect.push_back(b);
+
+ std::cout << "inserted: ";
+ bgi::detail::utilities::print_indexable(std::cout, b);
+ std::cout << '\n';
+ }
+
+ RTree t2(vect);
+ t = boost::move(t2);
+
+ std::cout << ( bgi::detail::rtree::utilities::are_boxes_ok(t) ? "boxes OK\n" : "WRONG BOXES!\n" );
+ std::cout << ( bgi::detail::rtree::utilities::are_levels_ok(t) ? "levels OK\n" : "WRONG LEVELS!\n" );
+ std::cout << "\n";
+
+ search_valid = false;
+
+ glutPostRedisplay();
+ }
+ else
+ {
+ if ( current_line == "knn" )
+ query_mode = qm_knn;
+ else if ( current_line == "c" )
+ query_mode = qm_c;
+ else if ( current_line == "d" )
+ query_mode = qm_d;
+ else if ( current_line == "i" )
+ query_mode = qm_i;
+ else if ( current_line == "o" )
+ query_mode = qm_o;
+ else if ( current_line == "w" )
+ query_mode = qm_w;
+ else if ( current_line == "nc" )
+ query_mode = qm_nc;
+ else if ( current_line == "nd" )
+ query_mode = qm_nd;
+ else if ( current_line == "ni" )
+ query_mode = qm_ni;
+ else if ( current_line == "no" )
+ query_mode = qm_no;
+ else if ( current_line == "nw" )
+ query_mode = qm_nw;
+ else if ( current_line == "all" )
+ query_mode = qm_all;
+ else if ( current_line == "ri" )
+ query_mode = qm_ri;
+ else if ( current_line == "pi" )
+ query_mode = qm_pi;
+ else if ( current_line == "mpi" )
+ query_mode = qm_mpi;
+ else if ( current_line == "path" )
+ query_mode = qm_path;
+
+ search();
+ glutPostRedisplay();
+ }
+
+ current_line.clear();
+ std::cout << '\n';
+ }
+ else
+ {
+ current_line += key;
+ std::cout << key;
+ }
+}
+
+int main(int argc, char **argv)
+{
+ glutInit(&argc, argv);
+ glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
+ glutInitWindowPosition(100,100);
+ glutInitWindowSize(600, 600);
+ glutCreateWindow("boost::geometry::index::rtree GLUT test");
+
+ glutDisplayFunc(render_scene);
+ glutReshapeFunc(resize);
+ glutMouseFunc(mouse);
+ glutKeyboardFunc(keyboard);
+
+ glutMainLoop();
+
+ return 0;
+}
diff --git a/libs/geometry/index/example/random_test.cpp b/libs/geometry/index/example/random_test.cpp
new file mode 100644
index 000000000..f4145152c
--- /dev/null
+++ b/libs/geometry/index/example/random_test.cpp
@@ -0,0 +1,183 @@
+// Boost.Geometry Index
+// Additional tests
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <iostream>
+
+#define BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+#include <boost/geometry/index/rtree.hpp>
+
+#include <boost/foreach.hpp>
+#include <boost/random.hpp>
+
+int main()
+{
+ namespace bg = boost::geometry;
+ namespace bgi = bg::index;
+
+ size_t values_count = 1000000;
+ size_t queries_count = 10000;
+ size_t nearest_queries_count = 10000;
+ unsigned neighbours_count = 10;
+
+ std::vector< std::pair<float, float> > coords;
+
+ //randomize values
+ {
+ boost::mt19937 rng;
+ //rng.seed(static_cast<unsigned int>(std::time(0)));
+ float max_val = static_cast<float>(values_count / 2);
+ boost::uniform_real<float> range(-max_val, max_val);
+ boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > rnd(rng, range);
+
+ coords.reserve(values_count);
+
+ std::cout << "randomizing data\n";
+ for ( size_t i = 0 ; i < values_count ; ++i )
+ {
+ coords.push_back(std::make_pair(rnd(), rnd()));
+ }
+ std::cout << "randomized\n";
+ }
+
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P;
+ typedef bg::model::box<P> B;
+ typedef bgi::rtree<B, bgi::linear<16, 4> > RT;
+ //typedef bgi::rtree<B, bgi::quadratic<8, 3> > RT;
+ //typedef bgi::rtree<B, bgi::rstar<8, 3> > RT;
+
+ std::cout << "sizeof rtree: " << sizeof(RT) << std::endl;
+
+ {
+ RT t;
+
+ // inserting
+ {
+ for (size_t i = 0 ; i < values_count ; ++i )
+ {
+ float x = coords[i].first;
+ float y = coords[i].second;
+ B b(P(x - 0.5f, y - 0.5f), P(x + 0.5f, y + 0.5f));
+
+ t.insert(b);
+ }
+ std::cout << "inserted values: " << values_count << '\n';
+ }
+
+ std::vector<B> result;
+ result.reserve(100);
+
+ // test
+ std::vector<size_t> spatial_query_data;
+ size_t spatial_query_index = 0;
+
+ {
+ size_t found_count = 0;
+ for (size_t i = 0 ; i < queries_count ; ++i )
+ {
+ float x = coords[i].first;
+ float y = coords[i].second;
+ result.clear();
+ t.query(bgi::intersects(B(P(x - 10, y - 10), P(x + 10, y + 10))), std::back_inserter(result));
+
+ // test
+ spatial_query_data.push_back(result.size());
+ found_count += result.size();
+ }
+ std::cout << "spatial queries found: " << found_count << '\n';
+ }
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+ {
+ size_t found_count = 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));
+
+ // test
+ if ( spatial_query_data[spatial_query_index] != result.size() )
+ std::cout << "Spatial query error - should be: " << spatial_query_data[spatial_query_index] << ", is: " << result.size() << '\n';
+ ++spatial_query_index;
+ found_count += result.size();
+ }
+ std::cout << "incremental spatial queries found: " << found_count << '\n';
+ }
+#endif
+
+ // test
+ std::vector<float> nearest_query_data;
+ size_t nearest_query_data_index = 0;
+
+ {
+ size_t found_count = 0;
+ for (size_t i = 0 ; i < nearest_queries_count ; ++i )
+ {
+ float x = coords[i].first + 100;
+ float y = coords[i].second + 100;
+ result.clear();
+ t.query(bgi::nearest(P(x, y), neighbours_count), std::back_inserter(result));
+
+ // test
+ {
+ float max_dist = 0;
+ BOOST_FOREACH(B const& b, result)
+ {
+ float curr_dist = bgi::detail::comparable_distance_near(P(x, y), b);
+ if ( max_dist < curr_dist )
+ max_dist = curr_dist;
+ }
+ nearest_query_data.push_back(max_dist);
+ }
+ found_count += result.size();
+ }
+ std::cout << "nearest queries found: " << found_count << '\n';
+ }
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+ {
+ size_t found_count = 0;
+ for (size_t i = 0 ; i < nearest_queries_count ; ++i )
+ {
+ float x = coords[i].first + 100;
+ float y = coords[i].second + 100;
+ result.clear();
+
+ std::copy(t.qbegin(bgi::nearest(P(x, y), neighbours_count)),
+ t.qend(bgi::nearest(P(x, y), neighbours_count)),
+ std::back_inserter(result));
+
+ // test
+ {
+ float max_dist = 0;
+ BOOST_FOREACH(B const& b, result)
+ {
+ float curr_dist = bgi::detail::comparable_distance_near(P(x, y), b);
+ if ( max_dist < curr_dist )
+ max_dist = curr_dist;
+ }
+ if ( nearest_query_data_index < nearest_query_data.size() &&
+ nearest_query_data[nearest_query_data_index] != max_dist )
+ std::cout << "Max distance error - should be: " << nearest_query_data[nearest_query_data_index] << ", and is: " << max_dist << "\n";
+ ++nearest_query_data_index;
+ }
+ found_count += result.size();
+ }
+ std::cout << "incremental nearest queries found: " << found_count << '\n';
+ }
+#endif
+
+ std::cout << "finished\n";
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/Jamfile.v2 b/libs/geometry/index/test/Jamfile.v2
new file mode 100644
index 000000000..32ea1e376
--- /dev/null
+++ b/libs/geometry/index/test/Jamfile.v2
@@ -0,0 +1,27 @@
+# Boost.Geometry Index
+#
+# Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+#
+# 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)
+
+import testing ;
+
+project boost-geometry-index-test
+ :
+ requirements
+ <include>. # libs/geometry/index/test
+ <include>../../test # libs/geometry/test
+ #<include>../../../../boost/geometry/extensions/contrib/ttmath
+ <toolset>msvc:<asynch-exceptions>on
+ ;
+
+test-suite boost-geometry-index-varray
+ :
+ [ run varray_old.cpp ]
+ [ run varray.cpp ]
+ ;
+
+build-project algorithms ;
+build-project rtree ;
diff --git a/libs/geometry/index/test/algorithms/Jamfile.v2 b/libs/geometry/index/test/algorithms/Jamfile.v2
new file mode 100644
index 000000000..1fe75c6fc
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/Jamfile.v2
@@ -0,0 +1,20 @@
+# Boost.Geometry Index
+#
+# Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+#
+# 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)
+
+test-suite boost-geometry-index-algorithms
+ :
+ [ run content.cpp ]
+ [ run intersection_content.cpp ] # this tests overlap() too
+ [ run is_valid.cpp ]
+ [ run margin.cpp ]
+ #[ run minmaxdist.cpp ]
+ [ run union_content.cpp ]
+ [ run segment_intersection.cpp ]
+ [ run path_intersection.cpp ]
+ ;
+
diff --git a/libs/geometry/index/test/algorithms/content.cpp b/libs/geometry/index/test/algorithms/content.cpp
new file mode 100644
index 000000000..0d8cc0818
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/content.cpp
@@ -0,0 +1,71 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <algorithms/test_content.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+//#define GEOMETRY_TEST_DEBUG
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::box<int_point_type> int_box;
+ bg::model::box<double_point_type> double_box;
+
+ std::string const box_li = "POLYGON((1536119 192000, 1872000 528000))";
+ bg::read_wkt(box_li, int_box);
+ bg::read_wkt(box_li, double_box);
+
+ double int_value = bgi::detail::content(int_box);
+ double double_value = bgi::detail::content(double_box);
+
+ BOOST_CHECK_CLOSE(int_value, double_value, 0.0001);
+}
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> P2ic;
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2fc;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P2dc;
+
+ typedef bg::model::point<int, 3, bg::cs::cartesian> P3ic;
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P3fc;
+ typedef bg::model::point<double, 3, bg::cs::cartesian> P3dc;
+
+ test_content(P2ic(0, 0), 0);
+ test_content(P2fc(0, 0), 0);
+ test_content(P2dc(0, 0), 0);
+ test_content(P3ic(0, 0, 0), 0);
+ test_content(P3fc(0, 0, 0), 0);
+ test_content(P3dc(0, 0, 0), 0);
+
+ test_geometry<bg::model::box<P2ic> >("POLYGON((0 1,2 4))", 6.0);
+ test_geometry<bg::model::box<P2fc> >("POLYGON((0 1,2 4))", 6.0);
+ test_geometry<bg::model::box<P2dc> >("POLYGON((0 1,2 4))", 6.0);
+ test_geometry<bg::model::box<P3ic> >("POLYGON((0 1 2,2 4 6))", 24.0);
+ test_geometry<bg::model::box<P3fc> >("POLYGON((0 1 2,2 4 6))", 24.0);
+ test_geometry<bg::model::box<P3dc> >("POLYGON((0 1 2,2 4 6))", 24.0);
+
+#ifdef HAVE_TTMATH
+ typedef bg::model::point<ttmath_big, 2, bg::cs::cartesian> P2ttmc;
+ typedef bg::model::point<ttmath_big, 3, bg::cs::cartesian> P3ttmc;
+
+ test_geometry<bg::model::box<P2ttmc> >("POLYGON((0 1,2 4))", 6.0);
+ test_geometry<bg::model::box<P3ttmc> >("POLYGON((0 1 2,2 4 6))", 24.0);
+#endif
+
+ test_large_integers();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/algorithms/intersection_content.cpp b/libs/geometry/index/test/algorithms/intersection_content.cpp
new file mode 100644
index 000000000..b53873bcd
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/intersection_content.cpp
@@ -0,0 +1,70 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <algorithms/test_intersection_content.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+//#define GEOMETRY_TEST_DEBUG
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::box<int_point_type> int_box1, int_box2;
+ bg::model::box<double_point_type> double_box1, double_box2;
+
+ std::string const box_li1 = "POLYGON((1536119 192000, 1872000 528000))";
+ std::string const box_li2 = "POLYGON((1701234 368250, 2673400 777400))";
+ bg::read_wkt(box_li1, int_box1);
+ bg::read_wkt(box_li1, double_box1);
+ bg::read_wkt(box_li2, int_box2);
+ bg::read_wkt(box_li2, double_box2);
+
+ double int_value = bgi::detail::intersection_content(int_box1, int_box2);
+ double double_value = bgi::detail::intersection_content(double_box1, double_box2);
+
+ BOOST_CHECK_CLOSE(int_value, double_value, 0.0001);
+}
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> P2ic;
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2fc;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P2dc;
+
+ typedef bg::model::point<int, 3, bg::cs::cartesian> P3ic;
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P3fc;
+ typedef bg::model::point<double, 3, bg::cs::cartesian> P3dc;
+
+ test_geometry<bg::model::box<P2ic> >("POLYGON((0 1,2 4))", "POLYGON((1 2,3 5))", 2.0);
+ test_geometry<bg::model::box<P2fc> >("POLYGON((0 1,2 4))", "POLYGON((1 2,3 5))", 2.0);
+ test_geometry<bg::model::box<P2dc> >("POLYGON((0 1,2 4))", "POLYGON((1 2,3 5))", 2.0);
+ test_geometry<bg::model::box<P3ic> >("POLYGON((0 1 2,2 4 6))", "POLYGON((1 2 3,3 5 7))", 6.0);
+ test_geometry<bg::model::box<P3fc> >("POLYGON((0 1 2,2 4 6))", "POLYGON((1 2 3,3 5 7))", 6.0);
+ test_geometry<bg::model::box<P3dc> >("POLYGON((0 1 2,2 4 6))", "POLYGON((1 2 3,3 5 7))", 6.0);
+
+ test_geometry<bg::model::box<P2dc> >("POLYGON((0 1,2 4))", "POLYGON((2 1,3 4))", 0.0);
+ test_geometry<bg::model::box<P2dc> >("POLYGON((0 1,2 4))", "POLYGON((2 4,3 5))", 0.0);
+
+#ifdef HAVE_TTMATH
+ typedef bg::model::point<ttmath_big, 2, bg::cs::cartesian> P2ttmc;
+ typedef bg::model::point<ttmath_big, 3, bg::cs::cartesian> P3ttmc;
+
+ test_geometry<bg::model::box<P2ttmc> >("POLYGON((0 1,2 4))", "POLYGON((1 2,3 5))", 2.0);
+ test_geometry<bg::model::box<P3ttmc> >("POLYGON((0 1 2,2 4 6))", "POLYGON((1 2 3,3 5 7))", 6.0);
+#endif
+
+ test_large_integers();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/algorithms/is_valid.cpp b/libs/geometry/index/test/algorithms/is_valid.cpp
new file mode 100644
index 000000000..ff3dae0ba
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/is_valid.cpp
@@ -0,0 +1,110 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <algorithm>
+
+#include <geometry_index_test_common.hpp>
+
+#include <boost/geometry/index/detail/algorithms/is_valid.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+//#define GEOMETRY_TEST_DEBUG
+
+template <typename Geometry>
+void test(Geometry const& geometry, bool expected_value)
+{
+ bool value = bgi::detail::is_valid(geometry);
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Geometry>::type).name()
+ << " "
+ << typeid(bool).name()
+ << " "
+ << "is_valid : " << value
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK(value == expected_value);
+}
+
+template <typename Box>
+void test_box(std::string const& wkt, bool expected_value)
+{
+ Box box;
+ bg::read_wkt(wkt, box);
+ test(box, expected_value);
+ typename bg::point_type<Box>::type temp_pt;
+ temp_pt = box.min_corner();
+ box.min_corner() = box.max_corner();
+ box.max_corner() = temp_pt;
+ test(box, !expected_value);
+}
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::box<int_point_type> int_box;
+ bg::model::box<double_point_type> double_box;
+
+ std::string const box_li = "POLYGON((1536119 192000, 1872000 528000))";
+ bg::read_wkt(box_li, int_box);
+ bg::read_wkt(box_li, double_box);
+
+ BOOST_CHECK(bgi::detail::is_valid(int_box) == bgi::detail::is_valid(double_box));
+
+ std::string const box_li2 = "POLYGON((1872000 528000, 1536119 192000))";
+ bg::read_wkt(box_li2, int_box);
+ bg::read_wkt(box_li2, double_box);
+
+ BOOST_CHECK(bgi::detail::is_valid(int_box) == bgi::detail::is_valid(double_box));
+}
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> P2ic;
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2fc;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P2dc;
+
+ typedef bg::model::point<int, 3, bg::cs::cartesian> P3ic;
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P3fc;
+ typedef bg::model::point<double, 3, bg::cs::cartesian> P3dc;
+
+ test(P2ic(0, 0), true);
+ test(P2fc(0, 0), true);
+ test(P2dc(0, 0), true);
+ test(P3ic(0, 0, 0), true);
+ test(P3fc(0, 0, 0), true);
+ test(P3dc(0, 0, 0), true);
+
+ test_box<bg::model::box<P2ic> >("POLYGON((0 1,2 4))", true);
+ test_box<bg::model::box<P2fc> >("POLYGON((0 1,2 4))", true);
+ test_box<bg::model::box<P2dc> >("POLYGON((0 1,2 4))", true);
+ test_box<bg::model::box<P3ic> >("POLYGON((0 1 2,2 4 6))", true);
+ test_box<bg::model::box<P3fc> >("POLYGON((0 1 2,2 4 6))", true);
+ test_box<bg::model::box<P3dc> >("POLYGON((0 1 2,2 4 6))", true);
+
+#ifdef HAVE_TTMATH
+ typedef bg::model::point<ttmath_big, 2, bg::cs::cartesian> P2ttmc;
+ typedef bg::model::point<ttmath_big, 3, bg::cs::cartesian> P3ttmc;
+
+ test_geometry<bg::model::box<P2ttmc> >("POLYGON((0 1,2 4))", true);
+ test_geometry<bg::model::box<P3ttmc> >("POLYGON((0 1 2,2 4 6))", true);
+#endif
+
+ test_large_integers();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/algorithms/margin.cpp b/libs/geometry/index/test/algorithms/margin.cpp
new file mode 100644
index 000000000..cd83ded93
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/margin.cpp
@@ -0,0 +1,66 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <algorithms/test_margin.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+//#define GEOMETRY_TEST_DEBUG
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::box<int_point_type> int_box;
+ bg::model::box<double_point_type> double_box;
+
+ std::string const box_li = "POLYGON((1536119 192000, 1872000 528000))";
+ bg::read_wkt(box_li, int_box);
+ bg::read_wkt(box_li, double_box);
+
+ double int_value = bgi::detail::comparable_margin(int_box);
+ double double_value = bgi::detail::comparable_margin(double_box);
+
+ BOOST_CHECK_CLOSE(int_value, double_value, 0.0001);
+}
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> P2ic;
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2fc;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P2dc;
+
+ typedef bg::model::point<int, 3, bg::cs::cartesian> P3ic;
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P3fc;
+ typedef bg::model::point<double, 3, bg::cs::cartesian> P3dc;
+
+ test_geometry<bg::model::box<P2ic> >("POLYGON((0 1,2 4))", 5);
+ test_geometry<bg::model::box<P2fc> >("POLYGON((0 1,2 4))", 5.0);
+ test_geometry<bg::model::box<P2dc> >("POLYGON((0 1,2 4))", 5.0);
+ test_geometry<bg::model::box<P3ic> >("POLYGON((0 1 2,2 4 6))", 9);
+ test_geometry<bg::model::box<P3fc> >("POLYGON((0 1 2,2 4 6))", 9.0);
+ test_geometry<bg::model::box<P3dc> >("POLYGON((0 1 2,2 4 6))", 9.0);
+
+#ifdef HAVE_TTMATH
+ typedef bg::model::point<ttmath_big, 2, bg::cs::cartesian> P2ttmc;
+ typedef bg::model::point<ttmath_big, 3, bg::cs::cartesian> P3ttmc;
+
+ test_geometry<bg::model::box<P2ttmc> >("POLYGON((0 1,2 4))", 10.0);
+ test_geometry<bg::model::box<P3ttmc> >("POLYGON((0 1 2,2 4 6))", 52.0);
+#endif
+
+ test_large_integers();
+
+ // test_empty_input<bg::model::d2::point_xy<int> >();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/algorithms/minmaxdist.cpp b/libs/geometry/index/test/algorithms/minmaxdist.cpp
new file mode 100644
index 000000000..dd7e8e5e2
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/minmaxdist.cpp
@@ -0,0 +1,101 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <algorithm>
+
+#include <geometry_index_test_common.hpp>
+
+#include <boost/geometry/index/detail/algorithms/minmaxdist.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+#define GEOMETRY_TEST_DEBUG
+
+template <typename Point, typename Indexable>
+void test(Point const& pt, Indexable const& indexable,
+ typename bg::default_distance_result<Point, Indexable>::type expected_value)
+{
+ typename bg::default_distance_result<Point, Indexable>::type value = bgi::detail::minmaxdist(pt, indexable);
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Point>::type).name()
+ << " "
+ << typeid(typename bg::coordinate_type<Indexable>::type).name()
+ << " "
+ << typeid(bg::default_distance_result<Point, Indexable>::type).name()
+ << " "
+ << "minmaxdist : " << value
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(value, expected_value, 0.0001);
+}
+
+template <typename Indexable, typename Point>
+void test_indexable(Point const& pt, std::string const& wkt,
+ typename bg::default_distance_result<Point, Indexable>::type expected_value)
+{
+ Indexable indexable;
+ bg::read_wkt(wkt, indexable);
+ test(pt, indexable, expected_value);
+}
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ int_point_type int_pt(0, 0);
+ double_point_type double_pt(0, 0);
+
+ bg::model::box<int_point_type> int_box;
+ bg::model::box<double_point_type> double_box;
+
+ std::string const box_li = "POLYGON((1536119 192000, 1872000 528000))";
+ bg::read_wkt(box_li, int_box);
+ bg::read_wkt(box_li, double_box);
+
+ BOOST_CHECK(bgi::detail::minmaxdist(int_pt, int_box) == bgi::detail::minmaxdist(double_pt, double_box));
+}
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> P2ic;
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2fc;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P2dc;
+
+ typedef bg::model::point<int, 3, bg::cs::cartesian> P3ic;
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P3fc;
+ typedef bg::model::point<double, 3, bg::cs::cartesian> P3dc;
+
+ test_indexable<bg::model::box<P2ic> >(P2ic(1, 2), "POLYGON((0 1,2 4))", 5.0);
+ test_indexable<bg::model::box<P2fc> >(P2fc(1, 2), "POLYGON((0 1,2 4))", 5.0);
+ test_indexable<bg::model::box<P2dc> >(P2dc(1, 2), "POLYGON((0 1,2 4))", 5.0);
+ test_indexable<bg::model::box<P3ic> >(P3ic(1, 2, 3), "POLYGON((0 1 2,2 4 6))", 14.0);
+ test_indexable<bg::model::box<P3fc> >(P3fc(1, 2, 3), "POLYGON((0 1 2,2 4 6))", 14.0);
+ test_indexable<bg::model::box<P3dc> >(P3dc(1, 2, 3), "POLYGON((0 1 2,2 4 6))", 14.0);
+
+ test_indexable<bg::model::box<P2ic> >(P2ic(1, 2), "POLYGON((1 2,3 5))", 4.0);
+
+#ifdef HAVE_TTMATH
+ typedef bg::model::point<ttmath_big, 2, bg::cs::cartesian> P2ttmc;
+ typedef bg::model::point<ttmath_big, 3, bg::cs::cartesian> P3ttmc;
+
+ test_indexable<bg::model::box<P2ttmc> >(P2ttmc(1, 2), "POLYGON((0 1,2 4))", 5.0);
+ test_indexable<bg::model::box<P3ttmc> >(P3ttmc(1, 2, 3), "POLYGON((0 1 2,2 4 6))", 14.0);
+#endif
+
+ test_large_integers();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/algorithms/path_intersection.cpp b/libs/geometry/index/test/algorithms/path_intersection.cpp
new file mode 100644
index 000000000..2670d0775
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/path_intersection.cpp
@@ -0,0 +1,133 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <geometry_index_test_common.hpp>
+
+#include <boost/geometry/index/detail/algorithms/path_intersection.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+
+//#include <boost/geometry/io/wkt/read.hpp>
+
+template <typename Box, typename Linestring>
+void test_path_intersection(Box const& box, Linestring const& path,
+ bool expected_result,
+ typename bg::default_length_result<Linestring>::type expected_dist)
+{
+ typename bgi::detail::default_path_intersection_distance_type<Box, Linestring>::type dist;
+
+ bool value = bgi::detail::path_intersection(box, path, dist);
+ BOOST_CHECK(value == expected_result);
+ if ( value && expected_result )
+ BOOST_CHECK_CLOSE(dist, expected_dist, 0.0001);
+
+ if ( ::boost::size(path) == 2 )
+ {
+ typedef typename ::boost::range_value<Linestring>::type P;
+ typedef bg::model::segment<P> Seg;
+ typename bgi::detail::default_path_intersection_distance_type<Box, Seg>::type dist;
+ Seg seg(*::boost::begin(path), *(::boost::begin(path)+1));
+ bool value = bgi::detail::path_intersection(box, seg, dist);
+ BOOST_CHECK(value == expected_result);
+ if ( value && expected_result )
+ BOOST_CHECK_CLOSE(dist, expected_dist, 0.0001);
+ }
+}
+
+template <typename Box, typename Linestring>
+void test_geometry(std::string const& wkt_g, std::string const& wkt_path,
+ bool expected_result,
+ typename bg::default_length_result<Linestring>::type expected_dist)
+{
+ Box box;
+ bg::read_wkt(wkt_g, box);
+ Linestring path;
+ bg::read_wkt(wkt_path, path);
+ test_path_intersection(box, path, expected_result, expected_dist);
+}
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::box<int_point_type> int_box;
+ bg::model::box<double_point_type> double_box;
+ typedef bg::model::linestring<int_point_type> IP;
+ IP int_path;
+ typedef bg::model::linestring<double_point_type> DP;
+ DP double_path;
+
+ std::string const str_box = "POLYGON((1536119 192000, 1872000 528000))";
+ std::string const str_path = "LINESTRING(1535000 191000, 1873000 191000, 1873000 300000, 1536119 300000)";
+ bg::read_wkt(str_box, int_box);
+ bg::read_wkt(str_box, double_box);
+ bg::read_wkt(str_path, int_path);
+ bg::read_wkt(str_path, double_path);
+
+ bg::default_length_result<IP>::type int_value;
+ bool int_result = bgi::detail::path_intersection(int_box, int_path, int_value);
+ bg::default_length_result<DP>::type double_value;
+ bool double_result = bgi::detail::path_intersection(double_box, double_path, double_value);
+
+ BOOST_CHECK(int_result == double_result);
+ if ( int_result && double_result )
+ BOOST_CHECK_CLOSE(int_value, double_value, 0.0001);
+}
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> P2ic;
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2fc;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P2dc;
+
+ typedef bg::model::point<int, 3, bg::cs::cartesian> P3ic;
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P3fc;
+ typedef bg::model::point<double, 3, bg::cs::cartesian> P3dc;
+
+ typedef bg::model::linestring<P2ic> L2ic;
+ typedef bg::model::linestring<P2fc> L2fc;
+ typedef bg::model::linestring<P2dc> L2dc;
+
+ typedef bg::model::linestring<P3ic> L3ic;
+ typedef bg::model::linestring<P3fc> L3fc;
+ typedef bg::model::linestring<P3dc> L3dc;
+
+ // IMPORTANT! For 2-point linestrings comparable distance optimization is enabled!
+
+ test_geometry<bg::model::box<P2ic>, L2ic>("POLYGON((0 1,2 4))", "LINESTRING(0 0, 2 5)", true, 1.0f/5);
+ test_geometry<bg::model::box<P2fc>, L2fc>("POLYGON((0 1,2 4))", "LINESTRING(0 0, 2 5)", true, 1.0f/5);
+ test_geometry<bg::model::box<P2dc>, L2dc>("POLYGON((0 1,2 4))", "LINESTRING(0 0, 2 5)", true, 1.0/5);
+ test_geometry<bg::model::box<P3ic>, L3ic>("POLYGON((0 1 2,2 4 6))", "LINESTRING(0 0 0, 2 5 7)", true, 2.0f/7);
+ test_geometry<bg::model::box<P3fc>, L3fc>("POLYGON((0 1 2,2 4 6))", "LINESTRING(0 0 0, 2 5 7)", true, 2.0f/7);
+ test_geometry<bg::model::box<P3dc>, L3dc>("POLYGON((0 1 2,2 4 6))", "LINESTRING(0 0 0, 2 5 7)", true, 2.0/7);
+
+ test_geometry<bg::model::box<P2fc>, L2fc>("POLYGON((0 1,2 4))", "LINESTRING(0 0, 1 0, 1 5)", true, 2);
+ test_geometry<bg::model::box<P2fc>, L2fc>("POLYGON((0 1,2 4))", "LINESTRING(0 0, 3 0, 3 2, 0 2)", true, 6);
+ test_geometry<bg::model::box<P2fc>, L2fc>("POLYGON((0 1,2 4))", "LINESTRING(1 2, 3 3, 0 3)", true, 0);
+
+#ifdef HAVE_TTMATH
+ typedef bg::model::point<ttmath_big, 2, bg::cs::cartesian> P2ttmc;
+ typedef bg::model::point<ttmath_big, 3, bg::cs::cartesian> P3ttmc;
+
+ typedef bg::model::linestring<P2ttmc> L2ttmc;
+ typedef bg::model::linestring<P3ttmc> L3ttmc;
+
+ test_geometry<bg::model::box<P2ttmc>, L2ttmc>("POLYGON((0 1,2 4))", "LINESTRING(0 0, 2 5)", true, 1.0/5);
+ test_geometry<bg::model::box<P3ttmc>, L3ttmc>("POLYGON((0 1 2,2 4 6))", "LINESTRING(0 0 0, 2 5 7)", true, 2.0/7);
+#endif
+
+ test_large_integers();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/algorithms/segment_intersection.cpp b/libs/geometry/index/test/algorithms/segment_intersection.cpp
new file mode 100644
index 000000000..1cc6dc22b
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/segment_intersection.cpp
@@ -0,0 +1,129 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <geometry_index_test_common.hpp>
+
+#include <boost/geometry/index/detail/algorithms/segment_intersection.hpp>
+
+//#include <boost/geometry/io/wkt/read.hpp>
+
+template <typename Box, typename Point, typename RelativeDistance>
+void test_segment_intersection(Box const& box, Point const& p0, Point const& p1,
+ bool expected_result,
+ RelativeDistance expected_rel_dist)
+{
+ RelativeDistance rel_dist;
+ bool value = bgi::detail::segment_intersection(box, p0, p1, rel_dist);
+ BOOST_CHECK(value == expected_result);
+ if ( value && expected_result )
+ BOOST_CHECK_CLOSE(rel_dist, expected_rel_dist, 0.0001);
+}
+
+template <typename Box, typename Point, typename RelativeDistance>
+void test_geometry(std::string const& wkt_g, std::string const& wkt_p0, std::string const& wkt_p1,
+ bool expected_result,
+ RelativeDistance expected_rel_dist)
+{
+ Box box;
+ bg::read_wkt(wkt_g, box);
+ Point p0, p1;
+ bg::read_wkt(wkt_p0, p0);
+ bg::read_wkt(wkt_p1, p1);
+ test_segment_intersection(box, p0, p1, expected_result, expected_rel_dist);
+}
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::box<int_point_type> int_box;
+ bg::model::box<double_point_type> double_box;
+ int_point_type int_p0, int_p1;
+ double_point_type double_p0, double_p1;
+
+ std::string const str_box = "POLYGON((1536119 192000, 1872000 528000))";
+ std::string const str_p0 = "POINT(1535000 191000)";
+ std::string const str_p1 = "POINT(1873000 529000)";
+ bg::read_wkt(str_box, int_box);
+ bg::read_wkt(str_box, double_box);
+ bg::read_wkt(str_p0, int_p0);
+ bg::read_wkt(str_p1, int_p1);
+ bg::read_wkt(str_p0, double_p0);
+ bg::read_wkt(str_p1, double_p1);
+
+ float int_value;
+ bool int_result = bgi::detail::segment_intersection(int_box, int_p0, int_p1, int_value);
+ double double_value;
+ bool double_result = bgi::detail::segment_intersection(double_box, double_p0, double_p1, double_value);
+ BOOST_CHECK(int_result == double_result);
+ if ( int_result && double_result )
+ BOOST_CHECK_CLOSE(int_value, double_value, 0.0001);
+}
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> P2ic;
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2fc;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P2dc;
+
+ typedef bg::model::point<int, 3, bg::cs::cartesian> P3ic;
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P3fc;
+ typedef bg::model::point<double, 3, bg::cs::cartesian> P3dc;
+
+ test_geometry<bg::model::box<P2ic>, P2ic>("POLYGON((0 1,2 4))", "POINT(0 0)", "POINT(2 5)", true, 1.0f/5);
+ test_geometry<bg::model::box<P2fc>, P2fc>("POLYGON((0 1,2 4))", "POINT(0 0)", "POINT(2 5)", true, 1.0f/5);
+ test_geometry<bg::model::box<P2dc>, P2dc>("POLYGON((0 1,2 4))", "POINT(0 0)", "POINT(2 5)", true, 1.0/5);
+ test_geometry<bg::model::box<P3ic>, P3ic>("POLYGON((0 1 2,2 4 6))", "POINT(0 0 0)", "POINT(2 5 7)", true, 2.0f/7);
+ test_geometry<bg::model::box<P3fc>, P3fc>("POLYGON((0 1 2,2 4 6))", "POINT(0 0 0)", "POINT(2 5 7)", true, 2.0f/7);
+ test_geometry<bg::model::box<P3dc>, P3dc>("POLYGON((0 1 2,2 4 6))", "POINT(0 0 0)", "POINT(2 5 7)", true, 2.0/7);
+
+ test_geometry<bg::model::box<P2ic>, P2ic>("POLYGON((0 1,2 4))", "POINT(3 4)", "POINT(0 0)", true, 1.0f/3);
+ test_geometry<bg::model::box<P2fc>, P2fc>("POLYGON((0 1,2 4))", "POINT(3 4)", "POINT(0 2)", true, 1.0f/3);
+ test_geometry<bg::model::box<P2dc>, P2dc>("POLYGON((0 1,2 4))", "POINT(3 4)", "POINT(0 2)", true, 1.0/3);
+ test_geometry<bg::model::box<P3ic>, P3ic>("POLYGON((0 1 2,2 4 6))", "POINT(3 5 6)", "POINT(0 3 3)", true, 1.0f/2);
+ test_geometry<bg::model::box<P3fc>, P3fc>("POLYGON((0 1 2,2 4 6))", "POINT(3 5 6)", "POINT(0 3 3)", true, 1.0f/2);
+ test_geometry<bg::model::box<P3dc>, P3dc>("POLYGON((0 1 2,2 4 6))", "POINT(3 5 6)", "POINT(0 3 3)", true, 1.0/2);
+
+ test_geometry<bg::model::box<P2ic>, P2ic>("POLYGON((0 1,2 4))", "POINT(1 0)", "POINT(1 5)", true, 1.0f/5);
+ test_geometry<bg::model::box<P2fc>, P2fc>("POLYGON((0 1,2 4))", "POINT(1 5)", "POINT(1 0)", true, 1.0f/5);
+ test_geometry<bg::model::box<P2dc>, P2dc>("POLYGON((0 1,2 4))", "POINT(1 0)", "POINT(1 5)", true, 1.0/5);
+ test_geometry<bg::model::box<P3ic>, P3ic>("POLYGON((0 1 2,2 4 6))", "POINT(1 3 0)", "POINT(1 3 7)", true, 2.0f/7);
+ test_geometry<bg::model::box<P3fc>, P3fc>("POLYGON((0 1 2,2 4 6))", "POINT(1 3 7)", "POINT(1 3 0)", true, 1.0f/7);
+ test_geometry<bg::model::box<P3dc>, P3dc>("POLYGON((0 1 2,2 4 6))", "POINT(1 3 0)", "POINT(1 3 7)", true, 2.0/7);
+
+ test_geometry<bg::model::box<P2ic>, P2ic>("POLYGON((0 1,2 4))", "POINT(0 0)", "POINT(0 5)", true, 0.2f);
+ test_geometry<bg::model::box<P2fc>, P2fc>("POLYGON((0 1,2 4))", "POINT(0 5)", "POINT(0 0)", true, 0.2f);
+ test_geometry<bg::model::box<P2dc>, P2dc>("POLYGON((0 1,2 4))", "POINT(0 0)", "POINT(0 5)", true, 0.2);
+
+ test_geometry<bg::model::box<P2ic>, P2ic>("POLYGON((0 1,2 4))", "POINT(3 0)", "POINT(3 5)", false, 0.0f);
+ test_geometry<bg::model::box<P2fc>, P2fc>("POLYGON((0 1,2 4))", "POINT(3 5)", "POINT(3 0)", false, 0.0f);
+ test_geometry<bg::model::box<P2dc>, P2dc>("POLYGON((0 1,2 4))", "POINT(3 0)", "POINT(3 5)", false, 0.0);
+
+ test_geometry<bg::model::box<P2fc>, P2fc>("POLYGON((0 1,2 4))", "POINT(1 0)", "POINT(1 1)", true, 1.0f);
+ test_geometry<bg::model::box<P2fc>, P2fc>("POLYGON((0 1,2 4))", "POINT(1 4)", "POINT(1 5)", true, 0.0f);
+
+ test_geometry<bg::model::box<P2fc>, P2fc>("POLYGON((0 1,2 4))", "POINT(0.5 2)", "POINT(1.5 3)", true, 0.0f);
+
+#ifdef HAVE_TTMATH
+ typedef bg::model::point<ttmath_big, 2, bg::cs::cartesian> P2ttmc;
+ typedef bg::model::point<ttmath_big, 3, bg::cs::cartesian> P3ttmc;
+
+ test_geometry<bg::model::box<P2ttmc>, P2ttmc>("POLYGON((0 1,2 4))", "POINT(0 0)", "POINT(2 5)", true, 1.0f/5);
+ test_geometry<bg::model::box<P3ttmc>, P3ttmc>("POLYGON((0 1 2,2 4 6))", "POINT(0 0 0)", "POINT(2 5 7)", true, 2.0f/7);
+#endif
+
+ test_large_integers();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/algorithms/test_content.hpp b/libs/geometry/index/test/algorithms/test_content.hpp
new file mode 100644
index 000000000..226bbcd36
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/test_content.hpp
@@ -0,0 +1,49 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_CONTENT_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_CONTENT_HPP
+
+#include <geometry_index_test_common.hpp>
+
+#include <boost/geometry/index/detail/algorithms/content.hpp>
+
+//#include <boost/geometry/io/wkt/read.hpp>
+
+
+template <typename Geometry>
+void test_content(Geometry const& geometry,
+ typename bgi::detail::default_content_result<Geometry>::type expected_value)
+{
+ typename bgi::detail::default_content_result<Geometry>::type value = bgi::detail::content(geometry);
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Geometry>::type).name()
+ << " "
+ << typeid(typename bgi::detail::default_content_result<Geometry>::type).name()
+ << " "
+ << "content : " << value
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(value, expected_value, 0.0001);
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt,
+ typename bgi::detail::default_content_result<Geometry>::type expected_value)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ test_content(geometry, expected_value);
+}
+
+#endif
diff --git a/libs/geometry/index/test/algorithms/test_intersection_content.hpp b/libs/geometry/index/test/algorithms/test_intersection_content.hpp
new file mode 100644
index 000000000..5a074b7c1
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/test_intersection_content.hpp
@@ -0,0 +1,47 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_INTERSECTION_CONTENT_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_INTERSECTION_CONTENT_HPP
+
+#include <geometry_index_test_common.hpp>
+
+#include <boost/geometry/index/detail/algorithms/intersection_content.hpp>
+
+template <typename Geometry>
+void test_intersection_content(Geometry const& geometry1, Geometry const& geometry2,
+ typename bgi::detail::default_content_result<Geometry>::type expected_value)
+{
+ typename bgi::detail::default_content_result<Geometry>::type value = bgi::detail::intersection_content(geometry1, geometry2);
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Geometry>::type).name()
+ << " "
+ << typeid(typename bgi::detail::default_content_result<Geometry>::type).name()
+ << " "
+ << "intersection_content : " << value
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(value, expected_value, 0.0001);
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt1, std::string const& wkt2,
+ typename bgi::detail::default_content_result<Geometry>::type expected_value)
+{
+ Geometry geometry1, geometry2;
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+ test_intersection_content(geometry1, geometry2, expected_value);
+}
+
+#endif
diff --git a/libs/geometry/index/test/algorithms/test_margin.hpp b/libs/geometry/index/test/algorithms/test_margin.hpp
new file mode 100644
index 000000000..45d10dfe9
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/test_margin.hpp
@@ -0,0 +1,48 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_MARGIN_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_MARGIN_HPP
+
+#include <geometry_index_test_common.hpp>
+
+#include <boost/geometry/index/detail/algorithms/margin.hpp>
+
+//#include <boost/geometry/io/wkt/read.hpp>
+
+template <typename Geometry>
+void test_margin(Geometry const& geometry,
+ typename bgi::detail::default_margin_result<Geometry>::type expected_value)
+{
+ typename bgi::detail::default_margin_result<Geometry>::type value = bgi::detail::comparable_margin(geometry);
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Geometry>::type).name()
+ << " "
+ << typeid(typename bgi::detail::default_margin_result<Geometry>::type).name()
+ << " "
+ << "content : " << value
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(value, expected_value, 0.0001);
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt,
+ typename bgi::detail::default_margin_result<Geometry>::type expected_value)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ test_margin(geometry, expected_value);
+}
+
+#endif
diff --git a/libs/geometry/index/test/algorithms/test_union_content.hpp b/libs/geometry/index/test/algorithms/test_union_content.hpp
new file mode 100644
index 000000000..fe0268795
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/test_union_content.hpp
@@ -0,0 +1,47 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_UNION_CONTENT_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_UNION_CONTENT_HPP
+
+#include <geometry_index_test_common.hpp>
+
+#include <boost/geometry/index/detail/algorithms/union_content.hpp>
+
+template <typename Geometry>
+void test_union_content(Geometry const& geometry1, Geometry const& geometry2,
+ typename bgi::detail::default_content_result<Geometry>::type expected_value)
+{
+ typename bgi::detail::default_content_result<Geometry>::type value = bgi::detail::union_content(geometry1, geometry2);
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Geometry>::type).name()
+ << " "
+ << typeid(typename bgi::detail::default_content_result<Geometry>::type).name()
+ << " "
+ << "union_content : " << value
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(value, expected_value, 0.0001);
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt1, std::string const& wkt2,
+ typename bgi::detail::default_content_result<Geometry>::type expected_value)
+{
+ Geometry geometry1, geometry2;
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+ test_union_content(geometry1, geometry2, expected_value);
+}
+
+#endif
diff --git a/libs/geometry/index/test/algorithms/union_content.cpp b/libs/geometry/index/test/algorithms/union_content.cpp
new file mode 100644
index 000000000..4939e57ad
--- /dev/null
+++ b/libs/geometry/index/test/algorithms/union_content.cpp
@@ -0,0 +1,70 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <algorithms/test_union_content.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+//#define GEOMETRY_TEST_DEBUG
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::box<int_point_type> int_box1, int_box2;
+ bg::model::box<double_point_type> double_box1, double_box2;
+
+ std::string const box_li1 = "POLYGON((1536119 192000, 1872000 528000))";
+ std::string const box_li2 = "POLYGON((1701234 368250, 2673400 777400))";
+ bg::read_wkt(box_li1, int_box1);
+ bg::read_wkt(box_li1, double_box1);
+ bg::read_wkt(box_li2, int_box2);
+ bg::read_wkt(box_li2, double_box2);
+
+ double int_value = bgi::detail::union_content(int_box1, int_box2);
+ double double_value = bgi::detail::union_content(double_box1, double_box2);
+
+ BOOST_CHECK_CLOSE(int_value, double_value, 0.0001);
+}
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> P2ic;
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2fc;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> P2dc;
+
+ typedef bg::model::point<int, 3, bg::cs::cartesian> P3ic;
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P3fc;
+ typedef bg::model::point<double, 3, bg::cs::cartesian> P3dc;
+
+ test_geometry<bg::model::box<P2ic> >("POLYGON((0 1,2 4))", "POLYGON((1 2,3 5))", 12.0);
+ test_geometry<bg::model::box<P2fc> >("POLYGON((0 1,2 4))", "POLYGON((1 2,3 5))", 12.0);
+ test_geometry<bg::model::box<P2dc> >("POLYGON((0 1,2 4))", "POLYGON((1 2,3 5))", 12.0);
+ test_geometry<bg::model::box<P3ic> >("POLYGON((0 1 2,2 4 6))", "POLYGON((1 2 3,3 5 7))", 60.0);
+ test_geometry<bg::model::box<P3fc> >("POLYGON((0 1 2,2 4 6))", "POLYGON((1 2 3,3 5 7))", 60.0);
+ test_geometry<bg::model::box<P3dc> >("POLYGON((0 1 2,2 4 6))", "POLYGON((1 2 3,3 5 7))", 60.0);
+
+ test_geometry<bg::model::box<P2dc> >("POLYGON((0 1,2 4))", "POLYGON((2 1,3 4))", 9.0);
+ test_geometry<bg::model::box<P2dc> >("POLYGON((0 1,2 4))", "POLYGON((2 4,3 5))", 12.0);
+
+#ifdef HAVE_TTMATH
+ typedef bg::model::point<ttmath_big, 2, bg::cs::cartesian> P2ttmc;
+ typedef bg::model::point<ttmath_big, 3, bg::cs::cartesian> P3ttmc;
+
+ test_geometry<bg::model::box<P2ttmc> >("POLYGON((0 1,2 4))", "POLYGON((1 2,3 5))", 12.0);
+ test_geometry<bg::model::box<P3ttmc> >("POLYGON((0 1 2,2 4 6))", "POLYGON((1 2 3,3 5 7))", 60.0);
+#endif
+
+ test_large_integers();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/geometry_index_test_common.hpp b/libs/geometry/index/test/geometry_index_test_common.hpp
new file mode 100644
index 000000000..4a2ac615c
--- /dev/null
+++ b/libs/geometry/index/test/geometry_index_test_common.hpp
@@ -0,0 +1,28 @@
+// Boost.Geometry Index
+// Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#ifndef GEOMETRY_TEST_GEOMETRY_INDEX_TEST_COMMON_HPP
+#define GEOMETRY_TEST_GEOMETRY_INDEX_TEST_COMMON_HPP
+
+#if defined(_MSC_VER)
+
+//#pragma warning (disable : 4996) // deprecated functions
+//#pragma warning (disable : 4100) // unreferenced formal parameter
+//#pragma warning (disable : 4127) // conditional expression is constant
+
+#endif // _MSC_VER
+
+#include <boost/geometry.hpp>
+
+#include <geometry_test_common.hpp>
+
+namespace boost { namespace geometry { namespace index {}}}
+namespace bgi = boost::geometry::index;
+
+#endif // GEOMETRY_TEST_GEOMETRY_INDEX_TEST_COMMON_HPP
diff --git a/libs/geometry/index/test/movable.hpp b/libs/geometry/index/test/movable.hpp
new file mode 100644
index 000000000..c1dd278e7
--- /dev/null
+++ b/libs/geometry/index/test/movable.hpp
@@ -0,0 +1,92 @@
+// Boost.Geometry.Index varray
+// Unit Test
+
+// Copyright (c) 2009 Ion Gaztanaga
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_MOVABLE_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_MOVABLE_HPP
+
+//[movable_definition
+//header file "movable.hpp"
+#include <boost/move/move.hpp>
+
+//A movable class
+class movable
+{
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(movable)
+ int value_;
+
+public:
+ movable() : value_(1){}
+
+ //Move constructor and assignment
+ movable(BOOST_RV_REF(movable) m)
+ { value_ = m.value_; m.value_ = 0; }
+
+ movable & operator=(BOOST_RV_REF(movable) m)
+ { value_ = m.value_; m.value_ = 0; return *this; }
+
+ bool moved() const //Observer
+ { return value_ == 0; }
+};
+
+
+class copy_movable
+{
+ BOOST_COPYABLE_AND_MOVABLE(copy_movable)
+ size_t value_;
+
+public:
+ copy_movable(size_t value = 1) : value_(value){}
+
+ //Move constructor and assignment
+ copy_movable(BOOST_RV_REF(copy_movable) m)
+ { value_ = m.value_; m.value_ = 0; }
+
+ copy_movable(const copy_movable &m)
+ { value_ = m.value_; }
+
+ copy_movable & operator=(BOOST_RV_REF(copy_movable) m)
+ { value_ = m.value_; m.value_ = 0; return *this; }
+
+ copy_movable & operator=(BOOST_COPY_ASSIGN_REF(copy_movable) m)
+ { value_ = m.value_; return *this; }
+
+ bool moved() const //Observer
+ { return value_ == 0; }
+
+ bool operator==(const copy_movable& m) const
+ { return value_ == m.value_; }
+};
+
+struct copy_movable_wrapper
+{
+ copy_movable cm;
+};
+
+copy_movable produce()
+{ return copy_movable(); }
+
+namespace boost{
+
+template<>
+struct has_nothrow_move<movable>
+{
+ static const bool value = true;
+};
+
+template<>
+struct has_nothrow_move<copy_movable>
+{
+ static const bool value = true;
+};
+
+} //namespace boost{
+//]
+
+#endif //BOOST_GEOMETRY_INDEX_TEST_MOVABLE_HPP
diff --git a/libs/geometry/index/test/rtree/Jamfile.v2 b/libs/geometry/index/test/rtree/Jamfile.v2
new file mode 100644
index 000000000..d906c8880
--- /dev/null
+++ b/libs/geometry/index/test/rtree/Jamfile.v2
@@ -0,0 +1,11 @@
+# Boost.Geometry Index
+#
+# Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+#
+# 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)
+
+build-project exceptions ;
+build-project interprocess ;
+build-project generated ;
diff --git a/libs/geometry/index/test/rtree/exceptions/Jamfile.v2 b/libs/geometry/index/test/rtree/exceptions/Jamfile.v2
new file mode 100644
index 000000000..c8b42604c
--- /dev/null
+++ b/libs/geometry/index/test/rtree/exceptions/Jamfile.v2
@@ -0,0 +1,21 @@
+# Boost.Geometry Index
+#
+# Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+#
+# 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)
+
+rule test_all
+{
+ local all_rules = ;
+
+ for local fileb in [ glob *.cpp ]
+ {
+ all_rules += [ run $(fileb) ] ;
+ }
+
+ return $(all_rules) ;
+}
+
+test-suite boost-geometry-index-rtree-exceptions : [ test_all r ] ;
diff --git a/libs/geometry/index/test/rtree/exceptions/rtree_exceptions_lin.cpp b/libs/geometry/index/test/rtree/exceptions/rtree_exceptions_lin.cpp
new file mode 100644
index 000000000..74c0ba6d0
--- /dev/null
+++ b/libs/geometry/index/test/rtree/exceptions/rtree_exceptions_lin.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/exceptions/test_exceptions.hpp>
+
+int test_main(int, char* [])
+{
+ test_rtree_value_exceptions< bgi::linear<4, 2> >();
+ test_rtree_value_exceptions(bgi::dynamic_linear(4, 2));
+
+ test_rtree_elements_exceptions< bgi::linear_throwing<4, 2> >();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/exceptions/rtree_exceptions_qua.cpp b/libs/geometry/index/test/rtree/exceptions/rtree_exceptions_qua.cpp
new file mode 100644
index 000000000..5dde64a8d
--- /dev/null
+++ b/libs/geometry/index/test/rtree/exceptions/rtree_exceptions_qua.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/exceptions/test_exceptions.hpp>
+
+int test_main(int, char* [])
+{
+ test_rtree_value_exceptions< bgi::quadratic<4, 2> >();
+ test_rtree_value_exceptions(bgi::dynamic_quadratic(4, 2));
+
+ test_rtree_elements_exceptions< bgi::quadratic_throwing<4, 2> >();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/exceptions/rtree_exceptions_rst.cpp b/libs/geometry/index/test/rtree/exceptions/rtree_exceptions_rst.cpp
new file mode 100644
index 000000000..c09e2d378
--- /dev/null
+++ b/libs/geometry/index/test/rtree/exceptions/rtree_exceptions_rst.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/exceptions/test_exceptions.hpp>
+
+int test_main(int, char* [])
+{
+ test_rtree_value_exceptions< bgi::rstar<4, 2> >();
+ test_rtree_value_exceptions(bgi::dynamic_rstar(4, 2));
+
+ test_rtree_elements_exceptions< bgi::rstar_throwing<4, 2> >();
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/exceptions/test_exceptions.hpp b/libs/geometry/index/test/rtree/exceptions/test_exceptions.hpp
new file mode 100644
index 000000000..25f9fb844
--- /dev/null
+++ b/libs/geometry/index/test/rtree/exceptions/test_exceptions.hpp
@@ -0,0 +1,193 @@
+// Boost.Geometry Index
+//
+// R-tree nodes based on runtime-polymorphism, storing static-size containers
+// test version throwing exceptions on creation
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_RTREE_EXCEPTIONS_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_RTREE_EXCEPTIONS_HPP
+
+#include <rtree/test_rtree.hpp>
+
+#include <rtree/exceptions/test_throwing.hpp>
+#include <rtree/exceptions/test_throwing_node.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+// test value exceptions
+template <typename Parameters>
+void test_rtree_value_exceptions(Parameters const& parameters = Parameters())
+{
+ typedef std::pair<bg::model::point<float, 2, bg::cs::cartesian>, throwing_value> Value;
+ typedef bgi::rtree<Value, Parameters> Tree;
+ typedef typename Tree::bounds_type B;
+
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls((std::numeric_limits<size_t>::max)());
+ std::vector<Value> input;
+ B qbox;
+ generate::input<2>::apply(input, qbox);
+
+ for ( size_t i = 0 ; i < 50 ; i += 2 )
+ {
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls(10000);
+
+ Tree tree(parameters);
+
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls(i);
+
+ BOOST_CHECK_THROW( tree.insert(input.begin(), input.end()), throwing_value_copy_exception );
+ }
+
+ for ( size_t i = 0 ; i < 20 ; i += 1 )
+ {
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls(i);
+
+ BOOST_CHECK_THROW( Tree tree(input.begin(), input.end(), parameters), throwing_value_copy_exception );
+ }
+
+ for ( size_t i = 0 ; i < 10 ; i += 1 )
+ {
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls(10000);
+
+ Tree tree(parameters);
+
+ tree.insert(input.begin(), input.end());
+
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls(i);
+
+ BOOST_CHECK_THROW( tree.remove(input.begin(), input.end()), throwing_value_copy_exception );
+ }
+
+ for ( size_t i = 0 ; i < 20 ; i += 2 )
+ {
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls(10000);
+
+ Tree tree(parameters);
+
+ tree.insert(input.begin(), input.end());
+
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls(i);
+
+ BOOST_CHECK_THROW( Tree tree2(tree), throwing_value_copy_exception );
+ }
+
+ for ( size_t i = 0 ; i < 20 ; i += 2 )
+ {
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls(10000);
+
+ Tree tree(parameters);
+ Tree tree2(parameters);
+
+ tree.insert(input.begin(), input.end());
+
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls(i);
+
+ BOOST_CHECK_THROW(tree2 = tree, throwing_value_copy_exception );
+ }
+}
+
+// test value exceptions
+template <typename Parameters>
+void test_rtree_elements_exceptions(Parameters const& parameters = Parameters())
+{
+ typedef std::pair<bg::model::point<float, 2, bg::cs::cartesian>, throwing_value> Value;
+ typedef bgi::rtree<Value, Parameters> Tree;
+ typedef typename Tree::bounds_type B;
+
+ throwing_value::reset_calls_counter();
+ throwing_value::set_max_calls((std::numeric_limits<size_t>::max)());
+
+ std::vector<Value> input;
+ B qbox;
+ generate::input<2>::apply(input, qbox, 2);
+
+ for ( size_t i = 0 ; i < 100 ; i += 2 )
+ {
+ throwing_varray_settings::reset_calls_counter();
+ throwing_varray_settings::set_max_calls(10000);
+
+ Tree tree(parameters);
+
+ throwing_varray_settings::reset_calls_counter();
+ throwing_varray_settings::set_max_calls(i);
+
+ BOOST_CHECK_THROW( tree.insert(input.begin(), input.end()), throwing_varray_exception );
+ }
+
+ for ( size_t i = 0 ; i < 100 ; i += 2 )
+ {
+ throwing_varray_settings::reset_calls_counter();
+ throwing_varray_settings::set_max_calls(i);
+
+ throwing_nodes_stats::reset_counters();
+
+ BOOST_CHECK_THROW( Tree tree(input.begin(), input.end(), parameters), throwing_varray_exception );
+
+ BOOST_CHECK_EQUAL(throwing_nodes_stats::internal_nodes_count(), 0u);
+ BOOST_CHECK_EQUAL(throwing_nodes_stats::leafs_count(), 0u);
+ }
+
+ for ( size_t i = 0 ; i < 50 ; i += 2 )
+ {
+ throwing_varray_settings::reset_calls_counter();
+ throwing_varray_settings::set_max_calls(10000);
+
+ Tree tree(parameters);
+
+ tree.insert(input.begin(), input.end());
+
+ throwing_varray_settings::reset_calls_counter();
+ throwing_varray_settings::set_max_calls(i);
+
+ BOOST_CHECK_THROW( tree.remove(input.begin(), input.end()), throwing_varray_exception );
+ }
+
+ for ( size_t i = 0 ; i < 50 ; i += 2 )
+ {
+ throwing_varray_settings::reset_calls_counter();
+ throwing_varray_settings::set_max_calls(10000);
+
+ Tree tree(parameters);
+
+ tree.insert(input.begin(), input.end());
+
+ throwing_varray_settings::reset_calls_counter();
+ throwing_varray_settings::set_max_calls(i);
+
+ BOOST_CHECK_THROW( Tree tree2(tree), throwing_varray_exception );
+ }
+
+ for ( size_t i = 0 ; i < 50 ; i += 2 )
+ {
+ throwing_varray_settings::reset_calls_counter();
+ throwing_varray_settings::set_max_calls(10000);
+
+ Tree tree(parameters);
+ Tree tree2(parameters);
+
+ tree.insert(input.begin(), input.end());
+
+ throwing_varray_settings::reset_calls_counter();
+ throwing_varray_settings::set_max_calls(i);
+
+ BOOST_CHECK_THROW(tree2 = tree, throwing_varray_exception );
+ }
+}
+
+#endif // BOOST_GEOMETRY_INDEX_TEST_RTREE_EXCEPTIONS_HPP
diff --git a/libs/geometry/index/test/rtree/exceptions/test_throwing.hpp b/libs/geometry/index/test/rtree/exceptions/test_throwing.hpp
new file mode 100644
index 000000000..dc621c0b3
--- /dev/null
+++ b/libs/geometry/index/test/rtree/exceptions/test_throwing.hpp
@@ -0,0 +1,138 @@
+// Boost.Geometry Index
+//
+// Throwing objects implementation
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_THROWING_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_THROWING_HPP
+
+// value
+
+struct throwing_value_copy_exception : public std::exception
+{
+ const char * what() const throw() { return "value copy failed."; }
+};
+
+struct throwing_value
+{
+ explicit throwing_value(int v = 0)
+ : value(v)
+ {}
+
+ bool operator==(throwing_value const& v) const
+ {
+ return value == v.value;
+ }
+
+ throwing_value(throwing_value const& v)
+ {
+ throw_if_required();
+
+ value = v.value;
+ }
+
+ throwing_value & operator=(throwing_value const& v)
+ {
+ throw_if_required();
+
+ value = v.value;
+ return *this;
+ }
+
+ void throw_if_required()
+ {
+ // throw if counter meets max count
+ if ( get_max_calls_ref() <= get_calls_counter_ref() )
+ throw throwing_value_copy_exception();
+ else
+ ++get_calls_counter_ref();
+ }
+
+ static void reset_calls_counter() { get_calls_counter_ref() = 0; }
+ static void set_max_calls(size_t mc) { get_max_calls_ref() = mc; }
+
+ static size_t & get_calls_counter_ref() { static size_t cc = 0; return cc; }
+ static size_t & get_max_calls_ref() { static size_t mc = (std::numeric_limits<size_t>::max)(); return mc; }
+
+ int value;
+};
+
+namespace generate {
+template <typename T, typename C>
+struct value< std::pair<bg::model::point<T, 2, C>, throwing_value> >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef std::pair<P, throwing_value> R;
+ static R apply(int x, int y)
+ {
+ return std::make_pair(P(x, y), throwing_value(x + y * 100));
+ }
+};
+} // namespace generate
+
+#include <boost/geometry/index/detail/varray.hpp>
+
+struct throwing_varray_exception : public std::exception
+{
+ const char * what() const throw() { return "static vector exception."; }
+};
+
+struct throwing_varray_settings
+{
+ static void throw_if_required()
+ {
+ // throw if counter meets max count
+ if ( get_max_calls_ref() <= get_calls_counter_ref() )
+ throw throwing_varray_exception();
+ else
+ ++get_calls_counter_ref();
+ }
+
+ static void reset_calls_counter() { get_calls_counter_ref() = 0; }
+ static void set_max_calls(size_t mc) { get_max_calls_ref() = mc; }
+
+ static size_t & get_calls_counter_ref() { static size_t cc = 0; return cc; }
+ static size_t & get_max_calls_ref() { static size_t mc = (std::numeric_limits<size_t>::max)(); return mc; }
+};
+
+template <typename Element, size_t Capacity>
+class throwing_varray
+ : public boost::geometry::index::detail::varray<Element, Capacity>
+{
+ typedef boost::geometry::index::detail::varray<Element, Capacity> container;
+
+public:
+ typedef typename container::value_type value_type;
+ typedef typename container::size_type size_type;
+ typedef typename container::iterator iterator;
+ typedef typename container::const_iterator const_iterator;
+ typedef typename container::reverse_iterator reverse_iterator;
+ typedef typename container::const_reverse_iterator const_reverse_iterator;
+ typedef typename container::reference reference;
+ typedef typename container::const_reference const_reference;
+
+ inline void resize(size_type s)
+ {
+ throwing_varray_settings::throw_if_required();
+ container::resize(s);
+ }
+
+ inline void reserve(size_type s)
+ {
+ throwing_varray_settings::throw_if_required();
+ container::reserve(s);
+ }
+
+ void push_back(Element const& v)
+ {
+ throwing_varray_settings::throw_if_required();
+ container::push_back(v);
+ }
+};
+
+#endif // BOOST_GEOMETRY_INDEX_TEST_THROWING_HPP
diff --git a/libs/geometry/index/test/rtree/exceptions/test_throwing_node.hpp b/libs/geometry/index/test/rtree/exceptions/test_throwing_node.hpp
new file mode 100644
index 000000000..cbbb3b76d
--- /dev/null
+++ b/libs/geometry/index/test/rtree/exceptions/test_throwing_node.hpp
@@ -0,0 +1,325 @@
+// Boost.Geometry Index
+//
+// R-tree nodes based on runtime-polymorphism, storing static-size containers
+// test version throwing exceptions on creation
+//
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+//
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_RTREE_THROWING_NODE_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_RTREE_THROWING_NODE_HPP
+
+#include <boost/geometry/index/detail/rtree/node/dynamic_visitor.hpp>
+
+#include <rtree/exceptions/test_throwing.hpp>
+
+struct throwing_nodes_stats
+{
+ static void reset_counters() { get_internal_nodes_counter_ref() = 0; get_leafs_counter_ref() = 0; }
+ static size_t internal_nodes_count() { return get_internal_nodes_counter_ref(); }
+ static size_t leafs_count() { return get_leafs_counter_ref(); }
+
+ static size_t & get_internal_nodes_counter_ref() { static size_t cc = 0; return cc; }
+ static size_t & get_leafs_counter_ref() { static size_t cc = 0; return cc; }
+};
+
+namespace boost { namespace geometry { namespace index {
+
+template <size_t MaxElements, size_t MinElements>
+struct linear_throwing : public linear<MaxElements, MinElements> {};
+
+template <size_t MaxElements, size_t MinElements>
+struct quadratic_throwing : public quadratic<MaxElements, MinElements> {};
+
+template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold = 0, size_t ReinsertedElements = detail::default_rstar_reinserted_elements_s<MaxElements>::value>
+struct rstar_throwing : public rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements> {};
+
+namespace detail { namespace rtree {
+
+// options implementation (from options.hpp)
+
+struct node_throwing_d_mem_static_tag {};
+
+template <size_t MaxElements, size_t MinElements>
+struct options_type< linear_throwing<MaxElements, MinElements> >
+{
+ typedef options<
+ linear_throwing<MaxElements, MinElements>,
+ insert_default_tag, choose_by_content_diff_tag, split_default_tag, linear_tag,
+ node_throwing_d_mem_static_tag
+ > type;
+};
+
+template <size_t MaxElements, size_t MinElements>
+struct options_type< quadratic_throwing<MaxElements, MinElements> >
+{
+ typedef options<
+ quadratic_throwing<MaxElements, MinElements>,
+ insert_default_tag, choose_by_content_diff_tag, split_default_tag, quadratic_tag,
+ node_throwing_d_mem_static_tag
+ > type;
+};
+
+template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold, size_t ReinsertedElements>
+struct options_type< rstar_throwing<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements> >
+{
+ typedef options<
+ rstar_throwing<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements>,
+ insert_reinsert_tag, choose_by_overlap_diff_tag, split_default_tag, rstar_tag,
+ node_throwing_d_mem_static_tag
+ > type;
+};
+
+}} // namespace detail::rtree
+
+// node implementation
+
+namespace detail { namespace rtree {
+
+template <typename Value, typename Parameters, typename Box, typename Allocators>
+struct dynamic_internal_node<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+ : public dynamic_node<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+{
+ typedef throwing_varray<
+ rtree::ptr_pair<Box, typename Allocators::node_pointer>,
+ Parameters::max_elements + 1
+ > elements_type;
+
+ template <typename Dummy>
+ inline dynamic_internal_node(Dummy const&) { throwing_nodes_stats::get_internal_nodes_counter_ref()++; }
+ inline ~dynamic_internal_node() { throwing_nodes_stats::get_internal_nodes_counter_ref()--; }
+
+ void apply_visitor(dynamic_visitor<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag, false> & v) { v(*this); }
+ void apply_visitor(dynamic_visitor<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag, true> & v) const { v(*this); }
+
+ elements_type elements;
+
+private:
+ dynamic_internal_node(dynamic_internal_node const&);
+ dynamic_internal_node & operator=(dynamic_internal_node const&);
+};
+
+template <typename Value, typename Parameters, typename Box, typename Allocators>
+struct dynamic_leaf<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+ : public dynamic_node<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+{
+ typedef throwing_varray<Value, Parameters::max_elements + 1> elements_type;
+
+ template <typename Dummy>
+ inline dynamic_leaf(Dummy const&) { throwing_nodes_stats::get_leafs_counter_ref()++; }
+ inline ~dynamic_leaf() { throwing_nodes_stats::get_leafs_counter_ref()--; }
+
+ void apply_visitor(dynamic_visitor<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag, false> & v) { v(*this); }
+ void apply_visitor(dynamic_visitor<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag, true> & v) const { v(*this); }
+
+ elements_type elements;
+
+private:
+ dynamic_leaf(dynamic_leaf const&);
+ dynamic_leaf & operator=(dynamic_leaf const&);
+};
+
+// elements derived type
+template <typename OldValue, size_t N, typename NewValue>
+struct container_from_elements_type<throwing_varray<OldValue, N>, NewValue>
+{
+ typedef throwing_varray<NewValue, N> type;
+};
+
+// nodes traits
+
+template <typename Value, typename Parameters, typename Box, typename Allocators>
+struct node<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+{
+ typedef dynamic_node<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag> type;
+};
+
+template <typename Value, typename Parameters, typename Box, typename Allocators>
+struct internal_node<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+{
+ typedef dynamic_internal_node<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag> type;
+};
+
+template <typename Value, typename Parameters, typename Box, typename Allocators>
+struct leaf<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+{
+ typedef dynamic_leaf<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag> type;
+};
+
+template <typename Value, typename Parameters, typename Box, typename Allocators, bool IsVisitableConst>
+struct visitor<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag, IsVisitableConst>
+{
+ typedef dynamic_visitor<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag, IsVisitableConst> type;
+};
+
+// allocators
+
+template <typename Allocator, typename Value, typename Parameters, typename Box>
+class allocators<Allocator, Value, Parameters, Box, node_throwing_d_mem_static_tag>
+ : public Allocator::template rebind<
+ typename internal_node<
+ Value, Parameters, Box,
+ allocators<Allocator, Value, Parameters, Box, node_throwing_d_mem_static_tag>,
+ node_throwing_d_mem_static_tag
+ >::type
+ >::other
+ , Allocator::template rebind<
+ typename leaf<
+ Value, Parameters, Box,
+ allocators<Allocator, Value, Parameters, Box, node_throwing_d_mem_static_tag>,
+ node_throwing_d_mem_static_tag
+ >::type
+ >::other
+{
+ typedef typename Allocator::template rebind<
+ Value
+ >::other value_allocator_type;
+
+public:
+ typedef Allocator allocator_type;
+
+ typedef Value value_type;
+ typedef value_type & reference;
+ typedef const value_type & const_reference;
+ typedef typename value_allocator_type::size_type size_type;
+ typedef typename value_allocator_type::difference_type difference_type;
+ typedef typename value_allocator_type::pointer pointer;
+ typedef typename value_allocator_type::const_pointer const_pointer;
+
+ typedef typename Allocator::template rebind<
+ typename node<Value, Parameters, Box, allocators, node_throwing_d_mem_static_tag>::type
+ >::other::pointer node_pointer;
+
+ typedef typename Allocator::template rebind<
+ typename internal_node<Value, Parameters, Box, allocators, node_throwing_d_mem_static_tag>::type
+ >::other::pointer internal_node_pointer;
+
+ typedef typename Allocator::template rebind<
+ typename internal_node<Value, Parameters, Box, allocators, node_throwing_d_mem_static_tag>::type
+ >::other internal_node_allocator_type;
+
+ typedef typename Allocator::template rebind<
+ typename leaf<Value, Parameters, Box, allocators, node_throwing_d_mem_static_tag>::type
+ >::other leaf_allocator_type;
+
+ inline allocators()
+ : internal_node_allocator_type()
+ , leaf_allocator_type()
+ {}
+
+ template <typename Alloc>
+ inline explicit allocators(Alloc const& alloc)
+ : internal_node_allocator_type(alloc)
+ , leaf_allocator_type(alloc)
+ {}
+
+ inline allocators(BOOST_FWD_REF(allocators) a)
+ : internal_node_allocator_type(boost::move(a.internal_node_allocator()))
+ , leaf_allocator_type(boost::move(a.leaf_allocator()))
+ {}
+
+ inline allocators & operator=(BOOST_FWD_REF(allocators) a)
+ {
+ internal_node_allocator() = ::boost::move(a.internal_node_allocator());
+ leaf_allocator() = ::boost::move(a.leaf_allocator());
+ return *this;
+ }
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ inline allocators & operator=(allocators const& a)
+ {
+ internal_node_allocator() = a.internal_node_allocator();
+ leaf_allocator() = a.leaf_allocator();
+ return *this;
+ }
+#endif
+
+ void swap(allocators & a)
+ {
+ boost::swap(internal_node_allocator(), a.internal_node_allocator());
+ boost::swap(leaf_allocator(), a.leaf_allocator());
+ }
+
+ bool operator==(allocators const& a) const { return leaf_allocator() == a.leaf_allocator(); }
+ template <typename Alloc>
+ bool operator==(Alloc const& a) const { return leaf_allocator() == leaf_allocator_type(a); }
+
+ Allocator allocator() const { return Allocator(leaf_allocator()); }
+
+ internal_node_allocator_type & internal_node_allocator() { return *this; }
+ internal_node_allocator_type const& internal_node_allocator() const { return *this; }
+ leaf_allocator_type & leaf_allocator() { return *this; }
+ leaf_allocator_type const& leaf_allocator() const { return *this; }
+};
+
+struct node_bad_alloc : public std::exception
+{
+ const char * what() const throw() { return "internal node creation failed."; }
+};
+
+struct throwing_node_settings
+{
+ static void throw_if_required()
+ {
+ // throw if counter meets max count
+ if ( get_max_calls_ref() <= get_calls_counter_ref() )
+ throw node_bad_alloc();
+ else
+ ++get_calls_counter_ref();
+ }
+
+ static void reset_calls_counter() { get_calls_counter_ref() = 0; }
+ static void set_max_calls(size_t mc) { get_max_calls_ref() = mc; }
+
+ static size_t & get_calls_counter_ref() { static size_t cc = 0; return cc; }
+ static size_t & get_max_calls_ref() { static size_t mc = (std::numeric_limits<size_t>::max)(); return mc; }
+};
+
+// create_node
+
+template <typename Allocators, typename Value, typename Parameters, typename Box>
+struct create_node<
+ Allocators,
+ dynamic_internal_node<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+>
+{
+ static inline typename Allocators::node_pointer
+ apply(Allocators & allocators)
+ {
+ // throw if counter meets max count
+ throwing_node_settings::throw_if_required();
+
+ return create_dynamic_node<
+ typename Allocators::node_pointer,
+ dynamic_internal_node<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+ >::apply(allocators.internal_node_allocator());
+ }
+};
+
+template <typename Allocators, typename Value, typename Parameters, typename Box>
+struct create_node<
+ Allocators,
+ dynamic_leaf<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+>
+{
+ static inline typename Allocators::node_pointer
+ apply(Allocators & allocators)
+ {
+ // throw if counter meets max count
+ throwing_node_settings::throw_if_required();
+
+ return create_dynamic_node<
+ typename Allocators::node_pointer,
+ dynamic_leaf<Value, Parameters, Box, Allocators, node_throwing_d_mem_static_tag>
+ >::apply(allocators.leaf_allocator());
+ }
+};
+
+}} // namespace detail::rtree
+
+}}} // namespace boost::geometry::index
+
+#endif // BOOST_GEOMETRY_INDEX_TEST_RTREE_THROWING_NODE_HPP
diff --git a/libs/geometry/index/test/rtree/generated/Jamfile.v2 b/libs/geometry/index/test/rtree/generated/Jamfile.v2
new file mode 100644
index 000000000..b3ac64804
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/Jamfile.v2
@@ -0,0 +1,22 @@
+# Boost.Geometry Index
+#
+# Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+#
+# 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)
+
+rule test_all
+{
+ local all_rules = ;
+
+ for local fileb in [ glob *.cpp ]
+ {
+ all_rules += [ run $(fileb) ] ;
+ }
+
+ return $(all_rules) ;
+}
+
+test-suite boost-geometry-index-rtree-generated : [ test_all r ] ;
+
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_add_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_add_b2d.cpp
new file mode 100644
index 000000000..312a7ba55
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_add_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_add_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_add_b3d.cpp
new file mode 100644
index 000000000..fbcb002ee
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_add_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_add_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_add_p2d.cpp
new file mode 100644
index 000000000..222010ff4
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_add_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_add_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_add_p3d.cpp
new file mode 100644
index 000000000..4af7feded
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_add_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_b2d.cpp
new file mode 100644
index 000000000..aad24a95e
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_b3d.cpp
new file mode 100644
index 000000000..3520fcfa5
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_p2d.cpp
new file mode 100644
index 000000000..56895487b
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_p3d.cpp
new file mode 100644
index 000000000..90e51c399
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_mod_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_que_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_que_b2d.cpp
new file mode 100644
index 000000000..df167f6c6
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_que_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_que_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_que_b3d.cpp
new file mode 100644
index 000000000..ddac379f9
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_que_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_que_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_que_p2d.cpp
new file mode 100644
index 000000000..e66c79d9e
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_que_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dlin_que_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dlin_que_p3d.cpp
new file mode 100644
index 000000000..5ef00c062
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dlin_que_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::dynamic_linear(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_add_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_add_b2d.cpp
new file mode 100644
index 000000000..cd917bcf6
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_add_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_add_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_add_b3d.cpp
new file mode 100644
index 000000000..af1afdea7
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_add_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_add_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_add_p2d.cpp
new file mode 100644
index 000000000..ea21920cb
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_add_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_add_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_add_p3d.cpp
new file mode 100644
index 000000000..bfbd66bd0
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_add_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_b2d.cpp
new file mode 100644
index 000000000..4462102a0
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_b3d.cpp
new file mode 100644
index 000000000..e5a21b780
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_p2d.cpp
new file mode 100644
index 000000000..1e8112dbb
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_p3d.cpp
new file mode 100644
index 000000000..75cce976e
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_mod_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_que_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_que_b2d.cpp
new file mode 100644
index 000000000..47995d1bb
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_que_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_que_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_que_b3d.cpp
new file mode 100644
index 000000000..73c89d9ad
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_que_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_que_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_que_p2d.cpp
new file mode 100644
index 000000000..4683774f3
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_que_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_dqua_que_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_dqua_que_p3d.cpp
new file mode 100644
index 000000000..a5cae4ebb
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_dqua_que_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::dynamic_quadratic(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_add_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_add_b2d.cpp
new file mode 100644
index 000000000..9093a91ee
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_add_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_add_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_add_b3d.cpp
new file mode 100644
index 000000000..75cf1db8c
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_add_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_add_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_add_p2d.cpp
new file mode 100644
index 000000000..7595a41c4
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_add_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_add_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_add_p3d.cpp
new file mode 100644
index 000000000..934625270
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_add_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_mod_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_mod_b2d.cpp
new file mode 100644
index 000000000..f3495061b
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_mod_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_mod_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_mod_b3d.cpp
new file mode 100644
index 000000000..cf2490353
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_mod_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_mod_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_mod_p2d.cpp
new file mode 100644
index 000000000..886be52cf
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_mod_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_mod_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_mod_p3d.cpp
new file mode 100644
index 000000000..a597f6691
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_mod_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_que_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_que_b2d.cpp
new file mode 100644
index 000000000..2e46885db
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_que_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_que_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_que_b3d.cpp
new file mode 100644
index 000000000..3ea5e8f66
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_que_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_que_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_que_p2d.cpp
new file mode 100644
index 000000000..bab080776
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_que_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_drst_que_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_drst_que_p3d.cpp
new file mode 100644
index 000000000..efd0e34ee
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_drst_que_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::dynamic_rstar(5, 2), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_add_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_add_b2d.cpp
new file mode 100644
index 000000000..668a3a7c6
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_add_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_add_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_add_b3d.cpp
new file mode 100644
index 000000000..b1c8d1080
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_add_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_add_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_add_p2d.cpp
new file mode 100644
index 000000000..5a3a4c328
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_add_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_add_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_add_p3d.cpp
new file mode 100644
index 000000000..dee2c17f3
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_add_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_mod_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_mod_b2d.cpp
new file mode 100644
index 000000000..a55700ab3
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_mod_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_mod_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_mod_b3d.cpp
new file mode 100644
index 000000000..47cc47866
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_mod_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_mod_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_mod_p2d.cpp
new file mode 100644
index 000000000..a5ae7e41f
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_mod_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_mod_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_mod_p3d.cpp
new file mode 100644
index 000000000..6272a2f87
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_mod_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_que_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_que_b2d.cpp
new file mode 100644
index 000000000..a43437557
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_que_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_que_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_que_b3d.cpp
new file mode 100644
index 000000000..dff1647e0
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_que_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_que_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_que_p2d.cpp
new file mode 100644
index 000000000..305d29ab8
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_que_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_lin_que_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_lin_que_p3d.cpp
new file mode 100644
index 000000000..9e948ab1d
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_lin_que_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::linear<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_add_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_add_b2d.cpp
new file mode 100644
index 000000000..2623bacae
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_add_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_add_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_add_b3d.cpp
new file mode 100644
index 000000000..314832fb4
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_add_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_add_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_add_p2d.cpp
new file mode 100644
index 000000000..6f19d402a
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_add_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_add_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_add_p3d.cpp
new file mode 100644
index 000000000..c2f6bc8a5
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_add_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_mod_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_mod_b2d.cpp
new file mode 100644
index 000000000..c66720405
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_mod_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_mod_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_mod_b3d.cpp
new file mode 100644
index 000000000..0230c9b97
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_mod_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_mod_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_mod_p2d.cpp
new file mode 100644
index 000000000..4c07b4bb3
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_mod_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_mod_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_mod_p3d.cpp
new file mode 100644
index 000000000..44779b25e
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_mod_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_que_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_que_b2d.cpp
new file mode 100644
index 000000000..86753b749
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_que_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_que_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_que_b3d.cpp
new file mode 100644
index 000000000..74dc69945
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_que_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_que_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_que_p2d.cpp
new file mode 100644
index 000000000..fb4660e0e
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_que_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_qua_que_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_qua_que_p3d.cpp
new file mode 100644
index 000000000..f5806c7f4
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_qua_que_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::quadratic<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_add_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_add_b2d.cpp
new file mode 100644
index 000000000..97fb92f47
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_add_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_add_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_add_b3d.cpp
new file mode 100644
index 000000000..7e0171b59
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_add_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::additional<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_add_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_add_p2d.cpp
new file mode 100644
index 000000000..6fb31af48
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_add_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_add_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_add_p3d.cpp
new file mode 100644
index 000000000..b02e09fbc
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_add_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::additional<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_mod_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_mod_b2d.cpp
new file mode 100644
index 000000000..3315296e8
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_mod_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_mod_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_mod_b3d.cpp
new file mode 100644
index 000000000..96884543d
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_mod_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::modifiers<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_mod_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_mod_p2d.cpp
new file mode 100644
index 000000000..c0cab5ea4
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_mod_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_mod_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_mod_p3d.cpp
new file mode 100644
index 000000000..5ad0fdd79
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_mod_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::modifiers<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_que_b2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_que_b2d.cpp
new file mode 100644
index 000000000..2f16ef275
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_que_b2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 2, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_que_b3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_que_b3d.cpp
new file mode 100644
index 000000000..1943ccc16
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_que_b3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::box< bg::model::point<double, 3, bg::cs::cartesian> > Indexable;
+ testset::queries<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_que_p2d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_que_p2d.cpp
new file mode 100644
index 000000000..492a20832
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_que_p2d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/generated/rtree_rst_que_p3d.cpp b/libs/geometry/index/test/rtree/generated/rtree_rst_que_p3d.cpp
new file mode 100644
index 000000000..5f152ecc3
--- /dev/null
+++ b/libs/geometry/index/test/rtree/generated/rtree_rst_que_p3d.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<double, 3, bg::cs::cartesian> Indexable;
+ testset::queries<Indexable>(bgi::rstar<5, 2>(), std::allocator<int>());
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/interprocess/Jamfile.v2 b/libs/geometry/index/test/rtree/interprocess/Jamfile.v2
new file mode 100644
index 000000000..be709a43b
--- /dev/null
+++ b/libs/geometry/index/test/rtree/interprocess/Jamfile.v2
@@ -0,0 +1,29 @@
+# Boost.Geometry Index
+#
+# Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+#
+# 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)
+
+rule test_all
+{
+ local all_rules = ;
+
+ for local fileb in [ glob *.cpp ]
+ {
+ all_rules += [ run $(fileb) /boost/thread//boost_thread
+ : # additional args
+ : # test-files
+ : # requirements
+ <toolset>acc:<linkflags>-lrt
+ <toolset>acc-pa_risc:<linkflags>-lrt
+ <toolset>gcc-mingw:<linkflags>"-lole32 -loleaut32 -lpsapi -ladvapi32"
+ <host-os>hpux,<toolset>gcc:<linkflags>"-Wl,+as,mpas"
+ ] ;
+ }
+
+ return $(all_rules) ;
+}
+
+test-suite boost-geometry-index-rtree-interprocess : [ test_all r ] : <threading>multi ;
diff --git a/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_linear.cpp b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_linear.cpp
new file mode 100644
index 000000000..1a6077f41
--- /dev/null
+++ b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_linear.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/interprocess/test_interprocess.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2f;
+
+ testset::interprocess::modifiers<P2f>(bgi::linear<32, 8>());
+ testset::interprocess::additional<P2f>(bgi::linear<32, 8>());
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_linear_dyn.cpp b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_linear_dyn.cpp
new file mode 100644
index 000000000..4823bbb57
--- /dev/null
+++ b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_linear_dyn.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/interprocess/test_interprocess.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2f;
+
+ testset::interprocess::modifiers<P2f>(bgi::dynamic_linear(32, 8));
+ testset::interprocess::additional<P2f>(bgi::dynamic_linear(32, 8));
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_quadratic.cpp b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_quadratic.cpp
new file mode 100644
index 000000000..8a8bea0e8
--- /dev/null
+++ b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_quadratic.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/interprocess/test_interprocess.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2f;
+
+ testset::interprocess::modifiers<P2f>(bgi::quadratic<32, 8>());
+ testset::interprocess::additional<P2f>(bgi::quadratic<32, 8>());
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_quadratic_dyn.cpp b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_quadratic_dyn.cpp
new file mode 100644
index 000000000..b7710ef4b
--- /dev/null
+++ b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_quadratic_dyn.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/interprocess/test_interprocess.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2f;
+
+ testset::interprocess::modifiers<P2f>(bgi::dynamic_quadratic(32, 8));
+ testset::interprocess::additional<P2f>(bgi::dynamic_quadratic(32, 8));
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_rstar.cpp b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_rstar.cpp
new file mode 100644
index 000000000..8402bb0fc
--- /dev/null
+++ b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_rstar.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/interprocess/test_interprocess.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2f;
+
+ testset::interprocess::modifiers<P2f>(bgi::rstar<32, 8>());
+ testset::interprocess::additional<P2f>(bgi::rstar<32, 8>());
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_rstar_dyn.cpp b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_rstar_dyn.cpp
new file mode 100644
index 000000000..52c81e958
--- /dev/null
+++ b/libs/geometry/index/test/rtree/interprocess/rtree_interprocess_rstar_dyn.cpp
@@ -0,0 +1,20 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/interprocess/test_interprocess.hpp>
+
+int test_main(int, char* [])
+{
+ typedef bg::model::point<float, 2, bg::cs::cartesian> P2f;
+
+ testset::interprocess::modifiers<P2f>(bgi::dynamic_rstar(32, 8));
+ testset::interprocess::additional<P2f>(bgi::dynamic_rstar(32, 8));
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/interprocess/test_interprocess.hpp b/libs/geometry/index/test/rtree/interprocess/test_interprocess.hpp
new file mode 100644
index 000000000..471f9fa15
--- /dev/null
+++ b/libs/geometry/index/test/rtree/interprocess/test_interprocess.hpp
@@ -0,0 +1,84 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <rtree/test_rtree.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+#include <boost/interprocess/managed_shared_memory.hpp>
+#include <boost/interprocess/allocators/allocator.hpp>
+
+template <typename Point, typename Parameters>
+void test_rtree_interprocess(Parameters const& parameters = Parameters())
+{
+ namespace bi = boost::interprocess;
+ struct shm_remove
+ {
+ shm_remove() { bi::shared_memory_object::remove("shmem"); }
+ ~shm_remove(){ bi::shared_memory_object::remove("shmem"); }
+ } remover;
+
+ bi::managed_shared_memory segment(bi::create_only, "shmem", 65535);
+ typedef bi::allocator<Point, bi::managed_shared_memory::segment_manager> shmem_alloc;
+
+ test_rtree_for_box<Point>(parameters, shmem_alloc(segment.get_segment_manager()));
+}
+
+namespace testset { namespace interprocess {
+
+template <typename Indexable, typename Parameters>
+void modifiers(Parameters const& parameters = Parameters())
+{
+ namespace bi = boost::interprocess;
+ struct shm_remove
+ {
+ shm_remove() { bi::shared_memory_object::remove("shmem"); }
+ ~shm_remove(){ bi::shared_memory_object::remove("shmem"); }
+ } remover;
+
+ bi::managed_shared_memory segment(bi::create_only, "shmem", 65535);
+ typedef bi::allocator<Indexable, bi::managed_shared_memory::segment_manager> shmem_alloc;
+
+ testset::modifiers<Indexable>(parameters, shmem_alloc(segment.get_segment_manager()));
+}
+
+template <typename Indexable, typename Parameters>
+void queries(Parameters const& parameters = Parameters())
+{
+ namespace bi = boost::interprocess;
+ struct shm_remove
+ {
+ shm_remove() { bi::shared_memory_object::remove("shmem"); }
+ ~shm_remove(){ bi::shared_memory_object::remove("shmem"); }
+ } remover;
+
+ bi::managed_shared_memory segment(bi::create_only, "shmem", 65535);
+ typedef bi::allocator<Indexable, bi::managed_shared_memory::segment_manager> shmem_alloc;
+
+ testset::queries<Indexable>(parameters, shmem_alloc(segment.get_segment_manager()));
+}
+
+template <typename Indexable, typename Parameters>
+void additional(Parameters const& parameters = Parameters())
+{
+ namespace bi = boost::interprocess;
+ struct shm_remove
+ {
+ shm_remove() { bi::shared_memory_object::remove("shmem"); }
+ ~shm_remove(){ bi::shared_memory_object::remove("shmem"); }
+ } remover;
+
+ bi::managed_shared_memory segment(bi::create_only, "shmem", 65535);
+ typedef bi::allocator<Indexable, bi::managed_shared_memory::segment_manager> shmem_alloc;
+
+ testset::additional<Indexable>(parameters, shmem_alloc(segment.get_segment_manager()));
+}
+
+}} \ No newline at end of file
diff --git a/libs/geometry/index/test/rtree/rtree_test_generator.cpp b/libs/geometry/index/test/rtree/rtree_test_generator.cpp
new file mode 100644
index 000000000..4d44fd22e
--- /dev/null
+++ b/libs/geometry/index/test/rtree/rtree_test_generator.cpp
@@ -0,0 +1,99 @@
+// Boost.Geometry Index
+// Rtree tests generator
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <fstream>
+#include <vector>
+#include <string>
+#include <boost/foreach.hpp>
+#include <boost/tuple/tuple.hpp>
+
+int main()
+{
+ typedef boost::tuple<std::string, std::string> CT;
+ std::vector<CT> coordinate_types;
+ coordinate_types.push_back(boost::make_tuple("double", "d"));
+ //coordinate_types.push_back(boost::make_tuple("int", "i"));
+ //coordinate_types.push_back(boost::make_tuple("float", "f"));
+
+ std::vector<std::string> dimensions;
+ dimensions.push_back("2");
+ dimensions.push_back("3");
+
+ typedef boost::tuple<std::string, std::string> P;
+ std::vector<P> parameters;
+ parameters.push_back(boost::make_tuple("bgi::linear<5, 2>()", "lin"));
+ parameters.push_back(boost::make_tuple("bgi::dynamic_linear(5, 2)", "dlin"));
+ parameters.push_back(boost::make_tuple("bgi::quadratic<5, 2>()", "qua"));
+ parameters.push_back(boost::make_tuple("bgi::dynamic_quadratic(5, 2)", "dqua"));
+ parameters.push_back(boost::make_tuple("bgi::rstar<5, 2>()", "rst"));
+ parameters.push_back(boost::make_tuple("bgi::dynamic_rstar(5, 2)","drst"));
+
+ std::vector<std::string> indexables;
+ indexables.push_back("p");
+ indexables.push_back("b");
+
+ typedef std::pair<std::string, std::string> TS;
+ std::vector<TS> testsets;
+ testsets.push_back(std::make_pair("testset::modifiers", "mod"));
+ testsets.push_back(std::make_pair("testset::queries", "que"));
+ testsets.push_back(std::make_pair("testset::additional", "add"));
+
+ BOOST_FOREACH(P const& p, parameters)
+ {
+ BOOST_FOREACH(TS const& ts, testsets)
+ {
+ BOOST_FOREACH(std::string const& i, indexables)
+ {
+ BOOST_FOREACH(std::string const& d, dimensions)
+ {
+ BOOST_FOREACH(CT const& c, coordinate_types)
+ {
+ std::string filename = std::string() +
+ "rtree_" + boost::get<1>(p) + '_' + ts.second + '_' + i + d + boost::get<1>(c) + ".cpp";
+
+ std::ofstream f(filename.c_str(), std::ios::trunc);
+
+ f <<
+ "// Boost.Geometry Index\n" <<
+ "// Unit Test\n" <<
+ "\n" <<
+ "// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.\n" <<
+ "\n" <<
+ "// Use, modification and distribution is subject to the Boost Software License,\n" <<
+ "// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n" <<
+ "// http://www.boost.org/LICENSE_1_0.txt)\n" <<
+ "\n";
+
+ f <<
+ "#include <rtree/test_rtree.hpp>\n" <<
+ "\n" <<
+ "#include <boost/geometry/geometries/point.hpp>\n" <<
+ "#include <boost/geometry/geometries/box.hpp>\n" <<
+ "\n";
+
+ std::string point_type = std::string("bg::model::point<") + boost::get<0>(c) + ", " + d + ", bg::cs::cartesian>";
+ std::string box_type = std::string("bg::model::box< ") + point_type + " >";
+ std::string indexable_type = (i == "p" ? point_type : box_type);
+
+ f <<
+ "int test_main(int, char* [])\n" <<
+ "{\n" <<
+ " typedef " << indexable_type << " Indexable;\n" <<
+ " " << ts.first << "<Indexable>(" << boost::get<0>(p) << ", std::allocator<int>());\n" <<
+ " return 0;\n" <<
+ "}\n";
+ }
+ }
+ }
+
+ }
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/rtree/test_rtree.hpp b/libs/geometry/index/test/rtree/test_rtree.hpp
new file mode 100644
index 000000000..de15f6913
--- /dev/null
+++ b/libs/geometry/index/test/rtree/test_rtree.hpp
@@ -0,0 +1,1760 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_RTREE_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_RTREE_HPP
+
+#include <boost/foreach.hpp>
+#include <vector>
+#include <algorithm>
+
+#include <geometry_index_test_common.hpp>
+
+// TEST
+//#define BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+//#define BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_TYPE_ERASED_ITERATORS
+#include <boost/geometry/index/rtree.hpp>
+
+#include <boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp>
+#include <boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp>
+
+//#include <boost/geometry/geometries/ring.hpp>
+//#include <boost/geometry/geometries/polygon.hpp>
+
+namespace generate {
+
+// Set point's coordinates
+
+template <typename Point>
+struct outside_point
+{};
+
+template <typename T, typename C>
+struct outside_point< bg::model::point<T, 2, C> >
+{
+ typedef bg::model::point<T, 2, C> P;
+ static P apply()
+ {
+ return P(13, 26);
+ }
+};
+
+template <typename T, typename C>
+struct outside_point< bg::model::point<T, 3, C> >
+{
+ typedef bg::model::point<T, 3, C> P;
+ static P apply()
+ {
+ return P(13, 26, 13);
+ }
+};
+
+// Default value generation
+
+template <typename Value>
+struct value_default
+{
+ static Value apply(){ return Value(); }
+};
+
+// Values, input and rtree generation
+
+template <typename Value>
+struct value
+{};
+
+template <typename T, typename C>
+struct value< bg::model::point<T, 2, C> >
+{
+ typedef bg::model::point<T, 2, C> P;
+ static P apply(int x, int y)
+ {
+ return P(x, y);
+ }
+};
+
+template <typename T, typename C>
+struct value< bg::model::box< bg::model::point<T, 2, C> > >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef bg::model::box<P> B;
+ static B apply(int x, int y)
+ {
+ return B(P(x, y), P(x + 2, y + 3));
+ }
+};
+
+template <typename T, typename C>
+struct value< std::pair<bg::model::point<T, 2, C>, int> >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef std::pair<P, int> R;
+ static R apply(int x, int y)
+ {
+ return std::make_pair(P(x, y), x + y * 100);
+ }
+};
+
+template <typename T, typename C>
+struct value< std::pair<bg::model::box< bg::model::point<T, 2, C> >, int> >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef bg::model::box<P> B;
+ typedef std::pair<B, int> R;
+ static R apply(int x, int y)
+ {
+ return std::make_pair(B(P(x, y), P(x + 2, y + 3)), x + y * 100);
+ }
+};
+
+template <typename T, typename C>
+struct value< boost::tuple<bg::model::point<T, 2, C>, int, int> >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef boost::tuple<P, int, int> R;
+ static R apply(int x, int y)
+ {
+ return boost::make_tuple(P(x, y), x + y * 100, 0);
+ }
+};
+
+template <typename T, typename C>
+struct value< boost::tuple<bg::model::box< bg::model::point<T, 2, C> >, int, int> >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef bg::model::box<P> B;
+ typedef boost::tuple<B, int, int> R;
+ static R apply(int x, int y)
+ {
+ return boost::make_tuple(B(P(x, y), P(x + 2, y + 3)), x + y * 100, 0);
+ }
+};
+
+template <typename T, typename C>
+struct value< bg::model::point<T, 3, C> >
+{
+ typedef bg::model::point<T, 3, C> P;
+ static P apply(int x, int y, int z)
+ {
+ return P(x, y, z);
+ }
+};
+
+template <typename T, typename C>
+struct value< bg::model::box< bg::model::point<T, 3, C> > >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef bg::model::box<P> B;
+ static B apply(int x, int y, int z)
+ {
+ return B(P(x, y, z), P(x + 2, y + 3, z + 4));
+ }
+};
+
+template <typename T, typename C>
+struct value< std::pair<bg::model::point<T, 3, C>, int> >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef std::pair<P, int> R;
+ static R apply(int x, int y, int z)
+ {
+ return std::make_pair(P(x, y, z), x + y * 100 + z * 10000);
+ }
+};
+
+template <typename T, typename C>
+struct value< std::pair<bg::model::box< bg::model::point<T, 3, C> >, int> >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef bg::model::box<P> B;
+ typedef std::pair<B, int> R;
+ static R apply(int x, int y, int z)
+ {
+ return std::make_pair(B(P(x, y, z), P(x + 2, y + 3, z + 4)), x + y * 100 + z * 10000);
+ }
+};
+
+template <typename T, typename C>
+struct value< boost::tuple<bg::model::point<T, 3, C>, int, int> >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef boost::tuple<P, int, int> R;
+ static R apply(int x, int y, int z)
+ {
+ return boost::make_tuple(P(x, y, z), x + y * 100 + z * 10000, 0);
+ }
+};
+
+template <typename T, typename C>
+struct value< boost::tuple<bg::model::box< bg::model::point<T, 3, C> >, int, int> >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef bg::model::box<P> B;
+ typedef boost::tuple<B, int, int> R;
+ static R apply(int x, int y, int z)
+ {
+ return boost::make_tuple(B(P(x, y, z), P(x + 2, y + 3, z + 4)), x + y * 100 + z * 10000, 0);
+ }
+};
+
+#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template <typename T, typename C>
+struct value< std::tuple<bg::model::point<T, 2, C>, int, int> >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef std::tuple<P, int, int> R;
+ static R apply(int x, int y)
+ {
+ return std::make_tuple(P(x, y), x + y * 100, 0);
+ }
+};
+
+template <typename T, typename C>
+struct value< std::tuple<bg::model::box< bg::model::point<T, 2, C> >, int, int> >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef bg::model::box<P> B;
+ typedef std::tuple<B, int, int> R;
+ static R apply(int x, int y)
+ {
+ return std::make_tuple(B(P(x, y), P(x + 2, y + 3)), x + y * 100, 0);
+ }
+};
+
+template <typename T, typename C>
+struct value< std::tuple<bg::model::point<T, 3, C>, int, int> >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef std::tuple<P, int, int> R;
+ static R apply(int x, int y, int z)
+ {
+ return std::make_tuple(P(x, y, z), x + y * 100 + z * 10000, 0);
+ }
+};
+
+template <typename T, typename C>
+struct value< std::tuple<bg::model::box< bg::model::point<T, 3, C> >, int, int> >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef bg::model::box<P> B;
+ typedef std::tuple<B, int, int> R;
+ static R apply(int x, int y, int z)
+ {
+ return std::make_tuple(B(P(x, y, z), P(x + 2, y + 3, z + 4)), x + y * 100 + z * 10000, 0);
+ }
+};
+
+#endif // #if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+} // namespace generate
+
+// shared_ptr value
+
+template <typename Indexable>
+struct test_object
+{
+ test_object(Indexable const& indexable_) : indexable(indexable_) {}
+ Indexable indexable;
+};
+
+namespace boost { namespace geometry { namespace index {
+
+template <typename Indexable>
+struct indexable< boost::shared_ptr< test_object<Indexable> > >
+{
+ typedef boost::shared_ptr< test_object<Indexable> > value_type;
+ typedef Indexable const& result_type;
+
+ result_type operator()(value_type const& value) const
+ {
+ return value->indexable;
+ }
+};
+
+}}}
+
+namespace generate {
+
+template <typename T, typename C>
+struct value< boost::shared_ptr<test_object<bg::model::point<T, 2, C> > > >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef test_object<P> O;
+ typedef boost::shared_ptr<O> R;
+
+ static R apply(int x, int y)
+ {
+ return R(new O(P(x, y)));
+ }
+};
+
+template <typename T, typename C>
+struct value< boost::shared_ptr<test_object<bg::model::point<T, 3, C> > > >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef test_object<P> O;
+ typedef boost::shared_ptr<O> R;
+
+ static R apply(int x, int y, int z)
+ {
+ return R(new O(P(x, y, z)));
+ }
+};
+
+template <typename T, typename C>
+struct value< boost::shared_ptr<test_object<bg::model::box<bg::model::point<T, 2, C> > > > >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef bg::model::box<P> B;
+ typedef test_object<B> O;
+ typedef boost::shared_ptr<O> R;
+
+ static R apply(int x, int y)
+ {
+ return R(new O(B(P(x, y), P(x + 2, y + 3))));
+ }
+};
+
+template <typename T, typename C>
+struct value< boost::shared_ptr<test_object<bg::model::box<bg::model::point<T, 3, C> > > > >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef bg::model::box<P> B;
+ typedef test_object<B> O;
+ typedef boost::shared_ptr<O> R;
+
+ static R apply(int x, int y, int z)
+ {
+ return R(new O(B(P(x, y, z), P(x + 2, y + 3, z + 4))));
+ }
+};
+
+} //namespace generate
+
+// counting value
+
+template <typename Indexable>
+struct counting_value
+{
+ counting_value() { counter()++; }
+ counting_value(Indexable const& i) : indexable(i) { counter()++; }
+ counting_value(counting_value const& c) : indexable(c.indexable) { counter()++; }
+ ~counting_value() { counter()--; }
+
+ static size_t & counter() { static size_t c = 0; return c; }
+ Indexable indexable;
+};
+
+namespace boost { namespace geometry { namespace index {
+
+template <typename Indexable>
+struct indexable< counting_value<Indexable> >
+{
+ typedef counting_value<Indexable> value_type;
+ typedef Indexable const& result_type;
+ result_type operator()(value_type const& value) const
+ {
+ return value.indexable;
+ }
+};
+
+template <typename Indexable>
+struct equal_to< counting_value<Indexable> >
+{
+ typedef counting_value<Indexable> value_type;
+ typedef bool result_type;
+ bool operator()(value_type const& v1, value_type const& v2) const
+ {
+ return boost::geometry::equals(v1.indexable, v2.indexable);
+ }
+};
+
+}}}
+
+namespace generate {
+
+template <typename T, typename C>
+struct value< counting_value<bg::model::point<T, 2, C> > >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef counting_value<P> R;
+ static R apply(int x, int y) { return R(P(x, y)); }
+};
+
+template <typename T, typename C>
+struct value< counting_value<bg::model::point<T, 3, C> > >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef counting_value<P> R;
+ static R apply(int x, int y, int z) { return R(P(x, y, z)); }
+};
+
+template <typename T, typename C>
+struct value< counting_value<bg::model::box<bg::model::point<T, 2, C> > > >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef bg::model::box<P> B;
+ typedef counting_value<B> R;
+ static R apply(int x, int y) { return R(B(P(x, y), P(x+2, y+3))); }
+};
+
+template <typename T, typename C>
+struct value< counting_value<bg::model::box<bg::model::point<T, 3, C> > > >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef bg::model::box<P> B;
+ typedef counting_value<B> R;
+ static R apply(int x, int y, int z) { return R(B(P(x, y, z), P(x+2, y+3, z+4))); }
+};
+
+} // namespace generate
+
+// value without default constructor
+
+template <typename Indexable>
+struct value_no_dctor
+{
+ value_no_dctor(Indexable const& i) : indexable(i) {}
+ Indexable indexable;
+};
+
+namespace boost { namespace geometry { namespace index {
+
+template <typename Indexable>
+struct indexable< value_no_dctor<Indexable> >
+{
+ typedef value_no_dctor<Indexable> value_type;
+ typedef Indexable const& result_type;
+ result_type operator()(value_type const& value) const
+ {
+ return value.indexable;
+ }
+};
+
+template <typename Indexable>
+struct equal_to< value_no_dctor<Indexable> >
+{
+ typedef value_no_dctor<Indexable> value_type;
+ typedef bool result_type;
+ bool operator()(value_type const& v1, value_type const& v2) const
+ {
+ return boost::geometry::equals(v1.indexable, v2.indexable);
+ }
+};
+
+}}}
+
+namespace generate {
+
+template <typename Indexable>
+struct value_default< value_no_dctor<Indexable> >
+{
+ static value_no_dctor<Indexable> apply() { return value_no_dctor<Indexable>(Indexable()); }
+};
+
+template <typename T, typename C>
+struct value< value_no_dctor<bg::model::point<T, 2, C> > >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef value_no_dctor<P> R;
+ static R apply(int x, int y) { return R(P(x, y)); }
+};
+
+template <typename T, typename C>
+struct value< value_no_dctor<bg::model::point<T, 3, C> > >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef value_no_dctor<P> R;
+ static R apply(int x, int y, int z) { return R(P(x, y, z)); }
+};
+
+template <typename T, typename C>
+struct value< value_no_dctor<bg::model::box<bg::model::point<T, 2, C> > > >
+{
+ typedef bg::model::point<T, 2, C> P;
+ typedef bg::model::box<P> B;
+ typedef value_no_dctor<B> R;
+ static R apply(int x, int y) { return R(B(P(x, y), P(x+2, y+3))); }
+};
+
+template <typename T, typename C>
+struct value< value_no_dctor<bg::model::box<bg::model::point<T, 3, C> > > >
+{
+ typedef bg::model::point<T, 3, C> P;
+ typedef bg::model::box<P> B;
+ typedef value_no_dctor<B> R;
+ static R apply(int x, int y, int z) { return R(B(P(x, y, z), P(x+2, y+3, z+4))); }
+};
+
+// generate input
+
+template <size_t Dimension>
+struct input
+{};
+
+template <>
+struct input<2>
+{
+ template <typename Value, typename Box>
+ static void apply(std::vector<Value> & input, Box & qbox, int size = 1)
+ {
+ BOOST_GEOMETRY_INDEX_ASSERT(0 < size, "the value must be greather than 0");
+
+ for ( int i = 0 ; i < 12 * size ; i += 3 )
+ {
+ for ( int j = 1 ; j < 25 * size ; j += 4 )
+ {
+ input.push_back( generate::value<Value>::apply(i, j) );
+ }
+ }
+
+ typedef typename bg::traits::point_type<Box>::type P;
+
+ qbox = Box(P(3, 0), P(10, 9));
+ }
+};
+
+template <>
+struct input<3>
+{
+ template <typename Value, typename Box>
+ static void apply(std::vector<Value> & input, Box & qbox, int size = 1)
+ {
+ BOOST_GEOMETRY_INDEX_ASSERT(0 < size, "the value must be greather than 0");
+
+ for ( int i = 0 ; i < 12 * size ; i += 3 )
+ {
+ for ( int j = 1 ; j < 25 * size ; j += 4 )
+ {
+ for ( int k = 2 ; k < 12 * size ; k += 5 )
+ {
+ input.push_back( generate::value<Value>::apply(i, j, k) );
+ }
+ }
+ }
+
+ typedef typename bg::traits::point_type<Box>::type P;
+
+ qbox = Box(P(3, 0, 3), P(10, 9, 11));
+ }
+};
+
+// generate_value_outside
+
+template <typename Value, size_t Dimension>
+struct value_outside_impl
+{};
+
+template <typename Value>
+struct value_outside_impl<Value, 2>
+{
+ static Value apply()
+ {
+ //TODO - for size > 1 in generate_input<> this won't be outside
+ return generate::value<Value>::apply(13, 26);
+ }
+};
+
+template <typename Value>
+struct value_outside_impl<Value, 3>
+{
+ static Value apply()
+ {
+ //TODO - for size > 1 in generate_input<> this won't be outside
+ return generate::value<Value>::apply(13, 26, 13);
+ }
+};
+
+template <typename Rtree>
+inline typename Rtree::value_type
+value_outside()
+{
+ typedef typename Rtree::value_type V;
+ typedef typename Rtree::indexable_type I;
+
+ return value_outside_impl<V, bg::dimension<I>::value>::apply();
+}
+
+template<typename Rtree, typename Elements, typename Box>
+void rtree(Rtree & tree, Elements & input, Box & qbox)
+{
+ typedef typename Rtree::indexable_type I;
+
+ generate::input<
+ bg::dimension<I>::value
+ >::apply(input, qbox);
+
+ tree.insert(input.begin(), input.end());
+}
+
+} // namespace generate
+
+namespace basictest {
+
+// low level test functions
+
+template <typename Rtree, typename Iter, typename Value>
+Iter find(Rtree const& rtree, Iter first, Iter last, Value const& value)
+{
+ for ( ; first != last ; ++first )
+ if ( rtree.value_eq()(value, *first) )
+ return first;
+ return first;
+}
+
+template <typename Rtree, typename Value>
+void compare_outputs(Rtree const& rtree, std::vector<Value> const& output, std::vector<Value> const& expected_output)
+{
+ bool are_sizes_ok = (expected_output.size() == output.size());
+ BOOST_CHECK( are_sizes_ok );
+ if ( are_sizes_ok )
+ {
+ BOOST_FOREACH(Value const& v, expected_output)
+ {
+ BOOST_CHECK(find(rtree, output.begin(), output.end(), v) != output.end() );
+ }
+ }
+}
+
+template <typename Rtree, typename Range1, typename Range2>
+void exactly_the_same_outputs(Rtree const& rtree, Range1 const& output, Range2 const& expected_output)
+{
+ size_t s1 = std::distance(output.begin(), output.end());
+ size_t s2 = std::distance(expected_output.begin(), expected_output.end());
+ BOOST_CHECK(s1 == s2);
+
+ if ( s1 == s2 )
+ {
+ typename Range1::const_iterator it1 = output.begin();
+ typename Range2::const_iterator it2 = expected_output.begin();
+ for ( ; it1 != output.end() && it2 != expected_output.end() ; ++it1, ++it2 )
+ {
+ if ( !rtree.value_eq()(*it1, *it2) )
+ {
+ BOOST_CHECK(false && "rtree.translator().equals(*it1, *it2)");
+ break;
+ }
+ }
+ }
+}
+
+// spatial query
+
+template <typename Rtree, typename Value, typename Predicates>
+void spatial_query(Rtree & rtree, Predicates const& pred, std::vector<Value> const& expected_output)
+{
+ BOOST_CHECK( bgi::detail::rtree::utilities::are_levels_ok(rtree) );
+ if ( !rtree.empty() )
+ BOOST_CHECK( bgi::detail::rtree::utilities::are_boxes_ok(rtree) );
+
+ std::vector<Value> output;
+ size_t n = rtree.query(pred, std::back_inserter(output));
+
+ BOOST_CHECK( expected_output.size() == n );
+ compare_outputs(rtree, output, expected_output);
+
+ std::vector<Value> output2;
+ size_t n2 = query(rtree, pred, std::back_inserter(output2));
+
+ BOOST_CHECK( n == n2 );
+ exactly_the_same_outputs(rtree, output, output2);
+
+ exactly_the_same_outputs(rtree, output, rtree | bgi::adaptors::queried(pred));
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+ std::vector<Value> output3;
+ std::copy(rtree.qbegin(pred), rtree.qend(pred), std::back_inserter(output3));
+
+ compare_outputs(rtree, output3, expected_output);
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_TYPE_ERASED_ITERATORS
+ {
+ typedef typename Rtree::const_query_iterator QI;
+ QI first = rtree.qbegin(pred);
+ QI last = rtree.qend(pred);
+ std::vector<Value> output4;
+ std::copy(first, last, std::back_inserter(output4));
+ compare_outputs(rtree, output4, expected_output);
+ }
+#endif
+#endif
+}
+
+// rtree specific queries tests
+
+template <typename Rtree, typename Value, typename Box>
+void intersects(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ std::vector<Value> expected_output;
+
+ BOOST_FOREACH(Value const& v, input)
+ if ( bg::intersects(tree.indexable_get()(v), qbox) )
+ expected_output.push_back(v);
+
+ //spatial_query(tree, qbox, expected_output);
+ spatial_query(tree, bgi::intersects(qbox), expected_output);
+ spatial_query(tree, !bgi::disjoint(qbox), expected_output);
+
+ /*typedef bg::traits::point_type<Box>::type P;
+ bg::model::ring<P> qring;
+ bg::convert(qbox, qring);
+ spatial_query(tree, bgi::intersects(qring), expected_output);
+ spatial_query(tree, !bgi::disjoint(qring), expected_output);
+ bg::model::polygon<P> qpoly;
+ bg::convert(qbox, qpoly);
+ spatial_query(tree, bgi::intersects(qpoly), expected_output);
+ spatial_query(tree, !bgi::disjoint(qpoly), expected_output);*/
+}
+
+template <typename Rtree, typename Value, typename Box>
+void disjoint(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ std::vector<Value> expected_output;
+
+ BOOST_FOREACH(Value const& v, input)
+ if ( bg::disjoint(tree.indexable_get()(v), qbox) )
+ expected_output.push_back(v);
+
+ spatial_query(tree, bgi::disjoint(qbox), expected_output);
+ spatial_query(tree, !bgi::intersects(qbox), expected_output);
+
+ /*typedef bg::traits::point_type<Box>::type P;
+ bg::model::ring<P> qring;
+ bg::convert(qbox, qring);
+ spatial_query(tree, bgi::disjoint(qring), expected_output);
+ bg::model::polygon<P> qpoly;
+ bg::convert(qbox, qpoly);
+ spatial_query(tree, bgi::disjoint(qpoly), expected_output);*/
+}
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+
+template <typename Tag>
+struct contains_impl
+{
+ template <typename Rtree, typename Value, typename Box>
+ static void apply(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+ {
+ std::vector<Value> expected_output;
+
+ BOOST_FOREACH(Value const& v, input)
+ if ( bg::within(qbox, tree.indexable_get()(v)) )
+ expected_output.push_back(v);
+
+ spatial_query(tree, bgi::contains(qbox), expected_output);
+
+ /*typedef bg::traits::point_type<Box>::type P;
+ bg::model::ring<P> qring;
+ bg::convert(qbox, qring);
+ spatial_query(tree, bgi::contains(qring), expected_output);
+ bg::model::polygon<P> qpoly;
+ bg::convert(qbox, qpoly);
+ spatial_query(tree, bgi::contains(qpoly), expected_output);*/
+ }
+};
+
+template <>
+struct contains_impl<bg::point_tag>
+{
+ template <typename Rtree, typename Value, typename Box>
+ static void apply(Rtree const& /*tree*/, std::vector<Value> const& /*input*/, Box const& /*qbox*/)
+ {}
+};
+
+template <typename Rtree, typename Value, typename Box>
+void contains(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ contains_impl<
+ typename bg::tag<
+ typename Rtree::indexable_type
+ >::type
+ >::apply(tree, input, qbox);
+}
+
+#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+
+template <typename Rtree, typename Value, typename Box>
+void covered_by(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ std::vector<Value> expected_output;
+
+ BOOST_FOREACH(Value const& v, input)
+ if ( bg::covered_by(tree.indexable_get()(v), qbox) )
+ expected_output.push_back(v);
+
+ spatial_query(tree, bgi::covered_by(qbox), expected_output);
+
+ /*typedef bg::traits::point_type<Box>::type P;
+ bg::model::ring<P> qring;
+ bg::convert(qbox, qring);
+ spatial_query(tree, bgi::covered_by(qring), expected_output);
+ bg::model::polygon<P> qpoly;
+ bg::convert(qbox, qpoly);
+ spatial_query(tree, bgi::covered_by(qpoly), expected_output);*/
+}
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+
+template <typename Tag>
+struct covers_impl
+{
+ template <typename Rtree, typename Value, typename Box>
+ static void apply(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+ {
+ std::vector<Value> expected_output;
+
+ BOOST_FOREACH(Value const& v, input)
+ if ( bg::covered_by(qbox, tree.indexable_get()(v)) )
+ expected_output.push_back(v);
+
+ spatial_query(tree, bgi::covers(qbox), expected_output);
+
+ /*typedef bg::traits::point_type<Box>::type P;
+ bg::model::ring<P> qring;
+ bg::convert(qbox, qring);
+ spatial_query(tree, bgi::covers(qring), expected_output);
+ bg::model::polygon<P> qpoly;
+ bg::convert(qbox, qpoly);
+ spatial_query(tree, bgi::covers(qpoly), expected_output);*/
+ }
+};
+
+template <>
+struct covers_impl<bg::point_tag>
+{
+ template <typename Rtree, typename Value, typename Box>
+ static void apply(Rtree const& /*tree*/, std::vector<Value> const& /*input*/, Box const& /*qbox*/)
+ {}
+};
+
+template <typename Rtree, typename Value, typename Box>
+void covers(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ covers_impl<
+ typename bg::tag<
+ typename Rtree::indexable_type
+ >::type
+ >::apply(tree, input, qbox);
+}
+
+#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+
+template <typename Tag>
+struct overlaps_impl
+{
+ template <typename Rtree, typename Value, typename Box>
+ static void apply(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+ {
+ std::vector<Value> expected_output;
+
+ BOOST_FOREACH(Value const& v, input)
+ if ( bg::overlaps(tree.indexable_get()(v), qbox) )
+ expected_output.push_back(v);
+
+ spatial_query(tree, bgi::overlaps(qbox), expected_output);
+
+ /*typedef bg::traits::point_type<Box>::type P;
+ bg::model::ring<P> qring;
+ bg::convert(qbox, qring);
+ spatial_query(tree, bgi::overlaps(qring), expected_output);
+ bg::model::polygon<P> qpoly;
+ bg::convert(qbox, qpoly);
+ spatial_query(tree, bgi::overlaps(qpoly), expected_output);*/
+ }
+};
+
+template <>
+struct overlaps_impl<bg::point_tag>
+{
+ template <typename Rtree, typename Value, typename Box>
+ static void apply(Rtree const& /*tree*/, std::vector<Value> const& /*input*/, Box const& /*qbox*/)
+ {}
+};
+
+template <typename Rtree, typename Value, typename Box>
+void overlaps(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ overlaps_impl<
+ typename bg::tag<
+ typename Rtree::indexable_type
+ >::type
+ >::apply(tree, input, qbox);
+}
+
+//template <typename Tag, size_t Dimension>
+//struct touches_impl
+//{
+// template <typename Rtree, typename Value, typename Box>
+// static void apply(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+// {}
+//};
+//
+//template <>
+//struct touches_impl<bg::box_tag, 2>
+//{
+// template <typename Rtree, typename Value, typename Box>
+// static void apply(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+// {
+// std::vector<Value> expected_output;
+//
+// BOOST_FOREACH(Value const& v, input)
+// if ( bg::touches(tree.translator()(v), qbox) )
+// expected_output.push_back(v);
+//
+// spatial_query(tree, bgi::touches(qbox), expected_output);
+// }
+//};
+//
+//template <typename Rtree, typename Value, typename Box>
+//void touches(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+//{
+// touches_impl<
+// bgi::traits::tag<typename Rtree::indexable_type>::type,
+// bgi::traits::dimension<typename Rtree::indexable_type>::value
+// >::apply(tree, input, qbox);
+//}
+
+template <typename Rtree, typename Value, typename Box>
+void within(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ std::vector<Value> expected_output;
+
+ BOOST_FOREACH(Value const& v, input)
+ if ( bg::within(tree.indexable_get()(v), qbox) )
+ expected_output.push_back(v);
+
+ spatial_query(tree, bgi::within(qbox), expected_output);
+
+ /*typedef bg::traits::point_type<Box>::type P;
+ bg::model::ring<P> qring;
+ bg::convert(qbox, qring);
+ spatial_query(tree, bgi::within(qring), expected_output);
+ bg::model::polygon<P> qpoly;
+ bg::convert(qbox, qpoly);
+ spatial_query(tree, bgi::within(qpoly), expected_output);*/
+}
+
+// rtree nearest queries
+
+template <typename Rtree, typename Point>
+struct NearestKLess
+{
+ typedef typename bg::default_distance_result<Point, typename Rtree::indexable_type>::type D;
+
+ template <typename Value>
+ bool operator()(std::pair<D, Value> const& p1, std::pair<D, Value> const& p2) const
+ {
+ return p1.first < p2.first;
+ }
+};
+
+template <typename Rtree, typename Point>
+struct NearestKTransform
+{
+ typedef typename bg::default_distance_result<Point, typename Rtree::indexable_type>::type D;
+
+ template <typename Value>
+ Value const& operator()(std::pair<D, Value> const& p) const
+ {
+ return p.second;
+ }
+};
+
+template <typename Rtree, typename Value, typename Point, typename Distance>
+void compare_nearest_outputs(Rtree const& rtree, std::vector<Value> const& output, std::vector<Value> const& expected_output, Point const& pt, Distance greatest_distance)
+{
+ // check output
+ bool are_sizes_ok = (expected_output.size() == output.size());
+ BOOST_CHECK( are_sizes_ok );
+ if ( are_sizes_ok )
+ {
+ BOOST_FOREACH(Value const& v, output)
+ {
+ // TODO - perform explicit check here?
+ // should all objects which are closest be checked and should exactly the same be found?
+
+ if ( find(rtree, expected_output.begin(), expected_output.end(), v) == expected_output.end() )
+ {
+ Distance d = bgi::detail::comparable_distance_near(pt, rtree.indexable_get()(v));
+ BOOST_CHECK(d == greatest_distance);
+ }
+ }
+ }
+}
+
+template <typename Rtree, typename Value, typename Point>
+void nearest_query_k(Rtree const& rtree, std::vector<Value> const& input, Point const& pt, unsigned int k)
+{
+ // TODO: Nearest object may not be the same as found by the rtree if distances are equal
+ // All objects with the same closest distance should be picked
+
+ typedef typename bg::default_distance_result<Point, typename Rtree::indexable_type>::type D;
+
+ std::vector< std::pair<D, Value> > test_output;
+
+ // calculate test output - k closest values pairs
+ BOOST_FOREACH(Value const& v, input)
+ {
+ D d = bgi::detail::comparable_distance_near(pt, rtree.indexable_get()(v));
+
+ if ( test_output.size() < k )
+ test_output.push_back(std::make_pair(d, v));
+ else
+ {
+ std::sort(test_output.begin(), test_output.end(), NearestKLess<Rtree, Point>());
+ if ( d < test_output.back().first )
+ test_output.back() = std::make_pair(d, v);
+ }
+ }
+
+ // caluclate biggest distance
+ std::sort(test_output.begin(), test_output.end(), NearestKLess<Rtree, Point>());
+ D greatest_distance = 0;
+ if ( !test_output.empty() )
+ greatest_distance = test_output.back().first;
+
+ // transform test output to vector of values
+ std::vector<Value> expected_output(test_output.size(), generate::value_default<Value>::apply());
+ std::transform(test_output.begin(), test_output.end(), expected_output.begin(), NearestKTransform<Rtree, Point>());
+
+ // calculate output using rtree
+ std::vector<Value> output;
+ rtree.query(bgi::nearest(pt, k), std::back_inserter(output));
+
+ // check output
+ compare_nearest_outputs(rtree, output, expected_output, pt, greatest_distance);
+
+ exactly_the_same_outputs(rtree, output, rtree | bgi::adaptors::queried(bgi::nearest(pt, k)));
+
+ std::vector<Value> output2(k, generate::value_default<Value>::apply());
+ typename Rtree::size_type found_count = rtree.query(bgi::nearest(pt, k), output2.begin());
+ output2.resize(found_count, generate::value_default<Value>::apply());
+
+ exactly_the_same_outputs(rtree, output, output2);
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+ std::vector<Value> output3;
+ std::copy(rtree.qbegin(bgi::nearest(pt, k)), rtree.qend(bgi::nearest(pt, k)), std::back_inserter(output3));
+
+ compare_nearest_outputs(rtree, output3, expected_output, pt, greatest_distance);
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_TYPE_ERASED_ITERATORS
+ {
+ typedef typename Rtree::const_query_iterator QI;
+ QI first = rtree.qbegin(bgi::nearest(pt, k));
+ QI last = rtree.qend(bgi::nearest(pt, k));
+ std::vector<Value> output4;
+ std::copy(first, last, std::back_inserter(output4));
+ compare_nearest_outputs(rtree, output4, expected_output, pt, greatest_distance);
+ }
+#endif
+#endif
+}
+
+// rtree nearest not found
+
+struct AlwaysFalse
+{
+ template <typename Value>
+ bool operator()(Value const& ) const { return false; }
+};
+
+template <typename Rtree, typename Point>
+void nearest_query_not_found(Rtree const& rtree, Point const& pt)
+{
+ typedef typename Rtree::value_type Value;
+
+ std::vector<Value> output_v;
+ size_t n_res = rtree.query(bgi::nearest(pt, 5) && bgi::satisfies(AlwaysFalse()), std::back_inserter(output_v));
+ BOOST_CHECK(output_v.size() == n_res);
+ BOOST_CHECK(n_res < 5);
+}
+
+template <typename Value>
+bool satisfies_fun(Value const& ) { return true; }
+
+struct satisfies_obj
+{
+ template <typename Value>
+ bool operator()(Value const& ) const { return true; }
+};
+
+template <typename Rtree, typename Value>
+void satisfies(Rtree const& rtree, std::vector<Value> const& input)
+{
+ std::vector<Value> result;
+ rtree.query(bgi::satisfies(satisfies_obj()), std::back_inserter(result));
+ BOOST_CHECK(result.size() == input.size());
+ result.clear();
+ rtree.query(!bgi::satisfies(satisfies_obj()), std::back_inserter(result));
+ BOOST_CHECK(result.size() == 0);
+
+ result.clear();
+ rtree.query(bgi::satisfies(satisfies_fun<Value>), std::back_inserter(result));
+ BOOST_CHECK(result.size() == input.size());
+ result.clear();
+ rtree.query(!bgi::satisfies(satisfies_fun<Value>), std::back_inserter(result));
+ BOOST_CHECK(result.size() == 0);
+
+#ifndef BOOST_NO_CXX11_LAMBDAS
+ result.clear();
+ rtree.query(bgi::satisfies([](Value const&){ return true; }), std::back_inserter(result));
+ BOOST_CHECK(result.size() == input.size());
+ result.clear();
+ rtree.query(!bgi::satisfies([](Value const&){ return true; }), std::back_inserter(result));
+ BOOST_CHECK(result.size() == 0);
+#endif
+}
+
+// rtree copying and moving
+
+template <typename Rtree, typename Box>
+void copy_swap_move(Rtree const& tree, Box const& qbox)
+{
+ typedef typename Rtree::value_type Value;
+ typedef typename Rtree::parameters_type Params;
+
+ size_t s = tree.size();
+ Params params = tree.parameters();
+
+ std::vector<Value> expected_output;
+ tree.query(bgi::intersects(qbox), std::back_inserter(expected_output));
+
+ // copy constructor
+ Rtree t1(tree);
+
+ BOOST_CHECK(tree.empty() == t1.empty());
+ BOOST_CHECK(tree.size() == t1.size());
+ BOOST_CHECK(t1.parameters().get_max_elements() == params.get_max_elements());
+ BOOST_CHECK(t1.parameters().get_min_elements() == params.get_min_elements());
+
+ std::vector<Value> output;
+ t1.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t1, output, expected_output);
+
+ // copying assignment operator
+ t1 = tree;
+
+ BOOST_CHECK(tree.empty() == t1.empty());
+ BOOST_CHECK(tree.size() == t1.size());
+ BOOST_CHECK(t1.parameters().get_max_elements() == params.get_max_elements());
+ BOOST_CHECK(t1.parameters().get_min_elements() == params.get_min_elements());
+
+ output.clear();
+ t1.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t1, output, expected_output);
+
+ Rtree t2(tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ t2.swap(t1);
+ BOOST_CHECK(tree.empty() == t2.empty());
+ BOOST_CHECK(tree.size() == t2.size());
+ BOOST_CHECK(true == t1.empty());
+ BOOST_CHECK(0 == t1.size());
+ // those fails e.g. on darwin 4.2.1 because it can't copy base obejcts properly
+ BOOST_CHECK(t1.parameters().get_max_elements() == params.get_max_elements());
+ BOOST_CHECK(t1.parameters().get_min_elements() == params.get_min_elements());
+ BOOST_CHECK(t2.parameters().get_max_elements() == params.get_max_elements());
+ BOOST_CHECK(t2.parameters().get_min_elements() == params.get_min_elements());
+
+ output.clear();
+ t1.query(bgi::intersects(qbox), std::back_inserter(output));
+ BOOST_CHECK(output.empty());
+
+ output.clear();
+ t2.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t2, output, expected_output);
+ t2.swap(t1);
+ // those fails e.g. on darwin 4.2.1 because it can't copy base obejcts properly
+ BOOST_CHECK(t1.parameters().get_max_elements() == params.get_max_elements());
+ BOOST_CHECK(t1.parameters().get_min_elements() == params.get_min_elements());
+ BOOST_CHECK(t2.parameters().get_max_elements() == params.get_max_elements());
+ BOOST_CHECK(t2.parameters().get_min_elements() == params.get_min_elements());
+
+ // moving constructor
+ Rtree t3(boost::move(t1), tree.get_allocator());
+
+ BOOST_CHECK(t3.size() == s);
+ BOOST_CHECK(t1.size() == 0);
+ BOOST_CHECK(t3.parameters().get_max_elements() == params.get_max_elements());
+ BOOST_CHECK(t3.parameters().get_min_elements() == params.get_min_elements());
+
+ output.clear();
+ t3.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t3, output, expected_output);
+
+ // moving assignment operator
+ t1 = boost::move(t3);
+
+ BOOST_CHECK(t1.size() == s);
+ BOOST_CHECK(t3.size() == 0);
+ BOOST_CHECK(t1.parameters().get_max_elements() == params.get_max_elements());
+ BOOST_CHECK(t1.parameters().get_min_elements() == params.get_min_elements());
+
+ output.clear();
+ t1.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t1, output, expected_output);
+
+ //TODO - test SWAP
+
+ ::boost::ignore_unused_variable_warning(params);
+}
+
+template <typename I, typename O>
+inline void my_copy(I first, I last, O out)
+{
+ for ( ; first != last ; ++first, ++out )
+ *out = *first;
+}
+
+// rtree creation and insertion
+
+template <typename Rtree, typename Value, typename Box>
+void create_insert(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ std::vector<Value> expected_output;
+ tree.query(bgi::intersects(qbox), std::back_inserter(expected_output));
+
+ {
+ Rtree t(tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ BOOST_FOREACH(Value const& v, input)
+ t.insert(v);
+ BOOST_CHECK(tree.size() == t.size());
+ std::vector<Value> output;
+ t.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ //std::copy(input.begin(), input.end(), bgi::inserter(t));
+ my_copy(input.begin(), input.end(), bgi::inserter(t)); // to suppress MSVC warnings
+ BOOST_CHECK(tree.size() == t.size());
+ std::vector<Value> output;
+ t.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(input.begin(), input.end(), tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ BOOST_CHECK(tree.size() == t.size());
+ std::vector<Value> output;
+ t.query(bgi::intersects(qbox), std::back_inserter(output));
+ compare_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(input, tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ BOOST_CHECK(tree.size() == t.size());
+ std::vector<Value> output;
+ t.query(bgi::intersects(qbox), std::back_inserter(output));
+ compare_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ t.insert(input.begin(), input.end());
+ BOOST_CHECK(tree.size() == t.size());
+ std::vector<Value> output;
+ t.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ t.insert(input);
+ BOOST_CHECK(tree.size() == t.size());
+ std::vector<Value> output;
+ t.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t, output, expected_output);
+ }
+
+ {
+ Rtree t(tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ BOOST_FOREACH(Value const& v, input)
+ bgi::insert(t, v);
+ BOOST_CHECK(tree.size() == t.size());
+ std::vector<Value> output;
+ bgi::query(t, bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ bgi::insert(t, input.begin(), input.end());
+ BOOST_CHECK(tree.size() == t.size());
+ std::vector<Value> output;
+ bgi::query(t, bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(tree.parameters(), tree.indexable_get(), tree.value_eq(), tree.get_allocator());
+ bgi::insert(t, input);
+ BOOST_CHECK(tree.size() == t.size());
+ std::vector<Value> output;
+ bgi::query(t, bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t, output, expected_output);
+ }
+}
+
+// rtree removing
+
+template <typename Rtree, typename Box>
+void remove(Rtree const& tree, Box const& qbox)
+{
+ typedef typename Rtree::value_type Value;
+
+ std::vector<Value> values_to_remove;
+ tree.query(bgi::intersects(qbox), std::back_inserter(values_to_remove));
+ BOOST_CHECK(0 < values_to_remove.size());
+
+ std::vector<Value> expected_output;
+ tree.query(bgi::disjoint(qbox), std::back_inserter(expected_output));
+ size_t expected_removed_count = values_to_remove.size();
+ size_t expected_size_after_remove = tree.size() - values_to_remove.size();
+
+ // Add value which is not stored in the Rtree
+ Value outsider = generate::value_outside<Rtree>();
+ values_to_remove.push_back(outsider);
+
+ {
+ Rtree t(tree);
+ size_t r = 0;
+ BOOST_FOREACH(Value const& v, values_to_remove)
+ r += t.remove(v);
+ BOOST_CHECK( r == expected_removed_count );
+ std::vector<Value> output;
+ t.query(bgi::disjoint(qbox), std::back_inserter(output));
+ BOOST_CHECK( t.size() == expected_size_after_remove );
+ BOOST_CHECK( output.size() == tree.size() - expected_removed_count );
+ compare_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(tree);
+ size_t r = t.remove(values_to_remove.begin(), values_to_remove.end());
+ BOOST_CHECK( r == expected_removed_count );
+ std::vector<Value> output;
+ t.query(bgi::disjoint(qbox), std::back_inserter(output));
+ BOOST_CHECK( t.size() == expected_size_after_remove );
+ BOOST_CHECK( output.size() == tree.size() - expected_removed_count );
+ compare_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(tree);
+ size_t r = t.remove(values_to_remove);
+ BOOST_CHECK( r == expected_removed_count );
+ std::vector<Value> output;
+ t.query(bgi::disjoint(qbox), std::back_inserter(output));
+ BOOST_CHECK( t.size() == expected_size_after_remove );
+ BOOST_CHECK( output.size() == tree.size() - expected_removed_count );
+ compare_outputs(t, output, expected_output);
+ }
+
+ {
+ Rtree t(tree);
+ size_t r = 0;
+ BOOST_FOREACH(Value const& v, values_to_remove)
+ r += bgi::remove(t, v);
+ BOOST_CHECK( r == expected_removed_count );
+ std::vector<Value> output;
+ bgi::query(t, bgi::disjoint(qbox), std::back_inserter(output));
+ BOOST_CHECK( t.size() == expected_size_after_remove );
+ BOOST_CHECK( output.size() == tree.size() - expected_removed_count );
+ compare_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(tree);
+ size_t r = bgi::remove(t, values_to_remove.begin(), values_to_remove.end());
+ BOOST_CHECK( r == expected_removed_count );
+ std::vector<Value> output;
+ bgi::query(t, bgi::disjoint(qbox), std::back_inserter(output));
+ BOOST_CHECK( t.size() == expected_size_after_remove );
+ BOOST_CHECK( output.size() == tree.size() - expected_removed_count );
+ compare_outputs(t, output, expected_output);
+ }
+ {
+ Rtree t(tree);
+ size_t r = bgi::remove(t, values_to_remove);
+ BOOST_CHECK( r == expected_removed_count );
+ std::vector<Value> output;
+ bgi::query(t, bgi::disjoint(qbox), std::back_inserter(output));
+ BOOST_CHECK( t.size() == expected_size_after_remove );
+ BOOST_CHECK( output.size() == tree.size() - expected_removed_count );
+ compare_outputs(t, output, expected_output);
+ }
+}
+
+template <typename Rtree, typename Value, typename Box>
+void clear(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ std::vector<Value> values_to_remove;
+ tree.query(bgi::intersects(qbox), std::back_inserter(values_to_remove));
+ BOOST_CHECK(0 < values_to_remove.size());
+
+ //clear
+ {
+ Rtree t(tree);
+
+ std::vector<Value> expected_output;
+ t.query(bgi::intersects(qbox), std::back_inserter(expected_output));
+ size_t s = t.size();
+ t.clear();
+ BOOST_CHECK(t.empty());
+ BOOST_CHECK(t.size() == 0);
+ t.insert(input);
+ BOOST_CHECK(t.size() == s);
+ std::vector<Value> output;
+ t.query(bgi::intersects(qbox), std::back_inserter(output));
+ exactly_the_same_outputs(t, output, expected_output);
+ }
+}
+
+// rtree queries
+
+template <typename Rtree, typename Value, typename Box>
+void queries(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ basictest::intersects(tree, input, qbox);
+ basictest::disjoint(tree, input, qbox);
+ basictest::covered_by(tree, input, qbox);
+ basictest::overlaps(tree, input, qbox);
+ //basictest::touches(tree, input, qbox);
+ basictest::within(tree, input, qbox);
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+ basictest::contains(tree, input, qbox);
+ basictest::covers(tree, input, qbox);
+#endif
+
+ typedef typename bg::point_type<Box>::type P;
+ P pt;
+ bg::centroid(qbox, pt);
+
+ basictest::nearest_query_k(tree, input, pt, 10);
+ basictest::nearest_query_not_found(tree, generate::outside_point<P>::apply());
+
+ basictest::satisfies(tree, input);
+}
+
+// rtree creation and modification
+
+template <typename Rtree, typename Value, typename Box>
+void modifiers(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
+{
+ basictest::copy_swap_move(tree, qbox);
+ basictest::create_insert(tree, input, qbox);
+ basictest::remove(tree, qbox);
+ basictest::clear(tree, input, qbox);
+}
+
+} // namespace basictest
+
+template <typename Value, typename Parameters, typename Allocator>
+void test_rtree_queries(Parameters const& parameters, Allocator const& allocator)
+{
+ typedef bgi::indexable<Value> I;
+ typedef bgi::equal_to<Value> E;
+ typedef typename Allocator::template rebind<Value>::other A;
+ typedef bgi::rtree<Value, Parameters, I, E, A> Tree;
+ typedef typename Tree::bounds_type B;
+
+ Tree tree(parameters, I(), E(), allocator);
+ std::vector<Value> input;
+ B qbox;
+
+ generate::rtree(tree, input, qbox);
+
+ basictest::queries(tree, input, qbox);
+
+ Tree empty_tree(parameters, I(), E(), allocator);
+ std::vector<Value> empty_input;
+
+ basictest::queries(empty_tree, empty_input, qbox);
+}
+
+template <typename Value, typename Parameters, typename Allocator>
+void test_rtree_modifiers(Parameters const& parameters, Allocator const& allocator)
+{
+ typedef bgi::indexable<Value> I;
+ typedef bgi::equal_to<Value> E;
+ typedef typename Allocator::template rebind<Value>::other A;
+ typedef bgi::rtree<Value, Parameters, I, E, A> Tree;
+ typedef typename Tree::bounds_type B;
+
+ Tree tree(parameters, I(), E(), allocator);
+ std::vector<Value> input;
+ B qbox;
+
+ generate::rtree(tree, input, qbox);
+
+ basictest::modifiers(tree, input, qbox);
+
+ Tree empty_tree(parameters, I(), E(), allocator);
+ std::vector<Value> empty_input;
+
+ basictest::copy_swap_move(empty_tree, qbox);
+}
+
+// run all tests for a single Algorithm and single rtree
+// defined by Value
+
+template <typename Value, typename Parameters, typename Allocator>
+void test_rtree_by_value(Parameters const& parameters, Allocator const& allocator)
+{
+ test_rtree_queries<Value>(parameters, allocator);
+ test_rtree_modifiers<Value>(parameters, allocator);
+}
+
+// rtree inserting and removing of counting_value
+
+template <typename Indexable, typename Parameters, typename Allocator>
+void test_count_rtree_values(Parameters const& parameters, Allocator const& allocator)
+{
+ typedef counting_value<Indexable> Value;
+
+ typedef bgi::indexable<Value> I;
+ typedef bgi::equal_to<Value> E;
+ typedef typename Allocator::template rebind<Value>::other A;
+ typedef bgi::rtree<Value, Parameters, I, E, A> Tree;
+ typedef typename Tree::bounds_type B;
+
+ Tree t(parameters, I(), E(), allocator);
+ std::vector<Value> input;
+ B qbox;
+
+ generate::rtree(t, input, qbox);
+
+ size_t rest_count = input.size();
+
+ BOOST_CHECK(t.size() + rest_count == Value::counter());
+
+ std::vector<Value> values_to_remove;
+ t.query(bgi::intersects(qbox), std::back_inserter(values_to_remove));
+
+ rest_count += values_to_remove.size();
+
+ BOOST_CHECK(t.size() + rest_count == Value::counter());
+
+ size_t values_count = Value::counter();
+
+ BOOST_FOREACH(Value const& v, values_to_remove)
+ {
+ size_t r = t.remove(v);
+ --values_count;
+
+ BOOST_CHECK(1 == r);
+ BOOST_CHECK(Value::counter() == values_count);
+ BOOST_CHECK(t.size() + rest_count == values_count);
+ }
+}
+
+// rtree count
+
+template <typename Indexable, typename Parameters, typename Allocator>
+void test_rtree_count(Parameters const& parameters, Allocator const& allocator)
+{
+ typedef std::pair<Indexable, int> Value;
+
+ typedef bgi::indexable<Value> I;
+ typedef bgi::equal_to<Value> E;
+ typedef typename Allocator::template rebind<Value>::other A;
+ typedef bgi::rtree<Value, Parameters, I, E, A> Tree;
+ typedef typename Tree::bounds_type B;
+
+ Tree t(parameters, I(), E(), allocator);
+ std::vector<Value> input;
+ B qbox;
+
+ generate::rtree(t, input, qbox);
+
+ BOOST_CHECK(t.count(input[0]) == 1);
+ BOOST_CHECK(t.count(input[0].first) == 1);
+
+ t.insert(input[0]);
+
+ BOOST_CHECK(t.count(input[0]) == 2);
+ BOOST_CHECK(t.count(input[0].first) == 2);
+
+ t.insert(std::make_pair(input[0].first, -1));
+
+ BOOST_CHECK(t.count(input[0]) == 2);
+ BOOST_CHECK(t.count(input[0].first) == 3);
+}
+
+// test rtree box
+
+template <typename Value, typename Parameters, typename Allocator>
+void test_rtree_bounds(Parameters const& parameters, Allocator const& allocator)
+{
+ typedef bgi::indexable<Value> I;
+ typedef bgi::equal_to<Value> E;
+ typedef typename Allocator::template rebind<Value>::other A;
+ typedef bgi::rtree<Value, Parameters, I, E, A> Tree;
+ typedef typename Tree::bounds_type B;
+ typedef typename bg::traits::point_type<B>::type P;
+
+ B b;
+ bg::assign_inverse(b);
+
+ Tree t(parameters, I(), E(), allocator);
+ std::vector<Value> input;
+ B qbox;
+
+ BOOST_CHECK(bg::equals(t.bounds(), b));
+
+ generate::rtree(t, input, qbox);
+
+ BOOST_FOREACH(Value const& v, input)
+ bg::expand(b, t.indexable_get()(v));
+
+ BOOST_CHECK(bg::equals(t.bounds(), b));
+ BOOST_CHECK(bg::equals(t.bounds(), bgi::bounds(t)));
+
+ size_t s = input.size();
+ while ( s/2 < input.size() && !input.empty() )
+ {
+ t.remove(input.back());
+ input.pop_back();
+ }
+
+ bg::assign_inverse(b);
+ BOOST_FOREACH(Value const& v, input)
+ bg::expand(b, t.indexable_get()(v));
+
+ BOOST_CHECK(bg::equals(t.bounds(), b));
+
+ Tree t2(t);
+ BOOST_CHECK(bg::equals(t2.bounds(), b));
+ t2.clear();
+ t2 = t;
+ BOOST_CHECK(bg::equals(t2.bounds(), b));
+ t2.clear();
+ t2 = boost::move(t);
+ BOOST_CHECK(bg::equals(t2.bounds(), b));
+
+ t.clear();
+
+ bg::assign_inverse(b);
+ BOOST_CHECK(bg::equals(t.bounds(), b));
+}
+
+template <typename Indexable, typename Parameters, typename Allocator>
+void test_rtree_additional(Parameters const& parameters, Allocator const& allocator)
+{
+ test_count_rtree_values<Indexable>(parameters, allocator);
+ test_rtree_count<Indexable>(parameters, allocator);
+ test_rtree_bounds<Indexable>(parameters, allocator);
+}
+
+// run all tests for one Algorithm for some number of rtrees
+// defined by some number of Values constructed from given Point
+
+template<typename Point, typename Parameters, typename Allocator>
+void test_rtree_for_point(Parameters const& parameters, Allocator const& allocator)
+{
+ typedef std::pair<Point, int> PairP;
+ typedef boost::tuple<Point, int, int> TupleP;
+ typedef boost::shared_ptr< test_object<Point> > SharedPtrP;
+ typedef value_no_dctor<Point> VNoDCtor;
+
+ test_rtree_by_value<Point, Parameters>(parameters, allocator);
+ test_rtree_by_value<PairP, Parameters>(parameters, allocator);
+ test_rtree_by_value<TupleP, Parameters>(parameters, allocator);
+
+ test_rtree_by_value<SharedPtrP, Parameters>(parameters, allocator);
+ test_rtree_by_value<VNoDCtor, Parameters>(parameters, allocator);
+
+ test_rtree_additional<Point>(parameters, allocator);
+
+#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ typedef std::tuple<Point, int, int> StdTupleP;
+ test_rtree_by_value<StdTupleP, Parameters>(parameters, allocator);
+#endif
+}
+
+template<typename Point, typename Parameters, typename Allocator>
+void test_rtree_for_box(Parameters const& parameters, Allocator const& allocator)
+{
+ typedef bg::model::box<Point> Box;
+ typedef std::pair<Box, int> PairB;
+ typedef boost::tuple<Box, int, int> TupleB;
+ typedef value_no_dctor<Box> VNoDCtor;
+
+ test_rtree_by_value<Box, Parameters>(parameters, allocator);
+ test_rtree_by_value<PairB, Parameters>(parameters, allocator);
+ test_rtree_by_value<TupleB, Parameters>(parameters, allocator);
+
+ test_rtree_by_value<VNoDCtor, Parameters>(parameters, allocator);
+
+ test_rtree_additional<Box>(parameters, allocator);
+
+#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ typedef std::tuple<Box, int, int> StdTupleB;
+ test_rtree_by_value<StdTupleB, Parameters>(parameters, allocator);
+#endif
+}
+
+template<typename Point, typename Parameters>
+void test_rtree_for_point(Parameters const& parameters)
+{
+ test_rtree_for_point<Point>(parameters, std::allocator<int>());
+}
+
+template<typename Point, typename Parameters>
+void test_rtree_for_box(Parameters const& parameters)
+{
+ test_rtree_for_box<Point>(parameters, std::allocator<int>());
+}
+
+namespace testset {
+
+template<typename Indexable, typename Parameters, typename Allocator>
+void modifiers(Parameters const& parameters, Allocator const& allocator)
+{
+ typedef std::pair<Indexable, int> Pair;
+ typedef boost::tuple<Indexable, int, int> Tuple;
+ typedef boost::shared_ptr< test_object<Indexable> > SharedPtr;
+ typedef value_no_dctor<Indexable> VNoDCtor;
+
+ test_rtree_modifiers<Indexable>(parameters, allocator);
+ test_rtree_modifiers<Pair>(parameters, allocator);
+ test_rtree_modifiers<Tuple>(parameters, allocator);
+
+ test_rtree_modifiers<SharedPtr>(parameters, allocator);
+ test_rtree_modifiers<VNoDCtor>(parameters, allocator);
+
+#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ typedef std::tuple<Indexable, int, int> StdTuple;
+ test_rtree_modifiers<StdTuple>(parameters, allocator);
+#endif
+}
+
+template<typename Indexable, typename Parameters, typename Allocator>
+void queries(Parameters const& parameters, Allocator const& allocator)
+{
+ typedef std::pair<Indexable, int> Pair;
+ typedef boost::tuple<Indexable, int, int> Tuple;
+ typedef boost::shared_ptr< test_object<Indexable> > SharedPtr;
+ typedef value_no_dctor<Indexable> VNoDCtor;
+
+ test_rtree_queries<Indexable>(parameters, allocator);
+ test_rtree_queries<Pair>(parameters, allocator);
+ test_rtree_queries<Tuple>(parameters, allocator);
+
+ test_rtree_queries<SharedPtr>(parameters, allocator);
+ test_rtree_queries<VNoDCtor>(parameters, allocator);
+
+#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+ typedef std::tuple<Indexable, int, int> StdTuple;
+ test_rtree_queries<StdTuple>(parameters, allocator);
+#endif
+}
+
+template<typename Indexable, typename Parameters, typename Allocator>
+void additional(Parameters const& parameters, Allocator const& allocator)
+{
+ test_rtree_additional<Indexable, Parameters>(parameters, allocator);
+}
+
+} // namespace testset
+
+#endif // BOOST_GEOMETRY_INDEX_TEST_RTREE_HPP
diff --git a/libs/geometry/index/test/varray.cpp b/libs/geometry/index/test/varray.cpp
new file mode 100644
index 000000000..9040e97c0
--- /dev/null
+++ b/libs/geometry/index/test/varray.cpp
@@ -0,0 +1,774 @@
+// Boost.Geometry.Index varray
+// Unit Test
+
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2012-2013 Andrew Hundt.
+
+// 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)
+
+#include <boost/test/included/test_exec_monitor.hpp>
+#include <boost/test/impl/execution_monitor.ipp>
+
+// TODO: Disable parts of the unit test that should not run when BOOST_NO_EXCEPTIONS
+// if exceptions are enabled there must be a user defined throw_exception function
+#ifdef BOOST_NO_EXCEPTIONS
+namespace boost {
+ void throw_exception(std::exception const & e){}; // user defined
+} // namespace boost
+#endif // BOOST_NO_EXCEPTIONS
+
+#include <vector>
+#include <list>
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#include <boost/container/vector.hpp>
+#include <boost/container/stable_vector.hpp>
+using namespace boost::container;
+#endif
+
+#include "varray_test.hpp"
+
+using namespace boost::geometry::index::detail;
+
+template <typename T, size_t N>
+void test_ctor_ndc()
+{
+ varray<T, N> s;
+ BOOST_CHECK_EQUAL(s.size(), 0u);
+ BOOST_CHECK(s.capacity() == N);
+#ifndef BOOST_NO_EXCEPTIONS
+ BOOST_CHECK_THROW( s.at(0), std::out_of_range );
+#endif // BOOST_NO_EXCEPTIONS
+}
+
+template <typename T, size_t N>
+void test_ctor_nc(size_t n)
+{
+ varray<T, N> s(n);
+ BOOST_CHECK(s.size() == n);
+ BOOST_CHECK(s.capacity() == N);
+#ifndef BOOST_NO_EXCEPTIONS
+ BOOST_CHECK_THROW( s.at(n), std::out_of_range );
+#endif // BOOST_NO_EXCEPTIONS
+ if ( 1 < n )
+ {
+ T val10(10);
+ s[0] = val10;
+ BOOST_CHECK(T(10) == s[0]);
+ BOOST_CHECK(T(10) == s.at(0));
+ T val20(20);
+ s.at(1) = val20;
+ BOOST_CHECK(T(20) == s[1]);
+ BOOST_CHECK(T(20) == s.at(1));
+ }
+}
+
+template <typename T, size_t N>
+void test_ctor_nd(size_t n, T const& v)
+{
+ varray<T, N> s(n, v);
+ BOOST_CHECK(s.size() == n);
+ BOOST_CHECK(s.capacity() == N);
+#ifndef BOOST_NO_EXCEPTIONS
+ BOOST_CHECK_THROW( s.at(n), std::out_of_range );
+#endif // BOOST_NO_EXCEPTIONS
+ if ( 1 < n )
+ {
+ BOOST_CHECK(v == s[0]);
+ BOOST_CHECK(v == s.at(0));
+ BOOST_CHECK(v == s[1]);
+ BOOST_CHECK(v == s.at(1));
+ s[0] = T(10);
+ BOOST_CHECK(T(10) == s[0]);
+ BOOST_CHECK(T(10) == s.at(0));
+ s.at(1) = T(20);
+ BOOST_CHECK(T(20) == s[1]);
+ BOOST_CHECK(T(20) == s.at(1));
+ }
+}
+
+template <typename T, size_t N>
+void test_resize_nc(size_t n)
+{
+ varray<T, N> s;
+
+ s.resize(n);
+ BOOST_CHECK(s.size() == n);
+ BOOST_CHECK(s.capacity() == N);
+#ifndef BOOST_NO_EXCEPTIONS
+ BOOST_CHECK_THROW( s.at(n), std::out_of_range );
+#endif // BOOST_NO_EXCEPTIONS
+ if ( 1 < n )
+ {
+ T val10(10);
+ s[0] = val10;
+ BOOST_CHECK(T(10) == s[0]);
+ BOOST_CHECK(T(10) == s.at(0));
+ T val20(20);
+ s.at(1) = val20;
+ BOOST_CHECK(T(20) == s[1]);
+ BOOST_CHECK(T(20) == s.at(1));
+ }
+}
+
+template <typename T, size_t N>
+void test_resize_nd(size_t n, T const& v)
+{
+ varray<T, N> s;
+
+ s.resize(n, v);
+ BOOST_CHECK(s.size() == n);
+ BOOST_CHECK(s.capacity() == N);
+#ifndef BOOST_NO_EXCEPTIONS
+ BOOST_CHECK_THROW( s.at(n), std::out_of_range );
+#endif // BOOST_NO_EXCEPTIONS
+ if ( 1 < n )
+ {
+ BOOST_CHECK(v == s[0]);
+ BOOST_CHECK(v == s.at(0));
+ BOOST_CHECK(v == s[1]);
+ BOOST_CHECK(v == s.at(1));
+ s[0] = T(10);
+ BOOST_CHECK(T(10) == s[0]);
+ BOOST_CHECK(T(10) == s.at(0));
+ s.at(1) = T(20);
+ BOOST_CHECK(T(20) == s[1]);
+ BOOST_CHECK(T(20) == s.at(1));
+ }
+}
+
+template <typename T, size_t N>
+void test_push_back_nd()
+{
+ varray<T, N> s;
+
+ BOOST_CHECK(s.size() == 0);
+#ifndef BOOST_NO_EXCEPTIONS
+ BOOST_CHECK_THROW( s.at(0), std::out_of_range );
+#endif // BOOST_NO_EXCEPTIONS
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ {
+ T t(i);
+ s.push_back(t);
+ BOOST_CHECK(s.size() == i + 1);
+#ifndef BOOST_NO_EXCEPTIONS
+ BOOST_CHECK_THROW( s.at(i + 1), std::out_of_range );
+#endif // BOOST_NO_EXCEPTIONS
+ BOOST_CHECK(T(i) == s.at(i));
+ BOOST_CHECK(T(i) == s[i]);
+ BOOST_CHECK(T(i) == s.back());
+ BOOST_CHECK(T(0) == s.front());
+ BOOST_CHECK(T(i) == *(s.data() + i));
+ }
+}
+
+template <typename T, size_t N>
+void test_pop_back_nd()
+{
+ varray<T, N> s;
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ {
+ T t(i);
+ s.push_back(t);
+ }
+
+ for ( size_t i = N ; i > 1 ; --i )
+ {
+ s.pop_back();
+ BOOST_CHECK(s.size() == i - 1);
+#ifndef BOOST_NO_EXCEPTIONS
+ BOOST_CHECK_THROW( s.at(i - 1), std::out_of_range );
+#endif // BOOST_NO_EXCEPTIONS
+ BOOST_CHECK(T(i - 2) == s.at(i - 2));
+ BOOST_CHECK(T(i - 2) == s[i - 2]);
+ BOOST_CHECK(T(i - 2) == s.back());
+ BOOST_CHECK(T(0) == s.front());
+ }
+}
+
+template <typename It1, typename It2>
+void test_compare_ranges(It1 first1, It1 last1, It2 first2, It2 last2)
+{
+ BOOST_CHECK(std::distance(first1, last1) == std::distance(first2, last2));
+ for ( ; first1 != last1 && first2 != last2 ; ++first1, ++first2 )
+ BOOST_CHECK(*first1 == *first2);
+}
+
+template <typename T, size_t N, typename C>
+void test_copy_and_assign(C const& c)
+{
+ {
+ varray<T, N> s(c.begin(), c.end());
+ BOOST_CHECK(s.size() == c.size());
+ test_compare_ranges(s.begin(), s.end(), c.begin(), c.end());
+ }
+ {
+ varray<T, N> s;
+ BOOST_CHECK(0 == s.size());
+ s.assign(c.begin(), c.end());
+ BOOST_CHECK(s.size() == c.size());
+ test_compare_ranges(s.begin(), s.end(), c.begin(), c.end());
+ }
+}
+
+template <typename T, size_t N>
+void test_copy_and_assign_nd(T const& val)
+{
+ varray<T, N> s;
+ std::vector<T> v;
+ std::list<T> l;
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ {
+ T t(i);
+ s.push_back(t);
+ v.push_back(t);
+ l.push_back(t);
+ }
+ // copy ctor
+ {
+ varray<T, N> s1(s);
+ BOOST_CHECK(s.size() == s1.size());
+ test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+ }
+ // copy assignment
+ {
+ varray<T, N> s1;
+ BOOST_CHECK(0 == s1.size());
+ s1 = s;
+ BOOST_CHECK(s.size() == s1.size());
+ test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+ }
+
+ // ctor(Iter, Iter) and assign(Iter, Iter)
+ test_copy_and_assign<T, N>(s);
+ test_copy_and_assign<T, N>(v);
+ test_copy_and_assign<T, N>(l);
+
+ // assign(N, V)
+ {
+ varray<T, N> s1(s);
+ test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+ std::vector<T> a(N, val);
+ s1.assign(N, val);
+ test_compare_ranges(a.begin(), a.end(), s1.begin(), s1.end());
+ }
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ stable_vector<T> bsv(s.begin(), s.end());
+ vector<T> bv(s.begin(), s.end());
+ test_copy_and_assign<T, N>(bsv);
+ test_copy_and_assign<T, N>(bv);
+#endif
+}
+
+template <typename T, size_t N>
+void test_iterators_nd()
+{
+ varray<T, N> s;
+ std::vector<T> v;
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ {
+ s.push_back(T(i));
+ v.push_back(T(i));
+ }
+
+ test_compare_ranges(s.begin(), s.end(), v.begin(), v.end());
+ test_compare_ranges(s.rbegin(), s.rend(), v.rbegin(), v.rend());
+
+ s.assign(v.rbegin(), v.rend());
+
+ test_compare_ranges(s.begin(), s.end(), v.rbegin(), v.rend());
+ test_compare_ranges(s.rbegin(), s.rend(), v.begin(), v.end());
+}
+
+template <typename T, size_t N>
+void test_erase_nd()
+{
+ varray<T, N> s;
+ typedef typename varray<T, N>::iterator It;
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ s.push_back(T(i));
+
+ // erase(pos)
+ {
+ for ( size_t i = 0 ; i < N ; ++i )
+ {
+ varray<T, N> s1(s);
+ It it = s1.erase(s1.begin() + i);
+ BOOST_CHECK(s1.begin() + i == it);
+ BOOST_CHECK(s1.size() == N - 1);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = i+1 ; j < N ; ++j )
+ BOOST_CHECK(s1[j-1] == T(j));
+ }
+ }
+ // erase(first, last)
+ {
+ size_t n = N/3;
+ for ( size_t i = 0 ; i <= N ; ++i )
+ {
+ varray<T, N> s1(s);
+ size_t removed = i + n < N ? n : N - i;
+ It it = s1.erase(s1.begin() + i, s1.begin() + i + removed);
+ BOOST_CHECK(s1.begin() + i == it);
+ BOOST_CHECK(s1.size() == N - removed);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = i+n ; j < N ; ++j )
+ BOOST_CHECK(s1[j-n] == T(j));
+ }
+ }
+}
+
+template <typename T, size_t N, typename SV, typename C>
+void test_insert(SV const& s, C const& c)
+{
+ size_t h = N/2;
+ size_t n = size_t(h/1.5f);
+
+ for ( size_t i = 0 ; i <= h ; ++i )
+ {
+ varray<T, N> s1(s);
+
+ typename C::const_iterator it = c.begin();
+ std::advance(it, n);
+ typename varray<T, N>::iterator
+ it1 = s1.insert(s1.begin() + i, c.begin(), it);
+
+ BOOST_CHECK(s1.begin() + i == it1);
+ BOOST_CHECK(s1.size() == h+n);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = 0 ; j < n ; ++j )
+ BOOST_CHECK(s1[j+i] == T(100 + j));
+ for ( size_t j = 0 ; j < h-i ; ++j )
+ BOOST_CHECK(s1[j+i+n] == T(j+i));
+ }
+}
+
+template <typename T, size_t N>
+void test_insert_nd(T const& val)
+{
+ size_t h = N/2;
+
+ varray<T, N> s, ss;
+ std::vector<T> v;
+ std::list<T> l;
+
+ typedef typename varray<T, N>::iterator It;
+
+ for ( size_t i = 0 ; i < h ; ++i )
+ {
+ s.push_back(T(i));
+ ss.push_back(T(100 + i));
+ v.push_back(T(100 + i));
+ l.push_back(T(100 + i));
+ }
+
+ // insert(pos, val)
+ {
+ for ( size_t i = 0 ; i <= h ; ++i )
+ {
+ varray<T, N> s1(s);
+ It it = s1.insert(s1.begin() + i, val);
+ BOOST_CHECK(s1.begin() + i == it);
+ BOOST_CHECK(s1.size() == h+1);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ BOOST_CHECK(s1[i] == val);
+ for ( size_t j = 0 ; j < h-i ; ++j )
+ BOOST_CHECK(s1[j+i+1] == T(j+i));
+ }
+ }
+ // insert(pos, n, val)
+ {
+ size_t n = size_t(h/1.5f);
+ for ( size_t i = 0 ; i <= h ; ++i )
+ {
+ varray<T, N> s1(s);
+ It it = s1.insert(s1.begin() + i, n, val);
+ BOOST_CHECK(s1.begin() + i == it);
+ BOOST_CHECK(s1.size() == h+n);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = 0 ; j < n ; ++j )
+ BOOST_CHECK(s1[j+i] == val);
+ for ( size_t j = 0 ; j < h-i ; ++j )
+ BOOST_CHECK(s1[j+i+n] == T(j+i));
+ }
+ }
+ // insert(pos, first, last)
+ test_insert<T, N>(s, ss);
+ test_insert<T, N>(s, v);
+ test_insert<T, N>(s, l);
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ stable_vector<T> bsv(ss.begin(), ss.end());
+ vector<T> bv(ss.begin(), ss.end());
+ test_insert<T, N>(s, bv);
+ test_insert<T, N>(s, bsv);
+#endif
+}
+
+template <typename T>
+void test_capacity_0_nd()
+{
+ varray<T, 10> v(5u, T(0));
+
+ //varray<T, 0, bad_alloc_strategy<T> > s;
+ varray<T, 0> s;
+ BOOST_CHECK(s.size() == 0);
+ BOOST_CHECK(s.capacity() == 0);
+#ifndef BOOST_NO_EXCEPTIONS
+ BOOST_CHECK_THROW(s.at(0), std::out_of_range);
+ //BOOST_CHECK_THROW(s.resize(5u, T(0)), std::bad_alloc);
+ //BOOST_CHECK_THROW(s.push_back(T(0)), std::bad_alloc);
+ //BOOST_CHECK_THROW(s.insert(s.end(), T(0)), std::bad_alloc);
+ //BOOST_CHECK_THROW(s.insert(s.end(), 5u, T(0)), std::bad_alloc);
+ //BOOST_CHECK_THROW(s.insert(s.end(), v.begin(), v.end()), std::bad_alloc);
+ //BOOST_CHECK_THROW(s.assign(v.begin(), v.end()), std::bad_alloc);
+ //BOOST_CHECK_THROW(s.assign(5u, T(0)), std::bad_alloc);
+ //try{
+ // varray<T, 0, bad_alloc_strategy<T> > s2(v.begin(), v.end());
+ // BOOST_CHECK(false);
+ //}catch(std::bad_alloc &){}
+ //try{
+ // varray<T, 0, bad_alloc_strategy<T> > s1(5u, T(0));
+ // BOOST_CHECK(false);
+ //}catch(std::bad_alloc &){}
+#endif // BOOST_NO_EXCEPTIONS
+}
+
+template <typename T, size_t N>
+void test_exceptions_nd()
+{
+ varray<T, N> v(N, T(0));
+ //varray<T, N/2, bad_alloc_strategy<T> > s(N/2, T(0));
+ varray<T, N/2> s(N/2, T(0));
+
+#ifndef BOOST_NO_EXCEPTIONS
+ /*BOOST_CHECK_THROW(s.resize(N, T(0)), std::bad_alloc);
+ BOOST_CHECK_THROW(s.push_back(T(0)), std::bad_alloc);
+ BOOST_CHECK_THROW(s.insert(s.end(), T(0)), std::bad_alloc);
+ BOOST_CHECK_THROW(s.insert(s.end(), N, T(0)), std::bad_alloc);
+ BOOST_CHECK_THROW(s.insert(s.end(), v.begin(), v.end()), std::bad_alloc);
+ BOOST_CHECK_THROW(s.assign(v.begin(), v.end()), std::bad_alloc);
+ BOOST_CHECK_THROW(s.assign(N, T(0)), std::bad_alloc);
+ try{
+ container_detail::varray<T, N/2, bad_alloc_strategy<T> > s2(v.begin(), v.end());
+ BOOST_CHECK(false);
+ }catch(std::bad_alloc &){}
+ try{
+ container_detail::varray<T, N/2, bad_alloc_strategy<T> > s1(N, T(0));
+ BOOST_CHECK(false);
+ }catch(std::bad_alloc &){}*/
+#endif // BOOST_NO_EXCEPTIONS
+}
+
+template <typename T, size_t N>
+void test_swap_and_move_nd()
+{
+ {
+ varray<T, N> v1, v2, v3, v4;
+ varray<T, N> s1, s2;
+ //varray<T, N, bad_alloc_strategy<T> > s4;
+ varray<T, N> s4;
+
+ for (size_t i = 0 ; i < N ; ++i )
+ {
+ v1.push_back(T(i));
+ v2.push_back(T(i));
+ v3.push_back(T(i));
+ v4.push_back(T(i));
+ }
+ for (size_t i = 0 ; i < N/2 ; ++i )
+ {
+ s1.push_back(T(100 + i));
+ s2.push_back(T(100 + i));
+ s4.push_back(T(100 + i));
+ }
+
+ s1.swap(v1);
+ s2 = boost::move(v2);
+ varray<T, N> s3(boost::move(v3));
+ s4.swap(v4);
+
+ BOOST_CHECK(v1.size() == N/2);
+ BOOST_CHECK(s1.size() == N);
+ BOOST_CHECK(v2.size() == N); // objects aren't destroyed
+ BOOST_CHECK(s2.size() == N);
+ BOOST_CHECK(v3.size() == N); // objects aren't destroyed
+ BOOST_CHECK(s3.size() == N);
+ BOOST_CHECK(v4.size() == N/2);
+ BOOST_CHECK(s4.size() == N);
+ for (size_t i = 0 ; i < N/2 ; ++i )
+ {
+ BOOST_CHECK(v1[i] == T(100 + i));
+ BOOST_CHECK(v4[i] == T(100 + i));
+ }
+ for (size_t i = 0 ; i < N ; ++i )
+ {
+ BOOST_CHECK(s1[i] == T(i));
+ BOOST_CHECK(s2[i] == T(i));
+ BOOST_CHECK(s3[i] == T(i));
+ BOOST_CHECK(s4[i] == T(i));
+ }
+ }
+ {
+ varray<T, N> v1, v2, v3;
+ varray<T, N/2> s1, s2;
+
+ for (size_t i = 0 ; i < N/2 ; ++i )
+ {
+ v1.push_back(T(i));
+ v2.push_back(T(i));
+ v3.push_back(T(i));
+ }
+ for (size_t i = 0 ; i < N/3 ; ++i )
+ {
+ s1.push_back(T(100 + i));
+ s2.push_back(T(100 + i));
+ }
+
+ s1.swap(v1);
+ s2 = boost::move(v2);
+ varray<T, N/2> s3(boost::move(v3));
+
+ BOOST_CHECK(v1.size() == N/3);
+ BOOST_CHECK(s1.size() == N/2);
+ BOOST_CHECK(v2.size() == N/2); // objects aren't destroyed
+ BOOST_CHECK(s2.size() == N/2);
+ BOOST_CHECK(v3.size() == N/2); // objects aren't destroyed
+ BOOST_CHECK(s3.size() == N/2);
+ for (size_t i = 0 ; i < N/3 ; ++i )
+ BOOST_CHECK(v1[i] == T(100 + i));
+ for (size_t i = 0 ; i < N/2 ; ++i )
+ {
+ BOOST_CHECK(s1[i] == T(i));
+ BOOST_CHECK(s2[i] == T(i));
+ BOOST_CHECK(s3[i] == T(i));
+ }
+ }
+ {
+ varray<T, N> v(N, T(0));
+ //varray<T, N/2, bad_alloc_strategy<T> > s(N/2, T(1));
+ varray<T, N/2> s(N/2, T(1));
+#ifndef BOOST_NO_EXCEPTIONS
+ //BOOST_CHECK_THROW(s.swap(v), std::bad_alloc);
+ //v.resize(N, T(0));
+ //BOOST_CHECK_THROW(s = boost::move(v), std::bad_alloc);
+ //v.resize(N, T(0));
+ //try {
+ // varray<T, N/2, bad_alloc_strategy<T> > s2(boost::move(v));
+ // BOOST_CHECK(false);
+ //} catch (std::bad_alloc &) {}
+#endif // BOOST_NO_EXCEPTIONS
+ }
+}
+
+template <typename T, size_t N>
+void test_emplace_0p()
+{
+ //emplace_back()
+ {
+ //varray<T, N, bad_alloc_strategy<T> > v;
+ varray<T, N> v;
+
+ for (int i = 0 ; i < int(N) ; ++i )
+ v.emplace_back();
+ BOOST_CHECK(v.size() == N);
+#ifndef BOOST_NO_EXCEPTIONS
+ //BOOST_CHECK_THROW(v.emplace_back(), std::bad_alloc);
+#endif
+ }
+}
+
+template <typename T, size_t N>
+void test_emplace_2p()
+{
+ //emplace_back(pos, int, int)
+ {
+ //varray<T, N, bad_alloc_strategy<T> > v;
+ varray<T, N> v;
+
+ for (int i = 0 ; i < int(N) ; ++i )
+ v.emplace_back(i, 100 + i);
+ BOOST_CHECK(v.size() == N);
+#ifndef BOOST_NO_EXCEPTIONS
+ //BOOST_CHECK_THROW(v.emplace_back(N, 100 + N), std::bad_alloc);
+#endif
+ BOOST_CHECK(v.size() == N);
+ for (int i = 0 ; i < int(N) ; ++i )
+ BOOST_CHECK(v[i] == T(i, 100 + i));
+ }
+
+ // emplace(pos, int, int)
+ {
+ //typedef typename varray<T, N, bad_alloc_strategy<T> >::iterator It;
+ typedef typename varray<T, N>::iterator It;
+
+ int h = N / 2;
+
+ //varray<T, N, bad_alloc_strategy<T> > v;
+ varray<T, N> v;
+ for ( int i = 0 ; i < h ; ++i )
+ v.emplace_back(i, 100 + i);
+
+ for ( int i = 0 ; i <= h ; ++i )
+ {
+ //varray<T, N, bad_alloc_strategy<T> > vv(v);
+ varray<T, N> vv(v);
+ It it = vv.emplace(vv.begin() + i, i+100, i+200);
+ BOOST_CHECK(vv.begin() + i == it);
+ BOOST_CHECK(vv.size() == size_t(h+1));
+ for ( int j = 0 ; j < i ; ++j )
+ BOOST_CHECK(vv[j] == T(j, j+100));
+ BOOST_CHECK(vv[i] == T(i+100, i+200));
+ for ( int j = 0 ; j < h-i ; ++j )
+ BOOST_CHECK(vv[j+i+1] == T(j+i, j+i+100));
+ }
+ }
+}
+
+template <typename T, size_t N>
+void test_sv_elem(T const& t)
+{
+ //typedef varray<T, N, bad_alloc_strategy<T> > V;
+ typedef varray<T, N> V;
+
+ //varray<V, N, bad_alloc_strategy<V> > v;
+ varray<V, N> v;
+
+ v.push_back(V(N/2, t));
+ V vvv(N/2, t);
+ v.push_back(boost::move(vvv));
+ v.insert(v.begin(), V(N/2, t));
+ v.insert(v.end(), V(N/2, t));
+ v.emplace_back(N/2, t);
+}
+
+int test_main(int, char* [])
+{
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_ctor_ndc<size_t, 10>();
+ test_ctor_ndc<value_ndc, 10>();
+ test_ctor_ndc<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+ test_ctor_ndc<shptr_value, 10>();
+ test_ctor_ndc<copy_movable, 10>();
+
+ test_ctor_nc<size_t, 10>(5);
+ test_ctor_nc<value_nc, 10>(5);
+ test_ctor_nc<counting_value, 10>(5);
+ BOOST_CHECK(counting_value::count() == 0);
+ test_ctor_nc<shptr_value, 10>(5);
+ test_ctor_nc<copy_movable, 10>(5);
+
+ test_ctor_nd<size_t, 10>(5, 1);
+ test_ctor_nd<value_nd, 10>(5, value_nd(1));
+ test_ctor_nd<counting_value, 10>(5, counting_value(1));
+ BOOST_CHECK(counting_value::count() == 0);
+ test_ctor_nd<shptr_value, 10>(5, shptr_value(1));
+ test_ctor_nd<copy_movable, 10>(5, produce());
+
+ test_resize_nc<size_t, 10>(5);
+ test_resize_nc<value_nc, 10>(5);
+ test_resize_nc<counting_value, 10>(5);
+ BOOST_CHECK(counting_value::count() == 0);
+ test_resize_nc<shptr_value, 10>(5);
+ test_resize_nc<copy_movable, 10>(5);
+
+ test_resize_nd<size_t, 10>(5, 1);
+ test_resize_nd<value_nd, 10>(5, value_nd(1));
+ test_resize_nd<counting_value, 10>(5, counting_value(1));
+ BOOST_CHECK(counting_value::count() == 0);
+ test_resize_nd<shptr_value, 10>(5, shptr_value(1));
+ test_resize_nd<copy_movable, 10>(5, produce());
+
+ test_push_back_nd<size_t, 10>();
+ test_push_back_nd<value_nd, 10>();
+ test_push_back_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+ test_push_back_nd<shptr_value, 10>();
+ test_push_back_nd<copy_movable, 10>();
+
+ test_pop_back_nd<size_t, 10>();
+ test_pop_back_nd<value_nd, 10>();
+ test_pop_back_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+ test_pop_back_nd<shptr_value, 10>();
+ test_pop_back_nd<copy_movable, 10>();
+
+ test_copy_and_assign_nd<size_t, 10>(1);
+ test_copy_and_assign_nd<value_nd, 10>(value_nd(1));
+ test_copy_and_assign_nd<counting_value, 10>(counting_value(1));
+ BOOST_CHECK(counting_value::count() == 0);
+ test_copy_and_assign_nd<shptr_value, 10>(shptr_value(1));
+ test_copy_and_assign_nd<copy_movable, 10>(produce());
+
+ test_iterators_nd<size_t, 10>();
+ test_iterators_nd<value_nd, 10>();
+ test_iterators_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+ test_iterators_nd<shptr_value, 10>();
+ test_iterators_nd<copy_movable, 10>();
+
+ test_erase_nd<size_t, 10>();
+ test_erase_nd<value_nd, 10>();
+ test_erase_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+ test_erase_nd<shptr_value, 10>();
+ test_erase_nd<copy_movable, 10>();
+
+ test_insert_nd<size_t, 10>(50);
+ test_insert_nd<value_nd, 10>(value_nd(50));
+ test_insert_nd<counting_value, 10>(counting_value(50));
+ BOOST_CHECK(counting_value::count() == 0);
+ test_insert_nd<shptr_value, 10>(shptr_value(50));
+ test_insert_nd<copy_movable, 10>(produce());
+
+ test_capacity_0_nd<size_t>();
+ test_capacity_0_nd<value_nd>();
+ test_capacity_0_nd<counting_value>();
+ BOOST_CHECK(counting_value::count() == 0);
+ test_capacity_0_nd<shptr_value>();
+ test_capacity_0_nd<copy_movable>();
+
+ test_exceptions_nd<size_t, 10>();
+ test_exceptions_nd<value_nd, 10>();
+ test_exceptions_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+ test_exceptions_nd<shptr_value, 10>();
+ test_exceptions_nd<copy_movable, 10>();
+
+ test_swap_and_move_nd<size_t, 10>();
+ test_swap_and_move_nd<value_nd, 10>();
+ test_swap_and_move_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+ test_swap_and_move_nd<shptr_value, 10>();
+ test_swap_and_move_nd<copy_movable, 10>();
+
+ test_emplace_0p<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_emplace_2p<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_sv_elem<size_t, 10>(50);
+ test_sv_elem<value_nd, 10>(value_nd(50));
+ test_sv_elem<counting_value, 10>(counting_value(50));
+ BOOST_CHECK(counting_value::count() == 0);
+ test_sv_elem<shptr_value, 10>(shptr_value(50));
+ test_sv_elem<copy_movable, 10>(copy_movable(50));
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/varray_old.cpp b/libs/geometry/index/test/varray_old.cpp
new file mode 100644
index 000000000..37840f96f
--- /dev/null
+++ b/libs/geometry/index/test/varray_old.cpp
@@ -0,0 +1,490 @@
+// Boost.Geometry Index
+// Unit Test
+
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+// 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)
+
+#include <boost/test/included/test_exec_monitor.hpp>
+#include <boost/test/impl/execution_monitor.ipp>
+
+#include <boost/geometry/index/detail/varray.hpp>
+
+using namespace boost::geometry::index::detail;
+
+class value_ndc
+{
+public:
+ explicit value_ndc(int a) : aa(a) {}
+ ~value_ndc() {}
+ bool operator==(value_ndc const& v) const { return aa == v.aa; }
+private:
+ value_ndc(value_ndc const&) {}
+ value_ndc & operator=(value_ndc const&) { return *this; }
+ int aa;
+};
+
+class value_nd
+{
+public:
+ explicit value_nd(int a) : aa(a) {}
+ ~value_nd() {}
+ bool operator==(value_nd const& v) const { return aa == v.aa; }
+private:
+ int aa;
+};
+
+class value_nc
+{
+public:
+ explicit value_nc(int a = 0) : aa(a) {}
+ ~value_nc() {}
+ bool operator==(value_nc const& v) const { return aa == v.aa; }
+private:
+ value_nc(value_nc const&) {}
+ value_nc & operator=(value_ndc const&) { return *this; }
+ int aa;
+};
+
+class counting_value
+{
+public:
+ explicit counting_value(int a = 0) : aa(a) { ++c(); }
+ counting_value(counting_value const& v) : aa(v.aa) { ++c(); }
+ counting_value & operator=(counting_value const& v) { aa = v.aa; return *this; }
+ ~counting_value() { --c(); }
+ bool operator==(counting_value const& v) const { return aa == v.aa; }
+ static size_t count() { return c(); }
+private:
+ static size_t & c() { static size_t co = 0; return co; }
+ int aa;
+};
+
+template <typename T, size_t N>
+void test_ctor_ndc()
+{
+ varray<T, N> s;
+ BOOST_CHECK(s.size() == 0);
+ BOOST_CHECK(s.capacity() == N);
+ BOOST_CHECK_THROW( s.at(0), std::out_of_range );
+}
+
+template <typename T, size_t N>
+void test_ctor_nc(size_t n)
+{
+ varray<T, N> s(n);
+ BOOST_CHECK(s.size() == n);
+ BOOST_CHECK(s.capacity() == N);
+ BOOST_CHECK_THROW( s.at(n), std::out_of_range );
+ if ( !boost::has_trivial_constructor<T>::value )
+ {
+ for ( size_t i = 0 ; i < n ; ++i )
+ BOOST_CHECK(T() == s[i]);
+ }
+}
+
+template <typename T, size_t N>
+void test_ctor_nd(size_t n, T const& v)
+{
+ varray<T, N> s(n, v);
+ BOOST_CHECK(s.size() == n);
+ BOOST_CHECK(s.capacity() == N);
+ BOOST_CHECK_THROW( s.at(n), std::out_of_range );
+ if ( 1 < n )
+ {
+ BOOST_CHECK(v == s[0]);
+ BOOST_CHECK(v == s.at(0));
+ BOOST_CHECK(v == s[1]);
+ BOOST_CHECK(v == s.at(1));
+ s[0] = T(10);
+ BOOST_CHECK(T(10) == s[0]);
+ BOOST_CHECK(T(10) == s.at(0));
+ s.at(1) = T(20);
+ BOOST_CHECK(T(20) == s[1]);
+ BOOST_CHECK(T(20) == s.at(1));
+ }
+}
+
+template <typename T, size_t N>
+void test_resize_nc(size_t n)
+{
+ varray<T, N> s;
+
+ s.resize(n);
+ BOOST_CHECK(s.size() == n);
+ BOOST_CHECK(s.capacity() == N);
+ BOOST_CHECK_THROW( s.at(n), std::out_of_range );
+
+ if ( !boost::has_trivial_constructor<T>::value )
+ {
+ for ( size_t i = 0 ; i < n ; ++i )
+ BOOST_CHECK(T() == s[i]);
+ }
+}
+
+template <typename T, size_t N>
+void test_resize_nd(size_t n, T const& v)
+{
+ varray<T, N> s;
+
+ s.resize(n, v);
+ BOOST_CHECK(s.size() == n);
+ BOOST_CHECK(s.capacity() == N);
+ BOOST_CHECK_THROW( s.at(n), std::out_of_range );
+ if ( 1 < n )
+ {
+ BOOST_CHECK(v == s[0]);
+ BOOST_CHECK(v == s.at(0));
+ BOOST_CHECK(v == s[1]);
+ BOOST_CHECK(v == s.at(1));
+ s[0] = T(10);
+ BOOST_CHECK(T(10) == s[0]);
+ BOOST_CHECK(T(10) == s.at(0));
+ s.at(1) = T(20);
+ BOOST_CHECK(T(20) == s[1]);
+ BOOST_CHECK(T(20) == s.at(1));
+ }
+}
+
+template <typename T, size_t N>
+void test_push_back_nd()
+{
+ varray<T, N> s;
+
+ BOOST_CHECK(s.size() == 0);
+ BOOST_CHECK_THROW( s.at(0), std::out_of_range );
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ {
+ s.push_back(T(i));
+ BOOST_CHECK(s.size() == i + 1);
+ BOOST_CHECK_THROW( s.at(i + 1), std::out_of_range );
+ BOOST_CHECK(T(i) == s.at(i));
+ BOOST_CHECK(T(i) == s[i]);
+ BOOST_CHECK(T(i) == s.back());
+ BOOST_CHECK(T(0) == s.front());
+ }
+}
+
+template <typename T, size_t N>
+void test_pop_back_nd()
+{
+ varray<T, N> s;
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ s.push_back(T(i));
+
+ for ( size_t i = N ; i > 1 ; --i )
+ {
+ s.pop_back();
+ BOOST_CHECK(s.size() == i - 1);
+ BOOST_CHECK_THROW( s.at(i - 1), std::out_of_range );
+ BOOST_CHECK(T(i - 2) == s.at(i - 2));
+ BOOST_CHECK(T(i - 2) == s[i - 2]);
+ BOOST_CHECK(T(i - 2) == s.back());
+ BOOST_CHECK(T(0) == s.front());
+ }
+}
+
+template <typename It1, typename It2>
+void test_compare_ranges(It1 first1, It1 last1, It2 first2, It2 last2)
+{
+ BOOST_CHECK(std::distance(first1, last1) == std::distance(first2, last2));
+ for ( ; first1 != last1 && first2 != last2 ; ++first1, ++first2 )
+ BOOST_CHECK(*first1 == *first2);
+}
+
+template <typename T, size_t N>
+void test_copy_and_assign_nd(T const& val)
+{
+ varray<T, N> s;
+ std::vector<T> v;
+ std::list<T> l;
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ {
+ s.push_back(T(i));
+ v.push_back(T(i));
+ l.push_back(T(i));
+ }
+ // copy ctor
+ {
+ varray<T, N> s1(s);
+ BOOST_CHECK(s.size() == s1.size());
+ test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+ }
+ // copy assignment
+ {
+ varray<T, N> s1;
+ BOOST_CHECK(0 == s1.size());
+ s1 = s;
+ BOOST_CHECK(s.size() == s1.size());
+ test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+ }
+ // ctor(Iter, Iter)
+ {
+ varray<T, N> s1(s.begin(), s.end());
+ BOOST_CHECK(s.size() == s1.size());
+ test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+ }
+ {
+ varray<T, N> s1(v.begin(), v.end());
+ BOOST_CHECK(v.size() == s1.size());
+ test_compare_ranges(v.begin(), v.end(), s1.begin(), s1.end());
+ }
+ {
+ varray<T, N> s1(l.begin(), l.end());
+ BOOST_CHECK(l.size() == s1.size());
+ test_compare_ranges(l.begin(), l.end(), s1.begin(), s1.end());
+ }
+ // assign(Iter, Iter)
+ {
+ varray<T, N> s1;
+ BOOST_CHECK(0 == s1.size());
+ s1.assign(s.begin(), s.end());
+ BOOST_CHECK(s.size() == s1.size());
+ test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+ }
+ {
+ varray<T, N> s1;
+ BOOST_CHECK(0 == s1.size());
+ s1.assign(v.begin(), v.end());
+ BOOST_CHECK(v.size() == s1.size());
+ test_compare_ranges(v.begin(), v.end(), s1.begin(), s1.end());
+ }
+ {
+ varray<T, N> s1;
+ BOOST_CHECK(0 == s1.size());
+ s1.assign(l.begin(), l.end());
+ BOOST_CHECK(l.size() == s1.size());
+ test_compare_ranges(l.begin(), l.end(), s1.begin(), s1.end());
+ }
+ // assign(N, V)
+ {
+ varray<T, N> s1(s);
+ test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+ std::vector<T> a(N, val);
+ s1.assign(N, val);
+ test_compare_ranges(a.begin(), a.end(), s1.begin(), s1.end());
+ }
+}
+
+template <typename T, size_t N>
+void test_iterators_nd()
+{
+ varray<T, N> s;
+ std::vector<T> v;
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ {
+ s.push_back(T(i));
+ v.push_back(T(i));
+ }
+
+ test_compare_ranges(s.begin(), s.end(), v.begin(), v.end());
+ test_compare_ranges(s.rbegin(), s.rend(), v.rbegin(), v.rend());
+
+ s.assign(v.rbegin(), v.rend());
+
+ test_compare_ranges(s.begin(), s.end(), v.rbegin(), v.rend());
+ test_compare_ranges(s.rbegin(), s.rend(), v.begin(), v.end());
+}
+
+template <typename T, size_t N>
+void test_erase_nd()
+{
+ varray<T, N> s;
+
+ for ( size_t i = 0 ; i < N ; ++i )
+ s.push_back(T(i));
+
+ // erase(pos)
+ {
+ for ( size_t i = 0 ; i < N ; ++i )
+ {
+ varray<T, N> s1(s);
+ s1.erase(s1.begin() + i);
+ BOOST_CHECK(s1.size() == N - 1);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = i+1 ; j < N ; ++j )
+ BOOST_CHECK(s1[j-1] == T(j));
+ }
+ }
+ // erase(first, last)
+ {
+ size_t n = N/3;
+ for ( size_t i = 0 ; i <= N ; ++i )
+ {
+ varray<T, N> s1(s);
+ size_t removed = i + n < N ? n : N - i;
+ s1.erase(s1.begin() + i, s1.begin() + i + removed);
+ BOOST_CHECK(s1.size() == N - removed);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = i+n ; j < N ; ++j )
+ BOOST_CHECK(s1[j-n] == T(j));
+ }
+ }
+}
+
+template <typename T, size_t N>
+void test_insert_nd(T const& val)
+{
+ size_t h = N/2;
+
+ varray<T, N> s, ss;
+ std::vector<T> v;
+ std::list<T> l;
+
+ for ( size_t i = 0 ; i < h ; ++i )
+ {
+ s.push_back(T(i));
+ ss.push_back(T(100 + i));
+ v.push_back(T(100 + i));
+ l.push_back(T(100 + i));
+ }
+
+ // insert(pos, val)
+ {
+ for ( size_t i = 0 ; i <= h ; ++i )
+ {
+ varray<T, N> s1(s);
+ s1.insert(s1.begin() + i, val);
+ BOOST_CHECK(s1.size() == h+1);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ BOOST_CHECK(s1[i] == val);
+ for ( size_t j = 0 ; j < h-i ; ++j )
+ BOOST_CHECK(s1[j+i+1] == T(j+i));
+ }
+ }
+ // insert(pos, n, val)
+ {
+ size_t n = size_t(h/1.5f);
+ for ( size_t i = 0 ; i <= h ; ++i )
+ {
+ varray<T, N> s1(s);
+ s1.insert(s1.begin() + i, n, val);
+ BOOST_CHECK(s1.size() == h+n);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = 0 ; j < n ; ++j )
+ BOOST_CHECK(s1[j+i] == val);
+ for ( size_t j = 0 ; j < h-i ; ++j )
+ BOOST_CHECK(s1[j+i+n] == T(j+i));
+ }
+ }
+ // insert(pos, first, last)
+ {
+ size_t n = size_t(h/1.5f);
+ for ( size_t i = 0 ; i <= h ; ++i )
+ {
+ varray<T, N> s1(s);
+ s1.insert(s1.begin() + i, ss.begin(), ss.begin() + n);
+ BOOST_CHECK(s1.size() == h+n);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = 0 ; j < n ; ++j )
+ BOOST_CHECK(s1[j+i] == T(100 + j));
+ for ( size_t j = 0 ; j < h-i ; ++j )
+ BOOST_CHECK(s1[j+i+n] == T(j+i));
+ }
+ }
+ {
+ size_t n = size_t(h/1.5f);
+ for ( size_t i = 0 ; i <= h ; ++i )
+ {
+ varray<T, N> s1(s);
+ s1.insert(s1.begin() + i, v.begin(), v.begin() + n);
+ BOOST_CHECK(s1.size() == h+n);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = 0 ; j < n ; ++j )
+ BOOST_CHECK(s1[j+i] == T(100 + j));
+ for ( size_t j = 0 ; j < h-i ; ++j )
+ BOOST_CHECK(s1[j+i+n] == T(j+i));
+ }
+ }
+ {
+ size_t n = size_t(h/1.5f);
+ for ( size_t i = 0 ; i <= h ; ++i )
+ {
+ varray<T, N> s1(s);
+ typename std::list<T>::iterator it = l.begin();
+ std::advance(it, n);
+ s1.insert(s1.begin() + i, l.begin(), it);
+ BOOST_CHECK(s1.size() == h+n);
+ for ( size_t j = 0 ; j < i ; ++j )
+ BOOST_CHECK(s1[j] == T(j));
+ for ( size_t j = 0 ; j < n ; ++j )
+ BOOST_CHECK(s1[j+i] == T(100 + j));
+ for ( size_t j = 0 ; j < h-i ; ++j )
+ BOOST_CHECK(s1[j+i+n] == T(j+i));
+ }
+ }
+}
+
+int test_main(int, char* [])
+{
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_ctor_ndc<int, 10>();
+ test_ctor_ndc<value_ndc, 10>();
+ test_ctor_ndc<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_ctor_nc<int, 10>(5);
+ test_ctor_nc<value_nc, 10>(5);
+ test_ctor_nc<counting_value, 10>(5);
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_ctor_nd<int, 10>(5, 1);
+ test_ctor_nd<value_nd, 10>(5, value_nd(1));
+ test_ctor_nd<counting_value, 10>(5, counting_value(1));
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_resize_nc<int, 10>(5);
+ test_resize_nc<value_nc, 10>(5);
+ test_resize_nc<counting_value, 10>(5);
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_resize_nd<int, 10>(5, 1);
+ test_resize_nd<value_nd, 10>(5, value_nd(1));
+ test_resize_nd<counting_value, 10>(5, counting_value(1));
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_push_back_nd<int, 10>();
+ test_push_back_nd<value_nd, 10>();
+ test_push_back_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_pop_back_nd<int, 10>();
+ test_pop_back_nd<value_nd, 10>();
+ test_pop_back_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_copy_and_assign_nd<int, 10>(1);
+ test_copy_and_assign_nd<value_nd, 10>(value_nd(1));
+ test_copy_and_assign_nd<counting_value, 10>(counting_value(1));
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_iterators_nd<int, 10>();
+ test_iterators_nd<value_nd, 10>();
+ test_iterators_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_erase_nd<int, 10>();
+ test_erase_nd<value_nd, 10>();
+ test_erase_nd<counting_value, 10>();
+ BOOST_CHECK(counting_value::count() == 0);
+
+ test_insert_nd<int, 10>(50);
+ test_insert_nd<value_nd, 10>(value_nd(50));
+ test_insert_nd<counting_value, 10>(counting_value(50));
+ BOOST_CHECK(counting_value::count() == 0);
+
+ return 0;
+}
diff --git a/libs/geometry/index/test/varray_test.hpp b/libs/geometry/index/test/varray_test.hpp
new file mode 100644
index 000000000..4136db7fc
--- /dev/null
+++ b/libs/geometry/index/test/varray_test.hpp
@@ -0,0 +1,97 @@
+// Boost.Geometry.Index varray
+// Unit Test
+
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2012-2013 Andrew Hundt.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_INDEX_TEST_VARRAY_TEST_HPP
+#define BOOST_GEOMETRY_INDEX_TEST_VARRAY_TEST_HPP
+
+#include <boost/geometry/index/detail/varray.hpp>
+
+#include <boost/shared_ptr.hpp>
+#include "movable.hpp"
+
+class value_ndc
+{
+public:
+ explicit value_ndc(size_t a) : aa(a) {}
+ ~value_ndc() {}
+ bool operator==(value_ndc const& v) const { return aa == v.aa; }
+ bool operator<(value_ndc const& v) const { return aa < v.aa; }
+private:
+ value_ndc(value_ndc const&) {}
+ value_ndc & operator=(value_ndc const&) { return *this; }
+ size_t aa;
+};
+
+class value_nd
+{
+public:
+ explicit value_nd(size_t a) : aa(a) {}
+ ~value_nd() {}
+ bool operator==(value_nd const& v) const { return aa == v.aa; }
+ bool operator<(value_nd const& v) const { return aa < v.aa; }
+private:
+ size_t aa;
+};
+
+class value_nc
+{
+public:
+ explicit value_nc(size_t a = 0) : aa(a) {}
+ ~value_nc() {}
+ bool operator==(value_nc const& v) const { return aa == v.aa; }
+ bool operator<(value_nc const& v) const { return aa < v.aa; }
+private:
+ value_nc(value_nc const&) {}
+ value_nc & operator=(value_ndc const&) { return *this; }
+ size_t aa;
+};
+
+class counting_value
+{
+ BOOST_COPYABLE_AND_MOVABLE(counting_value)
+
+public:
+ explicit counting_value(size_t a = 0, size_t b = 0) : aa(a), bb(b) { ++c(); }
+ counting_value(counting_value const& v) : aa(v.aa), bb(v.bb) { ++c(); }
+ counting_value(BOOST_RV_REF(counting_value) p) : aa(p.aa), bb(p.bb) { p.aa = 0; p.bb = 0; ++c(); } // Move constructor
+ counting_value& operator=(BOOST_RV_REF(counting_value) p) { aa = p.aa; p.aa = 0; bb = p.bb; p.bb = 0; return *this; } // Move assignment
+ counting_value& operator=(BOOST_COPY_ASSIGN_REF(counting_value) p) { aa = p.aa; bb = p.bb; return *this; } // Copy assignment
+ ~counting_value() { --c(); }
+ bool operator==(counting_value const& v) const { return aa == v.aa && bb == v.bb; }
+ bool operator<(counting_value const& v) const { return aa < v.aa || ( aa == v.aa && bb < v.bb ); }
+ static size_t count() { return c(); }
+
+private:
+ static size_t & c() { static size_t co = 0; return co; }
+ size_t aa, bb;
+};
+
+namespace boost {
+
+template <>
+struct has_nothrow_move<counting_value>
+{
+ static const bool value = true;
+};
+
+}
+
+class shptr_value
+{
+ typedef boost::shared_ptr<size_t> Ptr;
+public:
+ explicit shptr_value(size_t a = 0) : m_ptr(new size_t(a)) {}
+ bool operator==(shptr_value const& v) const { return *m_ptr == *(v.m_ptr); }
+ bool operator<(shptr_value const& v) const { return *m_ptr < *(v.m_ptr); }
+private:
+ boost::shared_ptr<size_t> m_ptr;
+};
+
+#endif // BOOST_GEOMETRY_INDEX_TEST_VARRAY_TEST_HPP
diff --git a/libs/geometry/test/Jamfile.v2 b/libs/geometry/test/Jamfile.v2
new file mode 100644
index 000000000..d91542951
--- /dev/null
+++ b/libs/geometry/test/Jamfile.v2
@@ -0,0 +1,32 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+import testing ;
+
+project boost-geometry-test
+ :
+ requirements
+ <include>.
+ <include>../../../boost/geometry/extensions/contrib/ttmath
+ <toolset>msvc:<asynch-exceptions>on
+ ;
+
+build-project core ;
+build-project point_concept ;
+build-project geometries ;
+build-project arithmetic ;
+build-project algorithms ;
+build-project iterators ;
+build-project strategies ;
+build-project policies ;
+build-project io ;
+build-project util ;
+build-project views ;
+build-project multi ;
diff --git a/libs/geometry/test/algorithms/Jamfile.v2 b/libs/geometry/test/algorithms/Jamfile.v2
new file mode 100644
index 000000000..13811d303
--- /dev/null
+++ b/libs/geometry/test/algorithms/Jamfile.v2
@@ -0,0 +1,50 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-algorithms
+ :
+ [ run append.cpp ]
+ [ run area.cpp ]
+ [ run assign.cpp ]
+ [ run buffer.cpp ]
+ [ run centroid.cpp ]
+ [ run comparable_distance.cpp ]
+ [ run convex_hull.cpp ]
+ [ run correct.cpp ]
+ [ run convert.cpp ]
+ [ run covered_by.cpp ]
+ [ run difference.cpp ]
+ [ run disjoint.cpp ]
+ [ run distance.cpp ]
+ [ run envelope.cpp ]
+ [ run equals.cpp ]
+ [ run expand.cpp ]
+ [ run for_each.cpp ]
+ [ run intersection.cpp ]
+ [ run intersects.cpp ]
+ [ run length.cpp ]
+ [ run make.cpp ]
+ [ run overlaps.cpp ]
+ [ run perimeter.cpp ]
+ [ run reverse.cpp ]
+ [ run simplify.cpp ]
+ [ run touches.cpp ]
+ [ run transform.cpp ]
+ [ run union.cpp ]
+ [ run unique.cpp ]
+ [ run within.cpp ]
+ ;
+
+build-project overlay
+ ;
+
+build-project detail
+ ;
+
diff --git a/libs/geometry/test/algorithms/algorithms_tests.sln b/libs/geometry/test/algorithms/algorithms_tests.sln
new file mode 100644
index 000000000..96ba06492
--- /dev/null
+++ b/libs/geometry/test/algorithms/algorithms_tests.sln
@@ -0,0 +1,193 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "append", "append.vcproj", "{774F6471-D8A0-481C-9B0A-4903EED25C70}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "area", "area.vcproj", "{E86E6687-AC05-4DBE-A8BD-C47BCB6AEE90}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assign", "assign.vcproj", "{94BC6547-67C1-44DB-903D-526537A91E23}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "expand", "expand.vcproj", "{5330DAB1-DF27-44FC-971B-3C5094F82FA3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull", "convex_hull.vcproj", "{0AFF7A85-63A7-4178-92A5-CC692B09F5B9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "distance", "distance.vcproj", "{347D08A4-22E9-45B1-A55B-AE84AA2EAA53}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "envelope", "envelope.vcproj", "{26EFCAF4-7907-4A47-ACBF-6CAB738CDCEB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make", "make.vcproj", "{BCD17F3E-8DF2-4B00-A75E-BF7372D2873B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simplify", "simplify.vcproj", "{B1760CB8-553B-42AB-B54E-3D0320FF252F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "transform", "transform.vcproj", "{41413E56-08DA-4592-94D2-5311FE90C62B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buffer", "buffer.vcproj", "{C66E1F6F-84F6-44E2-B5E8-2B127065BE31}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "for_each", "for_each.vcproj", "{774F6471-D8A0-481C-9B0A-4903EAD25B70}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "disjoint", "disjoint.vcproj", "{96D51D96-B35F-47C8-864D-371DF2280686}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "centroid", "centroid.vcproj", "{1E90E5BC-1280-4A6A-B197-132ABBF97EB9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intersection", "intersection.vcproj", "{2FD8EDAB-B3C3-4654-B6C3-B25C12A063D3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "correct", "correct.vcproj", "{71582BDA-D4DF-400D-8630-378BE102C038}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "within", "within.vcproj", "{C7BCD670-543D-4B29-B2D6-F3169949F79D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "length", "length.vcproj", "{C4D75B1E-34D5-4A98-8535-A9535BE949E4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "perimeter", "perimeter.vcproj", "{EFC23FC0-86D3-4C81-A218-26F0D5A4D50B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "union", "union.vcproj", "{CA5EE1D6-CB4B-4A15-85C5-31D5C00289C4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "overlaps", "overlaps.vcproj", "{30C37854-9ED6-4C1E-97FB-BF8637BD5811}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intersects", "intersects.vcproj", "{B1A97F62-85CD-4239-BB56-619988B08260}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "equals", "equals.vcproj", "{E54F493F-BF9D-4A6D-AE2F-5F97AC95251A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "difference", "difference.vcproj", "{4EBFC27A-75C9-43A1-8DDA-AFEB45C564DC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unique", "unique.vcproj", "{104D31F9-49BA-4A1A-B84F-0A3AEE3C4DB2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reverse", "reverse.vcproj", "{14B5DFC5-D511-4D8C-A231-EE90A05687E1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comparable_distance", "comparable_distance.vcproj", "{F11970B5-BE16-4FF5-9780-4C15082B76A0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convert", "convert.vcproj", "{FABF1AA7-F695-49F8-92F6-AB6C4B0C088A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "covered_by", "covered_by.vcproj", "{5ABF0B56-F9F1-4D93-B15A-E3972F45D97B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "touches", "touches.vcproj", "{8359726E-9F03-4300-8F63-1FEAC84251D0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {774F6471-D8A0-481C-9B0A-4903EED25C70}.Debug|Win32.ActiveCfg = Debug|Win32
+ {774F6471-D8A0-481C-9B0A-4903EED25C70}.Debug|Win32.Build.0 = Debug|Win32
+ {774F6471-D8A0-481C-9B0A-4903EED25C70}.Release|Win32.ActiveCfg = Release|Win32
+ {774F6471-D8A0-481C-9B0A-4903EED25C70}.Release|Win32.Build.0 = Release|Win32
+ {E86E6687-AC05-4DBE-A8BD-C47BCB6AEE90}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E86E6687-AC05-4DBE-A8BD-C47BCB6AEE90}.Debug|Win32.Build.0 = Debug|Win32
+ {E86E6687-AC05-4DBE-A8BD-C47BCB6AEE90}.Release|Win32.ActiveCfg = Release|Win32
+ {E86E6687-AC05-4DBE-A8BD-C47BCB6AEE90}.Release|Win32.Build.0 = Release|Win32
+ {94BC6547-67C1-44DB-903D-526537A91E23}.Debug|Win32.ActiveCfg = Debug|Win32
+ {94BC6547-67C1-44DB-903D-526537A91E23}.Debug|Win32.Build.0 = Debug|Win32
+ {94BC6547-67C1-44DB-903D-526537A91E23}.Release|Win32.ActiveCfg = Release|Win32
+ {94BC6547-67C1-44DB-903D-526537A91E23}.Release|Win32.Build.0 = Release|Win32
+ {5330DAB1-DF27-44FC-971B-3C5094F82FA3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5330DAB1-DF27-44FC-971B-3C5094F82FA3}.Debug|Win32.Build.0 = Debug|Win32
+ {5330DAB1-DF27-44FC-971B-3C5094F82FA3}.Release|Win32.ActiveCfg = Release|Win32
+ {5330DAB1-DF27-44FC-971B-3C5094F82FA3}.Release|Win32.Build.0 = Release|Win32
+ {0AFF7A85-63A7-4178-92A5-CC692B09F5B9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0AFF7A85-63A7-4178-92A5-CC692B09F5B9}.Debug|Win32.Build.0 = Debug|Win32
+ {0AFF7A85-63A7-4178-92A5-CC692B09F5B9}.Release|Win32.ActiveCfg = Release|Win32
+ {0AFF7A85-63A7-4178-92A5-CC692B09F5B9}.Release|Win32.Build.0 = Release|Win32
+ {347D08A4-22E9-45B1-A55B-AE84AA2EAA53}.Debug|Win32.ActiveCfg = Debug|Win32
+ {347D08A4-22E9-45B1-A55B-AE84AA2EAA53}.Debug|Win32.Build.0 = Debug|Win32
+ {347D08A4-22E9-45B1-A55B-AE84AA2EAA53}.Release|Win32.ActiveCfg = Release|Win32
+ {347D08A4-22E9-45B1-A55B-AE84AA2EAA53}.Release|Win32.Build.0 = Release|Win32
+ {26EFCAF4-7907-4A47-ACBF-6CAB738CDCEB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {26EFCAF4-7907-4A47-ACBF-6CAB738CDCEB}.Debug|Win32.Build.0 = Debug|Win32
+ {26EFCAF4-7907-4A47-ACBF-6CAB738CDCEB}.Release|Win32.ActiveCfg = Release|Win32
+ {26EFCAF4-7907-4A47-ACBF-6CAB738CDCEB}.Release|Win32.Build.0 = Release|Win32
+ {BCD17F3E-8DF2-4B00-A75E-BF7372D2873B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BCD17F3E-8DF2-4B00-A75E-BF7372D2873B}.Debug|Win32.Build.0 = Debug|Win32
+ {BCD17F3E-8DF2-4B00-A75E-BF7372D2873B}.Release|Win32.ActiveCfg = Release|Win32
+ {BCD17F3E-8DF2-4B00-A75E-BF7372D2873B}.Release|Win32.Build.0 = Release|Win32
+ {B1760CB8-553B-42AB-B54E-3D0320FF252F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B1760CB8-553B-42AB-B54E-3D0320FF252F}.Debug|Win32.Build.0 = Debug|Win32
+ {B1760CB8-553B-42AB-B54E-3D0320FF252F}.Release|Win32.ActiveCfg = Release|Win32
+ {B1760CB8-553B-42AB-B54E-3D0320FF252F}.Release|Win32.Build.0 = Release|Win32
+ {41413E56-08DA-4592-94D2-5311FE90C62B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {41413E56-08DA-4592-94D2-5311FE90C62B}.Debug|Win32.Build.0 = Debug|Win32
+ {41413E56-08DA-4592-94D2-5311FE90C62B}.Release|Win32.ActiveCfg = Release|Win32
+ {41413E56-08DA-4592-94D2-5311FE90C62B}.Release|Win32.Build.0 = Release|Win32
+ {C66E1F6F-84F6-44E2-B5E8-2B127065BE31}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C66E1F6F-84F6-44E2-B5E8-2B127065BE31}.Debug|Win32.Build.0 = Debug|Win32
+ {C66E1F6F-84F6-44E2-B5E8-2B127065BE31}.Release|Win32.ActiveCfg = Release|Win32
+ {C66E1F6F-84F6-44E2-B5E8-2B127065BE31}.Release|Win32.Build.0 = Release|Win32
+ {774F6471-D8A0-481C-9B0A-4903EAD25B70}.Debug|Win32.ActiveCfg = Debug|Win32
+ {774F6471-D8A0-481C-9B0A-4903EAD25B70}.Debug|Win32.Build.0 = Debug|Win32
+ {774F6471-D8A0-481C-9B0A-4903EAD25B70}.Release|Win32.ActiveCfg = Release|Win32
+ {774F6471-D8A0-481C-9B0A-4903EAD25B70}.Release|Win32.Build.0 = Release|Win32
+ {96D51D96-B35F-47C8-864D-371DF2280686}.Debug|Win32.ActiveCfg = Debug|Win32
+ {96D51D96-B35F-47C8-864D-371DF2280686}.Debug|Win32.Build.0 = Debug|Win32
+ {96D51D96-B35F-47C8-864D-371DF2280686}.Release|Win32.ActiveCfg = Release|Win32
+ {96D51D96-B35F-47C8-864D-371DF2280686}.Release|Win32.Build.0 = Release|Win32
+ {1E90E5BC-1280-4A6A-B197-132ABBF97EB9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1E90E5BC-1280-4A6A-B197-132ABBF97EB9}.Debug|Win32.Build.0 = Debug|Win32
+ {1E90E5BC-1280-4A6A-B197-132ABBF97EB9}.Release|Win32.ActiveCfg = Release|Win32
+ {1E90E5BC-1280-4A6A-B197-132ABBF97EB9}.Release|Win32.Build.0 = Release|Win32
+ {2FD8EDAB-B3C3-4654-B6C3-B25C12A063D3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2FD8EDAB-B3C3-4654-B6C3-B25C12A063D3}.Debug|Win32.Build.0 = Debug|Win32
+ {2FD8EDAB-B3C3-4654-B6C3-B25C12A063D3}.Release|Win32.ActiveCfg = Release|Win32
+ {2FD8EDAB-B3C3-4654-B6C3-B25C12A063D3}.Release|Win32.Build.0 = Release|Win32
+ {71582BDA-D4DF-400D-8630-378BE102C038}.Debug|Win32.ActiveCfg = Debug|Win32
+ {71582BDA-D4DF-400D-8630-378BE102C038}.Debug|Win32.Build.0 = Debug|Win32
+ {71582BDA-D4DF-400D-8630-378BE102C038}.Release|Win32.ActiveCfg = Release|Win32
+ {71582BDA-D4DF-400D-8630-378BE102C038}.Release|Win32.Build.0 = Release|Win32
+ {C7BCD670-543D-4B29-B2D6-F3169949F79D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C7BCD670-543D-4B29-B2D6-F3169949F79D}.Debug|Win32.Build.0 = Debug|Win32
+ {C7BCD670-543D-4B29-B2D6-F3169949F79D}.Release|Win32.ActiveCfg = Release|Win32
+ {C7BCD670-543D-4B29-B2D6-F3169949F79D}.Release|Win32.Build.0 = Release|Win32
+ {C4D75B1E-34D5-4A98-8535-A9535BE949E4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C4D75B1E-34D5-4A98-8535-A9535BE949E4}.Debug|Win32.Build.0 = Debug|Win32
+ {C4D75B1E-34D5-4A98-8535-A9535BE949E4}.Release|Win32.ActiveCfg = Release|Win32
+ {C4D75B1E-34D5-4A98-8535-A9535BE949E4}.Release|Win32.Build.0 = Release|Win32
+ {EFC23FC0-86D3-4C81-A218-26F0D5A4D50B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EFC23FC0-86D3-4C81-A218-26F0D5A4D50B}.Debug|Win32.Build.0 = Debug|Win32
+ {EFC23FC0-86D3-4C81-A218-26F0D5A4D50B}.Release|Win32.ActiveCfg = Release|Win32
+ {EFC23FC0-86D3-4C81-A218-26F0D5A4D50B}.Release|Win32.Build.0 = Release|Win32
+ {CA5EE1D6-CB4B-4A15-85C5-31D5C00289C4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CA5EE1D6-CB4B-4A15-85C5-31D5C00289C4}.Debug|Win32.Build.0 = Debug|Win32
+ {CA5EE1D6-CB4B-4A15-85C5-31D5C00289C4}.Release|Win32.ActiveCfg = Release|Win32
+ {CA5EE1D6-CB4B-4A15-85C5-31D5C00289C4}.Release|Win32.Build.0 = Release|Win32
+ {30C37854-9ED6-4C1E-97FB-BF8637BD5811}.Debug|Win32.ActiveCfg = Debug|Win32
+ {30C37854-9ED6-4C1E-97FB-BF8637BD5811}.Debug|Win32.Build.0 = Debug|Win32
+ {30C37854-9ED6-4C1E-97FB-BF8637BD5811}.Release|Win32.ActiveCfg = Release|Win32
+ {30C37854-9ED6-4C1E-97FB-BF8637BD5811}.Release|Win32.Build.0 = Release|Win32
+ {B1A97F62-85CD-4239-BB56-619988B08260}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B1A97F62-85CD-4239-BB56-619988B08260}.Debug|Win32.Build.0 = Debug|Win32
+ {B1A97F62-85CD-4239-BB56-619988B08260}.Release|Win32.ActiveCfg = Release|Win32
+ {B1A97F62-85CD-4239-BB56-619988B08260}.Release|Win32.Build.0 = Release|Win32
+ {E54F493F-BF9D-4A6D-AE2F-5F97AC95251A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E54F493F-BF9D-4A6D-AE2F-5F97AC95251A}.Debug|Win32.Build.0 = Debug|Win32
+ {E54F493F-BF9D-4A6D-AE2F-5F97AC95251A}.Release|Win32.ActiveCfg = Release|Win32
+ {E54F493F-BF9D-4A6D-AE2F-5F97AC95251A}.Release|Win32.Build.0 = Release|Win32
+ {4EBFC27A-75C9-43A1-8DDA-AFEB45C564DC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4EBFC27A-75C9-43A1-8DDA-AFEB45C564DC}.Debug|Win32.Build.0 = Debug|Win32
+ {4EBFC27A-75C9-43A1-8DDA-AFEB45C564DC}.Release|Win32.ActiveCfg = Release|Win32
+ {4EBFC27A-75C9-43A1-8DDA-AFEB45C564DC}.Release|Win32.Build.0 = Release|Win32
+ {104D31F9-49BA-4A1A-B84F-0A3AEE3C4DB2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {104D31F9-49BA-4A1A-B84F-0A3AEE3C4DB2}.Debug|Win32.Build.0 = Debug|Win32
+ {104D31F9-49BA-4A1A-B84F-0A3AEE3C4DB2}.Release|Win32.ActiveCfg = Release|Win32
+ {104D31F9-49BA-4A1A-B84F-0A3AEE3C4DB2}.Release|Win32.Build.0 = Release|Win32
+ {14B5DFC5-D511-4D8C-A231-EE90A05687E1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {14B5DFC5-D511-4D8C-A231-EE90A05687E1}.Debug|Win32.Build.0 = Debug|Win32
+ {14B5DFC5-D511-4D8C-A231-EE90A05687E1}.Release|Win32.ActiveCfg = Release|Win32
+ {14B5DFC5-D511-4D8C-A231-EE90A05687E1}.Release|Win32.Build.0 = Release|Win32
+ {F11970B5-BE16-4FF5-9780-4C15082B76A0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F11970B5-BE16-4FF5-9780-4C15082B76A0}.Debug|Win32.Build.0 = Debug|Win32
+ {F11970B5-BE16-4FF5-9780-4C15082B76A0}.Release|Win32.ActiveCfg = Release|Win32
+ {F11970B5-BE16-4FF5-9780-4C15082B76A0}.Release|Win32.Build.0 = Release|Win32
+ {FABF1AA7-F695-49F8-92F6-AB6C4B0C088A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FABF1AA7-F695-49F8-92F6-AB6C4B0C088A}.Debug|Win32.Build.0 = Debug|Win32
+ {FABF1AA7-F695-49F8-92F6-AB6C4B0C088A}.Release|Win32.ActiveCfg = Release|Win32
+ {FABF1AA7-F695-49F8-92F6-AB6C4B0C088A}.Release|Win32.Build.0 = Release|Win32
+ {5ABF0B56-F9F1-4D93-B15A-E3972F45D97B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5ABF0B56-F9F1-4D93-B15A-E3972F45D97B}.Debug|Win32.Build.0 = Debug|Win32
+ {5ABF0B56-F9F1-4D93-B15A-E3972F45D97B}.Release|Win32.ActiveCfg = Release|Win32
+ {5ABF0B56-F9F1-4D93-B15A-E3972F45D97B}.Release|Win32.Build.0 = Release|Win32
+ {8359726E-9F03-4300-8F63-1FEAC84251D0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8359726E-9F03-4300-8F63-1FEAC84251D0}.Debug|Win32.Build.0 = Debug|Win32
+ {8359726E-9F03-4300-8F63-1FEAC84251D0}.Release|Win32.ActiveCfg = Release|Win32
+ {8359726E-9F03-4300-8F63-1FEAC84251D0}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/algorithms/append.cpp b/libs/geometry/test/algorithms/append.cpp
new file mode 100644
index 000000000..7c7728eeb
--- /dev/null
+++ b/libs/geometry/test/algorithms/append.cpp
@@ -0,0 +1,105 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <deque>
+#include <vector>
+
+#include <boost/concept/requires.hpp>
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/algorithms/append.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+#include <boost/variant/variant.hpp>
+
+#include <test_common/test_point.hpp>
+#include <test_geometries/wrapped_boost_array.hpp>
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+
+template <typename G>
+void test_geometry(G& geometry, bool check)
+{
+ typedef typename bg::point_type<G>::type P;
+
+ bg::append(geometry, bg::make_zero<P>());
+ if (check)
+ {
+ BOOST_CHECK_EQUAL(bg::num_points(geometry), 1u);
+ }
+
+ // Append a range
+ std::vector<P> v;
+ v.push_back(bg::make_zero<P>());
+ v.push_back(bg::make_zero<P>());
+ bg::append(geometry, v);
+
+ if (check)
+ {
+ BOOST_CHECK_EQUAL(bg::num_points(geometry), 3u);
+ }
+
+ bg::clear(geometry);
+
+ if (check)
+ {
+ BOOST_CHECK_EQUAL(bg::num_points(geometry), 0u);
+ }
+
+ //P p = boost::range::front(geometry);
+}
+
+template <typename G>
+void test_geometry_and_variant(bool check = true)
+{
+ G geometry;
+ boost::variant<G> variant_geometry = G();
+ test_geometry(geometry, check);
+ test_geometry(variant_geometry, check);
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry_and_variant<P>(false);
+ test_geometry_and_variant<bg::model::box<P> >(false);
+ test_geometry_and_variant<bg::model::segment<P> >(false);
+ test_geometry_and_variant<bg::model::linestring<P> >();
+ test_geometry_and_variant<bg::model::ring<P> >();
+ test_geometry_and_variant<bg::model::polygon<P> >();
+
+ test_geometry_and_variant<std::vector<P> >();
+ test_geometry_and_variant<std::deque<P> >();
+ //test_geometry_and_variant<std::list<P> >();
+}
+
+int test_main(int, char* [])
+{
+ test_all<test::test_point>();
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::point<ttmath_big, 2, bg::cs::cartesian> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/append.vcproj b/libs/geometry/test/algorithms/append.vcproj
new file mode 100644
index 000000000..b162dd1b0
--- /dev/null
+++ b/libs/geometry/test/algorithms/append.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="append"
+ ProjectGUID="{774F6471-D8A0-481C-9B0A-4903EED25C70}"
+ RootNamespace="append"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\append"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\append"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\append.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/area.cpp b/libs/geometry/test/algorithms/area.cpp
new file mode 100644
index 000000000..1d05439f6
--- /dev/null
+++ b/libs/geometry/test/algorithms/area.cpp
@@ -0,0 +1,274 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <algorithms/test_area.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <test_geometries/all_custom_ring.hpp>
+#include <test_geometries/all_custom_polygon.hpp>
+//#define GEOMETRY_TEST_DEBUG
+
+#include <boost/variant/variant.hpp>
+
+template <typename Polygon>
+void test_polygon()
+{
+ // Rotated square, length=sqrt(2) -> area=2
+ test_geometry<Polygon>("POLYGON((1 1,2 2,3 1,2 0,1 1))", 2.0);
+ test_geometry<Polygon>("POLYGON((1 1,2 2,3 1,2 0,1 1))", 2.0);
+ test_geometry<Polygon>("POLYGON((0 0,0 7,4 2,2 0,0 0))", 16.0);
+ test_geometry<Polygon>("POLYGON((1 1,2 1,2 2,1 2,1 1))", -1.0);
+ test_geometry<Polygon>("POLYGON((0 0,0 7,4 2,2 0,0 0), (1 1,2 1,2 2,1 2,1 1))", 15.0);
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::box<P> >("POLYGON((0 0,2 2))", 4.0);
+ test_geometry<bg::model::box<P> >("POLYGON((2 2,0 0))", 4.0);
+
+ test_polygon<bg::model::polygon<P> >();
+ test_polygon<all_custom_polygon<P> >();
+
+ // clockwise rings (second is wrongly ordered)
+ test_geometry<bg::model::ring<P> >("POLYGON((0 0,0 7,4 2,2 0,0 0))", 16.0);
+ test_geometry<bg::model::ring<P> >("POLYGON((0 0,2 0,4 2,0 7,0 0))", -16.0);
+
+ test_geometry<all_custom_ring<P> >("POLYGON((0 0,0 7,4 2,2 0,0 0))", 16.0);
+
+ // ccw
+ test_geometry<bg::model::polygon<P, false> >
+ ("POLYGON((0 0,0 7,4 2,2 0,0 0), (1 1,2 1,2 2,1 2,1 1))", -15.0);
+}
+
+template <typename Point>
+void test_spherical(bool polar = false)
+{
+ typedef typename bg::coordinate_type<Point>::type ct;
+ bg::model::polygon<Point> geometry;
+
+ // unit-sphere has area of 4-PI. Polygon covering 1/8 of it:
+ // calculations splitted for ttmath
+ ct const four = 4.0;
+ ct const eight = 8.0;
+ ct expected = four * boost::geometry::math::pi<ct>() / eight;
+ bg::read_wkt("POLYGON((0 0,0 90,90 0,0 0))", geometry);
+
+ ct area = bg::area(geometry);
+ BOOST_CHECK_CLOSE(area, expected, 0.0001);
+
+ // With strategy, radius 2 -> 4 pi r^2
+ bg::strategy::area::huiller
+ <
+ typename bg::point_type<Point>::type
+ > strategy(2.0);
+
+ area = bg::area(geometry, strategy);
+ ct const two = 2.0;
+ BOOST_CHECK_CLOSE(area, two * two * expected, 0.0001);
+
+ // Wrangel Island (dateline crossing)
+ // With (spherical) Earth strategy
+ bg::strategy::area::huiller
+ <
+ typename bg::point_type<Point>::type
+ > spherical_earth(6373);
+ bg::read_wkt("POLYGON((-178.7858 70.7852, 177.4758 71.2333, 179.7436 71.5733, -178.7858 70.7852))", geometry);
+ area = bg::area(geometry, spherical_earth);
+ // SQL Server gives: 4537.9654419375
+ // PostGIS gives: 4537.9311668307
+ // Note: those are Geographic, this test is Spherical
+ BOOST_CHECK_CLOSE(area, 4506.6389, 0.001);
+
+ // Wrangel, more in detail
+ bg::read_wkt("POLYGON((-178.568604 71.564148,-178.017548 71.449692,-177.833313 71.3461,-177.502838 71.277466 ,-177.439453 71.226929,-177.620026 71.116638,-177.9389 71.037491,-178.8186 70.979965,-179.274445 70.907761,-180 70.9972,179.678314 70.895538,179.272766 70.888596,178.791016 70.7964,178.617737 71.035538,178.872192 71.217484,179.530273 71.4383 ,-180 71.535843 ,-179.628601 71.577194,-179.305298 71.551361,-179.03421 71.597748,-178.568604 71.564148))", geometry);
+ area = bg::area(geometry, spherical_earth);
+ // SQL Server gives: 7669.10402181435
+ // PostGIS gives: 7669.55565459832
+ BOOST_CHECK_CLOSE(area, 7616.523769, 0.001);
+
+ // Check more at the equator
+ /*
+ select 1,geography::STGeomFromText('POLYGON((-178.7858 10.7852 , 179.7436 11.5733 , 177.4758 11.2333 , -178.7858 10.7852))',4326) .STArea()/1000000.0
+ union select 2,geography::STGeomFromText('POLYGON((-178.7858 20.7852 , 179.7436 21.5733 , 177.4758 21.2333 , -178.7858 20.7852))',4326) .STArea()/1000000.0
+ union select 3,geography::STGeomFromText('POLYGON((-178.7858 30.7852 , 179.7436 31.5733 , 177.4758 31.2333 , -178.7858 30.7852))',4326) .STArea()/1000000.0
+ union select 0,geography::STGeomFromText('POLYGON((-178.7858 0.7852 , 179.7436 1.5733 , 177.4758 1.2333 , -178.7858 0.7852))',4326) .STArea()/1000000.0
+ union select 4,geography::STGeomFromText('POLYGON((-178.7858 40.7852 , 179.7436 41.5733 , 177.4758 41.2333 , -178.7858 40.7852))',4326) .STArea()/1000000.0
+ */
+
+ bg::read_wkt("POLYGON((-178.7858 0.7852, 177.4758 1.2333, 179.7436 1.5733, -178.7858 0.7852))", geometry);
+ area = bg::area(geometry, spherical_earth);
+ BOOST_CHECK_CLOSE(area, 14136.09946, 0.001); // SQL Server gives: 14064.1902284513
+
+
+ bg::read_wkt("POLYGON((-178.7858 10.7852, 177.4758 11.2333, 179.7436 11.5733, -178.7858 10.7852))", geometry);
+ area = bg::area(geometry, spherical_earth);
+ BOOST_CHECK_CLOSE(area, 13760.2456, 0.001); // SQL Server gives: 13697.0941155193
+
+ bg::read_wkt("POLYGON((-178.7858 20.7852, 177.4758 21.2333, 179.7436 21.5733, -178.7858 20.7852))", geometry);
+ area = bg::area(geometry, spherical_earth);
+ BOOST_CHECK_CLOSE(area, 12987.8682, 0.001); // SQL Server gives: 12944.3970990317 -> -39m^2
+
+ bg::read_wkt("POLYGON((-178.7858 30.7852, 177.4758 31.2333, 179.7436 31.5733, -178.7858 30.7852))", geometry);
+ area = bg::area(geometry, spherical_earth);
+ BOOST_CHECK_CLOSE(area, 11856.3935, 0.001); // SQL Server gives: 11838.5338423574 -> -18m^2
+
+ bg::read_wkt("POLYGON((-178.7858 40.7852, 177.4758 41.2333, 179.7436 41.5733, -178.7858 40.7852))", geometry);
+ area = bg::area(geometry, spherical_earth);
+ BOOST_CHECK_CLOSE(area, 10404.627685523914, 0.001); // SQL Server gives: 10412.0607137119, -> +8m^2
+
+ // Concave
+ bg::read_wkt("POLYGON((0 40,1 42,0 44,2 43,4 44,3 42,4 40,2 41,0 40))", geometry);
+ area = bg::area(geometry, spherical_earth);
+ BOOST_CHECK_CLOSE(area, 73538.2958, 0.001); // SQL Server gives: 73604.2047689719
+
+ // With hole POLYGON((0 40,4 40,4 44,0 44,0 40),(1 41,2 43,3 42,1 41))
+ bg::read_wkt("POLYGON((0 40,0 44,4 44,4 40,0 40),(1 41,3 42,2 43,1 41))", geometry);
+ area = bg::area(geometry, spherical_earth);
+ BOOST_CHECK_CLOSE(area, 133233.844876, 0.001); // SQL Server gives: 133353.335
+
+ {
+ bg::model::ring<Point> aurha; // a'dam-utr-rott.-den haag-a'dam
+ bg::read_wkt("POLYGON((4.892 52.373,5.119 52.093,4.479 51.930,4.23 52.08,4.892 52.373))", aurha);
+ if (polar)
+ {
+ // Create colatitudes (measured from pole)
+ BOOST_FOREACH(Point& p, aurha)
+ {
+ bg::set<1>(p, ct(90) - bg::get<1>(p));
+ }
+ bg::correct(aurha);
+ }
+ bg::strategy::area::huiller
+ <
+ typename bg::point_type<Point>::type
+ > huiller(6372.795);
+ area = bg::area(aurha, huiller);
+ BOOST_CHECK_CLOSE(area, 1476.645675, 0.0001);
+
+ // SQL Server gives: 1481.55595960659
+ // for select geography::STGeomFromText('POLYGON((4.892 52.373,4.23 52.08,4.479 51.930,5.119 52.093,4.892 52.373))',4326).STArea()/1000000.0
+ }
+}
+
+template <typename P>
+void test_ccw()
+{
+ typedef bg::model::polygon<P, false> ccw_polygon;
+ // counterclockwise rings (second is wrongly ordered)
+ test_geometry<ccw_polygon>("POLYGON((1 1,2 2,3 1,2 0,1 1))", -2.0);
+ test_geometry<ccw_polygon>("POLYGON((1 1,2 0,3 1,2 2,1 1))", +2.0);
+ test_geometry<ccw_polygon>("POLYGON((0 0,0 7,4 2,2 0,0 0))", -16.0);
+ test_geometry<ccw_polygon>("POLYGON((0 0,2 0,4 2,0 7,0 0))", +16.0);
+}
+
+template <typename P>
+void test_open()
+{
+ typedef bg::model::polygon<P, true, false> open_polygon;
+ test_geometry<open_polygon>("POLYGON((1 1,2 2,3 1,2 0))", 2.0);
+ // Note the triangular testcase used in CCW is not sensible for open/close
+}
+
+template <typename P>
+void test_open_ccw()
+{
+ typedef bg::model::polygon<P, false, false> open_polygon;
+ test_geometry<open_polygon>("POLYGON((1 1,2 0,3 1,2 2))", 2.0);
+ // Note the triangular testcase used in CCW is not sensible for open/close
+}
+
+template <typename P>
+void test_empty_input()
+{
+ bg::model::polygon<P> poly_empty;
+ bg::model::ring<P> ring_empty;
+
+ test_empty_input(poly_empty);
+ test_empty_input(ring_empty);
+}
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::polygon<int_point_type> int_poly;
+ bg::model::polygon<double_point_type> double_poly;
+
+ std::string const polygon_li = "POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))";
+ bg::read_wkt(polygon_li, int_poly);
+ bg::read_wkt(polygon_li, double_poly);
+
+ double int_area = bg::area(int_poly);
+ double double_area = bg::area(double_poly);
+
+ BOOST_CHECK_CLOSE(int_area, double_area, 0.0001);
+}
+
+void test_variant()
+{
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+ typedef bg::model::polygon<double_point_type> polygon_type;
+ typedef bg::model::box<double_point_type> box_type;
+
+ polygon_type poly;
+ std::string const polygon_li = "POLYGON((18 5,18 1,15 1,15 5,12 5,12 8,15 8,18 8,18 5))";
+ bg::read_wkt(polygon_li, poly);
+
+ box_type box;
+ std::string const box_li = "BOX(0 0,2 2)";
+ bg::read_wkt(box_li, box);
+
+ boost::variant<polygon_type, box_type> v;
+
+ v = poly;
+ BOOST_CHECK_CLOSE(bg::area(v), bg::area(poly), 0.0001);
+ v = box;
+ BOOST_CHECK_CLOSE(bg::area(v), bg::area(box), 0.0001);
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ test_spherical<bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+ //test_spherical<bg::model::point<double, 2, bg::cs::spherical<bg::degree> > >(true);
+
+ test_ccw<bg::model::point<double, 2, bg::cs::cartesian> >();
+ test_open<bg::model::point<double, 2, bg::cs::cartesian> >();
+ test_open_ccw<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+ test_spherical<bg::model::point<ttmath_big, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+#endif
+
+ test_large_integers();
+
+ test_variant();
+
+ // test_empty_input<bg::model::d2::point_xy<int> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/area.vcproj b/libs/geometry/test/algorithms/area.vcproj
new file mode 100644
index 000000000..e091e28fa
--- /dev/null
+++ b/libs/geometry/test/algorithms/area.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="area"
+ ProjectGUID="{E86E6687-AC05-4DBE-A8BD-C47BCB6AEE90}"
+ RootNamespace="area"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\area"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\area"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\area.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/assign.cpp b/libs/geometry/test/algorithms/assign.cpp
new file mode 100644
index 000000000..82251db5a
--- /dev/null
+++ b/libs/geometry/test/algorithms/assign.cpp
@@ -0,0 +1,273 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/arithmetic/arithmetic.hpp>
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename Linestring>
+void check_linestring_2d(Linestring const& line)
+{
+ BOOST_CHECK((boost::size(line) == 3));
+ BOOST_CHECK((bg::num_points(line) == 3));
+
+ typedef typename bg::point_type<Linestring>::type point_type;
+ point_type const& p0 = line[0];
+ BOOST_CHECK(bg::get<0>(p0) == 1);
+ BOOST_CHECK(bg::get<1>(p0) == 2);
+
+ point_type const& p1 = line[1];
+ BOOST_CHECK(bg::get<0>(p1) == 3);
+ BOOST_CHECK(bg::get<1>(p1) == 4);
+
+ point_type const& p2 = line[2];
+ BOOST_CHECK(bg::get<0>(p2) == 5);
+ BOOST_CHECK(bg::get<1>(p2) == 6);
+}
+
+template <typename Point>
+void test_assign_linestring_2d()
+{
+ bg::model::linestring<Point> line;
+
+ // Test assignment of plain array (note that this is only possible if adapted c-array is included!)
+ const double coors[3][2] = { {1, 2}, {3, 4}, {5, 6} };
+ bg::assign_points(line, coors);
+ check_linestring_2d(line);
+
+ // Test assignment of point array
+ Point points[3];
+ bg::assign_values(points[0], 1, 2);
+ bg::assign_values(points[1], 3, 4);
+ bg::assign_values(points[2], 5, 6);
+ bg::assign_points(line, points);
+ check_linestring_2d(line);
+
+ // Test assignment of array with different point-type (tuple adaption should be included)
+ boost::tuple<float, float> tuples[3];
+ tuples[0] = boost::make_tuple(1, 2);
+ tuples[1] = boost::make_tuple(3, 4);
+ tuples[2] = boost::make_tuple(5, 6);
+ bg::assign_points(line, tuples);
+ check_linestring_2d(line);
+}
+
+namespace detail
+{
+ template <typename BoxOrSegment>
+ void test_assign_box_or_segment_2d()
+ {
+ BoxOrSegment geometry;
+ bg::assign_values(geometry, 1, 2, 3, 4);
+ BOOST_CHECK((bg::get<bg::min_corner, 0>(geometry) == 1));
+ BOOST_CHECK((bg::get<bg::min_corner, 1>(geometry) == 2));
+ BOOST_CHECK((bg::get<bg::max_corner, 0>(geometry) == 3));
+ BOOST_CHECK((bg::get<bg::max_corner, 1>(geometry) == 4));
+
+ bg::assign_zero(geometry);
+ BOOST_CHECK((bg::get<bg::min_corner, 0>(geometry) == 0));
+ BOOST_CHECK((bg::get<bg::min_corner, 1>(geometry) == 0));
+ BOOST_CHECK((bg::get<bg::max_corner, 0>(geometry) == 0));
+ BOOST_CHECK((bg::get<bg::max_corner, 1>(geometry) == 0));
+
+ bg::assign_inverse(geometry);
+ BOOST_CHECK((bg::get<bg::min_corner, 0>(geometry) > 9999));
+ BOOST_CHECK((bg::get<bg::min_corner, 1>(geometry) > 9999));
+ BOOST_CHECK((bg::get<bg::max_corner, 0>(geometry) < 9999));
+ BOOST_CHECK((bg::get<bg::max_corner, 1>(geometry) < 9999));
+ }
+}
+
+template <typename Point>
+void test_assign_box_or_segment_2d()
+{
+ detail::test_assign_box_or_segment_2d<bg::model::box<Point> >();
+ detail::test_assign_box_or_segment_2d<bg::model::segment<Point> >();
+}
+
+template <typename Point>
+void test_assign_box_2d()
+{
+ detail::test_assign_box_or_segment_2d<bg::model::box<Point> >();
+}
+
+
+template <typename Point>
+void test_assign_point_3d()
+{
+ Point p;
+ bg::assign_values(p, 1, 2, 3);
+ BOOST_CHECK(bg::get<0>(p) == 1);
+ BOOST_CHECK(bg::get<1>(p) == 2);
+ BOOST_CHECK(bg::get<2>(p) == 3);
+
+ bg::assign_value(p, 123);
+ BOOST_CHECK(bg::get<0>(p) == 123);
+ BOOST_CHECK(bg::get<1>(p) == 123);
+ BOOST_CHECK(bg::get<2>(p) == 123);
+
+ bg::assign_zero(p);
+ BOOST_CHECK(bg::get<0>(p) == 0);
+ BOOST_CHECK(bg::get<1>(p) == 0);
+ BOOST_CHECK(bg::get<2>(p) == 0);
+
+}
+
+template <typename P>
+void test_assign_conversion()
+{
+ typedef bg::model::box<P> box_type;
+ typedef bg::model::ring<P> ring_type;
+ typedef bg::model::polygon<P> polygon_type;
+
+ P p;
+ bg::assign_values(p, 1, 2);
+
+ box_type b;
+ bg::assign(b, p);
+
+ BOOST_CHECK_CLOSE((bg::get<0, 0>(b)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE((bg::get<0, 1>(b)), 2.0, 0.001);
+ BOOST_CHECK_CLOSE((bg::get<1, 0>(b)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE((bg::get<1, 1>(b)), 2.0, 0.001);
+
+
+ bg::set<bg::min_corner, 0>(b, 1);
+ bg::set<bg::min_corner, 1>(b, 2);
+ bg::set<bg::max_corner, 0>(b, 3);
+ bg::set<bg::max_corner, 1>(b, 4);
+
+ ring_type ring;
+ bg::assign(ring, b);
+
+ {
+ typedef bg::model::ring<P, false, false> ring_type_ccw;
+ ring_type_ccw ring_ccw;
+ // Should NOT compile (currently): bg::assign(ring_ccw, ring);
+
+ }
+
+
+ //std::cout << bg::wkt(b) << std::endl;
+ //std::cout << bg::wkt(ring) << std::endl;
+
+ typename boost::range_const_iterator<ring_type>::type it = ring.begin();
+ BOOST_CHECK_CLOSE(bg::get<0>(*it), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(*it), 2.0, 0.001);
+ it++;
+ BOOST_CHECK_CLOSE(bg::get<0>(*it), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(*it), 4.0, 0.001);
+ it++;
+ BOOST_CHECK_CLOSE(bg::get<0>(*it), 3.0, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(*it), 4.0, 0.001);
+ it++;
+ BOOST_CHECK_CLOSE(bg::get<0>(*it), 3.0, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(*it), 2.0, 0.001);
+ it++;
+ BOOST_CHECK_CLOSE(bg::get<0>(*it), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(*it), 2.0, 0.001);
+
+ BOOST_CHECK_EQUAL(ring.size(), 5u);
+
+
+ polygon_type polygon;
+
+ bg::assign(polygon, ring);
+ BOOST_CHECK_EQUAL(bg::num_points(polygon), 5u);
+
+ ring_type ring2;
+ bg::assign(ring2, polygon);
+ BOOST_CHECK_EQUAL(bg::num_points(ring2), 5u);
+}
+
+
+template <typename Point>
+void test_assign_point_2d()
+{
+ Point p;
+ bg::assign_values(p, 1, 2);
+ BOOST_CHECK(bg::get<0>(p) == 1);
+ BOOST_CHECK(bg::get<1>(p) == 2);
+
+ bg::assign_value(p, 123);
+ BOOST_CHECK(bg::get<0>(p) == 123);
+ BOOST_CHECK(bg::get<1>(p) == 123);
+
+ bg::assign_zero(p);
+ BOOST_CHECK(bg::get<0>(p) == 0);
+ BOOST_CHECK(bg::get<1>(p) == 0);
+}
+
+
+
+
+
+int test_main(int, char* [])
+{
+ test_assign_point_3d<int[3]>();
+ test_assign_point_3d<float[3]>();
+ test_assign_point_3d<double[3]>();
+ test_assign_point_3d<test::test_point>();
+ test_assign_point_3d<bg::model::point<int, 3, bg::cs::cartesian> >();
+ test_assign_point_3d<bg::model::point<float, 3, bg::cs::cartesian> >();
+ test_assign_point_3d<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ test_assign_point_2d<int[2]>();
+ test_assign_point_2d<float[2]>();
+ test_assign_point_2d<double[2]>();
+ test_assign_point_2d<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_assign_point_2d<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_assign_point_2d<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ test_assign_conversion<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+
+ // Segment (currently) cannot handle array's because derived from std::pair
+ test_assign_box_2d<int[2]>();
+ test_assign_box_2d<float[2]>();
+ test_assign_box_2d<double[2]>();
+
+ test_assign_box_or_segment_2d<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_assign_box_or_segment_2d<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_assign_box_or_segment_2d<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ test_assign_linestring_2d<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_assign_linestring_2d<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_assign_linestring_2d<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+#ifdef HAVE_TTMATH
+ // Next 3 need extra traits for c-array with custom type:
+ // test_assign_point_2d<ttmath_big[2]>();
+ // test_assign_point_3d<ttmath_big[3]>();
+ // test_assign_box_2d<ttmath_big[2]>();
+
+ test_assign_point_2d<bg::model::point<ttmath_big, 2, bg::cs::cartesian> >();
+ test_assign_point_3d<bg::model::point<ttmath_big, 3, bg::cs::cartesian> >();
+ test_assign_box_or_segment_2d<bg::model::point<ttmath_big, 2, bg::cs::cartesian> >();
+ test_assign_linestring_2d<bg::model::point<ttmath_big, 2, bg::cs::cartesian> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/assign.vcproj b/libs/geometry/test/algorithms/assign.vcproj
new file mode 100644
index 000000000..50214b53b
--- /dev/null
+++ b/libs/geometry/test/algorithms/assign.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="assign"
+ ProjectGUID="{94BC6547-67C1-44DB-903D-526537A91E23}"
+ RootNamespace="assign"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\assign"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\assign"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\assign.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/buffer.cpp b/libs/geometry/test/algorithms/buffer.cpp
new file mode 100644
index 000000000..f64a25f9d
--- /dev/null
+++ b/libs/geometry/test/algorithms/buffer.cpp
@@ -0,0 +1,55 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/buffer.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <test_common/test_point.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ typedef typename bg::coordinate_type<P>::type coordinate_type;
+
+ P p1(0, 0);
+ P p2(2, 2);
+ bg::model::box<P> b1(p1, p2);
+
+ bg::model::box<P> b2;
+ bg::buffer(b1, b2, coordinate_type(2));
+
+ // TODO: Check if buffer is correct
+ // using bg::equals to compare boxes
+ // (TODO: implement that)
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::point<ttmath_big, 2, bg::cs::cartesian> >();
+#endif
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/buffer.vcproj b/libs/geometry/test/algorithms/buffer.vcproj
new file mode 100644
index 000000000..60514c768
--- /dev/null
+++ b/libs/geometry/test/algorithms/buffer.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="buffer"
+ ProjectGUID="{C66E1F6F-84F6-44E2-B5E8-2B127065BE31}"
+ RootNamespace="buffer"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\buffer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\buffer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\buffer.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/centroid.cpp b/libs/geometry/test/algorithms/centroid.cpp
new file mode 100644
index 000000000..90eca01ab
--- /dev/null
+++ b/libs/geometry/test/algorithms/centroid.cpp
@@ -0,0 +1,149 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <algorithms/test_centroid.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <test_geometries/all_custom_polygon.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename Polygon>
+void test_polygon()
+{
+ test_centroid<Polygon>(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2"
+ ",3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 4.06923363095238, 1.65055803571429);
+
+ // with holes
+ test_centroid<Polygon>(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2"
+ ",3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ ",(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))"
+ ,
+ 4.0466264962959677, 1.6348996057331333);
+
+}
+
+
+template <typename P>
+void test_2d()
+{
+ test_centroid<bg::model::linestring<P> >("LINESTRING(1 1, 2 2, 3 3)", 2.0, 2.0);
+ test_centroid<bg::model::linestring<P> >("LINESTRING(0 0,0 4, 4 4)", 1.0, 3.0);
+ test_centroid<bg::model::linestring<P> >("LINESTRING(0 0,3 3,0 6,3 9,0 12)", 1.5, 6.0);
+
+ test_centroid<bg::model::ring<P> >(
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2"
+ ",3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 4.06923363095238, 1.65055803571429);
+
+ test_polygon<bg::model::polygon<P> >();
+ test_polygon<all_custom_polygon<P> >();
+
+ // ccw
+ test_centroid<bg::model::ring<P, false> >(
+ "POLYGON((2 1.3,2.9 0.7,4.9 0.8,5.4 1.2,5.3 2.6,4.1 3,3.4 2"
+ ",3.7 1.6,3.4 1.2,2.8 1.8,2.4 1.7,2 1.3))",
+ 4.06923363095238, 1.65055803571429);
+
+ // open / closed
+ test_centroid<bg::model::ring<P, true, true> >(
+ "POLYGON((1 1,2 2,3 1,2 0,1 1))", 2.0, 1.0);
+ test_centroid<bg::model::ring<P, true, false> >(
+ "POLYGON((1 1,2 2,3 1,2 0))", 2.0, 1.0);
+
+ test_centroid<bg::model::box<P> >("POLYGON((1 2,3 4))", 2, 3);
+ test_centroid<P>("POINT(3 3)", 3, 3);
+}
+
+
+template <typename P>
+void test_3d()
+{
+ test_centroid<bg::model::linestring<P> >("LINESTRING(1 2 3,4 5 -6,7 -8 9,-10 11 12,13 -14 -15, 16 17 18)",
+ 5.6748865168734692, 0.31974938587214002, 1.9915270387763671);
+ test_centroid<bg::model::box<P> >("POLYGON((1 2 3,5 6 7))", 3, 4, 5);
+ test_centroid<P>("POINT(1 2 3)", 1, 2, 3);
+}
+
+
+template <typename P>
+void test_5d()
+{
+ test_centroid<bg::model::linestring<P> >("LINESTRING(1 2 3 4 95,4 5 -6 24 40,7 -8 9 -5 -7,-10 11 12 -5 5,13 -14 -15 4 3, 16 17 18 5 12)",
+ 4.9202312983547678, 0.69590937869808345, 1.2632138719797417, 6.0468332057401986, 23.082402715244868);
+}
+
+template <typename P>
+void test_exceptions()
+{
+ test_centroid_exception<bg::model::linestring<P> >();
+ test_centroid_exception<bg::model::polygon<P> >();
+ test_centroid_exception<bg::model::ring<P> >();
+}
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ bg::model::polygon<int_point_type> int_poly;
+ bg::model::polygon<double_point_type> double_poly;
+
+ std::string const polygon_li = "POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))";
+ bg::read_wkt(polygon_li, int_poly);
+ bg::read_wkt(polygon_li, double_poly);
+
+ int_point_type int_centroid;
+ double_point_type double_centroid;
+
+ bg::centroid(int_poly, int_centroid);
+ bg::centroid(double_poly, double_centroid);
+
+ int_point_type double_centroid_as_int;
+ bg::assign(int_centroid, double_centroid_as_int);
+
+ BOOST_CHECK_EQUAL(bg::get<0>(int_centroid), bg::get<0>(double_centroid_as_int));
+ BOOST_CHECK_EQUAL(bg::get<1>(int_centroid), bg::get<1>(double_centroid_as_int));
+}
+
+
+int test_main(int, char* [])
+{
+ test_2d<bg::model::d2::point_xy<double> >();
+ test_2d<boost::tuple<float, float> >();
+ test_2d<bg::model::d2::point_xy<float> >();
+
+ test_3d<boost::tuple<double, double, double> >();
+
+ test_5d<boost::tuple<double, double, double, double, double> >();
+
+#if defined(HAVE_TTMATH)
+ test_2d<bg::model::d2::point_xy<ttmath_big> >();
+ test_3d<boost::tuple<ttmath_big, ttmath_big, ttmath_big> >();
+#endif
+
+ test_large_integers();
+ test_exceptions<bg::model::d2::point_xy<double> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/centroid.vcproj b/libs/geometry/test/algorithms/centroid.vcproj
new file mode 100644
index 000000000..5c908c654
--- /dev/null
+++ b/libs/geometry/test/algorithms/centroid.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="centroid"
+ ProjectGUID="{1E90E5BC-1280-4A6A-B197-132ABBF97EB9}"
+ RootNamespace="centroid"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\centroid"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\centroid"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\centroid.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/comparable_distance.cpp b/libs/geometry/test/algorithms/comparable_distance.cpp
new file mode 100644
index 000000000..294321c4f
--- /dev/null
+++ b/libs/geometry/test/algorithms/comparable_distance.cpp
@@ -0,0 +1,146 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <sstream>
+
+#include <boost/mpl/if.hpp>
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometry.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+
+#include <boost/geometry/algorithms/comparable_distance.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+
+template <typename P>
+void test_distance_result()
+{
+ typedef typename bg::default_distance_result<P, P>::type distance_type;
+
+ P p1 = bg::make<P>(0, 0);
+ P p2 = bg::make<P>(3, 0);
+ P p3 = bg::make<P>(0, 4);
+
+ distance_type dr12 = bg::comparable_distance(p1, p2);
+ distance_type dr13 = bg::comparable_distance(p1, p3);
+ distance_type dr23 = bg::comparable_distance(p2, p3);
+
+ BOOST_CHECK_CLOSE(dr12, 9.000, 0.001);
+ BOOST_CHECK_CLOSE(dr13, 16.000, 0.001);
+ BOOST_CHECK_CLOSE(dr23, 25.000, 0.001);
+
+}
+
+template <typename P>
+void test_distance_point()
+{
+ P p1;
+ bg::set<0>(p1, 1);
+ bg::set<1>(p1, 1);
+
+ P p2;
+ bg::set<0>(p2, 2);
+ bg::set<1>(p2, 2);
+
+ typename bg::coordinate_type<P>::type d = bg::comparable_distance(p1, p2);
+ BOOST_CHECK_CLOSE(d, 2.0, 0.001);
+}
+
+template <typename P>
+void test_distance_segment()
+{
+ typedef typename bg::coordinate_type<P>::type coordinate_type;
+
+ P s1 = bg::make<P>(2, 2);
+ P s2 = bg::make<P>(3, 3);
+
+ // Check points left, right, projected-left, projected-right, on segment
+ P p1 = bg::make<P>(0, 0);
+ P p2 = bg::make<P>(4, 4);
+ P p3 = bg::make<P>(2.4, 2.6);
+ P p4 = bg::make<P>(2.6, 2.4);
+ P p5 = bg::make<P>(2.5, 2.5);
+
+ bg::model::referring_segment<P const> const seg(s1, s2);
+
+ coordinate_type d1 = bg::comparable_distance(p1, seg); BOOST_CHECK_CLOSE(d1, 8.0, 0.001);
+ coordinate_type d2 = bg::comparable_distance(p2, seg); BOOST_CHECK_CLOSE(d2, 2.0, 0.001);
+ coordinate_type d3 = bg::comparable_distance(p3, seg); BOOST_CHECK_CLOSE(d3, 0.02, 0.001);
+ coordinate_type d4 = bg::comparable_distance(p4, seg); BOOST_CHECK_CLOSE(d4, 0.02, 0.001);
+ coordinate_type d5 = bg::comparable_distance(p5, seg); BOOST_CHECK_CLOSE(d5, 0.0, 0.001);
+
+ // Reverse case
+ coordinate_type dr1 = bg::comparable_distance(seg, p1); BOOST_CHECK_CLOSE(dr1, d1, 0.001);
+ coordinate_type dr2 = bg::comparable_distance(seg, p2); BOOST_CHECK_CLOSE(dr2, d2, 0.001);
+}
+
+template <typename P>
+void test_distance_linestring()
+{
+ bg::model::linestring<P> points;
+ points.push_back(bg::make<P>(1, 1));
+ points.push_back(bg::make<P>(3, 3));
+
+ P p = bg::make<P>(2, 1);
+
+ typename bg::coordinate_type<P>::type d = bg::comparable_distance(p, points);
+ BOOST_CHECK_CLOSE(d, 0.5, 0.001);
+
+ p = bg::make<P>(5, 5);
+ d = bg::comparable_distance(p, points);
+ BOOST_CHECK_CLOSE(d, 8.0, 0.001);
+
+
+ bg::model::linestring<P> line;
+ line.push_back(bg::make<P>(1,1));
+ line.push_back(bg::make<P>(2,2));
+ line.push_back(bg::make<P>(3,3));
+
+ p = bg::make<P>(5, 5);
+
+ d = bg::comparable_distance(p, line);
+ BOOST_CHECK_CLOSE(d, 8.0, 0.001);
+
+ // Reverse case
+ d = bg::comparable_distance(line, p);
+ BOOST_CHECK_CLOSE(d, 8.0, 0.001);
+}
+
+template <typename P>
+void test_all()
+{
+ test_distance_result<P>();
+ test_distance_point<P>();
+ test_distance_segment<P>();
+ test_distance_linestring<P>();
+}
+
+int test_main(int, char* [])
+{
+ //test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/comparable_distance.vcproj b/libs/geometry/test/algorithms/comparable_distance.vcproj
new file mode 100644
index 000000000..cf9b8ea41
--- /dev/null
+++ b/libs/geometry/test/algorithms/comparable_distance.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="comparable_distance"
+ ProjectGUID="{F11970B5-BE16-4FF5-9780-4C15082B76A0}"
+ RootNamespace="comparable_distance"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\comparable_distance"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\comparable_distance"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\comparable_distance.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/convert.cpp b/libs/geometry/test/algorithms/convert.cpp
new file mode 100644
index 000000000..90856ff4e
--- /dev/null
+++ b/libs/geometry/test/algorithms/convert.cpp
@@ -0,0 +1,323 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <algorithms/test_convert.hpp>
+
+
+
+template <typename Point1, typename Point2>
+void test_mixed_point_types()
+{
+ // Point
+ test_mixed_identical_result<Point1, Point2>("POINT(1 2)");
+
+ // Box
+ test_mixed_identical_result
+ <
+ bg::model::box<Point1>,
+ bg::model::box<Point2>
+ >
+ ("POLYGON((1 2,1 4,3 4,3 2,1 2))");
+
+ test_mixed_identical_result
+ <
+ bg::model::segment<Point1>,
+ bg::model::segment<Point2>
+ >
+ ("LINESTRING(1 1,2 2)");
+
+ // Linestring
+ test_mixed_identical_result
+ <
+ bg::model::linestring<Point1>,
+ bg::model::linestring<Point2>
+ >
+ ("LINESTRING(1 1,2 2)");
+
+ // Ring
+ test_mixed_identical_result
+ <
+ bg::model::ring<Point1>,
+ bg::model::ring<Point2>
+ >
+ ("POLYGON((1 1,2 2,3 0,1 1))");
+
+ test_mixed_reversible_result
+ <
+ bg::model::ring<Point1, true>,
+ bg::model::ring<Point2, false>
+ >
+ (
+ "POLYGON((1 1,2 2,3 0,1 1))",
+ "POLYGON((1 1,3 0,2 2,1 1))"
+ );
+
+ test_mixed
+ <
+ bg::model::ring<Point1, true, true>,
+ bg::model::ring<Point2, true, false>
+ >
+ (
+ "POLYGON((1 1,2 2,3 0,1 1))",
+ "POLYGON((1 1,2 2,3 0))"
+ );
+
+ test_mixed
+ <
+ bg::model::ring<Point1, true, false>,
+ bg::model::ring<Point2, true, true>
+ >
+ (
+ "POLYGON((1 1,2 2,3 0))",
+ "POLYGON((1 1,2 2,3 0,1 1))"
+ );
+
+ // Polygon
+ test_mixed_reversible_result
+ <
+ bg::model::polygon<Point1, true>,
+ bg::model::polygon<Point2, false>
+ >
+ (
+ "POLYGON((0 0,0 5,5 5,5 0,0 0),(1 1,3 2,2 4,1 1))",
+ "POLYGON((0 0,5 0,5 5,0 5,0 0),(1 1,2 4,3 2,1 1))"
+ );
+
+ test_mixed
+ <
+ bg::model::polygon<Point1>,
+ bg::model::polygon<Point2, false, false>
+ >
+ (
+ "POLYGON((0 0,0 5,5 5,5 0,0 0),(1 1,3 2,2 4,1 1))",
+ "POLYGON((0 0,5 0,5 5,0 5),(1 1,2 4,3 2))"
+ );
+ // (polygon uses ring, so other tests omitted here)
+
+ // Combinations:
+ // ring <-> polygon
+ test_mixed_identical_result
+ <
+ bg::model::polygon<Point1>,
+ bg::model::ring<Point2>
+ >
+ ("POLYGON((1 1,2 2,3 0,1 1))");
+
+ test_mixed_reversible_result
+ <
+ bg::model::polygon<Point1, true>,
+ bg::model::ring<Point2, false>
+ >
+ (
+ "POLYGON((1 1,2 2,3 0,1 1))",
+ "POLYGON((1 1,3 0,2 2,1 1))"
+ );
+
+ // Any hole will be omitted going from polygon to ring
+ test_mixed
+ <
+ bg::model::polygon<Point1>,
+ bg::model::ring<Point2>
+ >
+ (
+ "POLYGON((0 0,0 5,5 5,5 0,0 0),(1 1,3 2,2 4,1 1))",
+ "POLYGON((0 0,0 5,5 5,5 0,0 0))"
+ );
+
+ // point -> box
+ test_mixed
+ <
+ Point1,
+ bg::model::box<Point2>
+ >
+ (
+ "POINT(0 0)",
+ "POLYGON((0 0,0 0,0 0,0 0,0 0))"
+ );
+
+ // segment -> line
+ test_mixed
+ <
+ bg::model::segment<Point1>,
+ bg::model::linestring<Point2>
+ >
+ (
+ "LINESTRING(0 0,1 1)",
+ "LINESTRING(0 0,1 1)"
+ );
+
+ // box -> ring ( <- is NYI)
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::ring<Point2>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,0 2,2 2,2 0,0 0))"
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::ring<Point2, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,2 0,2 2,0 2,0 0))"
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::ring<Point2, true, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,0 2,2 2,2 0))"
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::ring<Point2, false, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,2 0,2 2,0 2))"
+ );
+
+ // box -> polygon ( <- is NYI)
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::polygon<Point2>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,0 2,2 2,2 0,0 0))"
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::polygon<Point2, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,2 0,2 2,0 2,0 0))"
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::polygon<Point2, true, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,0 2,2 2,2 0))"
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::polygon<Point2, false, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,2 0,2 2,0 2))"
+ );
+}
+
+template <typename Point1, typename Point2>
+void test_mixed_point_types_3d()
+{
+ // Point
+ test_mixed_identical_result<Point1, Point2>("POINT(1 2 3)");
+
+ test_mixed_identical_result
+ <
+ bg::model::segment<Point1>,
+ bg::model::segment<Point2>
+ >
+ ("LINESTRING(1 2 3,4 5 6)");
+
+ // Linestring
+ test_mixed_identical_result
+ <
+ bg::model::linestring<Point1>,
+ bg::model::linestring<Point2>
+ >
+ ("LINESTRING(1 2 3,4 5 6,7 8 9)");
+
+ // segment -> line
+ test_mixed
+ <
+ bg::model::segment<Point1>,
+ bg::model::linestring<Point2>
+ >
+ (
+ "LINESTRING(1 2 3,4 5 6)",
+ "LINESTRING(1 2 3,4 5 6)"
+ );
+}
+
+
+
+template <typename Point1, typename Point2>
+void test_mixed_types()
+{
+ test_mixed_point_types<Point1, Point2>();
+ test_mixed_point_types<Point2, Point1>();
+}
+
+
+template <typename Point1, typename Point2>
+void test_mixed_types_3d()
+{
+ test_mixed_point_types_3d<Point1, Point2>();
+ test_mixed_point_types_3d<Point2, Point1>();
+}
+
+void test_array()
+{
+ int a[2] = {1, 2};
+ int b[2];
+ bg::convert(a, b);
+ BOOST_CHECK_EQUAL(b[0], 1);
+ BOOST_CHECK_EQUAL(b[1], 2);
+}
+
+int test_main(int, char* [])
+{
+ test_mixed_types
+ <
+ bg::model::point<int, 2, bg::cs::cartesian>,
+ bg::model::point<double, 2, bg::cs::cartesian>
+ >();
+ test_mixed_types
+ <
+ boost::tuple<float, float>,
+ bg::model::point<float, 2, bg::cs::cartesian>
+ >();
+ test_mixed_types_3d
+ <
+ boost::tuple<double, double, double>,
+ bg::model::point<double, 3, bg::cs::cartesian>
+ >();
+
+ test_array();
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/convert.vcproj b/libs/geometry/test/algorithms/convert.vcproj
new file mode 100644
index 000000000..c75bf0ee5
--- /dev/null
+++ b/libs/geometry/test/algorithms/convert.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="convert"
+ ProjectGUID="{FABF1AA7-F695-49F8-92F6-AB6C4B0C088A}"
+ RootNamespace="convert"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\convert"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\convert"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\convert.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/convex_hull.cpp b/libs/geometry/test/algorithms/convex_hull.cpp
new file mode 100644
index 000000000..f268aa90e
--- /dev/null
+++ b/libs/geometry/test/algorithms/convex_hull.cpp
@@ -0,0 +1,66 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <cstddef>
+#include <string>
+
+#include <algorithms/test_convex_hull.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ // from sample linestring
+ test_geometry<bg::model::linestring<P> >(
+ "linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)", 5, 4, 3.8);
+
+ // rectangular, with concavity
+ test_geometry<bg::model::polygon<P> >(
+ "polygon((1 1, 1 4, 3 4, 3 3, 4 3, 4 4, 5 4, 5 1, 1 1))",
+ 9, 5, 12.0);
+
+ // from sample polygon, with concavity
+ test_geometry<bg::model::polygon<P> >(
+ "polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0"
+ ", 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))",
+ 12, 8, 5.245);
+
+ test_geometry<bg::model::ring<P> >(
+ "polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0"
+ ", 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))",
+ 12, 8, 5.245);
+
+ test_geometry<bg::model::box<P> >("box(0 0,2 2)", 4, 5, 4);
+
+ test_empty_input<bg::model::linestring<P> >();
+ test_empty_input<bg::model::ring<P> >();
+ test_empty_input<bg::model::polygon<P> >();
+}
+
+
+int test_main(int, char* [])
+{
+ //test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/convex_hull.vcproj b/libs/geometry/test/algorithms/convex_hull.vcproj
new file mode 100644
index 000000000..365f60c0f
--- /dev/null
+++ b/libs/geometry/test/algorithms/convex_hull.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="convex_hull"
+ ProjectGUID="{0AFF7A85-63A7-4178-92A5-CC692B09F5B9}"
+ RootNamespace="convex_hull"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\convex_hull"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\convex_hull"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\convex_hull.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/correct.cpp b/libs/geometry/test/algorithms/correct.cpp
new file mode 100644
index 000000000..b92928659
--- /dev/null
+++ b/libs/geometry/test/algorithms/correct.cpp
@@ -0,0 +1,182 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <sstream>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/dsv/write.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, std::string const& expected)
+{
+ Geometry geometry;
+
+ bg::read_wkt(wkt, geometry);
+ bg::correct(geometry);
+
+ std::ostringstream out;
+ out << bg::wkt(geometry);
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+
+// Note: 3D/box test cannot be done using WKT because:
+// -> wkt-box does not exist
+// -> so it is converted to a ring
+// -> ring representation of 3d-box is not supported, nor feasible
+// -> so it uses DSV which can represent a box
+template <typename Geometry>
+void test_geometry_dsv(std::string const& wkt, std::string const& expected)
+{
+ Geometry geometry;
+
+ bg::read_wkt(wkt, geometry);
+ bg::correct(geometry);
+
+ std::ostringstream out;
+ out << bg::dsv(geometry);
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+
+
+
+
+
+template <typename P>
+void test_all()
+{
+ // Define clockwise and counter clockwise polygon
+ std::string cw_ring = "POLYGON((0 0,0 1,1 1,1 0,0 0))";
+ std::string ccw_ring = "POLYGON((0 0,1 0,1 1,0 1,0 0))";
+ std::string cw_open_ring = "POLYGON((0 0,0 1,1 1,1 0))";
+ std::string ccw_open_ring = "POLYGON((0 0,1 0,1 1,0 1))";
+
+ // already cw_ring
+ test_geometry<bg::model::ring<P> >(cw_ring, cw_ring);
+
+ // wrong order
+ test_geometry<bg::model::ring<P> >(ccw_ring, cw_ring);
+
+ // ccw-ring, input ccw-ring, already correct
+ test_geometry<bg::model::ring<P, false> >(ccw_ring, ccw_ring);
+
+ // ccw-ring, input cw-ring, corrected
+ test_geometry<bg::model::ring<P, false> >(cw_ring, ccw_ring);
+
+ // open-ring, input ccw-ring, already correct
+ test_geometry<bg::model::ring<P, true, false> >(cw_open_ring, cw_open_ring);
+
+ // ccw-ring, input cw-ring, corrected
+ test_geometry<bg::model::ring<P, true, false> >(ccw_open_ring, "POLYGON((0 1,1 1,1 0,0 0))");
+
+
+
+ // not closed
+ test_geometry<bg::model::ring<P> >(
+ ccw_open_ring,
+ cw_ring);
+
+ // counter clockwise, cw_ring
+ test_geometry<bg::model::ring<P, false> >(ccw_ring, ccw_ring);
+
+ test_geometry<bg::model::ring<P, false> >(cw_ring, ccw_ring);
+
+
+ // polygon: cw_ring
+ test_geometry<bg::model::polygon<P> >(cw_ring, cw_ring);
+ // wrong order
+ test_geometry<bg::model::polygon<P> >(
+ "POLYGON((0 0,1 0,1 1,0 1,0 0))",
+ cw_ring);
+ // wrong order & not closed
+ test_geometry<bg::model::polygon<P> >(
+ ccw_open_ring,
+ cw_ring);
+
+
+ std::string cw_holey_polygon =
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,2 1,2 2,1 2,1 1))";
+ std::string ccw_holey_polygon =
+ "POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,1 2,2 2,2 1,1 1))";
+
+ // with holes: cw_ring
+ test_geometry<bg::model::polygon<P> >(
+ cw_holey_polygon,
+ cw_holey_polygon);
+ // wrong order of main
+ test_geometry<bg::model::polygon<P> >(
+ "POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1))",
+ cw_holey_polygon);
+ // wrong order of hole
+ test_geometry<bg::model::polygon<P> >(
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 2,2 2,2 1,1 1))",
+ cw_holey_polygon);
+
+ // wrong order of main and hole
+ test_geometry<bg::model::polygon<P> >(ccw_holey_polygon, cw_holey_polygon);
+
+ // test the counter-clockwise
+ test_geometry<bg::model::polygon<P, false> >(
+ ccw_holey_polygon, ccw_holey_polygon);
+
+ // Boxes
+ std::string proper_box = "POLYGON((0 0,0 2,2 2,2 0,0 0))";
+ test_geometry<bg::model::box<P> >(proper_box, proper_box);
+ test_geometry<bg::model::box<P> >("BOX(0 0,2 2)", proper_box);
+ test_geometry<bg::model::box<P> >("BOX(2 2,0 0)", proper_box);
+ test_geometry<bg::model::box<P> >("BOX(0 2,2 0)", proper_box);
+
+ // Cubes
+ typedef bg::model::box<bg::model::point<double, 3, bg::cs::cartesian> > box3d;
+ std::string proper_3d_dsv_box = "((0, 0, 0), (2, 2, 2))";
+ test_geometry_dsv<box3d>("BOX(0 0 0,2 2 2)", proper_3d_dsv_box);
+ test_geometry_dsv<box3d>("BOX(2 2 2,0 0 0)", proper_3d_dsv_box);
+ test_geometry_dsv<box3d>("BOX(0 2 2,2 0 0)", proper_3d_dsv_box);
+ test_geometry_dsv<box3d>("BOX(2 0 2,0 2 0)", proper_3d_dsv_box);
+ test_geometry_dsv<box3d>("BOX(0 0 2,2 2 0)", proper_3d_dsv_box);
+}
+
+
+int test_main(int, char* [])
+{
+ //test_all<int[2]>();
+ //test_all<float[2]>(); not yet because cannot be copied, for polygon
+ //test_all<double[2]>();
+
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/correct.vcproj b/libs/geometry/test/algorithms/correct.vcproj
new file mode 100644
index 000000000..e36945a2d
--- /dev/null
+++ b/libs/geometry/test/algorithms/correct.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="correct"
+ ProjectGUID="{71582BDA-D4DF-400D-8630-378BE102C038}"
+ RootNamespace="correct"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\correct"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\correct"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\correct.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/covered_by.cpp b/libs/geometry/test/algorithms/covered_by.cpp
new file mode 100644
index 000000000..32683cbe7
--- /dev/null
+++ b/libs/geometry/test/algorithms/covered_by.cpp
@@ -0,0 +1,149 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <algorithms/test_covered_by.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ /*
+ // trivial case
+ test_ring<P>("POINT(1 1)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", true, false);
+
+ // on border/corner
+ test_ring<P>("POINT(0 0)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false, true);
+ test_ring<P>("POINT(0 1)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false, true);
+
+ // aligned to segment/vertex
+ test_ring<P>("POINT(1 1)", "POLYGON((0 0,0 3,3 3,3 1,2 1,2 0,0 0))", true, false);
+ test_ring<P>("POINT(1 1)", "POLYGON((0 0,0 3,4 3,3 1,2 2,2 0,0 0))", true, false);
+
+ // same polygon, but point on border
+ test_ring<P>("POINT(3 3)", "POLYGON((0 0,0 3,3 3,3 1,2 1,2 0,0 0))", false, true);
+ test_ring<P>("POINT(3 3)", "POLYGON((0 0,0 3,4 3,3 1,2 2,2 0,0 0))", false, true);
+
+ // holes
+ test_geometry<P, bg::model::polygon<P> >("POINT(2 2)",
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,3 1,3 3,1 3,1 1))", false);
+
+ */
+
+ typedef bg::model::box<P> box_type;
+
+ test_geometry<P, box_type>("POINT(1 1)", "BOX(0 0,2 2)", true);
+ test_geometry<P, box_type>("POINT(0 0)", "BOX(0 0,2 2)", true);
+ test_geometry<P, box_type>("POINT(2 2)", "BOX(0 0,2 2)", true);
+ test_geometry<P, box_type>("POINT(0 1)", "BOX(0 0,2 2)", true);
+ test_geometry<P, box_type>("POINT(1 0)", "BOX(0 0,2 2)", true);
+ test_geometry<P, box_type>("POINT(3 3)", "BOX(0 0,2 2)", false);
+
+ test_geometry<box_type, box_type>("BOX(1 1,2 2)", "BOX(0 0,3 3)", true);
+ test_geometry<box_type, box_type>("BOX(0 0,3 3)", "BOX(1 1,2 2)", false);
+ test_geometry<box_type, box_type>("BOX(0 0,2 2)", "BOX(0 0,3 3)", true);
+ test_geometry<box_type, box_type>("BOX(1 1,3 3)", "BOX(0 0,3 3)", true);
+ test_geometry<box_type, box_type>("BOX(1 2,3 3)", "BOX(0 0,3 3)", true);
+ test_geometry<box_type, box_type>("BOX(1 1,4 3)", "BOX(0 0,3 3)", false);
+
+
+ /*
+ test_within_code<P, box_type>("POINT(1 1)", "BOX(0 0,2 2)", 1);
+ test_within_code<P, box_type>("POINT(1 0)", "BOX(0 0,2 2)", 0);
+ test_within_code<P, box_type>("POINT(0 1)", "BOX(0 0,2 2)", 0);
+ test_within_code<P, box_type>("POINT(0 3)", "BOX(0 0,2 2)", -1);
+ test_within_code<P, box_type>("POINT(3 3)", "BOX(0 0,2 2)", -1);
+
+ test_within_code<box_type, box_type>("BOX(1 1,2 2)", "BOX(0 0,3 3)", 1);
+ test_within_code<box_type, box_type>("BOX(0 1,2 2)", "BOX(0 0,3 3)", 0);
+ test_within_code<box_type, box_type>("BOX(1 0,2 2)", "BOX(0 0,3 3)", 0);
+ test_within_code<box_type, box_type>("BOX(1 1,2 3)", "BOX(0 0,3 3)", 0);
+ test_within_code<box_type, box_type>("BOX(1 1,3 2)", "BOX(0 0,3 3)", 0);
+ test_within_code<box_type, box_type>("BOX(1 1,3 4)", "BOX(0 0,3 3)", -1);
+ */
+}
+
+
+void test_3d()
+{
+ typedef boost::geometry::model::point<double, 3, boost::geometry::cs::cartesian> point_type;
+ typedef boost::geometry::model::box<point_type> box_type;
+ box_type box(point_type(0, 0, 0), point_type(4, 4, 4));
+ BOOST_CHECK_EQUAL(bg::covered_by(point_type(2, 2, 2), box), true);
+ BOOST_CHECK_EQUAL(bg::covered_by(point_type(2, 4, 2), box), true);
+ BOOST_CHECK_EQUAL(bg::covered_by(point_type(2, 2, 4), box), true);
+ BOOST_CHECK_EQUAL(bg::covered_by(point_type(2, 2, 5), box), false);
+}
+
+template <typename P1, typename P2>
+void test_mixed_of()
+{
+ typedef boost::geometry::model::polygon<P1> polygon_type1;
+ typedef boost::geometry::model::polygon<P2> polygon_type2;
+ typedef boost::geometry::model::box<P1> box_type1;
+ typedef boost::geometry::model::box<P2> box_type2;
+
+ polygon_type1 poly1, poly2;
+ boost::geometry::read_wkt("POLYGON((0 0,0 5,5 5,5 0,0 0))", poly1);
+ boost::geometry::read_wkt("POLYGON((0 0,0 5,5 5,5 0,0 0))", poly2);
+
+ box_type1 box1(P1(1, 1), P1(4, 4));
+ box_type2 box2(P2(0, 0), P2(5, 5));
+ P1 p1(3, 3);
+ P2 p2(3, 3);
+
+ BOOST_CHECK_EQUAL(bg::covered_by(p1, poly2), true);
+ BOOST_CHECK_EQUAL(bg::covered_by(p2, poly1), true);
+ BOOST_CHECK_EQUAL(bg::covered_by(p2, box1), true);
+ BOOST_CHECK_EQUAL(bg::covered_by(p1, box2), true);
+ BOOST_CHECK_EQUAL(bg::covered_by(box1, box2), true);
+ BOOST_CHECK_EQUAL(bg::covered_by(box2, box1), false);
+}
+
+
+void test_mixed()
+{
+ // Mixing point types and coordinate types
+ test_mixed_of
+ <
+ boost::geometry::model::d2::point_xy<double>,
+ boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>
+ >();
+ test_mixed_of
+ <
+ boost::geometry::model::d2::point_xy<float>,
+ boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>
+ >();
+ test_mixed_of
+ <
+ boost::geometry::model::d2::point_xy<int>,
+ boost::geometry::model::d2::point_xy<double>
+ >();
+}
+
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+ //test_spherical<bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+
+ test_mixed();
+ test_3d();
+
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+ //test_spherical<bg::model::point<ttmath_big, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/covered_by.vcproj b/libs/geometry/test/algorithms/covered_by.vcproj
new file mode 100644
index 000000000..13f41e930
--- /dev/null
+++ b/libs/geometry/test/algorithms/covered_by.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="covered_by"
+ ProjectGUID="{5ABF0B56-F9F1-4D93-B15A-E3972F45D97B}"
+ RootNamespace="covered_by"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\covered_by"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\covered_by"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\covered_by.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/detail/Jamfile.v2 b/libs/geometry/test/algorithms/detail/Jamfile.v2
new file mode 100644
index 000000000..015e2be6a
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/Jamfile.v2
@@ -0,0 +1,16 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-algorithms-detail
+ :
+ [ run partition.cpp ]
+ ;
+
+build-project sections ;
diff --git a/libs/geometry/test/algorithms/detail/detail.sln b/libs/geometry/test/algorithms/detail/detail.sln
new file mode 100644
index 000000000..394921ecc
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/detail.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "partition", "partition.vcproj", "{5EF21715-DB87-41AB-9D0A-59ED04F316A1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5EF21715-DB87-41AB-9D0A-59ED04F316A1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5EF21715-DB87-41AB-9D0A-59ED04F316A1}.Debug|Win32.Build.0 = Debug|Win32
+ {5EF21715-DB87-41AB-9D0A-59ED04F316A1}.Release|Win32.ActiveCfg = Release|Win32
+ {5EF21715-DB87-41AB-9D0A-59ED04F316A1}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/algorithms/detail/partition.cpp b/libs/geometry/test/algorithms/detail/partition.cpp
new file mode 100644
index 000000000..4bf75529b
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/partition.cpp
@@ -0,0 +1,476 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <algorithms/test_overlay.hpp>
+
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+
+#include <boost/geometry/algorithms/detail/partition.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
+
+
+template <typename Box>
+struct box_item
+{
+ int id;
+ Box box;
+ box_item(int i = 0, std::string const& wkt = "")
+ : id(i)
+ {
+ if (! wkt.empty())
+ {
+ bg::read_wkt(wkt, box);
+ }
+ }
+};
+
+
+struct get_box
+{
+ template <typename Box, typename InputItem>
+ static inline void apply(Box& total, InputItem const& item)
+ {
+ bg::expand(total, item.box);
+ }
+};
+
+struct ovelaps_box
+{
+ template <typename Box, typename InputItem>
+ static inline bool apply(Box const& box, InputItem const& item)
+ {
+ return ! bg::detail::disjoint::disjoint_box_box(box, item.box);
+ }
+};
+
+
+template <typename Box>
+struct box_visitor
+{
+ int count;
+ typename bg::default_area_result<Box>::type area;
+
+ box_visitor()
+ : count(0)
+ , area(0)
+ {}
+
+ template <typename Item>
+ inline void apply(Item const& item1, Item const& item2)
+ {
+ if (bg::intersects(item1.box, item2.box))
+ {
+ Box b;
+ bg::intersection(item1.box, item2.box, b);
+ area += bg::area(b);
+ count++;
+ }
+ }
+};
+
+
+
+template <typename Box>
+void test_boxes(std::string const& wkt_box_list, double expected_area, int expected_count)
+{
+ std::vector<std::string> wkt_boxes;
+
+ boost::split(wkt_boxes, wkt_box_list, boost::is_any_of(";"), boost::token_compress_on);
+
+ typedef box_item<Box> sample;
+ std::vector<sample> boxes;
+
+ int index = 1;
+ BOOST_FOREACH(std::string const& wkt, wkt_boxes)
+ {
+ boxes.push_back(sample(index++, wkt));
+ }
+
+ box_visitor<Box> visitor;
+ bg::partition
+ <
+ Box, get_box, ovelaps_box
+ >::apply(boxes, visitor, 1);
+
+ BOOST_CHECK_CLOSE(visitor.area, expected_area, 0.001);
+ BOOST_CHECK_EQUAL(visitor.count, expected_count);
+}
+
+
+
+struct point_item
+{
+ point_item()
+ : id(0)
+ {}
+
+ int id;
+ double x;
+ double y;
+};
+
+BOOST_GEOMETRY_REGISTER_POINT_2D(point_item, double, cs::cartesian, x, y)
+
+
+struct get_point
+{
+ template <typename Box, typename InputItem>
+ static inline void apply(Box& total, InputItem const& item)
+ {
+ bg::expand(total, item);
+ }
+};
+
+struct ovelaps_point
+{
+ template <typename Box, typename InputItem>
+ static inline bool apply(Box const& box, InputItem const& item)
+ {
+ return ! bg::disjoint(item, box);
+ }
+};
+
+
+struct point_visitor
+{
+ int count;
+
+ point_visitor()
+ : count(0)
+ {}
+
+ template <typename Item>
+ inline void apply(Item const& item1, Item const& item2)
+ {
+ if (bg::equals(item1, item2))
+ {
+ count++;
+ }
+ }
+};
+
+
+
+void test_points(std::string const& wkt1, std::string const& wkt2, int expected_count)
+{
+ bg::model::multi_point<point_item> mp1, mp2;
+ bg::read_wkt(wkt1, mp1);
+ bg::read_wkt(wkt2, mp2);
+
+ int id = 1;
+ BOOST_FOREACH(point_item& p, mp1)
+ { p.id = id++; }
+ id = 1;
+ BOOST_FOREACH(point_item& p, mp2)
+ { p.id = id++; }
+
+ point_visitor visitor;
+ bg::partition
+ <
+ bg::model::box<point_item>, get_point, ovelaps_point
+ >::apply(mp1, mp2, visitor, 1);
+
+ BOOST_CHECK_EQUAL(visitor.count, expected_count);
+}
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::box<P> box;
+
+ test_boxes<box>(
+ // 1 2 3 4 5 6 7
+ "box(0 0,1 1); box(0 0,2 2); box(9 9,10 10); box(8 8,9 9); box(4 4,6 6); box(2 4,6 8); box(7 1,8 2)",
+ 5, // Area(Intersection(1,2)) + A(I(5,6))
+ 3);
+
+ test_boxes<box>(
+ "box(0 0,10 10); box(4 4,6 6); box(3 3,7 7)",
+ 4 + 16 + 4, // A(I(1,2)) + A(I(1,3)) + A(I(2,3))
+ 3);
+
+ test_boxes<box>(
+ "box(0 2,10 3); box(3 1,4 5); box(7 1,8 5)",
+ 1 + 1, // A(I(1,2)) + A(I(1,3))
+ 2);
+
+ test_points("multipoint((1 1))", "multipoint((1 1))", 1);
+ test_points("multipoint((0 0),(1 1),(7 3),(10 10))", "multipoint((1 1),(2 2),(7 3))", 2);
+
+}
+
+//------------------- higher volumes
+
+template <typename SvgMapper>
+struct svg_visitor
+{
+ SvgMapper& m_mapper;
+
+ svg_visitor(SvgMapper& mapper)
+ : m_mapper(mapper)
+ {}
+
+ template <typename Box>
+ inline void apply(Box const& box, int level)
+ {
+ /*
+ std::string color("rgb(64,64,64)");
+ switch(level)
+ {
+ case 0 : color = "rgb(255,0,0)"; break;
+ case 1 : color = "rgb(0,255,0)"; break;
+ case 2 : color = "rgb(0,0,255)"; break;
+ case 3 : color = "rgb(255,255,0)"; break;
+ case 4 : color = "rgb(255,0,255)"; break;
+ case 5 : color = "rgb(0,255,255)"; break;
+ case 6 : color = "rgb(255,128,0)"; break;
+ case 7 : color = "rgb(0,128,255)"; break;
+ }
+ std::ostringstream style;
+ style << "fill:none;stroke-width:" << (5.0 - level / 2.0) << ";stroke:" << color << ";";
+ m_mapper.map(box, style.str());
+ */
+ m_mapper.map(box, "fill:none;stroke-width:2;stroke:rgb(0,0,0);");
+
+ }
+};
+
+
+
+
+template <typename Collection>
+void fill_points(Collection& collection, int seed, int size, int count)
+{
+ typedef boost::minstd_rand base_generator_type;
+
+ base_generator_type generator(seed);
+
+ boost::uniform_int<> random_coordinate(0, size - 1);
+ boost::variate_generator<base_generator_type&, boost::uniform_int<> >
+ coordinate_generator(generator, random_coordinate);
+
+ std::set<std::pair<int, int> > included;
+
+ int n = 0;
+ for (int i = 0; n < count && i < count*count; i++)
+ {
+ int x = coordinate_generator();
+ int y = coordinate_generator();
+ std::pair<int, int> pair = std::make_pair(x, y);
+ if (included.find(pair) == included.end())
+ {
+ included.insert(pair);
+ typename boost::range_value<Collection>::type item;
+ item.x = x;
+ item.y = y;
+ collection.push_back(item);
+ n++;
+ }
+ }
+}
+
+void test_many_points(int seed, int size, int count)
+{
+ bg::model::multi_point<point_item> mp1, mp2;
+
+ fill_points(mp1, seed, size, count);
+ fill_points(mp2, seed * 2, size, count);
+
+ // Test equality in quadratic loop
+ int expected_count = 0;
+ BOOST_FOREACH(point_item const& item1, mp1)
+ {
+ BOOST_FOREACH(point_item const& item2, mp2)
+ {
+ if (bg::equals(item1, item2))
+ {
+ expected_count++;
+ }
+ }
+ }
+
+#if defined(TEST_WITH_SVG)
+ std::ostringstream filename;
+ filename << "partition" << seed << ".svg";
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<point_item> mapper(svg, 800, 800);
+
+ {
+ point_item p;
+ p.x = -1; p.y = -1; mapper.add(p);
+ p.x = size + 1; p.y = size + 1; mapper.add(p);
+ }
+
+ typedef svg_visitor<bg::svg_mapper<point_item> > box_visitor_type;
+ box_visitor_type box_visitor(mapper);
+#else
+ typedef bg::visit_no_policy box_visitor_type;
+ box_visitor_type box_visitor;
+#endif
+
+ point_visitor visitor;
+ bg::partition
+ <
+ bg::model::box<point_item>, get_point, ovelaps_point,
+ box_visitor_type
+ >::apply(mp1, mp2, visitor, 2, box_visitor);
+
+ BOOST_CHECK_EQUAL(visitor.count, expected_count);
+
+#if defined(TEST_WITH_SVG)
+ BOOST_FOREACH(point_item const& item, mp1)
+ {
+ mapper.map(item, "fill:rgb(255,128,0);stroke:rgb(0,0,100);stroke-width:1", 8);
+ }
+ BOOST_FOREACH(point_item const& item, mp2)
+ {
+ mapper.map(item, "fill:rgb(0,128,255);stroke:rgb(0,0,100);stroke-width:1", 4);
+ }
+#endif
+}
+
+template <typename Collection>
+void fill_boxes(Collection& collection, int seed, int size, int count)
+{
+ typedef boost::minstd_rand base_generator_type;
+
+ base_generator_type generator(seed);
+
+ boost::uniform_int<> random_coordinate(0, size * 10 - 1);
+ boost::variate_generator<base_generator_type&, boost::uniform_int<> >
+ coordinate_generator(generator, random_coordinate);
+
+ int n = 0;
+ for (int i = 0; n < count && i < count*count; i++)
+ {
+ int w = coordinate_generator() % 30;
+ int h = coordinate_generator() % 30;
+ if (w > 0 && h > 0)
+ {
+ int x = coordinate_generator();
+ int y = coordinate_generator();
+ if (x + w < size * 10 && y + h < size * 10)
+ {
+ typename boost::range_value<Collection>::type item(n+1);
+ bg::assign_values(item.box, x / 10.0, y / 10.0, (x + w) / 10.0, (y + h) / 10.0);
+ collection.push_back(item);
+ n++;
+ }
+ }
+ }
+}
+
+
+
+void test_many_boxes(int seed, int size, int count)
+{
+ typedef bg::model::box<point_item> box_type;
+ std::vector<box_item<box_type> > boxes;
+
+ fill_boxes(boxes, seed, size, count);
+
+ // Test equality in quadratic loop
+ int expected_count = 0;
+ double expected_area = 0.0;
+ BOOST_FOREACH(box_item<box_type> const& item1, boxes)
+ {
+ BOOST_FOREACH(box_item<box_type> const& item2, boxes)
+ {
+ if (item1.id < item2.id)
+ {
+ if (bg::intersects(item1.box, item2.box))
+ {
+ box_type b;
+ bg::intersection(item1.box, item2.box, b);
+ expected_area += bg::area(b);
+ expected_count++;
+ }
+ }
+ }
+ }
+
+
+#if defined(TEST_WITH_SVG)
+ std::ostringstream filename;
+ filename << "partition_box_" << seed << ".svg";
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<point_item> mapper(svg, 800, 800);
+
+ {
+ point_item p;
+ p.x = -1; p.y = -1; mapper.add(p);
+ p.x = size + 1; p.y = size + 1; mapper.add(p);
+ }
+
+ BOOST_FOREACH(box_item<box_type> const& item, boxes)
+ {
+ mapper.map(item.box, "opacity:0.6;fill:rgb(50,50,210);stroke:rgb(0,0,0);stroke-width:1");
+ }
+
+ typedef svg_visitor<bg::svg_mapper<point_item> > partition_visitor_type;
+ partition_visitor_type partition_visitor(mapper);
+
+
+ box_visitor<box_type> visitor;
+ bg::partition
+ <
+ box_type, get_box, ovelaps_box,
+ partition_visitor_type
+ >::apply(boxes, visitor, 2, partition_visitor);
+
+ BOOST_CHECK_EQUAL(visitor.count, expected_count);
+ BOOST_CHECK_CLOSE(visitor.area, expected_area, 0.001);
+
+#endif
+}
+
+
+
+
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+ test_many_points(12345, 20, 40);
+ test_many_points(54321, 20, 60);
+ test_many_points(67890, 20, 80);
+ test_many_points(98765, 20, 100);
+ for (int i = 1; i < 10; i++)
+ {
+ test_many_points(i, 30, i * 20);
+ }
+
+ test_many_boxes(12345, 20, 40);
+ for (int i = 1; i < 10; i++)
+ {
+ test_many_boxes(i, 20, i * 10);
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/detail/partition.vcproj b/libs/geometry/test/algorithms/detail/partition.vcproj
new file mode 100644
index 000000000..66e26a973
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/partition.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="partition"
+ ProjectGUID="{5EF21715-DB87-41AB-9D0A-59ED04F316A1}"
+ RootNamespace="partition"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\partition"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../..;../../../../../boost/geometry/extensions/contrib/ttmath"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\partition"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../..;../../../../../boost/geometry/extensions/contrib/ttmath"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\partition.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/detail/sections/Jamfile.v2 b/libs/geometry/test/algorithms/detail/sections/Jamfile.v2
new file mode 100644
index 000000000..973ed75f6
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/sections/Jamfile.v2
@@ -0,0 +1,15 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-algorithms-detail-sections
+ :
+ [ run sectionalize.cpp ]
+ [ run range_by_section.cpp ]
+ ;
diff --git a/libs/geometry/test/algorithms/detail/sections/range_by_section.cpp b/libs/geometry/test/algorithms/detail/sections/range_by_section.cpp
new file mode 100644
index 000000000..e1d1bca1d
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/sections/range_by_section.cpp
@@ -0,0 +1,102 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
+#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
+#include <boost/geometry/views/detail/range_type.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+
+template <int DimensionCount, bool Reverse, typename Geometry>
+void test_sectionalize(std::string const caseid, Geometry const& geometry, std::size_t section_count)
+{
+ typedef typename bg::point_type<Geometry>::type point;
+ typedef bg::model::box<point> box;
+ typedef bg::sections<box, DimensionCount> sections;
+
+ sections s;
+ bg::sectionalize<Reverse>(geometry, s);
+
+ BOOST_CHECK_EQUAL(s.size(), section_count);
+
+ typedef typename bg::closeable_view
+ <
+ typename bg::detail::range_type<Geometry>::type const,
+ bg::closure<Geometry>::value
+ >::type cview_type;
+ typedef typename bg::reversible_view
+ <
+ cview_type const,
+ Reverse ? bg::iterate_reverse : bg::iterate_forward
+ >::type view_type;
+ typedef typename boost::range_iterator
+ <
+ view_type const
+ >::type range_iterator;
+
+ BOOST_FOREACH(typename sections::value_type const& sec, s)
+ {
+ cview_type cview(bg::range_by_section(geometry, sec));
+ view_type view(cview);
+ range_iterator it1 = boost::begin(view) + sec.begin_index;
+ range_iterator it2 = boost::begin(view) + sec.end_index;
+ int count = 0;
+ for (range_iterator it = it1; it != it2; ++it)
+ {
+ count++;
+ }
+ BOOST_CHECK_EQUAL(int(sec.count), count);
+ }
+}
+
+template <typename Geometry, bool Reverse>
+void test_sectionalize(std::string const& caseid, std::string const& wkt,
+ std::size_t count1)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ if (bg::closure<Geometry>::value == bg::open)
+ {
+ geometry.outer().resize(geometry.outer().size() - 1);
+ }
+ //bg::correct(geometry);
+ test_sectionalize<1, Reverse>(caseid + "_d1", geometry, count1);
+}
+
+template <typename P>
+void test_all()
+{
+ std::string const first = "polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0, 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))";
+ test_sectionalize<bg::model::polygon<P>, false>("first", first, 4);
+
+ test_sectionalize<bg::model::polygon<P, false>, true>("first_reverse",
+ first, 4);
+
+ test_sectionalize<bg::model::polygon<P, false, true>, false>("first_open",
+ first, 4);
+
+ test_sectionalize<bg::model::polygon<P, true, false>, true>("first_open_reverse",
+ first, 4);
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/detail/sections/range_by_section.vcproj b/libs/geometry/test/algorithms/detail/sections/range_by_section.vcproj
new file mode 100644
index 000000000..0d7ffb6cf
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/sections/range_by_section.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="range_by_section"
+ ProjectGUID="{A91434CB-CB32-48AE-8C74-81B6A1EB342F}"
+ RootNamespace="range_by_section"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\range_by_section"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\range_by_section"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\range_by_section.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp b/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp
new file mode 100644
index 000000000..762190704
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/sections/sectionalize.cpp
@@ -0,0 +1,341 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+
+
+#include <test_common/test_point.hpp>
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+# include <boost/geometry/algorithms/buffer.hpp>
+# include <boost/geometry/algorithms/centroid.hpp>
+#endif
+
+
+
+template <int DimensionCount, typename Geometry>
+void test_sectionalize_part()
+{
+ typedef typename bg::point_type<Geometry>::type point_type;
+ typedef bg::model::box<point_type> box_type;
+
+ typedef bg::sections<box_type, DimensionCount> sections_type;
+ typedef typename boost::range_value<sections_type>::type section_type;
+
+ typedef bg::detail::sectionalize::sectionalize_part
+ <
+ Geometry, point_type, sections_type, 1, 10
+ > sectionalize_part;
+
+ sections_type sections;
+ section_type section;
+
+
+ Geometry geometry;
+ geometry.push_back(bg::make<point_type>(1, 1));
+
+ bg::ring_identifier ring_id;
+ int index = 0;
+ int ndi = 0;
+ sectionalize_part::apply(sections, section, index, ndi, geometry, ring_id);
+ // There should not yet be anything generated, because it is only ONE point
+
+ geometry.push_back(bg::make<point_type>(2, 2));
+ sectionalize_part::apply(sections, section, index, ndi, geometry, ring_id);
+
+}
+
+
+template <int DimensionCount, bool Reverse, typename G>
+void test_sectionalize(std::string const caseid, G const& g, std::size_t section_count,
+ std::string const& index_check, std::string const& dir_check)
+{
+ typedef typename bg::point_type<G>::type point;
+ typedef bg::model::box<point> box;
+ typedef bg::sections<box, DimensionCount> sections;
+
+ sections s;
+ bg::sectionalize<Reverse>(g, s);
+
+ BOOST_CHECK_EQUAL(s.size(), section_count);
+
+ // Check if sections are consecutive and consistent
+ int previous_index = -1;
+ BOOST_FOREACH(typename sections::value_type const& sec, s)
+ {
+ if (sec.begin_index > 0)
+ {
+ BOOST_CHECK_EQUAL(previous_index, sec.begin_index);
+ }
+ BOOST_CHECK_EQUAL(int(sec.count), int(sec.end_index - sec.begin_index));
+ previous_index = sec.end_index;
+ }
+
+ // Output streams for sections, boxes, other
+ std::ostringstream out_sections;
+ std::ostringstream out_boxes;
+ std::ostringstream out_dirs;
+
+
+ for (typename sections::size_type i = 0; i < s.size(); i++)
+ {
+ box const& b = s[i].bounding_box;
+
+ if (i > 0)
+ {
+ out_sections << "|";
+ out_dirs << "|";
+ out_boxes << "|";
+ }
+
+ out_sections << s[i].begin_index << ".." << s[i].end_index;
+ out_boxes << bg::get<0,0>(b) << " " << bg::get<0,1>(b)
+ << ".." << bg::get<1,0>(b) << " " << bg::get<1,1>(b);
+ for (int d = 0; d < DimensionCount; d++)
+ {
+ out_dirs << (d == 0 ? "" : " ");
+ switch(s[i].directions[d])
+ {
+ case -99: out_dirs << "DUP"; break;
+ case -1 : out_dirs << "-"; break;
+ case 0 : out_dirs << "."; break;
+ case +1 : out_dirs << "+"; break;
+ }
+ }
+ }
+
+ if (! index_check.empty())
+ {
+ BOOST_CHECK_EQUAL(out_sections.str(), index_check);
+ }
+ if (! dir_check.empty())
+ {
+ BOOST_CHECK_EQUAL(out_dirs.str(), dir_check);
+ }
+ else
+ {
+ if (out_sections.str().length() < 80)
+ {
+ std::cout << std::endl << bg::wkt(g) << std::endl;
+ std::cout << out_sections.str() << std::endl;
+ //std::cout << out_boxes.str() << std::endl;
+ }
+ std::cout << out_dirs.str() << std::endl;
+ }
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "sectionalize_"
+ << caseid << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ typedef typename bg::point_type<G>::type point_type;
+ bg::svg_mapper<point_type> mapper(svg, 500, 500);
+
+ mapper.add(g);
+
+ static const bool is_line = bg::geometry_id<G>::type::value == 2;
+ mapper.map(g, is_line
+ ? "opacity:0.6;stroke:rgb(0,0,255);stroke-width:5"
+ : "opacity:0.6;fill:rgb(0,0,255);stroke:rgb(0,0,0);stroke-width:0.5");
+
+
+ for (typename sections::size_type i = 0; i < s.size(); i++)
+ {
+ box b = s[i].bounding_box;
+ bg::buffer(b, b, 0.01);
+ mapper.map(b, s[i].duplicate
+ ? "fill-opacity:0.4;stroke-opacity:0.6;fill:rgb(0,128,0);stroke:rgb(0,255,0);stroke-width:2.0"
+ : "fill-opacity:0.2;stroke-opacity:0.4;fill:rgb(255,0,0);stroke:rgb(255,0,0);stroke-width:0.5");
+
+ std::ostringstream out;
+
+ for (int d = 0; d < DimensionCount; d++)
+ {
+ out << (d == 0 ? "[" : " ");
+ switch(s[i].directions[d])
+ {
+ case -99: out << "DUP"; break;
+ case -1 : out << "-"; break;
+ case 0 : out << "."; break;
+ case +1 : out << "+"; break;
+ }
+ }
+ out << "] " << s[i].begin_index << ".." << s[i].end_index;
+
+
+ point_type p;
+ bg::centroid(b, p);
+ mapper.text(p, out.str(), "");
+ }
+ }
+#endif
+
+}
+
+template <typename G, bool Reverse>
+void test_sectionalize(std::string const& caseid, std::string const& wkt,
+ std::size_t count2, std::string const& s2, std::string const d2,
+ std::size_t count1, std::string const& s1, std::string const d1)
+{
+ G g;
+ bg::read_wkt(wkt, g);
+ test_sectionalize<2, Reverse>(caseid + "_d2", g, count2, s2, d2);
+ test_sectionalize<1, Reverse>(caseid + "_d1", g, count1, s1, d1);
+}
+
+template <typename P>
+void test_all()
+{
+ test_sectionalize_part<1, bg::model::linestring<P> >();
+
+ test_sectionalize<bg::model::linestring<P>, false>("ls",
+ "LINESTRING(1 1,2 2,3 0,5 0,5 8)",
+ 4, "0..1|1..2|2..3|3..4", "+ +|+ -|+ .|. +",
+ 2, "0..3|3..4", "+|.");
+
+ // These strings mean:
+ // 0..1|1..2 -> first section: [0, 1] | second section [1, 2], etc
+ // + +|+ - -> X increases, Y increases | X increases, Y decreases
+ // +|. -> (only X considered) X increases | X constant
+
+ test_sectionalize<bg::model::polygon<P>, false>("simplex",
+ "POLYGON((0 0,0 7,4 2,2 0,0 0))",
+ 4, "0..1|1..2|2..3|3..4", ". +|+ -|- -|- .",
+ // . + - - -> 3 sections
+ 3, "0..1|1..2|2..4", ".|+|-");
+
+ // CCW polygon - orientation is not (always) relevant for sections,
+ // they are just generated in the order they come.
+ test_sectionalize<bg::model::polygon<P, false>, false>("simplex_ccw",
+ "POLYGON((0 0,2 0,4 2,0 7,0 0))",
+ 4, "0..1|1..2|2..3|3..4", "+ .|+ +|- +|. -",
+ // . + - - -> 3 sections
+ 3, "0..2|2..3|3..4", "+|-|.");
+
+ // Open polygon - closeness IS relevant for sections, the
+ // last section which is not explicit here should be included.
+ // So results are the same as the pre-previous one.
+ test_sectionalize<bg::model::polygon<P, true, false>, false>("simplex_open",
+ "POLYGON((0 0,0 7,4 2,2 0))",
+ 4, "0..1|1..2|2..3|3..4", ". +|+ -|- -|- .",
+ // . + - - -> 3 sections
+ 3, "0..1|1..2|2..4", ".|+|-");
+
+ test_sectionalize<bg::model::polygon<P>, false>("first",
+ "polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0, 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))",
+ 8, "0..2|2..3|3..4|4..5|5..6|6..8|8..10|10..11", "+ +|+ -|+ +|- +|+ +|+ -|- -|- +",
+ 4, "0..4|4..5|5..8|8..11", "+|-|+|-");
+
+ test_sectionalize<bg::model::polygon<P, false>, true>("first_reverse",
+ "polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0, 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))",
+ 8, "0..1|1..3|3..5|5..6|6..7|7..8|8..9|9..11", "+ -|+ +|- +|- -|+ -|- -|- +|- -",
+ 4, "0..3|3..6|6..7|7..11", "+|-|+|-");
+
+ test_sectionalize<bg::model::polygon<P>, false>("second",
+ "POLYGON((3 1,2 2,1 3,2 4,3 5,4 4,5 3,4 2,3 1))",
+ 4, "0..2|2..4|4..6|6..8", "- +|+ +|+ -|- -",
+ // - - - + + + + - - -> 3 sections
+ 3, "0..2|2..6|6..8", "-|+|-");
+
+ // With holes
+ test_sectionalize<bg::model::polygon<P>, false>("with_holes",
+ "POLYGON((3 1,2 2,1 3,2 4,3 5,4 4,5 3,4 2,3 1), (3 2,2 2,3 4,3 2))",
+ 7, "0..2|2..4|4..6|6..8|0..1|1..2|2..3", "- +|+ +|+ -|- -|- .|+ +|. -",
+ // - - - + + + + - - - + . -> 6 sections
+ 6, "0..2|2..6|6..8|0..1|1..2|2..3", "-|+|-|-|+|.");
+
+ // With duplicates
+ test_sectionalize<bg::model::linestring<P>, false>("with_dups",
+ "LINESTRING(1 1,2 2,3 0,3 0,5 0,5 8)",
+ 5, "0..1|1..2|2..3|3..4|4..5", "+ +|+ -|DUP DUP|+ .|. +",
+ 4, "0..2|2..3|3..4|4..5", "+|DUP|+|.");
+ // With two subsequent duplicate segments
+ test_sectionalize<bg::model::linestring<P>, false>("with_subseq_dups",
+ "LINESTRING(1 1,2 2,3 0,3 0,3 0,5 0,5 0,5 0,5 0,5 8)",
+ 6, "0..1|1..2|2..4|4..5|5..8|8..9", "+ +|+ -|DUP DUP|+ .|DUP DUP|. +",
+ 5, "0..2|2..4|4..5|5..8|8..9", "+|DUP|+|DUP|.");
+
+
+ typedef bg::model::box<P> B;
+ test_sectionalize<2, false, B>("box2", bg::make<B>(0,0,4,4),
+ 4, "0..1|1..2|2..3|3..4", ". +|+ .|. -|- .");
+ test_sectionalize<1, false, B>("box1", bg::make<B>(0,0,4,4),
+ 4, "0..1|1..2|2..3|3..4", ".|+|.|-");
+
+ return;
+ // Buffer-case
+ test_sectionalize<bg::model::polygon<P>, false>("buffer",
+ "POLYGON((-1.1713 0.937043,2.8287 5.93704,2.90334 6.02339,2.98433 6.10382,2.98433 6.10382,3.07121 6.17786,3.16346 6.24507,3.16346 6.24507,3.16346 6.24507,3.26056 6.30508,3.36193 6.35752,3.36193 6.35752,3.46701 6.40211,3.57517 6.43858,3.57517 6.43858,3.57517 6.43858,3.57517 6.43858,3.68579 6.46672,3.79822 6.48637,3.79822 6.48637,3.91183 6.49741,4.02595 6.49978,4.02595 6.49978,4.02595 6.49978,4.13991 6.49346,4.25307 6.4785,4.25307 6.4785,4.36476 6.45497,4.47434 6.42302,4.47434 6.42302,4.47434 6.42302,4.47434 6.42302,7.47434 5.42302,6.84189 3.52566,4.39043 4.68765,0.390434 -0.312348,-1.1713 0.937043))",
+ 8, "0..2|2..3|3..4|4..5|5..6|6..8|8..10|10..11", "+ +|+ -|+ +|- +|+ +|+ -|- -|- +",
+ 4, "0..4|4..5|5..8|8..11", "+|-|+|-");
+}
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ std::string const polygon_li = "POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))";
+ bg::model::polygon<int_point_type> int_poly;
+ bg::model::polygon<double_point_type> double_poly;
+ bg::read_wkt(polygon_li, int_poly);
+ bg::read_wkt(polygon_li, double_poly);
+
+ bg::sections<bg::model::box<int_point_type>, 1> int_sections;
+ bg::sections<bg::model::box<double_point_type>, 1> double_sections;
+
+ bg::sectionalize<false>(int_poly, int_sections);
+ bg::sectionalize<false>(double_poly, double_sections);
+
+ bool equally_sized = int_sections.size() == double_sections.size();
+ BOOST_CHECK(equally_sized);
+ if (! equally_sized)
+ {
+ return;
+ }
+
+ for (unsigned int i = 0; i < int_sections.size(); i++)
+ {
+ BOOST_CHECK(int_sections[i].begin_index == double_sections[i].begin_index);
+ BOOST_CHECK(int_sections[i].count == double_sections[i].count);
+ }
+
+}
+
+
+int test_main(int, char* [])
+{
+ test_large_integers();
+
+ //test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/detail/sections/sectionalize.sln b/libs/geometry/test/algorithms/detail/sections/sectionalize.sln
new file mode 100644
index 000000000..5b2ae402b
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/sections/sectionalize.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sectionalize", "sectionalize.vcproj", "{50410F81-7B83-49D9-BDAE-FA3F0ADB2ADC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "range_by_section", "range_by_section.vcproj", "{A91434CB-CB32-48AE-8C74-81B6A1EB342F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {50410F81-7B83-49D9-BDAE-FA3F0ADB2ADC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {50410F81-7B83-49D9-BDAE-FA3F0ADB2ADC}.Debug|Win32.Build.0 = Debug|Win32
+ {50410F81-7B83-49D9-BDAE-FA3F0ADB2ADC}.Release|Win32.ActiveCfg = Release|Win32
+ {50410F81-7B83-49D9-BDAE-FA3F0ADB2ADC}.Release|Win32.Build.0 = Release|Win32
+ {A91434CB-CB32-48AE-8C74-81B6A1EB342F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A91434CB-CB32-48AE-8C74-81B6A1EB342F}.Debug|Win32.Build.0 = Debug|Win32
+ {A91434CB-CB32-48AE-8C74-81B6A1EB342F}.Release|Win32.ActiveCfg = Release|Win32
+ {A91434CB-CB32-48AE-8C74-81B6A1EB342F}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/algorithms/detail/sections/sectionalize.vcproj b/libs/geometry/test/algorithms/detail/sections/sectionalize.vcproj
new file mode 100644
index 000000000..7c7ee5ac8
--- /dev/null
+++ b/libs/geometry/test/algorithms/detail/sections/sectionalize.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="sectionalize"
+ ProjectGUID="{50410F81-7B83-49D9-BDAE-FA3F0ADB2ADC}"
+ RootNamespace="sectionalize"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\sectionalize"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\sectionalize"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\sectionalize.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/difference.cpp b/libs/geometry/test/algorithms/difference.cpp
new file mode 100644
index 000000000..acc9284d5
--- /dev/null
+++ b/libs/geometry/test/algorithms/difference.cpp
@@ -0,0 +1,518 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+// #define TEST_ISOVIST
+
+//#define HAVE_TTMATH
+
+//#define BOOST_GEOMETRY_CHECK_WITH_POSTGIS
+
+//#define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
+//#define BOOST_GEOMETRY_DEBUG_INTERSECTION
+//#define BOOST_GEOMETRY_DEBUG_TRAVERSE
+//#define BOOST_GEOMETRY_DEBUG_FOLLOW
+//#define BOOST_GEOMETRY_DEBUG_ASSEMBLE
+//#define BOOST_GEOMETRY_DEBUG_IDENTIFIER
+
+
+#include <iostream>
+#include <string>
+#include <iomanip>
+
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/perimeter.hpp>
+
+#include <boost/geometry/multi/algorithms/correct.hpp>
+#include <boost/geometry/multi/algorithms/intersection.hpp>
+#include <boost/geometry/multi/algorithms/within.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+
+//#include <boost/geometry/extensions/gis/io/wkb/read_wkb.hpp>
+//#include <boost/geometry/extensions/gis/io/wkb/utility.hpp>
+
+#include <algorithms/test_difference.hpp>
+#include <algorithms/test_overlay.hpp>
+#include <algorithms/overlay/overlay_cases.hpp>
+#include <multi/algorithms/overlay/multi_overlay_cases.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+
+#ifdef HAVE_TTMATH
+# include <boost/geometry/extensions/contrib/ttmath_stub.hpp>
+#endif
+
+
+
+template <typename Polygon, typename LineString>
+void test_areal_linear()
+{
+ std::string const poly_simplex = "POLYGON((1 1,1 3,3 3,3 1,1 1))";
+ test_one_lp<LineString, LineString, Polygon>("simplex", "LINESTRING(0 2,4 2)", poly_simplex, 2, 4, 2.0);
+ test_one_lp<LineString, LineString, Polygon>("case2", "LINESTRING(0 1,4 3)", poly_simplex, 2, 4, sqrt(5.0));
+ test_one_lp<LineString, LineString, Polygon>("case3", "LINESTRING(0 1,1 2,3 2,4 3,6 3,7 4)", "POLYGON((2 0,2 5,5 5,5 0,2 0))", 2, 6, 2.0 + 2.0 * sqrt(2.0));
+ test_one_lp<LineString, LineString, Polygon>("case4", "LINESTRING(1 1,3 2,1 3)", "POLYGON((0 0,0 4,2 4,2 0,0 0))", 1, 3, sqrt(5.0));
+
+ test_one_lp<LineString, LineString, Polygon>("case5", "LINESTRING(0 1,3 4)", poly_simplex, 2, 4, 2.0 * sqrt(2.0));
+ test_one_lp<LineString, LineString, Polygon>("case6", "LINESTRING(1 1,10 3)", "POLYGON((2 0,2 4,3 4,3 1,4 1,4 3,5 3,5 1,6 1,6 3,7 3,7 1,8 1,8 3,9 3,9 0,2 0))", 5, 10,
+ // Pieces are 1 x 2/9:
+ 5.0 * sqrt(1.0 + 4.0/81.0));
+
+
+ test_one_lp<LineString, LineString, Polygon>("case7", "LINESTRING(1.5 1.5,2.5 2.5)", poly_simplex, 0, 0, 0.0);
+ test_one_lp<LineString, LineString, Polygon>("case8", "LINESTRING(1 0,2 0)", poly_simplex, 1, 2, 1.0);
+
+ std::string const poly_9 = "POLYGON((1 1,1 4,4 4,4 1,1 1))";
+ test_one_lp<LineString, LineString, Polygon>("case9", "LINESTRING(0 1,1 2,2 2)", poly_9, 1, 2, sqrt(2.0));
+ test_one_lp<LineString, LineString, Polygon>("case10", "LINESTRING(0 1,1 2,0 2)", poly_9, 1, 3, 1.0 + sqrt(2.0));
+ test_one_lp<LineString, LineString, Polygon>("case11", "LINESTRING(2 2,4 2,3 3)", poly_9, 0, 0, 0.0);
+ test_one_lp<LineString, LineString, Polygon>("case12", "LINESTRING(2 3,4 4,5 6)", poly_9, 1, 2, sqrt(5.0));
+
+ test_one_lp<LineString, LineString, Polygon>("case13", "LINESTRING(3 2,4 4,2 3)", poly_9, 0, 0, 0.0);
+ test_one_lp<LineString, LineString, Polygon>("case14", "LINESTRING(5 6,4 4,6 5)", poly_9, 1, 3, 2.0 * sqrt(5.0));
+
+ test_one_lp<LineString, LineString, Polygon>("case15", "LINESTRING(0 2,1 2,1 3,0 3)", poly_9, 2, 4, 2.0);
+ test_one_lp<LineString, LineString, Polygon>("case16", "LINESTRING(2 2,1 2,1 3,2 3)", poly_9, 0, 0, 0.0);
+
+ std::string const angly = "LINESTRING(2 2,2 1,4 1,4 2,5 2,5 3,4 3,4 4,5 4,3 6,3 5,2 5,2 6,0 4)";
+ test_one_lp<LineString, LineString, Polygon>("case17", angly, "POLYGON((1 1,1 5,4 5,4 1,1 1))", 3, 11, 6.0 + 4.0 * sqrt(2.0));
+ test_one_lp<LineString, LineString, Polygon>("case18", angly, "POLYGON((1 1,1 5,5 5,5 1,1 1))", 2, 6, 2.0 + 3.0 * sqrt(2.0));
+ test_one_lp<LineString, LineString, Polygon>("case19", "LINESTRING(1 2,1 3,0 3)", poly_9, 1, 2, 1.0);
+ test_one_lp<LineString, LineString, Polygon>("case20", "LINESTRING(1 2,1 3,2 3)", poly_9, 0, 0, 0.0);
+
+ test_one_lp<LineString, LineString, Polygon>("case21", "LINESTRING(1 2,1 4,4 4,4 1,2 1,2 2)", poly_9, 0, 0, 0.0);
+
+ // More collinear (opposite) cases
+ test_one_lp<LineString, LineString, Polygon>("case22", "LINESTRING(4 1,4 4,7 4)", poly_9, 1, 2, 3.0);
+ test_one_lp<LineString, LineString, Polygon>("case23", "LINESTRING(4 0,4 4,7 4)", poly_9, 2, 4, 4.0);
+ test_one_lp<LineString, LineString, Polygon>("case24", "LINESTRING(4 1,4 5,7 5)", poly_9, 1, 3, 4.0);
+ test_one_lp<LineString, LineString, Polygon>("case25", "LINESTRING(4 0,4 5,7 5)", poly_9, 2, 5, 5.0);
+ test_one_lp<LineString, LineString, Polygon>("case26", "LINESTRING(4 0,4 3,4 5,7 5)", poly_9, 2, 5, 5.0);
+ test_one_lp<LineString, LineString, Polygon>("case27", "LINESTRING(4 4,4 5,5 5)", poly_9, 1, 3, 2.0);
+}
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::box<P> box;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::linestring<P> linestring;
+ typedef bg::model::ring<P> ring;
+
+ typedef typename bg::coordinate_type<P>::type ct;
+
+ test_areal_linear<polygon, linestring>();
+
+
+ test_one<polygon, polygon, polygon>("simplex_normal",
+ simplex_normal[0], simplex_normal[1],
+ 3, 12, 2.52636706856656,
+ 3, 12, 3.52636706856656);
+
+ test_one<polygon, polygon, polygon>("simplex_with_empty",
+ simplex_normal[0], polygon_empty,
+ 1, 4, 8.0,
+ 0, 0, 0.0);
+
+ test_one<polygon, polygon, polygon>(
+ "star_ring", example_star, example_ring,
+ 5, 22, 1.1901714,
+ 5, 27, 1.6701714);
+
+ test_one<polygon, polygon, polygon>("two_bends",
+ two_bends[0], two_bends[1],
+ 1, 5, 8.0,
+ 1, 5, 8.0);
+
+ test_one<polygon, polygon, polygon>("star_comb_15",
+ star_comb_15[0], star_comb_15[1],
+ 30, 160, 227.658275102812,
+ 30, 198, 480.485775259312);
+
+ test_one<polygon, polygon, polygon>("new_hole",
+ new_hole[0], new_hole[1],
+ 1, 9, 7.0,
+ 1, 13, 14.0);
+
+
+ test_one<polygon, polygon, polygon>("crossed",
+ crossed[0], crossed[1],
+ 1, 18, 19.5,
+ 1, 7, 2.5);
+
+ test_one<polygon, polygon, polygon>("disjoint",
+ disjoint[0], disjoint[1],
+ 1, 5, 1.0,
+ 1, 5, 1.0);
+
+ test_one<polygon, polygon, polygon>("distance_zero",
+ distance_zero[0], distance_zero[1],
+ 2, -1, 8.7048386,
+ if_typed<ct, float>(1, 2), // The too small one is discarded for floating point
+ -1, 0.0098387);
+
+
+ test_one<polygon, polygon, polygon>("equal_holes_disjoint",
+ equal_holes_disjoint[0], equal_holes_disjoint[1],
+ 1, 5, 9.0,
+ 1, 5, 9.0);
+
+ test_one<polygon, polygon, polygon>("only_hole_intersections1",
+ only_hole_intersections[0], only_hole_intersections[1],
+ 2, 10, 1.9090909,
+ 4, 16, 10.9090909);
+
+ test_one<polygon, polygon, polygon>("only_hole_intersection2",
+ only_hole_intersections[0], only_hole_intersections[2],
+ 3, 20, 30.9090909,
+ 4, 16, 10.9090909);
+
+ test_one<polygon, polygon, polygon>("first_within_second",
+ first_within_second[1], first_within_second[0],
+ 1, 10, 24,
+ 0, 0, 0);
+
+ test_one<polygon, polygon, polygon>("fitting",
+ fitting[0], fitting[1],
+ 1, 9, 21.0,
+ 1, 4, 4.0);
+
+ test_one<polygon, polygon, polygon>("identical",
+ identical[0], identical[1],
+ 0, 0, 0.0,
+ 0, 0, 0.0);
+
+ test_one<polygon, polygon, polygon>("intersect_exterior_and_interiors_winded",
+ intersect_exterior_and_interiors_winded[0], intersect_exterior_and_interiors_winded[1],
+ 4, 20, 11.533333,
+ 5, 26, 29.783333);
+
+ test_one<polygon, polygon, polygon>("intersect_holes_intersect_and_disjoint",
+ intersect_holes_intersect_and_disjoint[0], intersect_holes_intersect_and_disjoint[1],
+ 2, 16, 15.75,
+ 3, 17, 6.75);
+
+ test_one<polygon, polygon, polygon>("intersect_holes_intersect_and_touch",
+ intersect_holes_intersect_and_touch[0], intersect_holes_intersect_and_touch[1],
+ 3, 21, 16.25,
+ 3, 17, 6.25);
+
+ test_one<polygon, polygon, polygon>("intersect_holes_new_ring",
+ intersect_holes_new_ring[0], intersect_holes_new_ring[1],
+ 3, 15, 9.8961,
+ 4, 25, 121.8961, 0.01);
+
+ test_one<polygon, polygon, polygon>("first_within_hole_of_second",
+ first_within_hole_of_second[0], first_within_hole_of_second[1],
+ 1, 5, 1,
+ 1, 10, 16);
+
+ test_one<polygon, polygon, polygon>("intersect_holes_disjoint",
+ intersect_holes_disjoint[0], intersect_holes_disjoint[1],
+ 2, 14, 16.0,
+ 2, 10, 6.0);
+
+ test_one<polygon, polygon, polygon>("intersect_holes_intersect",
+ intersect_holes_intersect[0], intersect_holes_intersect[1],
+ 2, 16, 15.75,
+ 2, 12, 5.75);
+
+ test_one<polygon, polygon, polygon>(
+ "case4", case_4[0], case_4[1],
+ 6, 28, 2.77878787878788,
+ 4, 22, 4.77878787878788);
+
+ test_one<polygon, polygon, polygon>(
+ "case5", case_5[0], case_5[1],
+ 8, 36, 2.43452380952381,
+ 7, 33, 3.18452380952381);
+
+ test_one<polygon, polygon, polygon>("winded",
+ winded[0], winded[1],
+ 3, 37, 61,
+ 1, 15, 13);
+
+ test_one<polygon, polygon, polygon>("within_holes_disjoint",
+ within_holes_disjoint[0], within_holes_disjoint[1],
+ 2, 15, 25,
+ 1, 5, 1);
+
+ test_one<polygon, polygon, polygon>("side_side",
+ side_side[0], side_side[1],
+ 1, 5, 1,
+ 1, 5, 1);
+
+ test_one<polygon, polygon, polygon>("buffer_mp1",
+ buffer_mp1[0], buffer_mp1[1],
+ 1, 61, 10.2717,
+ 1, 61, 10.2717);
+
+ if (boost::is_same<ct, double>::value)
+ {
+ test_one<polygon, polygon, polygon>("buffer_mp2",
+ buffer_mp2[0], buffer_mp2[1],
+ 1, 92, 12.09857,
+ 1, 157, 24.19787);
+ }
+
+ /*** TODO: self-tangencies for difference
+ test_one<polygon, polygon, polygon>("wrapped_a",
+ wrapped[0], wrapped[1],
+ 3, 1, 61,
+ 1, 0, 13);
+
+ test_one<polygon, polygon, polygon>("wrapped_b",
+ wrapped[0], wrapped[2],
+ 3, 1, 61,
+ 1, 0, 13);
+ ***/
+
+#ifdef _MSC_VER
+#ifdef TEST_ISOVIST
+ test_one<polygon, polygon, polygon>("isovist",
+ isovist1[0], isovist1[1],
+ if_typed_tt<ct>(4, 2), 0, 0.279121891701124,
+ if_typed_tt<ct>(4, 3), 0, if_typed_tt<ct>(224.889211358929, 223.777),
+ if_typed_tt<ct>(0.001, 0.2));
+
+ // SQL Server gives: 0.279121891701124 and 224.889211358929
+ // PostGIS gives: 0.279121991127244 and 224.889205853156
+
+#endif
+
+ test_one<polygon, polygon, polygon>("ggl_list_20110306_javier",
+ ggl_list_20110306_javier[0], ggl_list_20110306_javier[1],
+ 1, -1, 71495.3331,
+ 2, -1, 8960.49049);
+#endif
+
+ test_one<polygon, polygon, polygon>("ggl_list_20110307_javier",
+ ggl_list_20110307_javier[0], ggl_list_20110307_javier[1],
+ 1, 13, 16815.6,
+ 1, 4, 3200.4,
+ 0.01);
+
+ if (! boost::is_same<ct, float>::value)
+ {
+ test_one<polygon, polygon, polygon>("ggl_list_20110716_enrico",
+ ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1],
+ 3, -1, 35723.8506317139,
+ 1, -1, 58456.4964294434
+ );
+ }
+
+ test_one<polygon, polygon, polygon>("ggl_list_20110820_christophe",
+ ggl_list_20110820_christophe[0], ggl_list_20110820_christophe[1],
+ 1, -1, 2.8570121719168924,
+ 1, -1, 64.498061986388564);
+
+ test_one<polygon, polygon, polygon>("ggl_list_20120717_volker",
+ ggl_list_20120717_volker[0], ggl_list_20120717_volker[1],
+ 1, 11, 3370866.2295081965,
+ 1, 5, 384.2295081964694, 0.01);
+
+#ifdef _MSC_VER
+ // 2011-07-02
+ // Interesting FP-precision case.
+ // sql server gives: 6.62295817619452E-05
+ // PostGIS gives: 0.0 (no output)
+ // Boost.Geometry gives results depending on FP-type, and compiler, and operating system.
+ // For double, it is zero (skipped). On gcc/Linux, for float either.
+ // Because we cannot predict this, we only test for MSVC
+ test_one<polygon, polygon, polygon>("ggl_list_20110627_phillip",
+ ggl_list_20110627_phillip[0], ggl_list_20110627_phillip[1],
+ if_typed_tt<ct>(1, 0), -1,
+ if_typed_tt<ct>(0.0000000000001105367, 0.0),
+ 1, -1, 3577.40960816756,
+ 0.01
+ );
+#endif
+
+ // Other combi's
+ {
+ test_one<polygon, polygon, ring>(
+ "star_ring_ring", example_star, example_ring,
+ 5, 22, 1.1901714, 5, 27, 1.6701714);
+
+ test_one<polygon, ring, polygon>(
+ "ring_star_ring", example_ring, example_star,
+ 5, 27, 1.6701714, 5, 22, 1.1901714);
+
+ static std::string const clip = "POLYGON((2.5 0.5,5.5 2.5))";
+
+ test_one<polygon, box, ring>("star_box",
+ clip, example_star,
+ 4, 20, 2.833333, 4, 16, 0.833333);
+
+ test_one<polygon, ring, box>("box_star",
+ example_star, clip,
+ 4, 16, 0.833333, 4, 20, 2.833333);
+ }
+
+ // Counter clockwise
+ {
+ typedef bg::model::polygon<P, false> polygon_ccw;
+ test_one<polygon, polygon_ccw, polygon_ccw>(
+ "star_ring_ccw", example_star, example_ring,
+ 5, 22, 1.1901714, 5, 27, 1.6701714);
+ test_one<polygon, polygon, polygon_ccw>(
+ "star_ring_ccw1", example_star, example_ring,
+ 5, 22, 1.1901714, 5, 27, 1.6701714);
+ test_one<polygon, polygon_ccw, polygon>(
+ "star_ring_ccw2", example_star, example_ring,
+ 5, 22, 1.1901714, 5, 27, 1.6701714);
+ }
+
+
+
+ // Multi/box (should be moved to multi)
+ {
+ /* Tested with SQL Geometry:
+ with viewy as (select geometry::STGeomFromText(
+ 'MULTIPOLYGON(((0 1,2 5,5 3,0 1)),((1 1,5 2,5 0,1 1)))',0) as p,
+ geometry::STGeomFromText(
+ 'POLYGON((2 2,2 4,4 4,4 2,2 2))',0) as q)
+
+ select
+ p.STDifference(q).STArea(),p.STDifference(q).STNumGeometries(),p.STDifference(q) as p_min_q,
+ q.STDifference(p).STArea(),q.STDifference(p).STNumGeometries(),q.STDifference(p) as q_min_p,
+ p.STSymDifference(q).STArea(),q.STSymDifference(p) as p_xor_q
+ from viewy
+
+ */
+ typedef bg::model::multi_polygon<polygon> mp;
+
+ static std::string const clip = "POLYGON((2 2,4 4))";
+
+ test_one<polygon, box, mp>("simplex_multi_box_mp",
+ clip, case_multi_simplex[0],
+ 2, -1, 0.53333333333, 3, -1, 8.53333333333);
+ test_one<polygon, mp, box>("simplex_multi_mp_box",
+ case_multi_simplex[0], clip,
+ 3, -1, 8.53333333333, 2, -1, 0.53333333333);
+
+ }
+
+ /***
+ Experimental (cut), does not work:
+ test_one<polygon, polygon, polygon>(
+ "polygon_pseudo_line",
+ "POLYGON((0 0,0 4,4 4,4 0,0 0))",
+ "POLYGON((2 -2,2 -1,2 6,2 -2))",
+ 5, 22, 1.1901714,
+ 5, 27, 1.6701714);
+ ***/
+}
+
+/*******
+// To be moved to another file
+template <typename T>
+void test_difference_parcel_precision()
+{
+ typedef bg::model::d2::point_xy<T> point_type;
+ typedef bg::model::polygon<point_type> polygon_type;
+ typedef bg::model::linestring<point_type> linestring_type;
+ typedef std::vector<boost::uint8_t> byte_vector;
+
+ polygon_type parcel, buffer;
+
+ {
+ byte_vector wkb;
+ bg::hex2wkb("0103000000010000001A00000023DBF97EE316064146B6F3FDD32513415A643BDFD216064175931804E225134196438B6C52150641C976BE9F34261341F6285C8F06150641022B871641261341F853E3A5D3140641E17A14AE50261341B81E85EBFB120641A4703D8A142713414E6210584D120641AC1C5A64602713414E621058431106414E621058C9271341A01A2FDD1B11064121B07268D8271341F4FDD478571006411904560ECF271341448B6CE7DD0F06418195438BC1271341F6285C8F6A0F06413BDF4F0DA72713410E2DB29D360F06416F1283C091271341E5D022DB070F0641F6285C0F7227134160E5D022DA0E06416F1283404F271341448B6CE7D30E0641F853E3A52427134154E3A59BE60E06411904568E07271341643BDF4F0C0F0641D7A3703DFC2613414A0C022B100F064125068115FB26134191ED7C3F310F0641B6F3FDD4F42613414C378941F11006414A0C022BA0261341EC51B81ECC1206413BDF4F0D40261341022B87167514064125068115F1251341B4C876BE8C160641C74B37897F25134121B07268C6160641508D976E7525134123DBF97EE316064146B6F3FDD3251341", std::back_inserter(wkb));
+ bg::read_wkb(wkb.begin(), wkb.end(), parcel);
+ }
+ {
+ byte_vector wkb;
+ bg::hex2wkb("01030000000100000083000000000032FCD716064100009E998F25134100000706D81606410040A4998F2513410000DA0FD816064100C0E6998F2513410000A819D81606410080659A8F25134100806A23D816064100C0209B8F25134100801E2DD81606410080189C8F2513410000BE36D816064100404D9D8F25134100004540D816064100C0BE9E8F2513410000AF49D816064100806DA08F2513410000F752D8160641008059A28F2513410000195CD816064100C082A48F25134100800F65D81606410080E9A68F2513410000D66DD816064100408EA98F25134100006876D816064100C070AC8F2513410000C17ED8160641000091AF8F2513410080DC86D816064100C0EFB28F25134100009E8ED816064100C081B68F2513410080EC95D816064100803ABA8F2513410080C79CD8160641000018BE8F25134100002FA3D8160641008017C28F251341008022A9D8160641000037C68F2513410080A1AED8160641000074CA8F2513410000ACB3D81606410040CCCE8F251341000042B8D816064100403DD38F251341000062BCD81606410000C5D78F25134100000DC0D8160641000061DC8F251341000042C3D816064100000FE18F251341000001C6D81606410080CCE58F251341008049C8D8160641004097EA8F25134100001BCAD816064100006DEF8F251341008075CBD816064100804BF48F251341008058CCD8160641004030F98F2513410000C4CCD8160641000019FE8F2513410080B7CCD81606410080030390251341008032CCD81606410000ED0790251341000035CBD81606410000D40C902513410080BEC9D81606410040B511902513410000CFC7D816064100408F1690251341008065C5D816064100005F1B90251341008082C2D81606410080222090251341000025BFD81606410080D7249025134100004DBBD816064100807B29902513410080FAB6D816064100800C2E9025134100002DB2D816064100C08732902513410080E3ACD81606410000EB369025134100801EA7D81606410000343B902513410000DEA0D81606410080603F902513410080209AD816064100406E43902513410080209AC015064100406E43302613410080FC92C015064100004F473026134100008B8BC01506410040F64A302613410000D083C015064100C0634E302613410000D17BC0150641008097513026134100009273C015064100409154302613410000186BC015064100C050573026134100806762C01506410000D6593026134100808559C01506410000215C3026134100007650C01506410000315E3026134100003E47C015064100800660302613410000E23DC01506410000A1613026134100006734C015064100800063302613410080D12AC015064100C024643026134100002621C015064100800D653026134100006917C015064100C0BA653026134100809F0DC015064100402C66302613410000CE03C015064100006266302613410000F9F9BF15064100C05B6630261341000026F0BF1506410040196630261341000058E6BF15064100809A6530261341008095DCBF1506410040DF64302613410080E1D2BF1506410080E76330261341000042C9BF15064100C0B262302613410000BBBFBF1506410040416130261341000051B6BF1506410080925F30261341000009ADBF1506410080A65D302613410000E7A3BF15064100407D5B302613410080F09ABF150641008016593026134100002A92BF15064100C071563026134100009889BF15064100408F533026134100003F81BF15064100006F503026134100802379BF1506410040104D3026134100006271BF15064100407E49302613410080136ABF1506410080C5453026134100803863BF1506410000E841302613410000D15CBF1506410080E83D302613410080DD56BF1506410000C9393026134100805E51BF15064100008C35302613410000544CBF15064100C03331302613410000BE47BF15064100C0C22C3026134100009E43BF15064100003B28302613410000F33FBF15064100009F23302613410000BE3CBF1506410000F11E302613410000FF39BF1506410080331A302613410080B637BF15064100C06815302613410000E535BF150641000093103026134100808A34BF1506410080B40B302613410080A733BF15064100C0CF063026134100003C33BF1506410000E7013026134100804833BF1506410080FCFC2F2613410080CD33BF150641000013F82F2613410000CB34BF15064100002CF32F26134100804136BF15064100C04AEE2F26134100003138BF15064100C070E92F26134100809A3ABF1506410000A1E42F26134100807D3DBF1506410080DDDF2F2613410000DB40BF150641008028DB2F2613410000B344BF150641008084D62F26134100800549BF1506410080F3D12F2613410000D34DBF150641004078CD2F26134100801C53BF150641000015C92F2613410080E158BF1506410000CCC42F2613410000225FBF15064100809FC02F2613410080DF65BF15064100C091BC2F2613410080DF65D716064100C091BC8F2513410080036DD71606410000B1B88F25134100007574D716064100C009B58F2513410000307CD716064100409CB18F25134100002F84D7160641008068AE8F25134100006E8CD716064100C06EAB8F2513410000E894D71606410040AFA88F2513410080989DD716064100002AA68F25134100807AA6D71606410000DFA38F25134100008AAFD71606410000CFA18F2513410000C2B8D71606410080F99F8F25134100001EC2D716064100005F9E8F251341000099CBD71606410080FF9C8F25134100802ED5D71606410040DB9B8F2513410000DADED71606410080F29A8F251341000097E8D71606410040459A8F251341008060F2D716064100C0D3998F251341000032FCD716064100009E998F251341", std::back_inserter(wkb));
+ bg::read_wkb(wkb.begin(), wkb.end(), buffer);
+ }
+ bg::correct(parcel);
+ bg::correct(buffer);
+
+ std::vector<polygon_type> pieces;
+ bg::difference(parcel, buffer, pieces);
+
+ std::vector<polygon_type> filled_out;
+ bg::difference(parcel, pieces.back(), filled_out);
+
+#if defined(TEST_OUTPUT)
+ std::cout << bg::area(parcel) << std::endl;
+ std::cout << bg::area(buffer) << std::endl;
+ std::cout << pieces.size() << std::endl;
+ std::cout << bg::area(pieces.front()) << std::endl;
+ std::cout << filled_out.size() << std::endl;
+ std::cout << std::setprecision(16) << bg::wkt(filled_out.front()) << std::endl;
+ std::cout << bg::wkt(filled_out.front()) << std::endl;
+ std::cout << bg::area(filled_out.front()) << std::endl;
+ std::cout << bg::perimeter(filled_out.front()) << std::endl;
+#endif
+
+#if defined(TEST_WITH_SVG)
+ {
+ linestring_type cut_line;
+ bg::read_wkt("linestring(180955 313700,180920 313740)", cut_line);
+
+ std::ostringstream filename;
+ filename << "difference_precision_"
+ << string_from_type<T>::name()
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<point_type> mapper(svg, 500, 500);
+
+ mapper.add(cut_line);
+
+ //mapper.map(parcel, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:3");
+ mapper.map(pieces.front(), "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:1");
+ mapper.map(pieces.back(), "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:1");
+ mapper.map(filled_out.front(), "fill-opacity:0.3;fill:rgb(51,51,153);stroke:rgb(51,51,153);stroke-width:3");
+
+ mapper.map(cut_line, "opacity:0.8;fill:none;stroke:rgb(255,128,0);stroke-width:5;stroke-dasharray:1,7;stroke-linecap:round");
+ //mapper.map(cut_line, "opacity:0.8;fill:none;stroke:rgb(255,128,0);stroke-width:2");
+ }
+#endif
+}
+*****/
+
+
+template <typename P, bool clockwise, bool closed>
+void test_specific()
+{
+ typedef bg::model::polygon<P, clockwise, closed> polygon;
+
+ test_one<polygon, polygon, polygon>("ggl_list_20120717_volker",
+ ggl_list_20120717_volker[0], ggl_list_20120717_volker[1],
+ 1, 11, 3370866.2295081965,
+ 1, 5, 384, 0.01);
+}
+
+
+int test_main(int, char* [])
+{
+ //test_difference_parcel_precision<float>();
+ //test_difference_parcel_precision<double>();
+
+ test_all<bg::model::d2::point_xy<double> >();
+
+ test_specific<bg::model::d2::point_xy<int>, false, false>();
+
+#if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
+ test_all<bg::model::d2::point_xy<float> >();
+
+#ifdef HAVE_TTMATH
+ std::cout << "Testing TTMATH" << std::endl;
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+ //test_difference_parcel_precision<ttmath_big>();
+#endif
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/difference.vcproj b/libs/geometry/test/algorithms/difference.vcproj
new file mode 100644
index 000000000..2302ee27f
--- /dev/null
+++ b/libs/geometry/test/algorithms/difference.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="difference"
+ ProjectGUID="{4EBFC27A-75C9-43A1-8DDA-AFEB45C564DC}"
+ RootNamespace="difference"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\difference"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;..;../$(TTMATH_ROOT)"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\difference"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\difference.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/disjoint.cpp b/libs/geometry/test/algorithms/disjoint.cpp
new file mode 100644
index 000000000..51d12cf64
--- /dev/null
+++ b/libs/geometry/test/algorithms/disjoint.cpp
@@ -0,0 +1,237 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/disjoint.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <test_common/test_point.hpp>
+
+#include <algorithms/test_relate.hpp>
+
+
+template <typename G1, typename G2>
+void test_disjoint(std::string const& id,
+ std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ bool detected = bg::disjoint(g1, g2);
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "disjoint: " << id
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::box<P> box;
+
+ test_disjoint<P, P>("pp1", "point(1 1)", "point(1 1)", false);
+ test_disjoint<P, P>("pp2", "point(1 1)", "point(1.001 1)", true);
+
+ // left-right
+ test_disjoint<box, box>("bb1", "box(1 1, 2 2)", "box(3 1, 4 2)", true);
+ test_disjoint<box, box>("bb2", "box(1 1, 2 2)", "box(2 1, 3 2)", false);
+ test_disjoint<box, box>("bb3", "box(1 1, 2 2)", "box(2 2, 3 3)", false);
+ test_disjoint<box, box>("bb4", "box(1 1, 2 2)", "box(2.001 2, 3 3)", true);
+
+ // up-down
+ test_disjoint<box, box>("bb5", "box(1 1, 2 2)", "box(1 3, 2 4)", true);
+ test_disjoint<box, box>("bb6", "box(1 1, 2 2)", "box(1 2, 2 3)", false);
+ // right-left
+ test_disjoint<box, box>("bb7", "box(1 1, 2 2)", "box(0 1, 1 2)", false);
+ test_disjoint<box, box>("bb8", "box(1 1, 2 2)", "box(0 1, 1 2)", false);
+
+ // point-box
+ test_disjoint<P, box>("pb1", "point(1 1)", "box(0 0, 2 2)", false);
+ test_disjoint<P, box>("pb2", "point(2 2)", "box(0 0, 2 2)", false);
+ test_disjoint<P, box>("pb3", "point(2.0001 2)", "box(1 1, 2 2)", true);
+ test_disjoint<P, box>("pb4", "point(0.9999 2)", "box(1 1, 2 2)", true);
+
+ // box-point (to test reverse compiling)
+ test_disjoint<box, P>("bp1", "box(1 1, 2 2)", "point(2 2)", false);
+
+ // Test triangles for polygons/rings, boxes
+ // Note that intersections are tested elsewhere, they don't need
+ // thorough test at this place
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::ring<P> ring;
+
+ // Four times same test with other types
+ test_disjoint<polygon, polygon>("disjoint_simplex_pp", disjoint_simplex[0], disjoint_simplex[1], true);
+ test_disjoint<ring, polygon>("disjoint_simplex_rp", disjoint_simplex[0], disjoint_simplex[1], true);
+ test_disjoint<ring, ring>("disjoint_simplex_rr", disjoint_simplex[0], disjoint_simplex[1], true);
+ test_disjoint<polygon, ring>("disjoint_simplex_pr", disjoint_simplex[0], disjoint_simplex[1], true);
+
+ // Testing touch
+ test_disjoint<polygon, polygon>("touch_simplex_pp", touch_simplex[0], touch_simplex[1], false);
+
+ // Testing overlap (and test compiling with box)
+ test_disjoint<polygon, polygon>("overlaps_box_pp", overlaps_box[0], overlaps_box[1], false);
+ test_disjoint<box, polygon>("overlaps_box_bp", overlaps_box[0], overlaps_box[1], false);
+ test_disjoint<box, ring>("overlaps_box_br", overlaps_box[0], overlaps_box[1], false);
+ test_disjoint<polygon, box>("overlaps_box_pb", overlaps_box[1], overlaps_box[0], false);
+ test_disjoint<ring, box>("overlaps_box_rb", overlaps_box[1], overlaps_box[0], false);
+
+ // Test if within(a,b) returns false for disjoint
+ test_disjoint<ring, ring>("within_simplex_rr1", within_simplex[0], within_simplex[1], false);
+ test_disjoint<ring, ring>("within_simplex_rr2", within_simplex[1], within_simplex[0], false);
+
+ test_disjoint<P, ring>("point_ring1", "POINT(0 0)", "POLYGON((0 0,3 3,6 0,0 0))", false);
+ test_disjoint<P, ring>("point_ring2", "POINT(3 1)", "POLYGON((0 0,3 3,6 0,0 0))", false);
+ test_disjoint<P, ring>("point_ring3", "POINT(0 3)", "POLYGON((0 0,3 3,6 0,0 0))", true);
+ test_disjoint<P, polygon>("point_polygon1", "POINT(0 0)", "POLYGON((0 0,3 3,6 0,0 0))", false);
+ test_disjoint<P, polygon>("point_polygon2", "POINT(3 1)", "POLYGON((0 0,3 3,6 0,0 0))", false);
+ test_disjoint<P, polygon>("point_polygon3", "POINT(0 3)", "POLYGON((0 0,3 3,6 0,0 0))", true);
+
+ test_disjoint<ring, P>("point_ring2", "POLYGON((0 0,3 3,6 0,0 0))", "POINT(0 0)", false);
+ test_disjoint<polygon, P>("point_polygon2", "POLYGON((0 0,3 3,6 0,0 0))", "POINT(0 0)", false);
+
+ // Linear
+ typedef bg::model::linestring<P> ls;
+ typedef bg::model::segment<P> segment;
+ test_disjoint<ls, ls>("ls/ls 1", "linestring(0 0,1 1)", "linestring(1 0,0 1)", false);
+ test_disjoint<ls, ls>("ls/ls 2", "linestring(0 0,1 1)", "linestring(1 0,2 1)", true);
+ test_disjoint<segment, segment>("s/s 1", "linestring(0 0,1 1)", "linestring(1 0,0 1)", false);
+ test_disjoint<segment, segment>("s/s 2", "linestring(0 0,1 1)", "linestring(1 0,2 1)", true);
+
+ // Test degenerate segments (patched by Karsten Ahnert on 2012-07-25)
+ test_disjoint<segment, segment>("s/s 3", "linestring(0 0,0 0)", "linestring(1 0,0 1)", true);
+ test_disjoint<segment, segment>("s/s 4", "linestring(0 0,0 0)", "linestring(0 0,0 0)", false);
+ test_disjoint<segment, segment>("s/s 5", "linestring(0 0,0 0)", "linestring(1 0,1 0)", true);
+ test_disjoint<segment, segment>("s/s 6", "linestring(0 0,0 0)", "linestring(0 1,0 1)", true);
+
+ // Collinear opposite
+ test_disjoint<ls, ls>("ls/ls co", "linestring(0 0,2 2)", "linestring(1 1,0 0)", false);
+ // Collinear opposite and equal
+ test_disjoint<ls, ls>("ls/ls co-e", "linestring(0 0,1 1)", "linestring(1 1,0 0)", false);
+
+
+ // Problem described by Volker/Albert 2012-06-01
+ test_disjoint<polygon, box>("volker_albert_1",
+ "POLYGON((1992 3240,1992 1440,3792 1800,3792 3240,1992 3240))",
+ "BOX(1941 2066, 2055 2166)", false);
+
+ test_disjoint<polygon, box>("volker_albert_2",
+ "POLYGON((1941 2066,2055 2066,2055 2166,1941 2166))",
+ "BOX(1941 2066, 2055 2166)", false);
+
+ // Degenerate linestrings
+ {
+ // Submitted by Zachary on the Boost.Geometry Mailing List, on 2012-01-29
+ std::string const a = "linestring(100 10, 0 10)";
+ std::string const b = "linestring(50 10, 50 10)"; // one point only, with same y-coordinate
+ std::string const c = "linestring(100 10, 100 10)"; // idem, at left side
+ test_disjoint<ls, ls>("dls/dls 1", a, b, false);
+ test_disjoint<ls, ls>("dls/dls 2", b, a, false);
+ test_disjoint<segment, segment>("ds/ds 1", a, b, false);
+ test_disjoint<segment, segment>("ds/ds 2", b, a, false);
+ test_disjoint<ls, ls>("dls/dls 1", a, c, false);
+ }
+
+ // Linestrings making angles normally ignored
+ {
+ // These (non-disjoint) cases
+ // correspond to the test "segment_intersection_collinear"
+
+ // Collinear ('a')
+ // a1---------->a2
+ // b1--->b2
+ test_disjoint<ls, ls>("n1", "linestring(2 0,0 6)", "linestring(0 0,2 0)", false);
+
+ // a1---------->a2
+ // b1--->b2
+ test_disjoint<ls, ls>("n7", "linestring(2 0,6 0)", "linestring(6 0,8 0)", false);
+
+ // Collinear - opposite ('f')
+ // a1---------->a2
+ // b2<---b1
+ test_disjoint<ls, ls>("o1", "linestring(2 0,6 0)", "linestring(2 0,0 0)", false);
+ }
+
+ {
+ // Starting in the middle ('s')
+ // b2
+ // ^
+ // |
+ // |
+ // a1--------b1----->a2
+ test_disjoint<ls, ls>("case_s", "linestring(0 0,4 0)", "linestring(2 0,2 2)", false);
+
+ // Collinear, but disjoint
+ test_disjoint<ls, ls>("c-d", "linestring(2 0,6 0)", "linestring(7 0,8 0)", true);
+
+ // Parallel, disjoint
+ test_disjoint<ls, ls>("c-d", "linestring(2 0,6 0)", "linestring(2 1,6 1)", true);
+
+ // Error still there until 1.48 (reported "error", was reported to disjoint, so that's why it did no harm)
+ test_disjoint<ls, ls>("case_recursive_boxes_1",
+ "linestring(10 7,10 6)", "linestring(10 10,10 9)", true);
+
+ }
+
+ // TODO test_disjoint<segment, ls>("s/ls 1", "linestring(0 0,1 1)", "linestring(1 0,0 1)", false);
+ // TODO test_disjoint<segment, ls>("s/ls 2", "linestring(0 0,1 1)", "linestring(1 0,2 1)", true);
+ // TODO test_disjoint<ls, segment>("ls/s 1", "linestring(0 0,1 1)", "linestring(1 0,0 1)", false);
+ // TODO test_disjoint<ls, segment>("ls/s 2", "linestring(0 0,1 1)", "linestring(1 0,2 1)", true);
+
+}
+
+
+template <typename P>
+void test_3d()
+{
+ typedef bg::model::box<P> box;
+
+ test_disjoint<P, P>("pp 3d 1", "point(1 1 1)", "point(1 1 1)", false);
+ test_disjoint<P, P>("pp 3d 2", "point(1 1 1)", "point(1.001 1 1)", true);
+
+ test_disjoint<box, box>("bb1", "box(1 1 1, 2 2 2)", "box(3 1 1, 4 2 1)", true);
+ test_disjoint<box, box>("bb2", "box(1 1 1, 2 2 2)", "box(2 1 1, 3 2 1)", false);
+ test_disjoint<box, box>("bb3", "box(1 1 1, 2 2 2)", "box(2 2 1, 3 3 1)", false);
+ test_disjoint<box, box>("bb4", "box(1 1 1, 2 2 2)", "box(2.001 2 1, 3 3 1)", true);
+
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ test_3d<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/disjoint.vcproj b/libs/geometry/test/algorithms/disjoint.vcproj
new file mode 100644
index 000000000..d27526cc7
--- /dev/null
+++ b/libs/geometry/test/algorithms/disjoint.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="disjoint"
+ ProjectGUID="{96D51D96-B35F-47C8-864D-371DF2280686}"
+ RootNamespace="disjoint"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;..;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\disjoint.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/distance.cpp b/libs/geometry/test/algorithms/distance.cpp
new file mode 100644
index 000000000..e7d072976
--- /dev/null
+++ b/libs/geometry/test/algorithms/distance.cpp
@@ -0,0 +1,317 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#define TEST_ARRAY
+
+#include <sstream>
+
+#include <algorithms/test_distance.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/array.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <test_common/test_point.hpp>
+#include <test_geometries/custom_segment.hpp>
+#include <test_geometries/wrapped_boost_array.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+// Register boost array as a linestring
+namespace boost { namespace geometry { namespace traits
+{
+template <typename Point, std::size_t PointCount>
+struct tag< boost::array<Point, PointCount> >
+{
+ typedef linestring_tag type;
+};
+
+}}}
+
+template <typename P>
+void test_distance_point()
+{
+ namespace services = bg::strategy::distance::services;
+ typedef typename bg::default_distance_result<P>::type return_type;
+
+ // Basic, trivial test
+
+ P p1;
+ bg::set<0>(p1, 1);
+ bg::set<1>(p1, 1);
+
+ P p2;
+ bg::set<0>(p2, 2);
+ bg::set<1>(p2, 2);
+
+ return_type d = bg::distance(p1, p2);
+ BOOST_CHECK_CLOSE(d, return_type(1.4142135), 0.001);
+
+ // Test specifying strategy manually
+ typename services::default_strategy<bg::point_tag, P>::type strategy;
+
+ d = bg::distance(p1, p2, strategy);
+ BOOST_CHECK_CLOSE(d, return_type(1.4142135), 0.001);
+
+ {
+ // Test custom strategy
+ BOOST_CONCEPT_ASSERT( (bg::concept::PointDistanceStrategy<taxicab_distance<P> >) );
+
+ typedef typename services::return_type<taxicab_distance<P> >::type cab_return_type;
+ BOOST_MPL_ASSERT((boost::is_same<cab_return_type, typename bg::coordinate_type<P>::type>));
+
+ taxicab_distance<P> tcd;
+ cab_return_type d = bg::distance(p1, p2, tcd);
+
+ BOOST_CHECK( bg::math::abs(d - cab_return_type(2)) <= cab_return_type(0.01) );
+ }
+
+ {
+ // test comparability
+
+ typedef typename services::default_strategy<bg::point_tag, P>::type strategy_type;
+ typedef typename services::comparable_type<strategy_type>::type comparable_strategy_type;
+
+ strategy_type strategy;
+ comparable_strategy_type comparable_strategy = services::get_comparable<strategy_type>::apply(strategy);
+ return_type comparable = services::result_from_distance<comparable_strategy_type>::apply(comparable_strategy, 3);
+
+ BOOST_CHECK_CLOSE(comparable, return_type(9), 0.001);
+ }
+}
+
+template <typename P>
+void test_distance_segment()
+{
+ typedef typename bg::default_distance_result<P>::type return_type;
+ typedef typename bg::coordinate_type<P>::type coordinate_type;
+
+ P s1; bg::set<0>(s1, 1); bg::set<1>(s1, 1);
+ P s2; bg::set<0>(s2, 4); bg::set<1>(s2, 4);
+
+ // Check points left, right, projected-left, projected-right, on segment
+ P p1; bg::set<0>(p1, 0); bg::set<1>(p1, 1);
+ P p2; bg::set<0>(p2, 1); bg::set<1>(p2, 0);
+ P p3; bg::set<0>(p3, 3); bg::set<1>(p3, 1);
+ P p4; bg::set<0>(p4, 1); bg::set<1>(p4, 3);
+ P p5; bg::set<0>(p5, 3); bg::set<1>(p5, 3);
+
+ bg::model::referring_segment<P const> const seg(s1, s2);
+
+ return_type d1 = bg::distance(p1, seg);
+ return_type d2 = bg::distance(p2, seg);
+ return_type d3 = bg::distance(p3, seg);
+ return_type d4 = bg::distance(p4, seg);
+ return_type d5 = bg::distance(p5, seg);
+
+ BOOST_CHECK_CLOSE(d1, return_type(1), 0.001);
+ BOOST_CHECK_CLOSE(d2, return_type(1), 0.001);
+ BOOST_CHECK_CLOSE(d3, return_type(1.4142135), 0.001);
+ BOOST_CHECK_CLOSE(d4, return_type(1.4142135), 0.001);
+ BOOST_CHECK_CLOSE(d5, return_type(0), 0.001);
+
+ // Reverse case: segment/point instead of point/segment
+ return_type dr1 = bg::distance(seg, p1);
+ return_type dr2 = bg::distance(seg, p2);
+
+ BOOST_CHECK_CLOSE(dr1, d1, 0.001);
+ BOOST_CHECK_CLOSE(dr2, d2, 0.001);
+
+ // Test specifying strategy manually:
+ // 1) point-point-distance
+ typename bg::strategy::distance::services::default_strategy<bg::point_tag, P>::type pp_strategy;
+ d1 = bg::distance(p1, seg, pp_strategy);
+ BOOST_CHECK_CLOSE(d1, return_type(1), 0.001);
+
+ // 2) point-segment-distance
+ typename bg::strategy::distance::services::default_strategy<bg::segment_tag, P>::type ps_strategy;
+ d1 = bg::distance(p1, seg, ps_strategy);
+ BOOST_CHECK_CLOSE(d1, return_type(1), 0.001);
+
+ // 3) custom point strategy
+ taxicab_distance<P> tcd;
+ d1 = bg::distance(p1, seg, tcd);
+ BOOST_CHECK_CLOSE(d1, return_type(1), 0.001);
+}
+
+
+template <typename P>
+void test_distance_array_as_linestring()
+{
+ typedef typename bg::default_distance_result<P>::type return_type;
+
+ // Normal array does not have
+ boost::array<P, 2> points;
+ bg::set<0>(points[0], 1);
+ bg::set<1>(points[0], 1);
+ bg::set<0>(points[1], 3);
+ bg::set<1>(points[1], 3);
+
+ P p;
+ bg::set<0>(p, 2);
+ bg::set<1>(p, 1);
+
+ return_type d = bg::distance(p, points);
+ BOOST_CHECK_CLOSE(d, return_type(0.70710678), 0.001);
+
+ bg::set<0>(p, 5); bg::set<1>(p, 5);
+ d = bg::distance(p, points);
+ BOOST_CHECK_CLOSE(d, return_type(2.828427), 0.001);
+}
+
+
+
+
+template <typename P>
+void test_all()
+{
+ test_distance_point<P>();
+ test_distance_segment<P>();
+ test_distance_array_as_linestring<P>();
+
+ test_geometry<P, bg::model::segment<P> >("POINT(1 3)", "LINESTRING(1 1,4 4)", sqrt(2.0));
+ test_geometry<P, bg::model::segment<P> >("POINT(3 1)", "LINESTRING(1 1,4 4)", sqrt(2.0));
+
+ test_geometry<P, P>("POINT(1 1)", "POINT(2 2)", sqrt(2.0));
+ test_geometry<P, P>("POINT(0 0)", "POINT(0 3)", 3.0);
+ test_geometry<P, P>("POINT(0 0)", "POINT(4 0)", 4.0);
+ test_geometry<P, P>("POINT(0 3)", "POINT(4 0)", 5.0);
+ test_geometry<P, bg::model::linestring<P> >("POINT(1 3)", "LINESTRING(1 1,4 4)", sqrt(2.0));
+ test_geometry<P, bg::model::linestring<P> >("POINT(3 1)", "LINESTRING(1 1,4 4)", sqrt(2.0));
+ test_geometry<P, bg::model::linestring<P> >("POINT(50 50)", "LINESTRING(50 40, 40 50)", sqrt(50.0));
+ test_geometry<P, bg::model::linestring<P> >("POINT(50 50)", "LINESTRING(50 40, 40 50, 0 90)", sqrt(50.0));
+ test_geometry<bg::model::linestring<P>, P>("LINESTRING(1 1,4 4)", "POINT(1 3)", sqrt(2.0));
+ test_geometry<bg::model::linestring<P>, P>("LINESTRING(50 40, 40 50)", "POINT(50 50)", sqrt(50.0));
+ test_geometry<bg::model::linestring<P>, P>("LINESTRING(50 40, 40 50, 0 90)", "POINT(50 50)", sqrt(50.0));
+
+ // Rings
+ test_geometry<P, bg::model::ring<P> >("POINT(1 3)", "POLYGON((1 1,4 4,5 0,1 1))", sqrt(2.0));
+ test_geometry<P, bg::model::ring<P> >("POINT(3 1)", "POLYGON((1 1,4 4,5 0,1 1))", 0.0);
+ // other way round
+ test_geometry<bg::model::ring<P>, P>("POLYGON((1 1,4 4,5 0,1 1))", "POINT(3 1)", 0.0);
+ // open ring
+ test_geometry<P, bg::model::ring<P, true, false> >("POINT(1 3)", "POLYGON((4 4,5 0,1 1))", sqrt(2.0));
+
+ // Polygons
+ test_geometry<P, bg::model::polygon<P> >("POINT(1 3)", "POLYGON((1 1,4 4,5 0,1 1))", sqrt(2.0));
+ test_geometry<P, bg::model::polygon<P> >("POINT(3 1)", "POLYGON((1 1,4 4,5 0,1 1))", 0.0);
+ // other way round
+ test_geometry<bg::model::polygon<P>, P>("POLYGON((1 1,4 4,5 0,1 1))", "POINT(3 1)", 0.0);
+ // open polygon
+ test_geometry<P, bg::model::polygon<P, true, false> >("POINT(1 3)", "POLYGON((4 4,5 0,1 1))", sqrt(2.0));
+
+ // Polygons with holes
+ std::string donut = "POLYGON ((0 0,1 9,8 1,0 0),(1 1,4 1,1 4,1 1))";
+ test_geometry<P, bg::model::polygon<P> >("POINT(2 2)", donut, 0.5 * sqrt(2.0));
+ test_geometry<P, bg::model::polygon<P> >("POINT(3 3)", donut, 0.0);
+ // other way round
+ test_geometry<bg::model::polygon<P>, P>(donut, "POINT(2 2)", 0.5 * sqrt(2.0));
+ // open
+ test_geometry<P, bg::model::polygon<P, true, false> >("POINT(2 2)", "POLYGON ((0 0,1 9,8 1),(1 1,4 1,1 4))", 0.5 * sqrt(2.0));
+
+ // Should (currently) give compiler assertion
+ // test_geometry<bg::model::polygon<P>, bg::model::polygon<P> >(donut, donut, 0.5 * sqrt(2.0));
+
+ // DOES NOT COMPILE - cannot do read_wkt (because boost::array is not variably sized)
+ // test_geometry<P, boost::array<P, 2> >("POINT(3 1)", "LINESTRING(1 1,4 4)", sqrt(2.0));
+
+ test_geometry<P, test::wrapped_boost_array<P, 2> >("POINT(3 1)", "LINESTRING(1 1,4 4)", sqrt(2.0));
+
+}
+
+template <typename P>
+void test_empty_input()
+{
+ P p;
+ bg::model::linestring<P> line_empty;
+ bg::model::polygon<P> poly_empty;
+ bg::model::ring<P> ring_empty;
+
+ test_empty_input(p, line_empty);
+ test_empty_input(p, poly_empty);
+ test_empty_input(p, ring_empty);
+}
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ // point-point
+ {
+ std::string const a = "POINT(2544000 528000)";
+ std::string const b = "POINT(2768040 528000)";
+ int_point_type ia, ib;
+ double_point_type da, db;
+ bg::read_wkt(a, ia);
+ bg::read_wkt(b, ib);
+ bg::read_wkt(a, da);
+ bg::read_wkt(b, db);
+
+ BOOST_AUTO(idist, bg::distance(ia, ib));
+ BOOST_AUTO(ddist, bg::distance(da, db));
+
+ BOOST_CHECK_MESSAGE(std::abs(idist - ddist) < 0.1,
+ "within<a double> different from within<an int>");
+ }
+ // Point-segment
+ {
+ std::string const a = "POINT(2600000 529000)";
+ std::string const b = "LINESTRING(2544000 528000, 2768040 528000)";
+ int_point_type ia;
+ double_point_type da;
+ bg::model::segment<int_point_type> ib;
+ bg::model::segment<double_point_type> db;
+ bg::read_wkt(a, ia);
+ bg::read_wkt(b, ib);
+ bg::read_wkt(a, da);
+ bg::read_wkt(b, db);
+
+ BOOST_AUTO(idist, bg::distance(ia, ib));
+ BOOST_AUTO(ddist, bg::distance(da, db));
+
+ BOOST_CHECK_MESSAGE(std::abs(idist - ddist) < 0.1,
+ "within<a double> different from within<an int>");
+ }
+}
+
+int test_main(int, char* [])
+{
+#ifdef TEST_ARRAY
+ //test_all<int[2]>();
+ //test_all<float[2]>();
+ //test_all<double[2]>();
+ //test_all<test::test_point>(); // located here because of 3D
+#endif
+
+ test_large_integers();
+
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<boost::tuple<float, float> >();
+ test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ test_empty_input<bg::model::d2::point_xy<int> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/distance.vcproj b/libs/geometry/test/algorithms/distance.vcproj
new file mode 100644
index 000000000..831fafbaa
--- /dev/null
+++ b/libs/geometry/test/algorithms/distance.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="distance"
+ ProjectGUID="{347D08A4-22E9-45B1-A55B-AE84AA2EAA53}"
+ RootNamespace="distance"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\distance"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\distance"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\distance.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/envelope.cpp b/libs/geometry/test/algorithms/envelope.cpp
new file mode 100644
index 000000000..92d69e8ac
--- /dev/null
+++ b/libs/geometry/test/algorithms/envelope.cpp
@@ -0,0 +1,80 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <algorithms/test_envelope.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/geometries/adapted/std_pair_as_segment.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P>
+void test_2d()
+{
+ test_envelope<P>("POINT(1 1)", 1, 1, 1, 1);
+ test_envelope<bg::model::linestring<P> >("LINESTRING(1 1,2 2)", 1, 2, 1, 2);
+ test_envelope<bg::model::polygon<P> >("POLYGON((1 1,1 3,3 3,3 1,1 1))", 1, 3, 1, 3);
+
+ test_envelope<bg::model::ring<P> >("POLYGON((1 1,1 3,3 3,3 1,1 1))", 1, 3, 1, 3);
+ test_envelope<bg::model::box<P> >("BOX(1 1,3 3)", 1, 3, 1, 3);
+
+ // Triangle, closed and open, and CCW.
+ // Note that for the envelope algorithm,
+ // these combinations should theoretically not differ
+ test_envelope<bg::model::ring<P> >("POLYGON((4 1,0 7,7 9,4 1))", 0, 7, 1, 9);
+ test_envelope<bg::model::ring<P, true, false> >("POLYGON((4 1,0 7,7 9))", 0, 7, 1, 9);
+ test_envelope<bg::model::ring<P, false> >("POLYGON((4 1,7 9,0 7,4 1))", 0, 7, 1, 9);
+ test_envelope<bg::model::ring<P, false, false> >("POLYGON((4 1,7 9,0 7))", 0, 7, 1, 9);
+
+ typedef std::pair<P, P> segment_type;
+ test_envelope<segment_type>("SEGMENT(1 1,3 3)", 1, 3, 1, 3);
+}
+
+template <typename P>
+void test_3d()
+{
+ test_envelope<P>("POINT(1 2 3)", 1, 1, 2, 2, 3, 3);
+ test_envelope<P>("POINT(3 2 1)", 3, 3, 2, 2, 1, 1);
+ test_envelope<bg::model::linestring<P> >("LINESTRING(1 1 1,2 2 2)", 1, 2, 1, 2, 1, 2);
+ test_envelope<bg::model::box<P> >("BOX(1 1 1,3 3 3)", 1, 3, 1, 3, 1, 3);
+}
+
+
+int test_main(int, char* [])
+{
+ //test_2d<int[2]>();
+ //test_2d<float[2]>();
+ //test_2d<double[2]>();
+ test_2d<boost::tuple<float, float> >();
+ test_2d<bg::model::d2::point_xy<int> >();
+ test_2d<bg::model::d2::point_xy<float> >();
+ test_2d<bg::model::d2::point_xy<double> >();
+
+ test_3d<test::test_point>();
+ test_3d<boost::tuple<int, int, int> >();
+
+#ifdef HAVE_TTMATH
+ test_2d<bg::model::d2::point_xy<ttmath_big> >();
+ test_3d<boost::tuple<ttmath_big, ttmath_big, ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/envelope.vcproj b/libs/geometry/test/algorithms/envelope.vcproj
new file mode 100644
index 000000000..aa26c762b
--- /dev/null
+++ b/libs/geometry/test/algorithms/envelope.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="envelope"
+ ProjectGUID="{26EFCAF4-7907-4A47-ACBF-6CAB738CDCEB}"
+ RootNamespace="envelope"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\envelope"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\envelope"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\envelope.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/equals.cpp b/libs/geometry/test/algorithms/equals.cpp
new file mode 100644
index 000000000..c651b13ee
--- /dev/null
+++ b/libs/geometry/test/algorithms/equals.cpp
@@ -0,0 +1,162 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <algorithms/test_equals.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::box<P> box;
+ typedef bg::model::ring<P> ring;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::linestring<P> linestring;
+
+ std::string case_p1 = "POLYGON((0 0,0 2,2 2,0 0))";
+
+ test_geometry<P, P>("p1", "POINT(1 1)", "POINT(1 1)", true);
+ test_geometry<P, P>("p2", "POINT(1 1)", "POINT(1 2)", false);
+ test_geometry<box, box>("b1", "BOX(1 1,2 2)", "BOX(1 2,2 2)", false);
+ test_geometry<box, box>("b1", "BOX(1 2,3 4)", "BOX(1 2,3 4)", true);
+
+ // Completely equal
+ test_geometry<ring, ring>("poly_eq", case_p1, case_p1, true);
+
+ // Shifted
+ test_geometry<ring, ring>("poly_sh", "POLYGON((2 2,0 0,0 2,2 2))", case_p1, true);
+ test_geometry<polygon, polygon>("poly_sh2", case_p1, "POLYGON((0 2,2 2,0 0,0 2))", true);
+
+ // Extra coordinate
+ test_geometry<ring, ring>("poly_extra", case_p1, "POLYGON((0 0,0 2,2 2,1 1,0 0))", true);
+
+ // Shifted + extra (redundant) coordinate
+ test_geometry<ring, ring>("poly_shifted_extra1", "POLYGON((2 2,1 1,0 0,0 2,2 2))", case_p1, true);
+
+ // Shifted + extra (redundant) coordinate being first/last point
+ test_geometry<ring, ring>("poly_shifted_extra2", "POLYGON((1 1,0 0,0 2,2 2,1 1))", case_p1, true);
+
+ // Degenerate (duplicate) points
+ test_geometry<ring, ring>("poly_degenerate", "POLYGON((0 0,0 2,2 2,2 2,0 0))", "POLYGON((0 0,0 2,0 2,2 2,0 0))", true);
+
+ // Two different bends, same area, unequal
+ test_geometry<ring, ring>("poly_bends",
+ "POLYGON((4 0,5 3,8 4,7 7,4 8,0 4,4 0))",
+ "POLYGON((4 0,7 1,8 4,5 5,4 8,0 4,4 0))", false);
+
+ // Unequal (but same area)
+ test_geometry<ring, ring>("poly_uneq", case_p1, "POLYGON((1 1,1 3,3 3,1 1))", false);
+
+ // One having hole
+ test_geometry<polygon, polygon>("poly_hole", "POLYGON((0 0,0 4,4 4,0 0))", "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1))", false);
+
+ // Both having holes
+ test_geometry<polygon, polygon>("poly_holes",
+ "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1))",
+ "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1))", true);
+
+ // Both having holes, outer equal, inner not equal
+ test_geometry<polygon, polygon>("poly_uneq_holes",
+ "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1))",
+ "POLYGON((0 0,0 4,4 4,0 0),(2 2,3 2,3 3,2 3,2 2))", false);
+
+ // Both having 2 holes, equal but in different order
+ test_geometry<polygon, polygon>("poly_holes_diff_order",
+ "POLYGON((0 0,0 4,4 4,0 0),(1 1,2 1,2 2,1 2,1 1),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((0 0,0 4,4 4,0 0),(2 2,3 2,3 3,2 3,2 2),(1 1,2 1,2 2,1 2,1 1))", true);
+
+ // Both having 3 holes, equal but in different order
+ test_geometry<polygon, polygon>("poly_holes_diff_order_3",
+ "POLYGON((0 0,0 10,10 10,0 0),(1 1,2 1,2 2,1 2,1 1),(4 1,5 1,5 2,4 2,4 1),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((0 0,0 10,10 10,0 0),(4 1,5 1,5 2,4 2,4 1),(2 2,3 2,3 3,2 3,2 2),(1 1,2 1,2 2,1 2,1 1))", true);
+
+ // polygon/ring vv
+ test_geometry<polygon, ring>("poly_sh2_pr", case_p1, case_p1, true);
+ test_geometry<ring, polygon>("poly_sh2_rp", case_p1, case_p1, true);
+
+ // box/ring/poly
+ test_geometry<box, ring>("boxring1", "BOX(1 1,2 2)", "POLYGON((1 1,1 2,2 2,2 1,1 1))", true);
+ test_geometry<ring, box>("boxring2", "POLYGON((1 1,1 2,2 2,2 1,1 1))", "BOX(1 1,2 2)", true);
+ test_geometry<box, polygon>("boxpoly1", "BOX(1 1,2 2)", "POLYGON((1 1,1 2,2 2,2 1,1 1))", true);
+ test_geometry<polygon, box>("boxpoly2", "POLYGON((1 1,1 2,2 2,2 1,1 1))", "BOX(1 1,2 2)", true);
+
+ test_geometry<polygon, box>("boxpoly2", "POLYGON((1 1,1 2,2 2,2 1,1 1))", "BOX(1 1,2 3)", false);
+
+ // linestring/linestring
+ // simplex
+ test_geometry<linestring, linestring>("ls1", "LINESTRING(1 1,2 2)", "LINESTRING(1 1,2 2)", true);
+
+ // REVERSE linestring
+ // Is this equal? To be decided.
+ //test_geometry<linestring, linestring>("ls1", "LINESTRING(1 1,2 2)", "LINESTRING(2 2,1 1)", true);
+
+}
+
+
+template <typename T>
+void verify()
+{
+ T dxn1, dyn1, dxn2, dyn2;
+
+ {
+ T x1 = "0", y1 = "0", x2 = "3", y2 = "3";
+ T dx = x2 - x1, dy = y2 - y1;
+ T mag = sqrt(dx * dx + dy * dy);
+ dxn1 = dx / mag;
+ dyn1 = dy / mag;
+ }
+
+ {
+ T x1 = "0", y1 = "0", x2 = "1", y2 = "1";
+ T dx = x2 - x1, dy = y2 - y1;
+ T mag = sqrt(dx * dx + dy * dy);
+ dxn2 = dx / mag;
+ dyn2 = dy / mag;
+ }
+
+ if (dxn1 == dxn2 && dyn1 == dyn2)
+ {
+ //std::cout << "vectors are equal, using ==" << std::endl;
+ }
+ if (boost::geometry::math::equals(dxn1, dxn2)
+ && boost::geometry::math::equals(dyn1, dyn2))
+ {
+ //std::cout << "vectors are equal, using bg::math::equals" << std::endl;
+ }
+
+ bool equals = boost::geometry::math::equals_with_epsilon(dxn1, dxn2)
+ && boost::geometry::math::equals_with_epsilon(dyn1, dyn2);
+
+ if (equals)
+ {
+ //std::cout << "vectors are equal, using bg::math::equals_with_epsilon" << std::endl;
+ }
+
+ BOOST_CHECK_EQUAL(equals, true);
+}
+
+
+int test_main( int , char* [] )
+{
+ //verify<double>();
+#if defined(HAVE_TTMATH)
+ verify<ttmath_big>();
+#endif
+
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/equals.vcproj b/libs/geometry/test/algorithms/equals.vcproj
new file mode 100644
index 000000000..64697ef87
--- /dev/null
+++ b/libs/geometry/test/algorithms/equals.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="equals"
+ ProjectGUID="{E54F493F-BF9D-4A6D-AE2F-5F97AC95251A}"
+ RootNamespace="equals"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\equals"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\equals"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\equals.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/expand.cpp b/libs/geometry/test/algorithms/expand.cpp
new file mode 100644
index 000000000..213e0b1d9
--- /dev/null
+++ b/libs/geometry/test/algorithms/expand.cpp
@@ -0,0 +1,153 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <algorithms/test_expand.hpp>
+
+
+#include <boost/geometry/algorithms/make.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/geometries/adapted/std_pair_as_segment.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename Point>
+void test_point_3d()
+{
+ bg::model::box<Point> b = bg::make_inverse<bg::model::box<Point> >();
+
+ test_expand<Point>(b, "POINT(1 2 5)", "(1,2,5),(1,2,5)");
+ test_expand<Point>(b, "POINT(3 4 6)", "(1,2,5),(3,4,6)");
+
+ test_expand<Point>(b, "POINT(4 4 5)", "(1,2,5),(4,4,6)");
+ test_expand<Point>(b, "POINT(4 5 5)", "(1,2,5),(4,5,6)");
+ test_expand<Point>(b, "POINT(10 10 4)", "(1,2,4),(10,10,6)");
+ test_expand<Point>(b, "POINT(9 9 4)", "(1,2,4),(10,10,6)");
+
+ test_expand<Point>(b, "POINT(0 2 7)", "(0,2,4),(10,10,7)");
+ test_expand<Point>(b, "POINT(0 0 7)", "(0,0,4),(10,10,7)");
+ test_expand<Point>(b, "POINT(-1 -1 5)", "(-1,-1,4),(10,10,7)");
+ test_expand<Point>(b, "POINT(0 0 5)", "(-1,-1,4),(10,10,7)");
+
+ test_expand<Point>(b, "POINT(15 -1 0)", "(-1,-1,0),(15,10,7)");
+ test_expand<Point>(b, "POINT(-1 15 10)", "(-1,-1,0),(15,15,10)");
+}
+
+template <typename Point>
+void test_box_3d()
+{
+ typedef bg::model::box<Point> box_type;
+ box_type b = bg::make_inverse<box_type>();
+
+ test_expand<box_type>(b, "BOX(0 2 5,4 4 6)", "(0,2,5),(4,4,6)");
+ test_expand<box_type>(b, "BOX(0 1 5,4 6 6)", "(0,1,5),(4,6,6)");
+ test_expand<box_type>(b, "BOX(-1 -1 6,10 10 5)", "(-1,-1,5),(10,10,6)");
+ test_expand<box_type>(b, "BOX(3 3 6,3 3 5)", "(-1,-1,5),(10,10,6)");
+
+ test_expand<box_type>(b, "BOX(3 15 7,-1 3 4)", "(-1,-1,4),(10,15,7)");
+ test_expand<box_type>(b, "BOX(-15 3 7,3 20 4)", "(-15,-1,4),(10,20,7)");
+ test_expand<box_type>(b, "BOX(3 -20 8,3 20 3)", "(-15,-20,3),(10,20,8)");
+ test_expand<box_type>(b, "BOX(-20 3 8,20 3 3)", "(-20,-20,3),(20,20,8)");
+}
+
+
+
+template <typename P>
+void test_3d()
+{
+ test_point_3d<P>();
+ test_box_3d<P>();
+}
+
+template <typename Point>
+void test_2d()
+{
+ typedef bg::model::box<Point> box_type;
+ typedef std::pair<Point, Point> segment_type;
+
+ box_type b = bg::make_inverse<box_type>();
+
+ test_expand<box_type>(b, "BOX(1 1,2 2)", "(1,1),(2,2)");
+
+ // Test an 'incorrect' box -> should also correctly update the bbox
+ test_expand<box_type>(b, "BOX(3 4,0 1)", "(0,1),(3,4)");
+
+ // Test a segment
+ test_expand<segment_type>(b, "SEGMENT(5 6,7 8)", "(0,1),(7,8)");
+}
+
+template <typename Point>
+void test_spherical_degree()
+{
+ bg::model::box<Point> b = bg::make_inverse<bg::model::box<Point> >();
+
+ test_expand<Point>(b, "POINT(179.73 71.56)",
+ "(179.73,71.56),(179.73,71.56)");
+ test_expand<Point>(b, "POINT(177.47 71.23)",
+ "(177.47,71.23),(179.73,71.56)");
+
+ // It detects that this point is lying RIGHT of the others,
+ // and then it "expands" it.
+ // It might be argued that "181.22" is displayed instead. However, they are
+ // the same.
+ test_expand<Point>(b, "POINT(-178.78 70.78)",
+ "(177.47,70.78),(-178.78,71.56)");
+}
+
+
+template <typename Point>
+void test_spherical_radian()
+{
+ bg::model::box<Point> b = bg::make_inverse<bg::model::box<Point> >();
+
+ test_expand<Point>(b, "POINT(3.128 1.249)",
+ "(3.128,1.249),(3.128,1.249)");
+ test_expand<Point>(b, "POINT(3.097 1.243)",
+ "(3.097,1.243),(3.128,1.249)");
+
+ // It detects that this point is lying RIGHT of the others,
+ // and then it "expands" it.
+ // It might be argued that "181.22" is displayed instead. However, they are
+ // the same.
+ test_expand<Point>(b, "POINT(-3.121 1.235)",
+ "(3.097,1.235),(-3.121,1.249)");
+}
+
+int test_main(int, char* [])
+{
+ test_2d<bg::model::point<int, 2, bg::cs::cartesian> >();
+
+
+ test_3d<test::test_point>();
+ test_3d<bg::model::point<int, 3, bg::cs::cartesian> >();
+ test_3d<bg::model::point<float, 3, bg::cs::cartesian> >();
+ test_3d<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ test_spherical_degree<bg::model::point<double, 2, bg::cs::spherical<bg::degree> > >();
+ test_spherical_radian<bg::model::point<double, 2, bg::cs::spherical<bg::radian> > >();
+
+
+#if defined(HAVE_TTMATH)
+ test_3d<bg::model::point<ttmath_big, 3, bg::cs::cartesian> >();
+ test_spherical_degree<bg::model::point<ttmath_big, 2, bg::cs::spherical<bg::degree> > >();
+ test_spherical_radian<bg::model::point<ttmath_big, 2, bg::cs::spherical<bg::radian> > >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/expand.vcproj b/libs/geometry/test/algorithms/expand.vcproj
new file mode 100644
index 000000000..7fb588e5d
--- /dev/null
+++ b/libs/geometry/test/algorithms/expand.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="expand"
+ ProjectGUID="{5330DAB1-DF27-44FC-971B-3C5094F82FA3}"
+ RootNamespace="expand"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\expand"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\expand"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\expand.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/for_each.cpp b/libs/geometry/test/algorithms/for_each.cpp
new file mode 100644
index 000000000..f61397eec
--- /dev/null
+++ b/libs/geometry/test/algorithms/for_each.cpp
@@ -0,0 +1,81 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <algorithms/test_for_each.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<P>
+ (
+ "POINT(1 1)"
+
+ // per point
+ , 1
+ , "POINT(101 1)"
+ , "POINT(101 100)"
+ // per segment
+ , ""
+ , 0
+ , "POINT(1 1)"
+ );
+ test_geometry<bg::model::linestring<P> >
+ (
+ "LINESTRING(1 1,2 2)"
+
+ , 3
+ , "LINESTRING(101 1,102 2)"
+ , "LINESTRING(101 100,102 200)"
+
+ , "((1, 1), (2, 2))"
+ , std::sqrt(2.0)
+ , "LINESTRING(10 1,2 2)"
+ );
+ test_geometry<bg::model::ring<P> >
+ (
+ "POLYGON((1 1,1 4,4 4,4 1,1 1))"
+
+ , 11
+ , "POLYGON((101 1,101 4,104 4,104 1,101 1))"
+ , "POLYGON((101 100,101 400,104 400,104 100,101 100))"
+
+ , "((1, 1), (1, 4)) ((1, 4), (4, 4)) ((4, 4), (4, 1)) ((4, 1), (1, 1))"
+ , 4 * 3.0
+ , "POLYGON((10 1,10 4,4 4,4 1,1 1))"
+ );
+ test_geometry<bg::model::polygon<P> >
+ (
+ "POLYGON((1 1,1 4,4 4,4 1,1 1),(2 2,3 2,3 3,2 3,2 2))"
+
+ , 23
+ , "POLYGON((101 1,101 4,104 4,104 1,101 1),(102 2,103 2,103 3,102 3,102 2))"
+ , "POLYGON((101 100,101 400,104 400,104 100,101 100),(102 200,103 200,103 300,102 300,102 200))"
+
+ , "((1, 1), (1, 4)) ((1, 4), (4, 4)) ((4, 4), (4, 1)) ((4, 1), (1, 1)) "
+ "((2, 2), (3, 2)) ((3, 2), (3, 3)) ((3, 3), (2, 3)) ((2, 3), (2, 2))"
+ , 4 * 3.0 + 4 * 1.0
+ , "POLYGON((10 1,10 4,4 4,4 1,1 1),(2 2,3 2,3 3,2 3,2 2))"
+ );
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::point<ttmath_big, 2, bg::cs::cartesian> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/for_each.vcproj b/libs/geometry/test/algorithms/for_each.vcproj
new file mode 100644
index 000000000..453064a3b
--- /dev/null
+++ b/libs/geometry/test/algorithms/for_each.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="for_each"
+ ProjectGUID="{774F6471-D8A0-481C-9B0A-4903EAD25B70}"
+ RootNamespace="for_each"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\for_each"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\for_each"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\for_each.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/intersection.cpp b/libs/geometry/test/algorithms/intersection.cpp
new file mode 100644
index 000000000..ba303e24f
--- /dev/null
+++ b/libs/geometry/test/algorithms/intersection.cpp
@@ -0,0 +1,535 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+#define BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE
+#define TEST_ISOVIST
+
+//#define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
+//#define BOOST_GEOMETRY_DEBUG_INTERSECTION
+//#define BOOST_GEOMETRY_DEBUG_TRAVERSE
+//#define BOOST_GEOMETRY_DEBUG_FOLLOW
+//#define BOOST_GEOMETRY_DEBUG_ASSEMBLE
+//#define BOOST_GEOMETRY_DEBUG_IDENTIFIER
+
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+#include <boost/geometry/util/rational.hpp>
+
+#include <algorithms/test_intersection.hpp>
+#include <algorithms/test_overlay.hpp>
+
+#include <algorithms/overlay/overlay_cases.hpp>
+
+#include <test_common/test_point.hpp>
+#include <test_common/with_pointer.hpp>
+#include <test_geometries/custom_segment.hpp>
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+
+
+static std::string pie_2_3_23_0[2] =
+{
+ "POLYGON((2500 2500,2855 3828,2500 3875,2500 2500))",
+ "POLYGON((2500 2500,2791 3586,2499 3625,2208 3586,2500 2500))"
+};
+
+template <typename Polygon>
+void test_areal()
+{
+ test_one<Polygon, Polygon, Polygon>("pie_2_3_23_0",
+ pie_2_3_23_0[0], pie_2_3_23_0[1],
+ 1, 4, 163292.679042133, 0.1);
+
+ test_one<Polygon, Polygon, Polygon>("simplex_with_empty_1",
+ simplex_normal[0], polygon_empty,
+ 0, 0, 0.0);
+ test_one<Polygon, Polygon, Polygon>("simplex_with_empty_2",
+ polygon_empty, simplex_normal[0],
+ 0, 0, 0.0);
+
+ test_one<Polygon, Polygon, Polygon>("simplex_normal",
+ simplex_normal[0], simplex_normal[1],
+ 1, 7, 5.47363293);
+ test_one<Polygon, Polygon, Polygon>("star_ring", example_star, example_ring,
+ 1, 18, 2.80983);
+
+ test_one<Polygon, Polygon, Polygon>("star_poly", example_star, example_polygon,
+ 1, 0, // CLN: 23 points, other types: 22 point (one is merged)
+ 2.5020508);
+ test_one<Polygon, Polygon, Polygon>("first_within_second1",
+ first_within_second[0], first_within_second[1],
+ 1, 5, 1.0);
+
+ test_one<Polygon, Polygon, Polygon>("first_within_second2",
+ first_within_second[1], first_within_second[0],
+ 1, 5, 1.0);
+
+ test_one<Polygon, Polygon, Polygon>("first_within_hole_of_second",
+ first_within_hole_of_second[0], first_within_hole_of_second[1],
+ 0, 0, 0.0);
+
+ // Two forming new hole
+ test_one<Polygon, Polygon, Polygon>("new_hole",
+ new_hole[0], new_hole[1],
+ 2, 10, 2.0);
+
+ // Two identical
+ test_one<Polygon, Polygon, Polygon>("identical",
+ identical[0], identical[1],
+ 1, 5, 1.0);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_exterior_and_interiors_winded",
+ intersect_exterior_and_interiors_winded[0], intersect_exterior_and_interiors_winded[1],
+ 1, 14, 25.2166667);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_disjoint",
+ intersect_holes_disjoint[0], intersect_holes_disjoint[1],
+ 1, 15, 18.0);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_intersect",
+ intersect_holes_intersect[0], intersect_holes_intersect[1],
+ 1, 14, 18.25);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_intersect_and_disjoint",
+ intersect_holes_intersect_and_disjoint[0], intersect_holes_intersect_and_disjoint[1],
+ 1, 19, 17.25);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_intersect_and_touch",
+ intersect_holes_intersect_and_touch[0], intersect_holes_intersect_and_touch[1],
+ 1, 23, 17.25);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_new_ring",
+ intersect_holes_new_ring[0], intersect_holes_new_ring[1],
+ 2, 23, 122.1039);
+
+ test_one<Polygon, Polygon, Polygon>("winded",
+ winded[0], winded[1],
+ 1, 22, 40.0);
+
+ test_one<Polygon, Polygon, Polygon>("within_holes_disjoint",
+ within_holes_disjoint[0], within_holes_disjoint[1],
+ 1, 15, 23.0);
+
+ test_one<Polygon, Polygon, Polygon>("side_side",
+ side_side[0], side_side[1],
+ 0, 0, 0.0);
+
+ test_one<Polygon, Polygon, Polygon>("two_bends",
+ two_bends[0], two_bends[1],
+ 1, 7, 24.0);
+
+ test_one<Polygon, Polygon, Polygon>("star_comb_15",
+ star_comb_15[0], star_comb_15[1],
+ 28, 150, 189.952883);
+
+ test_one<Polygon, Polygon, Polygon>("simplex_normal",
+ simplex_normal[0], simplex_normal[1],
+ 1, 7, 5.47363293);
+
+ test_one<Polygon, Polygon, Polygon>("distance_zero",
+ distance_zero[0], distance_zero[1],
+ 1, 0 /* f: 4, other: 5 */, 0.29516139, 0.01);
+
+ test_one<Polygon, Polygon, Polygon>("equal_holes_disjoint",
+ equal_holes_disjoint[0], equal_holes_disjoint[1],
+ 1, 20, 81 - 2 * 3 * 3 - 3 * 7);
+
+ test_one<Polygon, Polygon, Polygon>("only_hole_intersections1",
+ only_hole_intersections[0], only_hole_intersections[1],
+ 1, 21, 178.090909);
+ test_one<Polygon, Polygon, Polygon>("only_hole_intersection2",
+ only_hole_intersections[0], only_hole_intersections[2],
+ 1, 21, 149.090909);
+
+ test_one<Polygon, Polygon, Polygon>("fitting",
+ fitting[0], fitting[1],
+ 0, 0, 0);
+
+ test_one<Polygon, Polygon, Polygon>("crossed",
+ crossed[0], crossed[1],
+ 3, 0, 1.5);
+
+ typedef typename bg::coordinate_type<Polygon>::type ct;
+
+#ifdef TEST_ISOVIST
+#ifdef _MSC_VER
+ test_one<Polygon, Polygon, Polygon>("isovist",
+ isovist1[0], isovist1[1],
+ 1, 20, 88.19203,
+ if_typed_tt<ct>(0.01, 0.1));
+
+ // SQL Server gives: 88.1920416352664
+ // PostGIS gives: 88.19203677911
+
+#endif
+#endif
+
+ //std::cout << typeid(ct).name() << std::endl;
+
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110306_javier",
+ ggl_list_20110306_javier[0], ggl_list_20110306_javier[1],
+ 1, if_typed_tt<ct>(5, 4),
+ 0.6649875,
+ if_typed<ct, float>(1.0, 0.01));
+
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110307_javier",
+ ggl_list_20110307_javier[0], ggl_list_20110307_javier[1],
+ 1, 4, 0.4, 0.01);
+
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110627_phillip",
+ ggl_list_20110627_phillip[0], ggl_list_20110627_phillip[1],
+ 1, if_typed_tt<ct>(6, 5), 11151.6618);
+
+#ifdef _MSC_VER // gcc/linux behaves differently
+ if (! boost::is_same<ct, float>::value)
+ {
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110716_enrico",
+ ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1],
+ 3,
+ if_typed<ct, float>(19, if_typed<ct, double>(22, 21)),
+ 35723.8506317139);
+ }
+#endif
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_f", buffer_rt_f[0], buffer_rt_f[1],
+ 1, 4, 0.00029437899183903937, 0.01);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_g", buffer_rt_g[0], buffer_rt_g[1],
+ 1, 0, 2.914213562373);
+
+ test_one<Polygon, Polygon, Polygon>("ticket_8254", ticket_8254[0], ticket_8254[1],
+ 1, 4, 3.63593e-08, 0.01);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_mp1", buffer_mp1[0], buffer_mp1[1],
+ 1, 31, 2.271707796);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_mp2", buffer_mp2[0], buffer_mp2[1],
+ 1, 29, 0.457126);
+
+ return;
+
+
+ test_one<Polygon, Polygon, Polygon>(
+ "polygon_pseudo_line",
+ "Polygon((0 0,0 4,4 4,4 0,0 0))",
+ "Polygon((2 -2,2 -1,2 6,2 -2))",
+ 5, 22, 1.1901714);
+}
+
+template <typename Polygon, typename Box>
+void test_areal_clip()
+{
+ test_one<Polygon, Box, Polygon>("boxring", example_box, example_ring,
+ 2, 12, 1.09125);
+ test_one<Polygon, Polygon, Box>("boxring2", example_ring,example_box,
+ 2, 12, 1.09125);
+
+ test_one<Polygon, Box, Polygon>("boxpoly", example_box, example_polygon,
+ 3, 19, 0.840166);
+
+ test_one<Polygon, Box, Polygon>("poly1", example_box,
+ "POLYGON((3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2))",
+ 2, 12, 1.09125);
+
+ test_one<Polygon, Box, Polygon>("clip_poly2", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,5.3 2.5,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 2, 12, 1.00375);
+
+ test_one<Polygon, Box, Polygon>("clip_poly3", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 2, 12, 1.00375);
+
+ test_one<Polygon, Box, Polygon>("clip_poly4", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 2.3,5.0 2.3,5.0 2.1,4.5 2.1,4.5 1.9,4.0 1.9,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 2, 16, 0.860892);
+
+ test_one<Polygon, Box, Polygon>("clip_poly5", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 1.2,2.9 0.7,2 1.3))",
+ 2, 11, 0.7575961);
+
+ test_one<Polygon, Box, Polygon>("clip_poly6", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.0 3.0,5.0 2.0,2.9 0.7,2 1.3))",
+ 2, 13, 1.0744456);
+
+ test_one<Polygon, Box, Polygon>("clip_poly7", "Box(0 0, 3 3)",
+ "POLYGON((2 2, 1 4, 2 4, 3 3, 2 2))",
+ 1, 4, 0.75);
+}
+
+
+template <typename Box>
+void test_boxes(std::string const& wkt1, std::string const& wkt2, double expected_area, bool expected_result)
+{
+ Box box1, box2;
+ bg::read_wkt(wkt1, box1);
+ bg::read_wkt(wkt2, box2);
+
+ Box box_out;
+ bool detected = bg::intersection(box1, box2, box_out);
+ typename bg::default_area_result<Box>::type area = bg::area(box_out);
+
+ BOOST_CHECK_EQUAL(detected, expected_result);
+ if (detected && expected_result)
+ {
+ BOOST_CHECK_CLOSE(area, expected_area, 0.01);
+ }
+}
+
+
+template <typename P>
+void test_point_output()
+{
+ typedef bg::model::linestring<P> linestring;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::box<P> box;
+ typedef bg::model::segment<P> segment;
+
+ test_point_output<polygon, polygon>(simplex_normal[0], simplex_normal[1], 6);
+ test_point_output<box, polygon>("box(1 1,6 4)", simplex_normal[0], 4);
+ test_point_output<linestring, polygon>("linestring(0 2,6 2)", simplex_normal[0], 2);
+ // NYI because of sectionize:
+ // test_point_output<segment, polygon>("linestring(0 2,6 2)", simplex_normal[0], 2);
+ // NYI because needs special treatment:
+ // test_point_output<box, box>("box(0 0,4 4)", "box(2 2,6 6)", 2);
+}
+
+
+template <typename Polygon, typename LineString>
+void test_areal_linear()
+{
+ std::string const poly_simplex = "POLYGON((1 1,1 3,3 3,3 1,1 1))";
+
+ test_one_lp<LineString, Polygon, LineString>("simplex", poly_simplex, "LINESTRING(0 2,4 2)", 1, 2, 2.0);
+ test_one_lp<LineString, Polygon, LineString>("case2", poly_simplex, "LINESTRING(0 1,4 3)", 1, 2, sqrt(5.0));
+ test_one_lp<LineString, Polygon, LineString>("case3", "POLYGON((2 0,2 5,5 5,5 0,2 0))", "LINESTRING(0 1,1 2,3 2,4 3,6 3,7 4)", 1, 4, 2 + sqrt(2.0));
+ test_one_lp<LineString, Polygon, LineString>("case4", "POLYGON((0 0,0 4,2 4,2 0,0 0))", "LINESTRING(1 1,3 2,1 3)", 2, 4, sqrt(5.0));
+
+ test_one_lp<LineString, Polygon, LineString>("case5", poly_simplex, "LINESTRING(0 1,3 4)", 1, 2, sqrt(2.0));
+ test_one_lp<LineString, Polygon, LineString>("case6", "POLYGON((2 0,2 4,3 4,3 1,4 1,4 3,5 3,5 1,6 1,6 3,7 3,7 1,8 1,8 3,9 3,9 0,2 0))", "LINESTRING(1 1,10 3)", 4, 8,
+ // Pieces are 1 x 2/9:
+ 4.0 * sqrt(1.0 + 4.0/81.0));
+ test_one_lp<LineString, Polygon, LineString>("case7", poly_simplex, "LINESTRING(1.5 1.5,2.5 2.5)", 1, 2, sqrt(2.0));
+ test_one_lp<LineString, Polygon, LineString>("case8", poly_simplex, "LINESTRING(1 0,2 0)", 0, 0, 0.0);
+
+ std::string const poly_9 = "POLYGON((1 1,1 4,4 4,4 1,1 1))";
+ test_one_lp<LineString, Polygon, LineString>("case9", poly_9, "LINESTRING(0 1,1 2,2 2)", 1, 2, 1.0);
+ test_one_lp<LineString, Polygon, LineString>("case10", poly_9, "LINESTRING(0 1,1 2,0 2)", 0, 0, 0.0);
+ test_one_lp<LineString, Polygon, LineString>("case11", poly_9, "LINESTRING(2 2,4 2,3 3)", 1, 3, 2.0 + sqrt(2.0));
+ test_one_lp<LineString, Polygon, LineString>("case12", poly_9, "LINESTRING(2 3,4 4,5 6)", 1, 2, sqrt(5.0));
+
+ test_one_lp<LineString, Polygon, LineString>("case13", poly_9, "LINESTRING(3 2,4 4,2 3)", 1, 3, 2.0 * sqrt(5.0));
+ test_one_lp<LineString, Polygon, LineString>("case14", poly_9, "LINESTRING(5 6,4 4,6 5)", 0, 0, 0.0);
+ test_one_lp<LineString, Polygon, LineString>("case15", poly_9, "LINESTRING(0 2,1 2,1 3,0 3)", 1, 2, 1.0);
+ test_one_lp<LineString, Polygon, LineString>("case16", poly_9, "LINESTRING(2 2,1 2,1 3,2 3)", 1, 4, 3.0);
+
+ std::string const angly = "LINESTRING(2 2,2 1,4 1,4 2,5 2,5 3,4 3,4 4,5 4,3 6,3 5,2 5,2 6,0 4)";
+ test_one_lp<LineString, Polygon, LineString>("case17", "POLYGON((1 1,1 5,4 5,4 1,1 1))", angly, 3, 8, 6.0);
+ test_one_lp<LineString, Polygon, LineString>("case18", "POLYGON((1 1,1 5,5 5,5 1,1 1))", angly, 2, 12, 10.0 + sqrt(2.0));
+ test_one_lp<LineString, Polygon, LineString>("case19", poly_9, "LINESTRING(1 2,1 3,0 3)", 1, 2, 1.0);
+ test_one_lp<LineString, Polygon, LineString>("case20", poly_9, "LINESTRING(1 2,1 3,2 3)", 1, 3, 2.0);
+
+ test_one_lp<LineString, Polygon, LineString>("case21", poly_9, "LINESTRING(1 2,1 4,4 4,4 1,2 1,2 2)", 1, 6, 11.0);
+
+ // Compile test - arguments in any order:
+ test_one<LineString, Polygon, LineString>("simplex", poly_simplex, "LINESTRING(0 2,4 2)", 1, 2, 2.0);
+ test_one<LineString, LineString, Polygon>("simplex", "LINESTRING(0 2,4 2)", poly_simplex, 1, 2, 2.0);
+
+ typedef typename bg::point_type<Polygon>::type Point;
+ test_one<LineString, bg::model::ring<Point>, LineString>("simplex", poly_simplex, "LINESTRING(0 2,4 2)", 1, 2, 2.0);
+
+}
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::linestring<P> linestring;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::box<P> box;
+ typedef bg::model::segment<P> segment;
+
+ typedef bg::model::polygon<P, false> polygon_ccw;
+ typedef bg::model::polygon<P, true, false> polygon_open;
+ typedef bg::model::polygon<P, false, false> polygon_ccw_open;
+
+ std::string clip = "box(2 2,8 8)";
+
+ test_areal_linear<polygon, linestring>();
+ test_areal_linear<polygon_open, linestring>();
+ test_areal_linear<polygon_ccw, linestring>();
+ test_areal_linear<polygon_ccw_open, linestring>();
+
+ // Test polygons clockwise and counter clockwise
+ test_areal<polygon>();
+
+ test_areal<polygon_ccw>();
+ test_areal<polygon_open>();
+ test_areal<polygon_ccw_open>();
+
+
+ test_areal_clip<polygon, box>();
+ test_areal_clip<polygon_ccw, box>();
+
+#if defined(TEST_FAIL_DIFFERENT_ORIENTATIONS)
+ // Should NOT compile
+ // NOTE: this can probably be relaxed later on.
+ test_one<polygon, polygon_ccw, polygon>("simplex_normal",
+ simplex_normal[0], simplex_normal[1],
+ 1, 7, 5.47363293);
+ // Output ccw, nyi (should be just reversing afterwards)
+ test_one<polygon, polygon, polygon_ccw>("simplex_normal",
+ simplex_normal[0], simplex_normal[1],
+ 1, 7, 5.47363293);
+#endif
+
+ // Basic check: box/linestring, is clipping OK? should compile in any order
+ test_one<linestring, linestring, box>("llb", "LINESTRING(0 0,10 10)", clip, 1, 2, sqrt(2.0 * 6.0 * 6.0));
+ test_one<linestring, box, linestring>("lbl", clip, "LINESTRING(0 0,10 10)", 1, 2, sqrt(2.0 * 6.0 * 6.0));
+
+ // Box/segment
+ test_one<linestring, segment, box>("lsb", "LINESTRING(0 0,10 10)", clip, 1, 2, sqrt(2.0 * 6.0 * 6.0));
+ test_one<linestring, box, segment>("lbs", clip, "LINESTRING(0 0,10 10)", 1, 2, sqrt(2.0 * 6.0 * 6.0));
+
+ // Completely inside
+ test_one<linestring, linestring, box>("llbi", "LINESTRING(3 3,7 7)", clip, 1, 2, sqrt(2.0 * 4.0 * 4.0));
+
+ // Completely outside
+ test_one<linestring, linestring, box>("llbo", "LINESTRING(9 9,10 10)", clip, 0, 0, 0);
+
+ // Touching with point (-> output linestring with ONE point)
+ //std::cout << "Note: the output line is degenerate! Might be removed!" << std::endl;
+ test_one<linestring, linestring, box>("llb_touch", "LINESTRING(8 8,10 10)", clip, 1, 1, 0.0);
+
+ // Along border
+ test_one<linestring, linestring, box>("llb_along", "LINESTRING(2 2,2 8)", clip, 1, 2, 6);
+
+ // Outputting two lines (because of 3-4-5 constructions (0.3,0.4,0.5)
+ // which occur 4 times, the length is expected to be 2.0)
+ test_one<linestring, linestring, box>("llb_2", "LINESTRING(1.7 1.6,2.3 2.4,2.9 1.6,3.5 2.4,4.1 1.6)", clip, 2, 6, 4 * 0.5);
+
+ // linear
+ test_one<P, linestring, linestring>("llp1", "LINESTRING(0 0,1 1)", "LINESTRING(0 1,1 0)", 1, 1, 0);
+ test_one<P, segment, segment>("ssp1", "LINESTRING(0 0,1 1)", "LINESTRING(0 1,1 0)", 1, 1, 0);
+ test_one<P, linestring, linestring>("llp2", "LINESTRING(0 0,1 1)", "LINESTRING(0 0,2 2)", 2, 2, 0);
+
+ // polygons outputing points
+ //test_one<P, polygon, polygon>("ppp1", simplex_normal[0], simplex_normal[1], 1, 7, 5.47363293);
+
+ test_boxes<box>("box(2 2,8 8)", "box(4 4,10 10)", 16, true);
+ test_boxes<box>("box(2 2,8 7)", "box(4 4,10 10)", 12, true);
+ test_boxes<box>("box(2 2,8 7)", "box(14 4,20 10)", 0, false);
+ test_boxes<box>("box(2 2,4 4)", "box(4 4,8 8)", 0, true);
+
+ test_point_output<P>();
+
+
+ /*
+ test_one<polygon, box, polygon>(99, "box(115041.10 471900.10, 118334.60 474523.40)",
+ "POLYGON ((115483.40 474533.40, 116549.40 474059.20, 117199.90 473762.50, 117204.90 473659.50, 118339.40 472796.90, 118334.50 472757.90, 118315.10 472604.00, 118344.60 472520.90, 118277.90 472419.10, 118071.40 472536.80, 118071.40 472536.80, 117943.10 472287.70, 117744.90 472248.40, 117708.00 472034.50, 117481.90 472056.90, 117481.90 472056.90, 117272.30 471890.10, 117077.90 472161.20, 116146.60 473054.50, 115031.10 473603.30, 115483.40 474533.40))",
+ 1, 26, 3727690.74);
+ */
+
+}
+
+void test_pointer_version()
+{
+ std::vector<test::test_point_xy*> ln;
+ test::test_point_xy* p;
+ p = new test::test_point_xy; p->x = 0; p->y = 0; ln.push_back(p);
+ p = new test::test_point_xy; p->x = 10; p->y = 10; ln.push_back(p);
+
+ bg::model::box<bg::model::d2::point_xy<double> > box;
+ bg::assign_values(box, 2, 2, 8, 8);
+
+ typedef bg::model::linestring<bg::model::d2::point_xy<double> > output_type;
+ std::vector<output_type> clip;
+ bg::detail::intersection::intersection_insert<output_type>(box, ln, std::back_inserter(clip));
+
+ double length = 0;
+ int n = 0;
+ for (std::vector<output_type>::const_iterator it = clip.begin();
+ it != clip.end(); ++it)
+ {
+ length += bg::length(*it);
+ n += bg::num_points(*it);
+ }
+
+ BOOST_CHECK_EQUAL(clip.size(), 1u);
+ BOOST_CHECK_EQUAL(n, 2);
+ BOOST_CHECK_CLOSE(length, sqrt(2.0 * 6.0 * 6.0), 0.001);
+
+ for (unsigned int i = 0; i < ln.size(); i++)
+ {
+ delete ln[i];
+ }
+}
+
+
+template <typename P>
+void test_exception()
+{
+ typedef bg::model::polygon<P> polygon;
+
+ try
+ {
+ // Define polygon with a spike (= invalid)
+ std::string spike = "POLYGON((0 0,0 4,2 4,2 6,2 4,4 4,4 0,0 0))";
+
+ test_one<polygon, polygon, polygon>("with_spike",
+ simplex_normal[0], spike,
+ 0, 0, 0);
+ }
+ catch(bg::overlay_invalid_input_exception const& )
+ {
+ return;
+ }
+ BOOST_CHECK_MESSAGE(false, "No exception thrown");
+}
+
+template <typename Point>
+void test_rational()
+{
+ typedef bg::model::polygon<Point> polygon;
+ test_one<polygon, polygon, polygon>("simplex_normal",
+ simplex_normal[0], simplex_normal[1],
+ 1, 7, 5.47363293);
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
+ test_all<bg::model::d2::point_xy<float> >();
+
+#if defined(HAVE_TTMATH)
+ std::cout << "Testing TTMATH" << std::endl;
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+#endif
+
+ test_exception<bg::model::d2::point_xy<double> >();
+ test_pointer_version();
+ test_rational<bg::model::d2::point_xy<boost::rational<int> > >();
+
+ return 0;
+}
+
diff --git a/libs/geometry/test/algorithms/intersection.vcproj b/libs/geometry/test/algorithms/intersection.vcproj
new file mode 100644
index 000000000..a9bc3a6f3
--- /dev/null
+++ b/libs/geometry/test/algorithms/intersection.vcproj
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="intersection"
+ ProjectGUID="{2FD8EDAB-B3C3-4654-B6C3-B25C12A063D3}"
+ RootNamespace="intersection"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersection"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/bigobj"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersection"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/bigobj"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\intersection.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/intersection_segment.cpp b/libs/geometry/test/algorithms/intersection_segment.cpp
new file mode 100644
index 000000000..664d37c9b
--- /dev/null
+++ b/libs/geometry/test/algorithms/intersection_segment.cpp
@@ -0,0 +1,134 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <algorithm>
+#include <ostream>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <boost/config.hpp>
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+#include <boost/geometry/algorithms/intersection_segment.hpp>
+#include <boost/geometry/io/wkt/aswkt.hpp>
+
+static std::ostream & operator<<(std::ostream &s, const bg::intersection_result& r)
+{
+ switch(r)
+ {
+ case bg::is_intersect_no : s << "is_intersect_no"; break;
+ case bg::is_intersect : s << "is_intersect"; break;
+ case bg::is_parallel : s << "is_parallel"; break;
+ case bg::is_collinear_no : s << "is_collinear_no"; break;
+ case bg::is_collinear_one : s << "is_collinear_one"; break;
+ case bg::is_collinear_connect : s << "is_collinear_connect"; break;
+ case bg::is_collinear_overlap : s << "is_collinear_overlap"; break;
+ case bg::is_collinear_overlap_opposite : s << "is_collinear_overlap_opposite"; break;
+ case bg::is_collinear_connect_opposite : s << "is_collinear_connect_opposite"; break;
+
+ // detailed connection results:
+ case bg::is_intersect_connect_s1p1 : s << "is_intersect_connect_s1p1"; break;
+ case bg::is_intersect_connect_s1p2 : s << "is_intersect_connect_s1p2"; break;
+ case bg::is_intersect_connect_s2p1 : s << "is_intersect_connect_s2p1"; break;
+ case bg::is_intersect_connect_s2p2 : s << "is_intersect_connect_s2p2"; break;
+ }
+ return s;
+}
+
+static std::string as_string(const bg::intersection_result& r)
+{
+ std::stringstream out;
+ out << r;
+ return out.str();
+}
+
+typedef bg::model::point<double> P;
+typedef bg::const_segment<P> S;
+
+
+static void test_intersection(double s1x1, double s1y1, double s1x2, double s1y2,
+ double s2x1, double s2y1, double s2x2, double s2y2,
+ // Expected results
+ bg::intersection_result expected_result,
+ int exptected_count, const P& exp_p1, const P& exp_p2)
+{
+ S s1(P(s1x1, s1y1), P(s1x2, s1y2));
+ S s2(P(s2x1, s2y1), P(s2x2, s2y2));
+ std::vector<P> ip;
+ double ra, rb;
+ bg::intersection_result r = bg::intersection_s(s1, s2, ra, rb, ip);
+ r = bg::intersection_connect_result(r, ra, rb);
+
+ BOOST_CHECK_EQUAL(ip.size(), exptected_count);
+ BOOST_CHECK_EQUAL(as_string(expected_result), as_string(r));
+
+ if (ip.size() == 2 && ip[0] != exp_p1)
+ {
+ // Swap results, second point is not as expected, swap results, order is not prescribed,
+ // it might be OK.
+ std::reverse(ip.begin(), ip.end());
+ }
+
+ if (ip.size() >= 1)
+ {
+ BOOST_CHECK_EQUAL(ip[0], exp_p1);
+ }
+ if (ip.size() >= 2)
+ {
+ BOOST_CHECK_EQUAL(ip[1], exp_p2);
+ }
+
+
+ /*
+ std::cout << exptected_count << " " << r;
+ if (exptected_count >= 1) std::cout << " " << ip[0];
+ if (exptected_count >= 2) std::cout << " " << ip[1];
+ std::cout << std::endl;
+ */
+}
+
+//BOOST_AUTO_TEST_CASE( test1 )
+int test_main( int , char* [] )
+{
+ // Identical cases
+ test_intersection(0,0, 1,1, 0,0, 1,1, bg::is_collinear_overlap, 2, P(0,0), P(1,1));
+ test_intersection(1,1, 0,0, 0,0, 1,1, bg::is_collinear_overlap_opposite, 2, P(1,1), P(0,0));
+ test_intersection(0,1, 0,2, 0,1, 0,2, bg::is_collinear_overlap, 2, P(0,1), P(0,2)); // Vertical
+ test_intersection(0,2, 0,1, 0,1, 0,2, bg::is_collinear_overlap_opposite, 2, P(0,2), P(0,1)); // Vertical
+ // Overlap cases
+ test_intersection(0,0, 1,1, -0.5,-0.5, 2,2, bg::is_collinear_overlap, 2, P(0,0), P(1,1));
+ test_intersection(0,0, 1,1, 0.5,0.5, 1.5,1.5, bg::is_collinear_overlap, 2, P(0.5,0.5), P(1,1));
+ test_intersection(0,0, 0,1, 0,-10, 0,10, bg::is_collinear_overlap, 2, P(0,0), P(0,1)); // Vertical
+ test_intersection(0,0, 0,1, 0,10, 0,-10, bg::is_collinear_overlap_opposite, 2, P(0,0), P(0,1)); // Vertical
+ test_intersection(0,0, 1,1, 1,1, 2,2, bg::is_collinear_connect, 1, P(1,1), P(0,0)); // Single point
+ // Colinear, non overlap cases
+ test_intersection(0,0, 1,1, 1.5,1.5, 2.5,2.5, bg::is_collinear_no, 0, P(0,0), P(0,0));
+ test_intersection(0,0, 0,1, 0,5, 0,6, bg::is_collinear_no, 0, P(0,0), P(0,0)); // Vertical
+ // Parallel cases
+ test_intersection(0,0, 1,1, 1,0, 2,1, bg::is_parallel, 0, P(0,0), P(0,1));
+ // Intersect cases
+ test_intersection(0,2, 4,2, 3,0, 3,4, bg::is_intersect, 1, P(3,2), P(0,0));
+ // Non intersect cases
+
+ // Single point cases
+ test_intersection(0,0, 0,0, 1,1, 2,2, bg::is_collinear_no, 0, P(1,1), P(0,0)); // Colinear/no
+ test_intersection(2,2, 2,2, 1,1, 3,3, bg::is_collinear_one, 1, P(2,2.01), P(0,0)); // On segment
+ test_intersection(1,1, 3,3, 2,2, 2,2, bg::is_collinear_one, 1, P(2,2), P(0,0)); // On segment
+ test_intersection(1,1, 3,3, 1,1, 1,1, bg::is_collinear_one, 1, P(1,1), P(0,0)); // On segment, start
+ test_intersection(1,1, 3,3, 3,3, 3,3, bg::is_collinear_one, 1, P(3,3), P(0,0)); // On segment, end
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/intersects.cpp b/libs/geometry/test/algorithms/intersects.cpp
new file mode 100644
index 000000000..feafb0437
--- /dev/null
+++ b/libs/geometry/test/algorithms/intersects.cpp
@@ -0,0 +1,168 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <algorithms/test_intersects.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/util/rational.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::ring<P> ring;
+
+ // intersect <=> ! disjoint (in most cases)
+ // so most tests are done in disjoint test.
+ // We only test compilation of a few cases.
+ test_geometry<P, bg::model::box<P> >("POINT(1 1)", "BOX(0 0,2 2)", true);
+
+ test_geometry<polygon, bg::model::box<P> >(
+ "POLYGON((1992 3240,1992 1440,3792 1800,3792 3240,1992 3240))",
+ "BOX(1941 2066, 2055 2166)", true);
+
+ test_geometry<ring, bg::model::box<P> >(
+ "POLYGON((1992 3240,1992 1440,3792 1800,3792 3240,1992 3240))",
+ "BOX(1941 2066, 2055 2166)", true);
+
+ test_geometry<polygon, bg::model::box<P> >(
+ "POLYGON((1941 2066,2055 2066,2055 2166,1941 2166))",
+ "BOX(1941 2066, 2055 2166)", true);
+
+
+ // self-intersecting is not tested in disjoint, so that is done here.
+
+ // Just a normal polygon
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,1.5 2.5,2.5 1.5,4 0,0 0))", false);
+
+ // Self intersecting
+ test_self_intersects<polygon>("POLYGON((1 2,1 1,2 1,2 2.25,3 2.25,3 0,0 0,0 3,3 3,2.75 2,1 2))", true);
+
+ // Self intersecting in last segment
+ test_self_intersects<polygon>("POLYGON((0 2,2 4,2 0,4 2,0 2))", true);
+
+ // Self tangent
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 0,2 4,0 0))", true);
+
+ // Self tangent in corner
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 0,0 4,2 0,0 0))", true);
+
+ // With spike
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 2,6 2,4 2,4 0,0 0))", true);
+
+ // Non intersection, but with duplicate
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 0,4 0,0 0))", false);
+
+ // With many duplicates
+ test_self_intersects<polygon>(
+ "POLYGON((0 0,0 1,0 1,0 1,0 2,0 2,0 3,0 3,0 3,0 3,0 4,2 4,2 4,4 4,4 0,4 0,3 0,3 0,3 0,3 0,3 0,0 0))",
+ false);
+
+ // Hole: interior tangent to exterior
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 0,0 0),(1 2,2 4,3 2,1 2))", true);
+
+ // Hole: interior intersecting exterior
+ test_self_intersects<polygon>("POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 3,5 4,1 1))", true);
+
+ // Hole: two intersecting holes
+ test_self_intersects<polygon>(
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 3,3 3,3 1,1 1),(2 2,2 3.5,3.5 3.5,3.5 2,2 2))", true);
+
+ // Mail Akira T on [Boost-users] at 27-7-2011 3:17
+ test_self_intersects<bg::model::linestring<P> >(
+ "LINESTRING(0 0,0 4,4 4,2 2,2 5)", true);
+
+ test_self_intersects<bg::model::linestring<P> >(
+ "LINESTRING(0 4,4 4,2 2,2 5)", true);
+
+ // Test self-intersections at last segment in close/open rings:
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,3 3,4 1,0 0))", false);
+
+ test_self_intersects<bg::model::ring<P, true, false> >(
+ "POLYGON((0 0,3 3,4 1))", false);
+
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,3 3,4 1,0 1,0 0))", true);
+
+ test_self_intersects<bg::model::ring<P, true, false> >(
+ "POLYGON((0 0,3 3,4 1,0 1))", true);
+
+ // Duplicates in first or last
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,3 3,4 1,0 1,0 1,0 0))", true);
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,3 3,4 1,0 1,0 0,0 0))", true);
+ test_self_intersects<bg::model::ring<P, true, false> >(
+ "POLYGON((0 0,3 3,4 1,0 1,0 1))", true);
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,0 0,3 3,4 1,0 1,0 1,0 0))", true);
+ test_self_intersects<bg::model::ring<P, true, false> >(
+ "POLYGON((0 0,0 0,3 3,4 1,0 1,0 1))", true);
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,3 3,3 3,4 1,0 1,0 1,0 0))", true);
+ test_self_intersects<bg::model::ring<P, true, false> >(
+ "POLYGON((0 0,3 3,3 3,4 1,0 1,0 1))", true);
+
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,3 3,4 1,0 0,0 0))", false);
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,3 3,4 1,4 1,0 0))", false);
+ test_self_intersects<bg::model::ring<P, true, false> >(
+ "POLYGON((0 0,3 3,4 1,4 1))", false);
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,0 0,3 3,4 1,0 0))", false);
+ test_self_intersects<bg::model::ring<P, true, false> >(
+ "POLYGON((0 0,0 0,3 3,4 1))", false);
+ test_self_intersects<bg::model::ring<P> >(
+ "POLYGON((0 0,3 3,3 3,4 1,0 0))", false);
+ test_self_intersects<bg::model::ring<P, true, false> >(
+ "POLYGON((0 0,3 3,3 3,4 1))", false);
+
+ test_geometry<P, bg::model::box<P> >(
+ "POINT(0 0)",
+ "BOX(0 0,4 4)",
+ true);
+ test_geometry<P, bg::model::ring<P> >(
+ "POINT(0 0)",
+ "POLYGON((0 0,3 3,3 3,4 1))",
+ true);
+ test_geometry<P, bg::model::polygon<P> >(
+ "POINT(0 0)",
+ "POLYGON((0 0,3 3,3 3,4 1))",
+ true);
+
+ test_geometry<bg::model::ring<P>, P>(
+ "POLYGON((0 0,3 3,3 3,4 1))",
+ "POINT(0 0)",
+ true);
+ test_geometry<bg::model::polygon<P>, P>(
+ "POLYGON((0 0,3 3,3 3,4 1))",
+ "POINT(0 0)",
+ true);
+}
+
+
+
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+ test_all<bg::model::d2::point_xy<boost::rational<int> > >();
+
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/intersects.vcproj b/libs/geometry/test/algorithms/intersects.vcproj
new file mode 100644
index 000000000..f3f5f64db
--- /dev/null
+++ b/libs/geometry/test/algorithms/intersects.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="intersects"
+ ProjectGUID="{B1A97F62-85CD-4239-BB56-619988B08260}"
+ RootNamespace="intersects"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersects"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersects"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\intersects.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/length.cpp b/libs/geometry/test/algorithms/length.cpp
new file mode 100644
index 000000000..11e18d396
--- /dev/null
+++ b/libs/geometry/test/algorithms/length.cpp
@@ -0,0 +1,55 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <algorithms/test_length.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/std_pair_as_segment.hpp>
+
+#include <test_geometries/all_custom_linestring.hpp>
+#include <test_geometries/wrapped_boost_array.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ // 3-4-5 triangle
+ test_geometry<std::pair<P, P> >("LINESTRING(0 0,3 4)", 5);
+
+ // 3-4-5 plus 1-1
+ test_geometry<bg::model::linestring<P> >("LINESTRING(0 0,3 4,4 3)", 5 + sqrt(2.0));
+ test_geometry<all_custom_linestring<P> >("LINESTRING(0 0,3 4,4 3)", 5 + sqrt(2.0));
+ test_geometry<test::wrapped_boost_array<P, 3> >("LINESTRING(0 0,3 4,4 3)", 5 + sqrt(2.0));
+
+ // Geometries with length zero
+ test_geometry<P>("POINT(0 0)", 0);
+ test_geometry<bg::model::polygon<P> >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 0);
+}
+
+template <typename P>
+void test_empty_input()
+{
+ test_empty_input(bg::model::linestring<P>());
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ // test_empty_input<bg::model::d2::point_xy<int> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/length.vcproj b/libs/geometry/test/algorithms/length.vcproj
new file mode 100644
index 000000000..17058ddcf
--- /dev/null
+++ b/libs/geometry/test/algorithms/length.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="length"
+ ProjectGUID="{C4D75B1E-34D5-4A98-8535-A9535BE949E4}"
+ RootNamespace="length"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\length"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\length"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\length.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/make.cpp b/libs/geometry/test/algorithms/make.cpp
new file mode 100644
index 000000000..fae968a8c
--- /dev/null
+++ b/libs/geometry/test/algorithms/make.cpp
@@ -0,0 +1,137 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/make.hpp>
+
+#include <boost/geometry/io/wkt/write.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename T, typename P>
+void test_point_2d()
+{
+ P p = bg::make<P>((T) 123, (T) 456);
+ BOOST_CHECK_CLOSE(bg::get<0>(p), 123.0, 1.0e-6);
+ BOOST_CHECK_CLOSE(bg::get<1>(p), 456.0, 1.0e-6);
+}
+
+template <typename T, typename P>
+void test_point_3d()
+{
+ P p = bg::make<P>((T) 123, (T) 456, (T) 789);
+ BOOST_CHECK_CLOSE( bg::get<0>(p), 123.0, 1.0e-6);
+ BOOST_CHECK_CLOSE( bg::get<1>(p), 456.0, 1.0e-6);
+ BOOST_CHECK_CLOSE( bg::get<2>(p), 789.0, 1.0e-6);
+}
+
+template <typename T, typename P>
+void test_box_2d()
+{
+ typedef bg::model::box<P> B;
+ B b = bg::make<B>((T) 123, (T) 456, (T) 789, (T) 1011);
+ BOOST_CHECK_CLOSE( (bg::get<bg::min_corner, 0>(b)), 123.0, 1.0e-6);
+ BOOST_CHECK_CLOSE( (bg::get<bg::min_corner, 1>(b)), 456.0, 1.0e-6);
+ BOOST_CHECK_CLOSE( (bg::get<bg::max_corner, 0>(b)), 789.0, 1.0e-6);
+ BOOST_CHECK_CLOSE( (bg::get<bg::max_corner, 1>(b)), 1011.0, 1.0e-6);
+
+ b = bg::make_inverse<B>();
+}
+
+template <typename T, typename P>
+void test_linestring_2d()
+{
+ typedef bg::model::linestring<P> L;
+
+ T coors[][2] = {{1,2}, {3,4}};
+
+ L line = bg::detail::make::make_points<L>(coors);
+
+ BOOST_CHECK_EQUAL(line.size(), 2u);
+}
+
+template <typename T, typename P>
+void test_linestring_3d()
+{
+ typedef bg::model::linestring<P> L;
+
+ T coors[][3] = {{1,2,3}, {4,5,6}};
+
+ L line = bg::detail::make::make_points<L>(coors);
+
+ BOOST_CHECK_EQUAL(line.size(), 2u);
+ //std::cout << dsv(line) << std::endl;
+
+}
+
+template <typename T, typename P>
+void test_2d_t()
+{
+ test_point_2d<T, P>();
+ test_box_2d<T, P>();
+ test_linestring_2d<T, P>();
+}
+
+template <typename P>
+void test_2d()
+{
+ test_2d_t<int, P>();
+ test_2d_t<float, P>();
+ test_2d_t<double, P>();
+}
+
+template <typename T, typename P>
+void test_3d_t()
+{
+ test_linestring_3d<T, P>();
+// test_point_3d<T, test_point>();
+}
+
+template <typename P>
+void test_3d()
+{
+ test_3d_t<int, P>();
+ test_3d_t<float, P>();
+ test_3d_t<double, P>();
+}
+
+int test_main(int, char* [])
+{
+ //test_2d<int[2]>();
+ //test_2d<float[2]>();
+ //test_2d<double[2]>();
+ test_2d<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_2d<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_2d<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+
+ test_3d<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+#if defined(HAVE_TTMATH)
+ test_2d<bg::model::point<ttmath_big, 2, bg::cs::cartesian> >();
+ test_3d<bg::model::point<ttmath_big, 3, bg::cs::cartesian> >();
+#endif
+
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/make.vcproj b/libs/geometry/test/algorithms/make.vcproj
new file mode 100644
index 000000000..37ee7ce50
--- /dev/null
+++ b/libs/geometry/test/algorithms/make.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="make"
+ ProjectGUID="{BCD17F3E-8DF2-4B00-A75E-BF7372D2873B}"
+ RootNamespace="make"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\make"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\make"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\make.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlaps.cpp b/libs/geometry/test/algorithms/overlaps.cpp
new file mode 100644
index 000000000..6226ddd04
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlaps.cpp
@@ -0,0 +1,59 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <algorithms/test_overlaps.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+template <typename P>
+void test_2d()
+{
+#if defined(BOOST_GEOMETRY_COMPILE_FAIL)
+ test_geometry<P, P>("POINT(1 1)", "POINT(1 1)", true);
+#endif
+
+ test_geometry<bg::model::box<P>, bg::model::box<P> >("BOX(1 1, 3 3)", "BOX(0 0,2 2)", true);
+
+ // touch -> false
+ test_geometry<bg::model::box<P>, bg::model::box<P> >("BOX(1 1, 3 3)", "BOX(3 3,5 5)", false);
+
+ // disjoint -> false
+ test_geometry<bg::model::box<P>, bg::model::box<P> >("BOX(1 1, 3 3)", "BOX(4 4,6 6)", false);
+
+ // within -> false
+ test_geometry<bg::model::box<P>, bg::model::box<P> >("BOX(1 1, 5 5)", "BOX(2 2,3 3)", false);
+
+ // within+touch -> false
+ test_geometry<bg::model::box<P>, bg::model::box<P> >("BOX(1 1, 5 5)", "BOX(2 2,5 5)", false);
+}
+
+template <typename P>
+void test_3d()
+{
+ test_geometry<bg::model::box<P>, bg::model::box<P> >("BOX(1 1 1, 3 3 3)", "BOX(0 0 0,2 2 2)", true);
+ test_geometry<bg::model::box<P>, bg::model::box<P> >("BOX(1 1 1, 3 3 3)", "BOX(3 3 3,5 5 5)", false);
+ test_geometry<bg::model::box<P>, bg::model::box<P> >("BOX(1 1 1, 3 3 3)", "BOX(4 4 4,6 6 6)", false);
+}
+
+
+
+int test_main( int , char* [] )
+{
+ test_2d<bg::model::d2::point_xy<int> >();
+ test_2d<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_2d<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ //test_3d<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlaps.vcproj b/libs/geometry/test/algorithms/overlaps.vcproj
new file mode 100644
index 000000000..06a51367f
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlaps.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="overlaps"
+ ProjectGUID="{30C37854-9ED6-4C1E-97FB-BF8637BD5811}"
+ RootNamespace="overlaps"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\overlaps"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\overlaps"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\overlaps.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/Jamfile.v2 b/libs/geometry/test/algorithms/overlay/Jamfile.v2
new file mode 100644
index 000000000..acd298a0c
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/Jamfile.v2
@@ -0,0 +1,21 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-algorithms-overlay
+ :
+ [ run assemble.cpp ]
+ [ run ccw_traverse.cpp ]
+ [ run get_turn_info.cpp ]
+ [ run get_turns.cpp ]
+ [ run relative_order.cpp ]
+ [ run select_rings.cpp ]
+ [ run self_intersection_points.cpp ]
+ [ run traverse.cpp ]
+ ;
diff --git a/libs/geometry/test/algorithms/overlay/assemble.cpp b/libs/geometry/test/algorithms/overlay/assemble.cpp
new file mode 100644
index 000000000..f63e3b5ac
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/assemble.cpp
@@ -0,0 +1,199 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <iomanip>
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/intersection.hpp>
+#include <boost/geometry/algorithms/union.hpp>
+#include <boost/geometry/algorithms/difference.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+template <typename Geometry>
+inline void test_assemble(std::string const& id, Geometry const& p, Geometry const& q, char operation = 'i')
+{
+
+ std::vector<Geometry> u, i, d1, d2;
+ bg::detail::union_::union_insert<Geometry>(p, q, std::back_inserter(u));
+ bg::detail::intersection::intersection_insert<Geometry>(p, q, std::back_inserter(i));
+ bg::detail::difference::difference_insert<Geometry>(p, q, std::back_inserter(d1));
+ bg::detail::difference::difference_insert<Geometry>(q, p, std::back_inserter(d2));
+
+ if (operation == 'i')
+ {
+ typedef typename bg::default_area_result<Geometry>::type type;
+ type area_p = bg::area(p);
+ type area_q = bg::area(q);
+
+ type area_i = 0, area_u = 0, area_d1 = 0, area_d2 = 0;
+
+ BOOST_FOREACH(Geometry const& g, u)
+ {
+ area_u += bg::area(g);
+ }
+ BOOST_FOREACH(Geometry const& g, i)
+ {
+ area_i += bg::area(g);
+ }
+ BOOST_FOREACH(Geometry const& g, d1)
+ {
+ area_d1 += bg::area(g);
+ }
+ BOOST_FOREACH(Geometry const& g, d2)
+ {
+ area_d2 += bg::area(g);
+ }
+
+
+ type diff = (area_p + area_q) - area_u - area_i;
+ type diff_d1 = (area_u - area_q) - area_d1;
+ type diff_d2 = (area_u - area_p) - area_d2;
+
+ BOOST_CHECK_CLOSE(diff, 0.0, 0.001);
+
+ // Gives small deviations on gcc:
+ // difference{0.001%} between diff_d1{1.1102230246251565e-016} and 0.0{0} exceeds 0.001%
+ //BOOST_CHECK_CLOSE(diff_d1, 0.0, 0.001);
+ //BOOST_CHECK_CLOSE(diff_d2, 0.0, 0.001);
+
+ bool ok = abs(diff) < 0.001
+ || abs(diff_d1) < 0.001
+ || abs(diff_d2) < 0.001;
+
+ BOOST_CHECK_MESSAGE(ok,
+ id << " diff: "
+ << diff << " d1: "
+ << diff_d1 << " d2: "
+ << diff_d2);
+ }
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "assemble_" << id << "_" << operation << ".svg";
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<typename bg::point_type<Geometry>::type> mapper(svg, 500, 500);
+ mapper.add(p);
+ mapper.add(q);
+ mapper.map(p, "fill-opacity:0.3;fill:rgb(51,51,153);stroke:rgb(51,51,153);stroke-width:3");
+ mapper.map(q, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:3");
+ std::string linestyle = "opacity:0.7;fill:none;stroke-opacity:1;stroke-miterlimit:4;";
+
+ std::vector<Geometry> const& v = operation == 'i' ? i
+ : operation == 'u' ? u
+ : operation == 'd' ? d1
+ : d2
+ ;
+
+ BOOST_FOREACH(Geometry const& geometry, v)
+ {
+ mapper.map(geometry,
+ linestyle + "stroke-width:3;stroke-linejoin:round;stroke-linecap:square;stroke-dasharray:12,12;stroke:rgb(255,0,0);");
+ }
+ }
+#endif
+}
+
+template <typename Polygon>
+inline bool int_ok(Polygon const& poly)
+{
+
+ typename bg::point_type<Polygon>::type const& pi =
+ bg::interior_rings(poly)[0].front();
+
+ return bg::within(pi, bg::exterior_ring(poly));
+}
+
+
+template <typename T>
+void generate()
+{
+
+ static std::string exteriors[4] = {
+ "(0 0,0 10,10 10,10 0,0 0)",
+ "(1 1,1 9,8 9,8 1,1 1)",
+ "(2 0.5, 0.5 2,0.5 8,2 9.5,6 9.5,8.5 8,8.5 2,7 0.5,2 0.5)",
+ "(3 3,3 7,6 7,6 3,3 3)"
+ };
+ static std::string interiors[4] = {
+ "(2 2,2 8,7 8,7 2,2 2)",
+ "(8.5 1,8.5 2,9.5 2,9.5 1,8.5 1)",
+ "(4 4,4 5,5 5,5 4,4 4)",
+ "(6 4,6 5,9 5,9 4,6 4)"
+ };
+ for (int pe = 0; pe < 4; pe++)
+ {
+ for (int qe = 0; qe < 4; qe++)
+ {
+ for (int pi = 0; pi < 4; pi++)
+ {
+ for (int qi = 0; qi < 4; qi++)
+ {
+ std::string ps = "POLYGON(" + exteriors[pe] + "," + interiors[pi] + ")";
+ std::string qs = "POLYGON(" + exteriors[qe] + "," + interiors[qi] + ")";
+
+ typedef bg::model::d2::point_xy<T> point_type;
+ bg::model::polygon<point_type> p, q;
+ bg::read_wkt(ps, p);
+ bg::read_wkt(qs, q);
+ bg::correct(p);
+ bg::correct(q);
+ if (! bg::intersects(p)
+ && ! bg::intersects(q)
+ && int_ok(p)
+ && int_ok(q)
+ )
+ {
+ std::ostringstream out;
+ out << pe << qe << pi << qi;
+ test_assemble(out.str(), p, q);
+
+#if defined(TEST_WITH_SVG)
+ test_assemble(out.str(), p, q, 'u');
+ test_assemble(out.str(), p, q, 'd');
+ test_assemble(out.str(), p, q, 'r');
+#endif
+ }
+ }
+ }
+ }
+ }
+}
+
+
+#if ! defined(GEOMETRY_TEST_MULTI)
+int test_main(int, char* [])
+{
+ generate<double>();
+ return 0;
+}
+#endif
diff --git a/libs/geometry/test/algorithms/overlay/assemble.vcproj b/libs/geometry/test/algorithms/overlay/assemble.vcproj
new file mode 100644
index 000000000..335b08ab7
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/assemble.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="assemble"
+ ProjectGUID="{306E829F-ACEC-42D5-B1D4-2531B2F56EA3}"
+ RootNamespace="assemble"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\assemble"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\assemble"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\assemble.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/ccw_traverse.cpp b/libs/geometry/test/algorithms/overlay/ccw_traverse.cpp
new file mode 100644
index 000000000..bc7341b18
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/ccw_traverse.cpp
@@ -0,0 +1,346 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <fstream>
+#include <iostream>
+#include <iomanip>
+
+#include <boost/foreach.hpp>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+
+#include <algorithms/overlay/overlay_cases.hpp>
+
+template <typename Geometry>
+struct rev : boost::mpl::if_c<bg::point_order<Geometry>::value == bg::counterclockwise, boost::true_type, boost::false_type>::type
+{};
+
+template <typename Geometry1, typename Geometry2>
+inline typename bg::coordinate_type<Geometry1>::type intersect(Geometry1 const& g1, Geometry2 const& g2, std::string const& name,
+ bg::detail::overlay::operation_type op)
+{
+ typedef typename bg::strategy::side::services::default_strategy
+ <
+ typename bg::cs_tag<Geometry1>::type
+ >::type side_strategy_type;
+
+
+ typedef bg::detail::overlay::traversal_turn_info
+ <
+ typename bg::point_type<Geometry1>::type
+ > turn_info;
+ std::vector<turn_info> turns;
+
+ bg::detail::get_turns::no_interrupt_policy policy;
+ bg::get_turns
+ <
+ rev<Geometry1>::value,
+ rev<Geometry2>::value,
+ bg::detail::overlay::calculate_distance_policy
+ >(g1, g2, turns, policy);
+
+ bg::enrich_intersection_points<rev<Geometry1>::value, rev<Geometry2>::value >(turns, bg::detail::overlay::operation_intersection,
+ g1, g2, side_strategy_type());
+
+ typedef bg::model::ring<typename bg::point_type<Geometry1>::type> ring_type;
+ typedef std::deque<ring_type> out_vector;
+ out_vector v;
+
+ bg::detail::overlay::traverse
+ <
+ rev<Geometry1>::value, rev<Geometry2>::value,
+ Geometry1, Geometry2
+ >::apply(g1, g2, op, turns, v);
+
+ typename bg::coordinate_type<Geometry1>::type result = 0.0;
+ BOOST_FOREACH(ring_type& ring, v)
+ {
+ result += bg::area(ring);
+ }
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename
+ << name << "_"
+ << (op == bg::detail::overlay::operation_intersection ? "i" : "u")
+ << "_" << (rev<Geometry1>::value ? "ccw" : "cw")
+ << "_" << (rev<Geometry2>::value ? "ccw" : "cw")
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<typename bg::point_type<Geometry1>::type> mapper(svg, 500, 500);
+ mapper.add(g1);
+ mapper.add(g2);
+
+ // Input shapes in green/blue
+ mapper.map(g1, "fill-opacity:0.5;fill:rgb(153,204,0);"
+ "stroke:rgb(153,204,0);stroke-width:3");
+ mapper.map(g2, "fill-opacity:0.3;fill:rgb(51,51,153);"
+ "stroke:rgb(51,51,153);stroke-width:3");
+
+ // Traversal rings in magenta/light yellow fill
+ BOOST_FOREACH(ring_type const& ring, v)
+ {
+ mapper.map(ring, "fill-opacity:0.3;stroke-opacity:0.4;fill:rgb(255,255,0);"
+ "stroke:rgb(255,0,255);stroke-width:8");
+ }
+
+
+ // turn points in orange, + enrichment/traversal info
+
+ // Simple map to avoid two texts at same place (note that can still overlap!)
+ std::map<std::pair<int, int>, int> offsets;
+ int index = 0;
+ int const lineheight = 10;
+ int const margin = 5;
+
+ BOOST_FOREACH(turn_info const& turn, turns)
+ {
+ mapper.map(turn.point, "fill:rgb(255,128,0);"
+ "stroke:rgb(0,0,0);stroke-width:1", 3);
+
+ {
+ // Map characteristics
+ // Create a rounded off point
+ std::pair<int, int> p
+ = std::make_pair(
+ boost::numeric_cast<int>(0.5 + 10 * bg::get<0>(turn.point)),
+ boost::numeric_cast<int>(0.5 + 10 * bg::get<1>(turn.point))
+ );
+ std::string style = "fill:rgb(0,0,0);font-family:Arial;font-size:10px";
+
+ std::ostringstream out;
+ out << index
+ << ": " << bg::method_char(turn.method)
+ << std::endl
+ << "op: " << bg::operation_char(turn.operations[0].operation)
+ << " / " << bg::operation_char(turn.operations[1].operation)
+ << (turn.is_discarded() ? " (discarded) " : turn.blocked() ? " (blocked)" : "")
+ << std::endl;
+
+ if (turn.operations[0].enriched.next_ip_index != -1)
+ {
+ out << "ip: " << turn.operations[0].enriched.next_ip_index;
+ }
+ else
+ {
+ out << "vx: " << turn.operations[0].enriched.travels_to_vertex_index;
+ }
+ out << " ";
+ if (turn.operations[1].enriched.next_ip_index != -1)
+ {
+ out << "ip: " << turn.operations[1].enriched.next_ip_index;
+ }
+ else
+ {
+ out << "vx: " << turn.operations[1].enriched.travels_to_vertex_index;
+ }
+
+ out << std::endl;
+
+ out
+
+ << std::setprecision(3)
+ << "dist: " << turn.operations[0].enriched.distance
+ << " / " << turn.operations[1].enriched.distance
+ << std::endl;
+
+ offsets[p] += lineheight;
+ int offset = offsets[p];
+ offsets[p] += lineheight * 5;
+ mapper.text(turn.point, out.str(), style, margin, offset, lineheight);
+ }
+ index++;
+ }
+ }
+#endif
+
+ return result;
+}
+
+template <typename Geometry1, typename Geometry2>
+inline typename bg::coordinate_type<Geometry1>::type intersect(std::string const& wkt1, std::string const& wkt2, std::string const& name,
+ bg::detail::overlay::operation_type op)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+
+ // Reverse if necessary: adapt to cw/ccw
+ bg::correct(geometry1);
+ bg::correct(geometry2);
+
+ return intersect(geometry1, geometry2, name, op);
+}
+
+template <typename T>
+inline void test_polygon(std::string const& wkt1, std::string const& wkt2, std::string const& name)
+{
+ typedef bg::model::d2::point_xy<T> point;
+ typedef bg::model::polygon<point> clock;
+ typedef bg::model::polygon<point, false> counter;
+
+ namespace ov = bg::detail::overlay;
+ T area1 = intersect<clock, clock>(wkt1, wkt2, name, ov::operation_intersection);
+ T area2 = intersect<counter, counter>(wkt1, wkt2, name, ov::operation_intersection);
+ T area3 = intersect<clock, counter>(wkt1, wkt2, name, ov::operation_intersection);
+ T area4 = intersect<counter, clock>(wkt1, wkt2, name, ov::operation_intersection);
+ BOOST_CHECK_CLOSE(area1, area2, 0.001);
+ BOOST_CHECK_CLOSE(area3, area4, 0.001);
+ BOOST_CHECK_CLOSE(area1, area3, 0.001);
+ BOOST_CHECK_CLOSE(area2, area4, 0.001);
+
+ area1 = intersect<clock, clock>(wkt1, wkt2, name, ov::operation_union);
+ area2 = intersect<counter, counter>(wkt1, wkt2, name, ov::operation_union);
+ area3 = intersect<clock, counter>(wkt1, wkt2, name, ov::operation_union);
+ area4 = intersect<counter, clock>(wkt1, wkt2, name, ov::operation_union);
+ BOOST_CHECK_CLOSE(area1, area2, 0.001);
+ BOOST_CHECK_CLOSE(area3, area4, 0.001);
+ BOOST_CHECK_CLOSE(area1, area3, 0.001);
+ BOOST_CHECK_CLOSE(area2, area4, 0.001);
+}
+
+template <typename T>
+inline void test_box_polygon(std::string const& wkt1, std::string const& wkt2, std::string const& name)
+{
+ typedef bg::model::d2::point_xy<T> point;
+ typedef bg::model::box<point> box;
+ typedef bg::model::polygon<point> clock;
+ typedef bg::model::polygon<point, false> counter;
+
+ namespace ov = bg::detail::overlay;
+ T area1 = intersect<box, clock>(wkt1, wkt2, name + "_bp", ov::operation_intersection);
+ T area2 = intersect<box, counter>(wkt1, wkt2, name + "_bp", ov::operation_intersection);
+ T area3 = intersect<clock, box>(wkt2, wkt1, name + "_pb", ov::operation_intersection);
+ T area4 = intersect<counter, box>(wkt2, wkt1, name + "_pb", ov::operation_intersection);
+ BOOST_CHECK_CLOSE(area1, area2, 0.001);
+ BOOST_CHECK_CLOSE(area3, area4, 0.001);
+ BOOST_CHECK_CLOSE(area1, area3, 0.001);
+ BOOST_CHECK_CLOSE(area2, area4, 0.001);
+
+ area1 = intersect<box, clock>(wkt1, wkt2, name + "_bp", ov::operation_union);
+ area2 = intersect<box, counter>(wkt1, wkt2, name + "_bp", ov::operation_union);
+ area3 = intersect<clock, box>(wkt2, wkt1, name + "_pb", ov::operation_union);
+ area4 = intersect<counter, box>(wkt2, wkt1, name + "_pb", ov::operation_union);
+ BOOST_CHECK_CLOSE(area1, area2, 0.001);
+ BOOST_CHECK_CLOSE(area3, area4, 0.001);
+ BOOST_CHECK_CLOSE(area1, area3, 0.001);
+ BOOST_CHECK_CLOSE(area2, area4, 0.001);
+}
+
+int test_main(int, char* [])
+{
+ //bool const ig = true;
+ test_polygon<double>(case_1[0], case_1[1], "c1");
+ test_polygon<double>(case_2[0], case_2[1], "c2");
+ test_polygon<double>(case_3[0], case_3[1], "c3");
+ test_polygon<double>(case_4[0], case_4[1], "c4");
+ test_polygon<double>(case_5[0], case_5[1], "c5");
+ test_polygon<double>(case_6[0], case_6[1], "c6");
+ test_polygon<double>(case_7[0], case_7[1], "c7");
+ test_polygon<double>(case_8[0], case_8[1], "c8");
+ test_polygon<double>(case_9[0], case_9[1], "c9" /*, ig */);
+
+
+ test_polygon<double>(case_10[0], case_10[1], "c10");
+ test_polygon<double>(case_11[0], case_11[1], "c11");
+ test_polygon<double>(case_12[0], case_12[1], "c12");
+ test_polygon<double>(case_13[0], case_13[1], "c13");
+ test_polygon<double>(case_14[0], case_14[1], "c14");
+ test_polygon<double>(case_15[0], case_15[1], "c15");
+ test_polygon<double>(case_16[0], case_16[1], "c16");
+ test_polygon<double>(case_17[0], case_17[1], "c17");
+ test_polygon<double>(case_18[0], case_18[1], "c18");
+ test_polygon<double>(case_19[0], case_19[1], "c19");
+ test_polygon<double>(case_20[0], case_20[1], "c20");
+ test_polygon<double>(case_21[0], case_21[1], "c21");
+ test_polygon<double>(case_22[0], case_22[1], "c22" /*, ig */);
+ test_polygon<double>(case_23[0], case_23[1], "c23");
+ test_polygon<double>(case_24[0], case_24[1], "c24");
+ test_polygon<double>(case_25[0], case_25[1], "c25" /*, ig */);
+ test_polygon<double>(case_26[0], case_26[1], "c26" /*, ig */);
+ test_polygon<double>(case_27[0], case_27[1], "c27");
+ test_polygon<double>(case_28[0], case_28[1], "c28");
+ test_polygon<double>(case_29[0], case_29[1], "c29");
+ test_polygon<double>(case_30[0], case_30[1], "c30");
+ test_polygon<double>(case_31[0], case_31[1], "c31" /*, ig */);
+ test_polygon<double>(case_32[0], case_32[1], "c32" /*, ig */);
+ test_polygon<double>(case_33[0], case_33[1], "c33" /*, ig */);
+ test_polygon<double>(case_34[0], case_34[1], "c34");
+ test_polygon<double>(case_35[0], case_35[1], "c35");
+ test_polygon<double>(case_36[0], case_36[1], "c36" /*, ig */);
+ test_polygon<double>(case_37[0], case_37[1], "c37" /*, ig */);
+ test_polygon<double>(case_38[0], case_38[1], "c38" /*, ig */);
+ test_polygon<double>(case_39[0], case_39[1], "c39");
+ test_polygon<double>(case_40[0], case_40[1], "c40" /*, ig */);
+ test_polygon<double>(case_41[0], case_41[1], "c41");
+ test_polygon<double>(case_42[0], case_42[1], "c42");
+ //test_polygon<double>(case_43[0], case_43[1], "c43", inv);
+ test_polygon<double>(case_44[0], case_44[1], "c44");
+ test_polygon<double>(case_45[0], case_45[1], "c45");
+ //test_polygon<double>(case_46[0], case_46[1], "c46", inv);
+ //test_polygon<double>(case_47[0], case_47[1], "c47" /*, ig */);
+ //test_polygon<double>(case_48[0], case_48[1], "c48");
+ test_polygon<double>(case_49[0], case_49[1], "c49");
+ test_polygon<double>(case_50[0], case_50[1], "c50");
+ test_polygon<double>(case_51[0], case_51[1], "c51");
+ test_polygon<double>(case_52[0], case_52[1], "c52" /*, ig */);
+ test_polygon<double>(case_53[0], case_53[1], "c53");
+ // Invalid ones / overlaying intersection points / self tangencies
+ //test_polygon<double>(case_54[0], case_54[1], "c54");
+ //test_polygon<double>(case_55[0], case_55[1], "c55");
+ //test_polygon<double>(case_56[0], case_56[1], "c56");
+ //test_polygon<double>(case_57[0], case_57[1], "c57" /*, ig */);
+ //test_polygon<double>(case_58[0], case_58[1], "c58");
+ //test_polygon<double>(case_59[0], case_59[1], "c59");
+
+ test_polygon<double>(pie_16_4_12[0], pie_16_4_12[1], "pie_16_4_12");
+ test_polygon<double>(pie_23_21_12_500[0], pie_23_21_12_500[1], "pie_23_21_12_500");
+ test_polygon<double>(pie_23_23_3_2000[0], pie_23_23_3_2000[1], "pie_23_23_3_2000");
+ test_polygon<double>(pie_23_16_16[0], pie_23_16_16[1], "pie_23_16_16");
+ test_polygon<double>(pie_16_2_15_0[0], pie_16_2_15_0[1], "pie_16_2_15_0");
+ test_polygon<double>(pie_4_13_15[0], pie_4_13_15[1], "pie_4_13_15");
+ test_polygon<double>(pie_20_20_7_100[0], pie_20_20_7_100[1], "pie_20_20_7_100");
+
+ test_polygon<double>(hv_1[0], hv_1[1], "hv1");
+ test_polygon<double>(hv_2[0], hv_2[1], "hv2");
+ test_polygon<double>(hv_3[0], hv_3[1], "hv3");
+ test_polygon<double>(hv_4[0], hv_4[1], "hv4");
+ test_polygon<double>(hv_5[0], hv_5[1], "hv5");
+ test_polygon<double>(hv_6[0], hv_6[1], "hv6");
+ test_polygon<double>(hv_7[0], hv_7[1], "hv7");
+ test_polygon<double>(dz_1[0], dz_1[1], "dz_1");
+ test_polygon<double>(dz_2[0], dz_2[1], "dz_2");
+ test_polygon<double>(dz_3[0], dz_3[1], "dz_3");
+
+ test_box_polygon<double>("POLYGON((1 1,4 4))", case_1[0], "bp1");
+
+ {
+ static std::string example_box = "POLYGON((1.5 1.5, 4.5 2.5))";
+ static std::string example_ring =
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))";
+ test_box_polygon<double>(example_box, example_ring, "bp2");
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/ccw_traverse.vcproj b/libs/geometry/test/algorithms/overlay/ccw_traverse.vcproj
new file mode 100644
index 000000000..fc373c847
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/ccw_traverse.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="ccw_traverse"
+ ProjectGUID="{BA789719-B2FC-405A-9258-E9E4ABCE1791}"
+ RootNamespace="ccw_traverse"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ccw_traverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ccw_traverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\ccw_traverse.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/dissolver.cpp b/libs/geometry/test/algorithms/overlay/dissolver.cpp
new file mode 100644
index 000000000..41f4c60f7
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/dissolver.cpp
@@ -0,0 +1,219 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/dissolver.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/multi.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+
+#include <test_common/test_point.hpp>
+
+
+//#define TEST_WITH_SVG
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+# include <boost/geometry/io/svg/write_svg_multi.hpp>
+#endif
+
+// Collection might be a multi-geometry, or std::vector<ring>
+template <typename GeometryOut, typename Collection, typename T>
+void test_dissolve_plusmin(std::string const& caseid, Collection const& input,
+ T const& expected_positive_area,
+ T const& expected_negative_area)
+{
+ typedef typename boost::range_value<GeometryOut>::type geometry_type;
+ typedef typename bg::point_type<geometry_type>::type point_type;
+
+
+ GeometryOut output;
+ bg::dissolver(input, output);
+
+ T zero = T();
+ T positive_area = T();
+ T negative_area = T();
+
+ BOOST_FOREACH(geometry_type const& geometry, output)
+ {
+ T a = bg::area(geometry);
+ if (a > zero)
+ {
+ positive_area += a;
+ }
+ else
+ {
+ negative_area += a;
+ }
+ }
+
+ BOOST_CHECK_CLOSE(positive_area, expected_positive_area, 0.001);
+ BOOST_CHECK_CLOSE(negative_area, expected_negative_area, 0.001);
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "dissolve_plusmin_"
+ << caseid << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<point_type> mapper(svg, 500, 500);
+
+ typedef typename boost::range_value<Collection>::type value_type;
+ BOOST_FOREACH(value_type const& geometry, input)
+ {
+ mapper.add(geometry);
+ }
+
+ BOOST_FOREACH(value_type const& geometry, input)
+ {
+ mapper.map(geometry,
+ "opacity:0.6;fill:rgb(0,255,0);stroke:rgb(0,0,0);stroke-width:0.5");
+ }
+ BOOST_FOREACH(geometry_type const& geometry, output)
+ {
+ mapper.map(geometry,
+ bg::area(geometry) > 0
+ ? "opacity:0.5;fill:none;stroke:rgb(255,0,0);stroke-width:5"
+ : "opacity:0.5;fill:none;stroke:rgb(0,0,255);stroke-width:5"
+ );
+ }
+ }
+#endif
+
+}
+
+template <typename MultiPolygon, typename T>
+void test_geometry(std::string const& caseid, std::string const& wkt,
+ T const& expected_positive_area,
+ T const& expected_negative_area = T())
+{
+
+ MultiPolygon multi_polygon;
+ bg::read_wkt(wkt, multi_polygon);
+
+ // Test std::vector<Polygon> (= multi_polygon)
+ test_dissolve_plusmin<MultiPolygon>(caseid, multi_polygon,
+ expected_positive_area,
+ expected_negative_area);
+
+ // Test std::vector<ring>
+ {
+ typedef typename boost::range_value<MultiPolygon>::type polygon_type;
+ typedef typename bg::ring_type<MultiPolygon>::type ring_type;
+ std::vector<ring_type> rings;
+ BOOST_FOREACH(polygon_type const& polygon, multi_polygon)
+ {
+ rings.push_back(bg::exterior_ring(polygon));
+ }
+
+ test_dissolve_plusmin<MultiPolygon>(caseid + "_rings", rings,
+ expected_positive_area,
+ expected_negative_area);
+ }
+
+ // Test different combinations
+#define BOOST_GEOMETRY_TEST_PERMUTATIONS
+#ifdef BOOST_GEOMETRY_TEST_PERMUTATIONS
+
+ int n = multi_polygon.size();
+
+ // test them in all orders
+ std::vector<int> indices;
+ for (int i = 0; i < n; i++)
+ {
+ indices.push_back(i);
+ }
+ int permutation = 0;
+ do
+ {
+ std::ostringstream out;
+ out << caseid;
+ MultiPolygon multi_polygon2;
+ for (int i = 0; i < n; i++)
+ {
+ int index = indices[i];
+ out << "_" << index;
+ multi_polygon2.push_back(multi_polygon[index]);
+ }
+ test_dissolve_plusmin<MultiPolygon>(out.str(), multi_polygon2, expected_positive_area,
+ expected_negative_area);
+ } while (std::next_permutation(indices.begin(), indices.end()));
+#endif
+}
+
+template <typename Point>
+void test_all()
+{
+ typedef bg::model::polygon<Point> polygon;
+ typedef bg::model::multi_polygon<polygon> multi_polygon;
+
+ test_geometry<multi_polygon>("simplex_one",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)))",
+ 7.5);
+
+ test_geometry<multi_polygon>("simplex_two",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,3 6,6 3,2 2)))",
+ 14.7);
+ test_geometry<multi_polygon>("simplex_three",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,3 6,6 3,2 2)),((3 4,5 6,6 2,3 4)))",
+ 16.7945);
+ test_geometry<multi_polygon>("simplex_four",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,3 6,6 3,2 2)),((3 4,5 6,6 2,3 4)),((5 5,7 7,8 4,5 5)))",
+ 20.7581);
+
+ // disjoint
+ test_geometry<multi_polygon>("simplex_disjoint",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((1 6,2 10,5 7,1 6)),((3 4,5 6,6 2,3 4)),((6 5,8 7,9 4,6 5)))",
+ 24.0);
+
+ // new hole of four
+ test_geometry<multi_polygon>("new_hole",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,3 6,6 3,2 2)),((3 4,5 6,6 2,3 4)),((3 1,5 4,8 4,3 1)))",
+ 19.5206);
+
+ // intersection of positive/negative ring
+ test_geometry<multi_polygon>("plus_min_one",
+ "MULTIPOLYGON(((0 0,1 4,4 1,0 0)),((2 2,6 3,3 6,2 2)))",
+ 7.5, -7.2);
+
+ // negative ring within a positive ring
+ test_geometry<multi_polygon>("plus_min_one_within",
+ "MULTIPOLYGON(((0 0,1 7,7 3,0 0)),((1 2,4 4,2 5,1 2)))",
+ 23.0, -3.5);
+
+ // from buffer
+ test_geometry<multi_polygon>("from_buffer_1",
+ "MULTIPOLYGON(((2.4 3.03431,1.71716 3.71716,2.4 4,2.4 3.03431))"
+ ",((2.4 1.96569,2.4 1,1.71716 1.28284,2.4 1.96569))"
+ ",((2.93431 2.5,2.4 3.03431,2.4 1.96569,2.93431 2.5))"
+ ",((3.06569 2.5,3 2.43431,2.93431 2.5,3 2.56569,3.06569 2.5))"
+ ",((-0.4 5.4,4.4 5.4,4.4 3.83431,3.06569 2.5,4.4 1.16569,4.4 -0.4,-0.4 -0.4,-0.4 5.4)))"
+ ,
+ 26.0596168239, -0.2854871761);
+
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+ return 0;
+}
+
+
diff --git a/libs/geometry/test/algorithms/overlay/dissolver.vcproj b/libs/geometry/test/algorithms/overlay/dissolver.vcproj
new file mode 100644
index 000000000..c3c9d4bf0
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/dissolver.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="dissolver"
+ ProjectGUID="{6CCB145C-C682-4B9F-8672-6D04DB5C76DD}"
+ RootNamespace="dissolver"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\dissolver"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\dissolver"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\dissolver.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/enrich_intersection_points.cpp b/libs/geometry/test/algorithms/overlay/enrich_intersection_points.cpp
new file mode 100644
index 000000000..5c37a4be5
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/enrich_intersection_points.cpp
@@ -0,0 +1,186 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/intersection.hpp>
+
+//#include <boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp>
+//#include <boost/geometry/algorithms/detail/overlay/merge_intersection_points.hpp>
+#include <boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#define GEOMETRY_TEST_OVERLAY_NOT_REVERSED
+
+#include <overlay_common.hpp>
+
+#include <boost/algorithm/string/replace.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+struct test_enrich_intersection_points
+{
+ static inline std::string dir(int d)
+ {
+ return d == 0 ? "-" : (d == 1 ? "L" : "R");
+ }
+
+ template <typename G1, typename G2>
+ static void apply(std::string const& id,
+ boost::tuple<int, std::string> const& expected_count_and_center,
+ G1 const& g1, G2 const& g2, double precision)
+ {
+ //std::cout << "#" << id << std::endl;
+
+ typedef bg::detail::intersection::intersection_point
+ <typename bg::point_type<G2>::type> ip;
+ typedef typename boost::range_const_iterator<std::vector<ip> >::type iterator;
+ std::vector<ip> ips;
+
+ bg::get_intersection_points(g1, g2, ips);
+ bg::merge_intersection_points(ips);
+ bg::enrich_intersection_points(ips, true);
+
+ std::ostringstream out;
+ out << std::setprecision(2);
+
+ bool first = true;
+ for (iterator it = boost::begin(ips); it != boost::end(ips); ++it, first = false)
+ {
+ out << (first ? "" : ",");
+ for (unsigned int i = 0; i < it->info.size(); i++)
+ {
+ out << dir(it->info[i].direction);
+ }
+ }
+ int n = boost::size(ips);
+ //std::cout << n << " " << out.str() << std::endl;
+ BOOST_CHECK_EQUAL(expected_count_and_center.get<0>(), n);
+ BOOST_CHECK_EQUAL(expected_count_and_center.get<1>(), out.str());
+
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "enrich_ip" << id << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<typename bg::point_type<G2>::type> mapper(svg, 500, 500);
+ mapper.add(g1);
+ mapper.add(g2);
+
+ mapper.map(g1, "fill:rgb(0,255,0);stroke:rgb(0,0,0);stroke-width:1");
+ mapper.map(g2, "opacity:0.8;fill:rgb(0,0,255);stroke:rgb(0,0,0);stroke-width:1");
+
+ for (iterator it = boost::begin(ips); it != boost::end(ips); ++it)
+ {
+ mapper.map(it->point, "fill:rgb(255,128,0);stroke:rgb(0,0,100);stroke-width:1");
+ }
+ }
+#endif
+ }
+};
+
+
+int test_main(int, char* [])
+{
+ std::vector<boost::tuple<int, std::string> > expected;
+
+ /*
+ TODO Will be refactored
+
+ // NOTE: the order is sometimes not really important, in GCC it is sometimes
+ // different from here...
+
+
+ // 1-6
+ expected.push_back(boost::make_tuple(6, "RL,LR,LR,RL,RL,LR"));
+ expected.push_back(boost::make_tuple(8, "RL,LR,LR,RL,RL,LR,LR,RL"));
+ expected.push_back(boost::make_tuple(4, "RLRR,RRRL,RRRL,RRRL"));
+ expected.push_back(boost::make_tuple(12, "RL,LR,RL,LR,LR,RL,RL,LR,LR,RL,LR,RL"));
+ expected.push_back(boost::make_tuple(17, "LR,RL,LR,RRLR,RL,LR,RL,RL,LR,LR,RL,LR,RL,RL,LR,RL,LR"));
+ expected.push_back(boost::make_tuple(2, "--RR,LR"));
+
+ // 7-12
+ expected.push_back(boost::make_tuple(2, "LL,LL"));
+ expected.push_back(boost::make_tuple(2, "RL--,LL--"));
+ expected.push_back(boost::make_tuple(1, "RLLL"));
+ expected.push_back(boost::make_tuple(2, "RL--,LL--"));
+ expected.push_back(boost::make_tuple(1, "RRLR"));
+ expected.push_back(boost::make_tuple(8, "RL,LR,RL,LR,RL,LR,RL,LR"));
+
+ // 13-18
+ expected.push_back(boost::make_tuple(2, "LL--,LL--"));
+ expected.push_back(boost::make_tuple(2, "RL--,LL--"));
+ expected.push_back(boost::make_tuple(2, "RL--,LL--"));
+ expected.push_back(boost::make_tuple(2, "LL,--RL"));
+ expected.push_back(boost::make_tuple(2, "RR--,--LR"));
+ expected.push_back(boost::make_tuple(2, "RR--,--LR"));
+
+ // 19-24
+ expected.push_back(boost::make_tuple(2, "LL,LL"));
+ expected.push_back(boost::make_tuple(0, ""));
+ expected.push_back(boost::make_tuple(0, ""));
+ expected.push_back(boost::make_tuple(1, "RLLLRRLR"));
+ expected.push_back(boost::make_tuple(2, "RL,RLRRRRLR"));
+ expected.push_back(boost::make_tuple(1, "LRRRRRLR"));
+
+ // 25-30
+ expected.push_back(boost::make_tuple(1, "LRRRLLRL"));
+ expected.push_back(boost::make_tuple(1, "LRLLLLLR"));
+ expected.push_back(boost::make_tuple(2, "LR,LRRRRRRL"));
+ expected.push_back(boost::make_tuple(2, "LR,LRLLRRLR"));
+ expected.push_back(boost::make_tuple(2, "RL,LRRRLLLR"));
+ expected.push_back(boost::make_tuple(2, "LR,LRLLLLRL"));
+
+ // 31-36
+ expected.push_back(boost::make_tuple(1, "--LLLL--"));
+ expected.push_back(boost::make_tuple(1, "LR--LLRL"));
+ expected.push_back(boost::make_tuple(1, "LRLLLL--"));
+ expected.push_back(boost::make_tuple(2, "LR,LRLLRR--"));
+ expected.push_back(boost::make_tuple(1, "LRLLRRLR"));
+ expected.push_back(boost::make_tuple(3, "RL,LR,RLLLRRLR"));
+
+ // 37-42
+ expected.push_back(boost::make_tuple(3, "LRRRRRLR,RL,LR"));
+ expected.push_back(boost::make_tuple(3, "LR--RRRL,LR,RL"));
+ expected.push_back(boost::make_tuple(3, "RL,LR,LRRRRRRL"));
+
+ // 43-48
+ expected.push_back(boost::make_tuple(4, "LR,RL,RL,LR"));
+
+ // 49
+ expected.push_back(boost::make_tuple(16, "--RL,RRLR,RRLR,RL,LLRL,RLLLRRLR,RR--,--LR,RLRR,--LL,RL--,RL,RRRL,RL,LR,RRRLRRRL"));
+
+ // 101
+ expected.push_back(boost::make_tuple(3, "RL,LR,RL"));
+
+ // ticket#17
+ expected.push_back(boost::make_tuple(6, "LR,RL,LR,RL,RL,LR"));
+
+ //test_all<bg::model::d2::point_xy<float>, test_enrich_intersection_points>(expected);
+ test_all<bg::model::d2::point_xy<double>, test_enrich_intersection_points>(expected);
+ //test_all<boost::tuple<double, double>, test_enrich_intersection_points>(expected);
+
+ */
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/enrich_intersection_points.vcproj b/libs/geometry/test/algorithms/overlay/enrich_intersection_points.vcproj
new file mode 100644
index 000000000..8880fb1f3
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/enrich_intersection_points.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="enrich_intersection_points"
+ ProjectGUID="{20FE798A-E4EE-4C87-A988-7317E774D28A}"
+ RootNamespace="enrich_intersection_points"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\enrich_intersection_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\enrich_intersection_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\enrich_intersection_points.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/get_turn_info.cpp b/libs/geometry/test/algorithms/overlay/get_turn_info.cpp
new file mode 100644
index 000000000..979252e4d
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/get_turn_info.cpp
@@ -0,0 +1,859 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry/algorithms/intersection.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+
+
+template <typename P, typename T>
+void test_with_point(std::string const& caseid,
+ T pi_x, T pi_y, T pj_x, T pj_y, T pk_x, T pk_y,
+ T qi_x, T qi_y, T qj_x, T qj_y, T qk_x, T qk_y,
+ bg::detail::overlay::method_type expected_method,
+ T ip_x, T ip_y,
+ std::string const& expected,
+ T ip_x2, T ip_y2)
+{
+ P pi = bg::make<P>(pi_x, pi_y);
+ P pj = bg::make<P>(pj_x, pj_y);
+ P pk = bg::make<P>(pk_x, pk_y);
+ P qi = bg::make<P>(qi_x, qi_y);
+ P qj = bg::make<P>(qj_x, qj_y);
+ P qk = bg::make<P>(qk_x, qk_y);
+
+
+ typedef bg::detail::overlay::turn_info<P> turn_info;
+ typedef std::vector<turn_info> tp_vector;
+ turn_info model;
+ tp_vector info;
+ bg::detail::overlay::get_turn_info
+ <
+ P, P, turn_info,
+ bg::detail::overlay::assign_null_policy
+ >::apply(pi, pj, pk, qi, qj, qk,
+ model, std::back_inserter(info));
+
+
+ if (info.size() == 0)
+ {
+ BOOST_CHECK_EQUAL(expected_method,
+ bg::detail::overlay::method_none);
+ }
+
+ std::string detected;
+ std::string method;
+ for (typename tp_vector::const_iterator it = info.begin(); it != info.end(); ++it)
+ {
+ for (int t = 0; t < 2; t++)
+ {
+ detected += bg::operation_char(it->operations[t].operation);
+ method += bg::method_char(it->method);
+ }
+ }
+
+
+ /*
+ std::cout << caseid
+ << (caseid.find("_") == std::string::npos ? " " : "")
+ << " " << method
+ << " " << detected
+ << " " << order
+ << std::endl;
+ */
+
+
+ BOOST_CHECK_EQUAL(detected, expected);
+
+ if (! info.empty())
+ {
+ BOOST_CHECK_EQUAL(info[0].method, expected_method);
+ BOOST_CHECK_CLOSE(bg::get<0>(info[0].point), ip_x, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(info[0].point), ip_y, 0.001);
+
+ if (info.size() > 1)
+ {
+ BOOST_CHECK_EQUAL(info.size(), 2u);
+ BOOST_CHECK_EQUAL(info[1].method, expected_method);
+ BOOST_CHECK_CLOSE(bg::get<0>(info[1].point), ip_x2, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(info[1].point), ip_y2, 0.001);
+ }
+ }
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "get_turn_info_" << caseid
+ << "_" << string_from_type<typename bg::coordinate_type<P>::type>::name()
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<P> mapper(svg, 500, 500);
+ mapper.add(bg::make<P>(0, 0));
+ mapper.add(bg::make<P>(10, 10));
+
+ bg::model::linestring<P> p; p.push_back(pi); p.push_back(pj); p.push_back(pk);
+ bg::model::linestring<P> q; q.push_back(qi); q.push_back(qj); q.push_back(qk);
+ mapper.map(p, "opacity:0.8;stroke:rgb(0,192,0);stroke-width:3");
+ mapper.map(q, "opacity:0.8;stroke:rgb(0,0,255);stroke-width:3");
+
+ std::string style = ";font-family='Verdana';font-weight:bold";
+ std::string align = ";text-anchor:end;text-align:end";
+ int offset = 8;
+
+ mapper.text(pi, "pi", "fill:rgb(0,192,0)" + style, offset, offset);
+ mapper.text(pj, "pj", "fill:rgb(0,192,0)" + style, offset, offset);
+ mapper.text(pk, "pk", "fill:rgb(0,192,0)" + style, offset, offset);
+
+ mapper.text(qi, "qi", "fill:rgb(0,0,255)" + style + align, -offset, offset);
+ mapper.text(qj, "qj", "fill:rgb(0,0,255)" + style + align, -offset, offset);
+ mapper.text(qk, "qk", "fill:rgb(0,0,255)" + style + align, -offset, offset);
+
+
+ int factor = 1; // second info, if any, will go left by factor -1
+ int ch = '1';
+ for (typename tp_vector::const_iterator it = info.begin();
+ it != info.end();
+ ++it, factor *= -1, ch++)
+ {
+ bool at_j = it->method == bg::detail::overlay::method_crosses;
+ std::string op;
+ op += bg::operation_char(it->operations[0].operation);
+ align = ";text-anchor:middle;text-align:center";
+ mapper.text(at_j ? pj : pk, op, "fill:rgb(255,128,0)" + style + align, offset * factor, -offset);
+
+ op.clear();
+ op += bg::operation_char(it->operations[1].operation);
+ mapper.text(at_j ? qj : qk, op, "fill:rgb(255,128,0)" + style + align, offset * factor, -offset);
+
+ // Map intersection point + method
+ mapper.map(it->point, "opacity:0.8;fill:rgb(255,0,0);stroke:rgb(0,0,100);stroke-width:1");
+
+ op.clear();
+ op += bg::method_char(it->method);
+ if (info.size() != 1)
+ {
+ op += ch;
+ op += " p:"; op += bg::operation_char(it->operations[0].operation);
+ op += " q:"; op += bg::operation_char(it->operations[1].operation);
+ }
+ mapper.text(it->point, op, "fill:rgb(255,0,0)" + style, offset, -offset);
+ }
+ }
+#endif
+
+}
+
+template <typename P, typename T>
+void test_both(std::string const& caseid,
+ T pi_x, T pi_y, T pj_x, T pj_y, T pk_x, T pk_y,
+ T qi_x, T qi_y, T qj_x, T qj_y, T qk_x, T qk_y,
+ bg::detail::overlay::method_type method
+ = bg::detail::overlay::method_none,
+ T ip_x = -1, T ip_y = -1,
+ std::string const& expected = "",
+ T ip_x2 = -1, T ip_y2 = -1)
+{
+ test_with_point<P, double>(caseid,
+ pi_x, pi_y, pj_x, pj_y, pk_x, pk_y,
+ qi_x, qi_y, qj_x, qj_y, qk_x, qk_y,
+ method, ip_x, ip_y, expected, ip_x2, ip_y2);
+
+ //return;
+
+ std::string reverse;
+ for (int i = expected.size() - 1; i >= 0; i--)
+ {
+ reverse += expected[i];
+ }
+ if (ip_x2 >= 0 && ip_y2 >= 0)
+ {
+ std::swap(ip_x, ip_x2);
+ std::swap(ip_y, ip_y2);
+ }
+
+ test_with_point<P, double>(caseid + "_r",
+ qi_x, qi_y, qj_x, qj_y, qk_x, qk_y, // q
+ pi_x, pi_y, pj_x, pj_y, pk_x, pk_y, // p
+ method, ip_x, ip_y, reverse, ip_x2, ip_y2);
+}
+
+
+template <typename P>
+void test_all()
+{
+ using namespace bg::detail::overlay;
+
+ // See powerpoint "doc/testcases/get_turn_info.ppt"
+
+
+ // ------------------------------------------------------------------------
+ // "Real" intersections ("i"), or, crossing
+ // ------------------------------------------------------------------------
+ test_both<P, double>("il1",
+ 5, 1, 5, 6, 7, 8, // p
+ 3, 3, 7, 5, 8, 3, // q
+ method_crosses, 5, 4, "ui");
+
+ test_both<P, double>("il2",
+ 5, 1, 5, 6, 7, 8, // p
+ 3, 5, 7, 5, 3, 3, // q
+ method_crosses, 5, 5, "ui");
+
+ test_both<P, double>("il3",
+ 5, 1, 5, 6, 7, 8, // p
+ 3, 3, 7, 5, 3, 5, // q
+ method_crosses, 5, 4, "ui");
+
+ test_both<P, double>("il4",
+ 5, 1, 5, 6, 7, 8, // p
+ 3, 3, 7, 5, 4, 8, // q
+ method_crosses, 5, 4, "ui");
+
+ test_both<P, double>("ir1",
+ 5, 1, 5, 6, 7, 8, // p
+ 7, 5, 3, 3, 2, 5, // q
+ method_crosses, 5, 4, "iu");
+
+
+ // ------------------------------------------------------------------------
+ // TOUCH INTERIOR or touch in the middle ("m")
+ // ------------------------------------------------------------------------
+ test_both<P, double>("ml1",
+ 5, 1, 5, 6, 7, 8, // p
+ 3, 3, 5, 4, 7, 3, // q
+ method_touch_interior, 5, 4, "ui");
+
+ test_both<P, double>("ml2",
+ 5, 1, 5, 6, 7, 8, // p
+ 3, 3, 5, 4, 3, 6, // q
+ method_touch_interior, 5, 4, "iu");
+
+ test_both<P, double>("ml3",
+ 5, 1, 5, 6, 7, 8, // p
+ 3, 6, 5, 4, 3, 3, // q
+ method_touch_interior, 5, 4, "uu");
+
+ test_both<P, double>("mr1",
+ 5, 1, 5, 6, 7, 8, // p
+ 7, 3, 5, 4, 3, 3, // q
+ method_touch_interior, 5, 4, "iu");
+
+ test_both<P, double>("mr2",
+ 5, 1, 5, 6, 7, 8, // p
+ 7, 3, 5, 4, 7, 6, // q
+ method_touch_interior, 5, 4, "ui");
+
+ test_both<P, double>("mr3",
+ 5, 1, 5, 6, 7, 8, // p
+ 7, 6, 5, 4, 7, 3, // q
+ method_touch_interior, 5, 4, "ii");
+
+ test_both<P, double>("mcl",
+ 5, 1, 5, 6, 7, 8, // p
+ 3, 2, 5, 3, 5, 5, // q
+ method_touch_interior, 5, 3, "cc");
+
+ test_both<P, double>("mcr",
+ 5, 1, 5, 6, 7, 8, // p
+ 7, 2, 5, 3, 5, 5, // q
+ method_touch_interior, 5, 3, "cc");
+
+ test_both<P, double>("mclo",
+ 5, 1, 5, 6, 7, 8, // p
+ 3, 4, 5, 5, 5, 3, // q
+ method_touch_interior, 5, 5, "ux");
+
+ test_both<P, double>("mcro",
+ 5, 1, 5, 6, 7, 8, // p
+ 7, 4, 5, 5, 5, 3, // q
+ method_touch_interior, 5, 5, "ix");
+
+ // ------------------------------------------------------------------------
+ // COLLINEAR
+ // ------------------------------------------------------------------------
+ test_both<P, double>("cll1",
+ 5, 1, 5, 6, 3, 8, // p
+ 5, 5, 5, 7, 3, 8, // q
+ method_collinear, 5, 6, "ui");
+ test_both<P, double>("cll2",
+ 5, 1, 5, 6, 3, 8, // p
+ 5, 3, 5, 5, 3, 6, // q
+ method_collinear, 5, 5, "iu");
+ test_both<P, double>("clr1",
+ 5, 1, 5, 6, 3, 8, // p
+ 5, 5, 5, 7, 6, 8, // q
+ method_collinear, 5, 6, "ui");
+ test_both<P, double>("clr2",
+ 5, 1, 5, 6, 3, 8, // p
+ 5, 3, 5, 5, 6, 6, // q
+ method_collinear, 5, 5, "ui");
+
+ test_both<P, double>("crl1",
+ 5, 1, 5, 6, 7, 8, // p
+ 5, 5, 5, 7, 3, 8, // q
+ method_collinear, 5, 6, "iu");
+ test_both<P, double>("crl2",
+ 5, 1, 5, 6, 7, 8, // p
+ 5, 3, 5, 5, 3, 6, // q
+ method_collinear, 5, 5, "iu");
+ test_both<P, double>("crr1",
+ 5, 1, 5, 6, 7, 8, // p
+ 5, 5, 5, 7, 6, 8, // q
+ method_collinear, 5, 6, "iu");
+ test_both<P, double>("crr2",
+ 5, 1, 5, 6, 7, 8, // p
+ 5, 3, 5, 5, 6, 6, // q
+ method_collinear, 5, 5, "ui");
+
+ test_both<P, double>("ccx1",
+ 5, 1, 5, 6, 5, 8, // p
+ 5, 5, 5, 7, 3, 8, // q
+ method_collinear, 5, 6, "cc");
+ test_both<P, double>("cxc1",
+ 5, 1, 5, 6, 7, 8, // p
+ 5, 3, 5, 5, 5, 7, // q
+ method_collinear, 5, 5, "cc");
+
+ // Bug in case #54 of "overlay_cases.hpp"
+ test_both<P, double>("c_bug1",
+ 5, 0, 2, 0, 2, 2, // p
+ 4, 0, 1, 0, 1, 2, // q
+ method_collinear, 2, 0, "iu");
+
+
+ // ------------------------------------------------------------------------
+ // COLLINEAR OPPOSITE
+ // ------------------------------------------------------------------------
+
+ test_both<P, double>("clo1",
+ 5, 2, 5, 6, 3, 8, // p
+ 5, 7, 5, 5, 3, 3, // q
+ method_collinear, 5, 6, "ixxu", 5, 5);
+ test_both<P, double>("clo2",
+ 5, 2, 5, 6, 3, 8, // p
+ 5, 7, 5, 5, 5, 2, // q
+ method_collinear, 5, 6, "ix");
+ // actually "xxix", xx is skipped everywhere
+ test_both<P, double>("clo3",
+ 5, 2, 5, 6, 3, 8, // p
+ 5, 7, 5, 5, 7, 3, // q
+ method_collinear, 5, 6, "ixxi", 5, 5);
+
+ test_both<P, double>("cco1",
+ 5, 2, 5, 6, 5, 8, // p
+ 5, 7, 5, 5, 3, 3, // q
+ method_collinear, 5, 5, "xu"); // "xuxx"
+ test_both<P, double>("cco2",
+ 5, 2, 5, 6, 5, 8, // p
+ 5, 7, 5, 5, 5, 2); // q "xxxx"
+ test_both<P, double>("cco3",
+ 5, 2, 5, 6, 5, 8, // p
+ 5, 7, 5, 5, 7, 3, // q
+ method_collinear, 5, 5, "xi"); // "xixx"
+
+
+ test_both<P, double>("cro1",
+ 5, 2, 5, 6, 7, 8, // p
+ 5, 7, 5, 5, 3, 3, // q
+ method_collinear, 5, 6, "uxxu", 5, 5);
+ test_both<P, double>("cro2",
+ 5, 2, 5, 6, 7, 8, // p
+ 5, 7, 5, 5, 5, 2, // q
+ method_collinear, 5, 6, "ux"); // "xxux"
+ test_both<P, double>("cro3",
+ 5, 2, 5, 6, 7, 8, // p
+ 5, 7, 5, 5, 7, 3, // q
+ method_collinear, 5, 6, "uxxi", 5, 5);
+
+ test_both<P, double>("cxo1",
+ 5, 2, 5, 6, 3, 8, // p
+ 5, 5, 5, 3, 3, 1, // q
+ method_collinear, 5, 3, "xu");
+ test_both<P, double>("cxo2",
+ 5, 2, 5, 6, 3, 8, // p
+ 5, 5, 5, 3, 5, 0); // q "xx"
+ test_both<P, double>("cxo3",
+ 5, 2, 5, 6, 3, 8, // p
+ 5, 5, 5, 3, 7, 1, // q
+ method_collinear, 5, 3, "xi");
+
+ test_both<P, double>("cxo4",
+ 5, 2, 5, 6, 3, 8, // p
+ 5, 7, 5, 1, 3, 0, // q
+ method_collinear, 5, 6, "ix");
+ test_both<P, double>("cxo5",
+ 5, 2, 5, 6, 5, 8, // p
+ 5, 7, 5, 1, 3, 0); // q "xx"
+ test_both<P, double>("cxo6",
+ 5, 2, 5, 6, 7, 8, // p
+ 5, 7, 5, 1, 3, 0, // q
+ method_collinear, 5, 6, "ux");
+
+
+ // Verify
+ test_both<P, double>("cvo1",
+ 5, 3, 5, 7, 7, 9, // p
+ 5, 5, 5, 3, 3, 1 // q
+ );
+ test_both<P, double>("cvo2",
+ 5, 3, 5, 7, 7, 9, // p
+ 5, 4, 5, 2, 3, 0 // q
+ );
+
+
+ // ------------------------------------------------------------------------
+ // TOUCH - both same
+ // ------------------------------------------------------------------------
+ // Both left, Q turns right
+ test_both<P, double>("blr1",
+ 5, 1, 5, 6, 4, 4, // p
+ 3, 7, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("blr2",
+ 5, 1, 5, 6, 1, 4, // p
+ 3, 7, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "cc");
+ test_both<P, double>("blr3",
+ 5, 1, 5, 6, 3, 6, // p
+ 3, 7, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "iu");
+ test_both<P, double>("blr4",
+ 5, 1, 5, 6, 1, 8, // p
+ 3, 7, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "xu");
+ test_both<P, double>("blr5",
+ 5, 1, 5, 6, 4, 8, // p
+ 3, 7, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "uu");
+ test_both<P, double>("blr6",
+ 5, 1, 5, 6, 6, 4, // p
+ 3, 7, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "uu");
+
+ test_both<P, double>("blr7",
+ 5, 1, 5, 6, 3, 6, // p
+ 3, 7, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "ix");
+ test_both<P, double>("blr8",
+ 5, 1, 5, 6, 3, 6, // p
+ 3, 6, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "xx");
+ test_both<P, double>("blr9",
+ 5, 1, 5, 6, 3, 6, // p
+ 3, 5, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "ux");
+
+ // Variants
+ test_both<P, double>("blr7-a",
+ 5, 1, 5, 6, 3, 6, // p
+ 5, 8, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "ix");
+ test_both<P, double>("blr7-b", // in fact NOT "both-left"
+ 5, 1, 5, 6, 3, 6, // p
+ 6, 8, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "ix");
+
+ // To check if "collinear-check" on other side
+ // does not apply to this side
+ test_both<P, double>("blr6-c1",
+ 5, 1, 5, 6, 7, 5, // p
+ 3, 7, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "uu");
+ test_both<P, double>("blr6-c2",
+ 5, 1, 5, 6, 7, 7, // p
+ 3, 7, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "uu");
+
+
+
+ // Both right, Q turns right
+ test_both<P, double>("brr1",
+ 5, 1, 5, 6, 6, 4, // p
+ 7, 5, 5, 6, 7, 7, // q
+ method_touch, 5, 6, "uu");
+ test_both<P, double>("brr2",
+ 5, 1, 5, 6, 9, 4, // p
+ 7, 5, 5, 6, 7, 7, // q
+ method_touch, 5, 6, "xu");
+ test_both<P, double>("brr3",
+ 5, 1, 5, 6, 7, 6, // p
+ 7, 5, 5, 6, 7, 7, // q
+ method_touch, 5, 6, "iu");
+ test_both<P, double>("brr4",
+ 5, 1, 5, 6, 9, 8, // p
+ 7, 5, 5, 6, 7, 7, // q
+ method_touch, 5, 6, "cc");
+ test_both<P, double>("brr5",
+ 5, 1, 5, 6, 6, 8, // p
+ 7, 5, 5, 6, 7, 7, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("brr6",
+ 5, 1, 5, 6, 4, 4, // p
+ 7, 5, 5, 6, 7, 7, // q
+ method_touch, 5, 6, "ui");
+
+ // Both right, Q turns left
+ test_both<P, double>("brl1",
+ 5, 1, 5, 6, 6, 4, // p
+ 7, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "iu");
+ test_both<P, double>("brl2",
+ 5, 1, 5, 6, 9, 4, // p
+ 7, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "cc");
+ test_both<P, double>("brl3",
+ 5, 1, 5, 6, 7, 6, // p
+ 7, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("brl4",
+ 5, 1, 5, 6, 9, 8, // p
+ 7, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "xi");
+ test_both<P, double>("brl5",
+ 5, 1, 5, 6, 6, 8, // p
+ 7, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "ii");
+ test_both<P, double>("brl6",
+ 5, 1, 5, 6, 4, 4, // p
+ 7, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "ii");
+ test_both<P, double>("brl7",
+ 5, 1, 5, 6, 7, 6, // p
+ 7, 7, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "ux");
+ test_both<P, double>("brl8",
+ 5, 1, 5, 6, 7, 6, // p
+ 7, 6, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "xx");
+ test_both<P, double>("brl9",
+ 5, 1, 5, 6, 7, 6, // p
+ 7, 5, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "ix");
+
+ // Variants
+ test_both<P, double>("brl7-a",
+ 5, 1, 5, 6, 7, 6, // p
+ 5, 8, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "ux");
+ test_both<P, double>("brl7-b", // in fact NOT "both right"
+ 5, 1, 5, 6, 7, 6, // p
+ 4, 8, 5, 6, 5, 3, // q
+ method_touch, 5, 6, "ux");
+
+
+
+ // Both left, Q turns left
+ test_both<P, double>("bll1",
+ 5, 1, 5, 6, 4, 4, // p
+ 3, 5, 5, 6, 3, 7, // q
+ method_touch, 5, 6, "ii");
+ test_both<P, double>("bll2",
+ 5, 1, 5, 6, 1, 4, // p
+ 3, 5, 5, 6, 3, 7, // q
+ method_touch, 5, 6, "xi");
+ test_both<P, double>("bll3",
+ 5, 1, 5, 6, 3, 6, // p
+ 3, 5, 5, 6, 3, 7, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("bll4",
+ 5, 1, 5, 6, 1, 8, // p
+ 3, 5, 5, 6, 3, 7, // q
+ method_touch, 5, 6, "cc");
+ test_both<P, double>("bll5",
+ 5, 1, 5, 6, 4, 8, // p
+ 3, 5, 5, 6, 3, 7, // q
+ method_touch, 5, 6, "iu");
+ test_both<P, double>("bll6",
+ 5, 1, 5, 6, 6, 4, // p
+ 3, 5, 5, 6, 3, 7, // q
+ method_touch, 5, 6, "iu");
+
+ // TOUCH - COLLINEAR + one side
+ // Collinear/left, Q turns right
+ test_both<P, double>("t-clr1",
+ 5, 1, 5, 6, 4, 4, // p
+ 5, 8, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("t-clr2",
+ 5, 1, 5, 6, 1, 4, // p
+ 5, 8, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "cc");
+ test_both<P, double>("t-clr3",
+ 5, 1, 5, 6, 3, 6, // p
+ 5, 8, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "iu");
+ test_both<P, double>("t-clr4",
+ 5, 1, 5, 6, 5, 8, // p
+ 5, 8, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "xu");
+ // 5 n.a.
+ test_both<P, double>("t-clr6",
+ 5, 1, 5, 6, 6, 4, // p
+ 5, 8, 5, 6, 3, 5, // q
+ method_touch, 5, 6, "uu");
+
+ // Collinear/right, Q turns right
+ test_both<P, double>("t-crr1",
+ 5, 1, 5, 6, 6, 4, // p
+ 7, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "uu");
+ test_both<P, double>("t-crr2",
+ 5, 1, 5, 6, 9, 4, // p
+ 7, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "xu");
+ test_both<P, double>("t-crr3",
+ 5, 1, 5, 6, 7, 6, // p
+ 7, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "iu");
+ test_both<P, double>("t-crr4",
+ 5, 1, 5, 6, 5, 9, // p
+ 7, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "cc");
+ // 5 n.a.
+ test_both<P, double>("t-crr6",
+ 5, 1, 5, 6, 4, 4, // p
+ 7, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "ui");
+
+ // Collinear/right, Q turns left
+ test_both<P, double>("t-crl1",
+ 5, 1, 5, 6, 6, 4, // p
+ 5, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "iu");
+ test_both<P, double>("t-crl2",
+ 5, 1, 5, 6, 9, 4, // p
+ 5, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "cc");
+ test_both<P, double>("t-crl3",
+ 5, 1, 5, 6, 7, 6, // p
+ 5, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("t-crl4",
+ 5, 1, 5, 6, 5, 8, // p
+ 5, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "xi");
+ // 5 n.a.
+ test_both<P, double>("t-crl6",
+ 5, 1, 5, 6, 4, 4, // p
+ 5, 7, 5, 6, 7, 5, // q
+ method_touch, 5, 6, "ii");
+
+ // Collinear/left, Q turns left
+ test_both<P, double>("t-cll1",
+ 5, 1, 5, 6, 4, 4, // p
+ 3, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "ii");
+ test_both<P, double>("t-cll2",
+ 5, 1, 5, 6, 1, 4, // p
+ 3, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "xi");
+ test_both<P, double>("t-cll3",
+ 5, 1, 5, 6, 3, 6, // p
+ 3, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("t-cll4",
+ 5, 1, 5, 6, 5, 9, // p
+ 3, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "cc");
+ // 5 n.a.
+ test_both<P, double>("t-cll6",
+ 5, 1, 5, 6, 6, 4, // p
+ 3, 5, 5, 6, 5, 8, // q
+ method_touch, 5, 6, "iu");
+
+ // Left to right
+ test_both<P, double>("lr1",
+ 5, 1, 5, 6, 3, 3, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "ii");
+ test_both<P, double>("lr2",
+ 5, 1, 5, 6, 1, 5, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "xi");
+ test_both<P, double>("lr3",
+ 5, 1, 5, 6, 4, 8, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("lr4",
+ 5, 1, 5, 6, 9, 5, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "cc");
+ test_both<P, double>("lr5",
+ 5, 1, 5, 6, 7, 3, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "iu");
+ // otherwise case more thoroughly
+ test_both<P, double>("lr3a",
+ 5, 1, 5, 6, 1, 6, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("lr3b",
+ 5, 1, 5, 6, 5, 10, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("lr3c",
+ 5, 1, 5, 6, 8, 9, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("lr3d",
+ 5, 1, 5, 6, 9, 7, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("lr3e",
+ 5, 1, 5, 6, 9, 6, // p
+ 1, 5, 5, 6, 9, 5, // q
+ method_touch, 5, 6, "ui");
+
+ // Right to left
+ test_both<P, double>("rl1",
+ 5, 1, 5, 6, 3, 3, // p
+ 9, 5, 5, 6, 1, 5, // q
+ method_touch, 5, 6, "ui");
+ test_both<P, double>("rl2",
+ 5, 1, 5, 6, 1, 5, // p
+ 9, 5, 5, 6, 1, 5, // q
+ method_touch, 5, 6, "cc");
+ test_both<P, double>("rl3",
+ 5, 1, 5, 6, 4, 8, // p
+ 9, 5, 5, 6, 1, 5, // q
+ method_touch, 5, 6, "iu");
+ test_both<P, double>("rl4",
+ 5, 1, 5, 6, 9, 5, // p
+ 9, 5, 5, 6, 1, 5, // q
+ method_touch, 5, 6, "xu");
+ test_both<P, double>("rl5",
+ 5, 1, 5, 6, 7, 3, // p
+ 9, 5, 5, 6, 1, 5, // q
+ method_touch, 5, 6, "uu");
+
+ // Equal (p1/q1 are equal)
+ test_both<P, double>("ebl1",
+ 5, 1, 5, 6, 3, 4, // p
+ 5, 1, 5, 6, 3, 8, // q
+ method_equal, 5, 6, "ui");
+ test_both<P, double>("ebl2",
+ 5, 1, 5, 6, 3, 8, // p
+ 5, 1, 5, 6, 3, 4, // q
+ method_equal, 5, 6, "iu");
+ test_both<P, double>("ebl3",
+ 5, 1, 5, 6, 3, 8, // p
+ 5, 1, 5, 6, 3, 8, // q
+ method_equal, 5, 6, "cc");
+
+ test_both<P, double>("ebl3-c1",
+ 5, 1, 5, 6, 10, 1, // p
+ 5, 1, 5, 6, 3, 8, // q
+ method_equal, 5, 6, "iu");
+
+ test_both<P, double>("ebr1",
+ 5, 1, 5, 6, 7, 4, // p
+ 5, 1, 5, 6, 7, 8, // q
+ method_equal, 5, 6, "iu");
+ test_both<P, double>("ebr2",
+ 5, 1, 5, 6, 7, 8, // p
+ 5, 1, 5, 6, 7, 4, // q
+ method_equal, 5, 6, "ui");
+ test_both<P, double>("ebr3",
+ 5, 1, 5, 6, 7, 8, // p
+ 5, 1, 5, 6, 7, 8, // q
+ method_equal, 5, 6, "cc");
+
+ test_both<P, double>("ebr3-c1",
+ 5, 1, 5, 6, 0, 1, // p
+ 5, 1, 5, 6, 7, 8, // q
+ method_equal, 5, 6, "ui");
+
+ test_both<P, double>("elr1",
+ 5, 1, 5, 6, 7, 8, // p
+ 5, 1, 5, 6, 3, 8, // q
+ method_equal, 5, 6, "iu");
+ test_both<P, double>("elr2",
+ 5, 1, 5, 6, 3, 8, // p
+ 5, 1, 5, 6, 7, 8, // q
+ method_equal, 5, 6, "ui");
+ test_both<P, double>("ec1",
+ 5, 1, 5, 6, 5, 8, // p
+ 5, 1, 5, 6, 5, 8, // q
+ method_equal, 5, 6, "cc");
+ test_both<P, double>("ec2",
+ 5, 1, 5, 6, 5, 8, // p
+ 5, 1, 5, 6, 5, 7, // q
+ method_equal, 5, 6, "cc");
+
+ test_both<P, double>("snl-1",
+ 0, 3, 2, 3, 4, 3, // p
+ 4, 3, 2, 3, 0, 3, // q
+ method_touch, 2, 3, "xx");
+
+ // BSG 2012-05-26 to be decided what's the problem here and what it tests...
+ // Anyway, test results are not filled out.
+ //test_both<P, double>("issue_buffer_mill",
+ // 5.1983614873206241 , 6.7259025813913107 , 5.0499999999999998 , 6.4291796067500622 , 5.1983614873206241 , 6.7259025813913107, // p
+ // 5.0499999999999998 , 6.4291796067500622 , 5.0499999999999998 , 6.4291796067500622 , 5.1983614873206241 , 6.7259025813913107, // q
+ // method_collinear, 2, 0, "tt");
+
+}
+
+
+/***
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+
+template <typename G>
+void test2(G const& geometry)
+{
+ typedef typename bg::point_type<G>::type P;
+ typedef typename bg::tag<G>::type T;
+ typedef typename bg::tag<P>::type PT;
+ std::cout << typeid(G).name() << std::endl;
+ std::cout << typeid(T).name() << std::endl;
+ std::cout << typeid(P).name() << std::endl;
+ std::cout << typeid(PT).name() << std::endl;
+
+
+ std::cout << bg::length(geometry) << std::endl;
+
+ typedef bg::model::point<float, 3, bg::cs::cartesian> P2;
+ bg::model::linestring<P2> out;
+ bg::strategy::transform::scale_transformer<float[3], P2> scaler(5);
+ bg::transform(geometry, out, scaler);
+ std::cout << bg::dsv(out) << std::endl;
+}
+
+void test_f3()
+{
+ float vertices[][3] = {
+ {-1, -1, 1}, {1, -1, 1}, {1, 1, 1}, {-1, 1, 1},
+ {-1, -1, -1}, {1, -1, -1}, {1, 1, -1}, {-1, 1, -1}
+ };
+ test2(vertices);
+}
+***/
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/get_turn_info.vcproj b/libs/geometry/test/algorithms/overlay/get_turn_info.vcproj
new file mode 100644
index 000000000..22bf1d1bd
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/get_turn_info.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="get_turn_info"
+ ProjectGUID="{8D98821A-5033-4616-9AF4-2AEAA42D8456}"
+ RootNamespace="get_turn_info"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\get_turn_info"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\get_turn_info"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\get_turn_info.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/get_turn_info.xls b/libs/geometry/test/algorithms/overlay/get_turn_info.xls
new file mode 100644
index 000000000..facd118e4
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/get_turn_info.xls
Binary files differ
diff --git a/libs/geometry/test/algorithms/overlay/get_turns.cpp b/libs/geometry/test/algorithms/overlay/get_turns.cpp
new file mode 100644
index 000000000..ccada3485
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/get_turns.cpp
@@ -0,0 +1,385 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <iomanip>
+
+#include <geometry_test_common.hpp>
+
+#define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
+
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+#include <algorithms/overlay/overlay_cases.hpp>
+
+
+
+
+// To test that "get_turns" can be called using additional information
+template <typename P>
+struct my_turn_op : public bg::detail::overlay::turn_operation
+{
+};
+
+namespace detail
+{
+
+struct test_get_turns
+{
+ template<typename G1, typename G2>
+ static void apply(std::string const& id,
+ std::size_t expected_count,
+ G1 const& g1, G2 const& g2, double precision)
+ {
+ typedef bg::detail::overlay::turn_info
+ <
+ typename bg::point_type<G2>::type
+ > turn_info;
+ std::vector<turn_info> turns;
+
+ bg::detail::get_turns::no_interrupt_policy policy;
+ bg::get_turns<false, false, bg::detail::overlay::assign_null_policy>(g1, g2, turns, policy);
+
+ BOOST_CHECK_MESSAGE(
+ expected_count == boost::size(turns),
+ "get_turns: " << id
+ << " #turns expected: " << expected_count
+ << " detected: " << boost::size(turns)
+ << " type: " << string_from_type
+ <typename bg::coordinate_type<G1>::type>::name()
+ );
+
+#if defined(TEST_WITH_SVG)
+ {
+ typedef typename bg::coordinate_type<G1>::type coordinate_type;
+ std::map<std::pair<coordinate_type, coordinate_type>, int> offsets;
+ std::ostringstream filename;
+ filename << "get_turns_" << id
+ << "_" << string_from_type<typename bg::coordinate_type<G1>::type>::name()
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<typename bg::point_type<G2>::type> mapper(svg, 500, 500);
+ mapper.add(g1);
+ mapper.add(g2);
+
+ // Input shapes in green/blue
+ mapper.map(g1, "fill-opacity:0.5;fill:rgb(153,204,0);"
+ "stroke:rgb(153,204,0);stroke-width:3");
+ mapper.map(g2, "fill-opacity:0.3;fill:rgb(51,51,153);"
+ "stroke:rgb(51,51,153);stroke-width:3");
+
+ int index = 0;
+ BOOST_FOREACH(turn_info const& turn, turns)
+ {
+ mapper.map(turn.point, "fill:rgb(255,128,0);stroke:rgb(0,0,100);stroke-width:1");
+
+ // Map characteristics
+ std::pair<coordinate_type, coordinate_type> p
+ = std::make_pair(bg::get<0>(turn.point), bg::get<1>(turn.point));
+
+ {
+ std::ostringstream out;
+ out << index
+ << ": " << bg::operation_char(turn.operations[0].operation)
+ << " " << bg::operation_char(turn.operations[1].operation)
+ << " (" << bg::method_char(turn.method) << ")"
+ << (turn.is_discarded() ? " (discarded) " : turn.blocked() ? " (blocked)" : "")
+ ;
+
+ offsets[p] += 10;
+ int offset = offsets[p];
+ mapper.text(turn.point, out.str(),
+ "fill:rgb(0,0,0);font-family:Arial;font-size:8px",
+ 5, offset);
+ }
+
+ ++index;
+ }
+ }
+#endif
+ }
+};
+
+}
+
+template<typename G1, typename G2>
+struct test_get_turns
+{
+ inline static void apply(std::string const& id, std::size_t expected_count,
+ std::string const& wkt1, std::string const& wkt2,
+ double precision = 0.001)
+ {
+ if (wkt1.empty() || wkt2.empty())
+ {
+ return;
+ }
+
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ bg::correct(g1);
+ bg::correct(g2);
+
+ // Try the overlay-function in both ways
+ std::string caseid = id;
+ //goto case_reversed;
+
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ std::cout << std::endl << std::endl << "# " << caseid << std::endl;
+#endif
+ detail::test_get_turns::apply(caseid, expected_count, g1, g2, precision);
+
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ return;
+#endif
+
+ //case_reversed:
+#if ! defined(BOOST_GEOMETRY_TEST_OVERLAY_NOT_EXCHANGED)
+ caseid = id + "_rev";
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ std::cout << std::endl << std::endl << "# " << caseid << std::endl;
+#endif
+
+ detail::test_get_turns::apply(caseid, expected_count, g2, g1, precision);
+#endif
+ }
+};
+
+#if ! defined(GEOMETRY_TEST_MULTI)
+template <typename T>
+void test_all()
+{
+ typedef bg::model::point<T, 2, bg::cs::cartesian> P;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::linestring<P> linestring;
+ typedef bg::model::box<P> box;
+
+ // Expected count, average x, average y
+ typedef boost::tuple<int> Tuple;
+
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ std::cout << string_from_type<T>::name() << std::endl;
+#endif
+
+
+ // snl
+ /*
+ test_get_turns<polygon, polygon>::apply("snl_2",
+ 5,
+ //snl-1
+ //"POLYGON((182467 605842,182480 605954,182557 605958,182571 605958,182585 605958,182579 605843,182559 605838,182467 605842))",
+ //"POLYGON((182499 605955,182511 605960,182536 605974,182536 605981,182536 606006,182563 606006,182610 605985,182613 605976,182620 605948,182628 605937,182631 605924,182639 605889,182634 605885,182603 605848,182579 605843,182585 605958,182571 605958,182557 605958,182499 605955))");
+ //snl-2
+ //"POLYGON((120812 525783,120845 525792,120821 525842,120789 525826,120818 525849,120831 525854,120875 525875,120887 525881,120887 525881,120920 525834,120920 525834,120811 525772,120789 525826,120812 525783))",
+ //"POLYGON((120789 525826,120812 525783,120845 525792,120821 525842,120789 525826,120818 525849,120831 525854,120875 525875,120923 525836,120811 525772,120789 525826))"
+ //snl-4
+ "POLYGON((184913.4512400339881423860788345336914 606985.779408219968900084495544433594,184912.8999999999941792339086532592773 606987.145999999949708580970764160156,184904.4135310589917935431003570556641 606987.651360383024439215660095214844,184901.847619076987029984593391418457 607014.593436188995838165283203125,184916.3977574919990729540586471557617 607021.060164373018778860569000244141,184927.7147701499925460666418075561523 607008.126435620011761784553527832031,184926.0980706939881201833486557006836 606998.426238880958408117294311523438,184913.4512400339881423860788345336914 606985.779408219968900084495544433594),(184907.5560000000114087015390396118164 607013.300999999977648258209228515625,184905.7820000000065192580223083496094 607009.971999999950639903545379638672,184906.0039999999862629920244216918945 607005.978000000002793967723846435547,184908.4439999999885912984609603881836 606998.876999999978579580783843994141,184912.2149999999965075403451919555664 606994.217999999993480741977691650391,184919.3140000000130385160446166992188 606993.996000000042840838432312011719,184922.4200000000128056854009628295898 606995.770999999949708580970764160156,184925.7470000000030267983675003051758 606998.876999999978579580783843994141,184926.4130000000004656612873077392578 607002.871999999973922967910766601563,184925.7470000000030267983675003051758 607007.753000000026077032089233398438,184922.4200000000128056854009628295898 607012.190999999991618096828460693359,184917.0959999999904539436101913452148 607015.297999999951571226119995117188,184911.7710000000079162418842315673828 607015.297999999951571226119995117188,184907.5560000000114087015390396118164 607013.300999999977648258209228515625))",
+ "POLYGON((184861.1180000010062940418720245361328 606901.158000000054016709327697753906,184893.7870000000111758708953857421875 606898.482999998959712684154510498047,184925.0430000009946525096893310546875 606913.399999998975545167922973632813,184927.1739999990095384418964385986328 606951.758999999961815774440765380859,184912.8999999990046489983797073364258 606987.146000002045184373855590820313,184877.8700000010139774531126022338867 606989.232000001007691025733947753906,184885.1030000000027939677238464355469 607023.773999999975785613059997558594,184899.0579999980109278112649917602539 607022.743000000948086380958557128906,184906.0080000009911600500345230102539 607044.947999999043531715869903564453,184966.4649999999965075403451919555664 607025.020000000018626451492309570313,184968.4420000019890721887350082397461 606961.300000000977888703346252441406,185024.7679999989923089742660522460938 606947.401999998954124748706817626953,185024.5439999999944120645523071289063 606941.354999999981373548507690429688,185027.0069999989937059581279754638672 606937.322999999043531715869903564453,185030.3660000000090803951025009155273 606934.186999998986721038818359375,185035.5159999990137293934822082519531 606933.962999999988824129104614257813,185040.4420000019890721887350082397461 606935.530999999027699232101440429688,185042.905000000988366082310676574707 606939.114999998011626303195953369141,185088.3640000000013969838619232177734 606931.385000001988373696804046630859,185089.1389999990060459822416305541992 607015.508999999961815774440765380859,185095.1999999989930074661970138549805 607011.300000000977888703346252441406,185118.8269999999902211129665374755859 606995.545000002020969986915588378906,185126.813000001013278961181640625 606991.9950000010430812835693359375,185177.7270000019925646483898162841797 606973.798999998951330780982971191406,185181.4820000010076910257339477539063 606966.67599999904632568359375,185193.5709999990067444741725921630859 606977.795000002020969986915588378906,185193.710999998991610482335090637207 606960.300000000977888703346252441406,185189.3520000019925646483898162841797 606779.020000000018626451492309570313,185167.5150000010035000741481781005859 606783.844000000972300767898559570313,185086.9600000010104849934577941894531 606801.241000000038184225559234619141,185011.7069999990053474903106689453125 606817.809000000008381903171539306641,185000 606819.304000001051463186740875244141,184994.0340000019932631403207778930664 606819.793999999994412064552307128906,184976.3979999980074353516101837158203 606819.572000000975094735622406005859,184956.6539999989909119904041290283203 606817.1310000009834766387939453125,184934.9129999990109354257583618164063 606813.136999998008832335472106933594,184893.0969999989902134984731674194336 606804.927000000956468284130096435547,184884.4450000000069849193096160888672 606831.555000000051222741603851318359,184866.9189999999944120645523071289063 606883.480999998981133103370666503906,184861.1180000010062940418720245361328 606901.158000000054016709327697753906),(184907.5560000019904691725969314575195 607013.30099999904632568359375,184905.7820000019855797290802001953125 607009.971999999019317328929901123047,184906.0040000010048970580101013183594 607005.978000000002793967723846435547,184908.4439999980095308274030685424805 606998.876999999978579580783843994141,184912.2149999999965075403451919555664 606994.217999998014420270919799804688,184919.3139999989944044500589370727539 606993.995999998995102941989898681641,184922.420000001991866156458854675293 606995.771000002045184373855590820313,184925.7470000009925570338964462280273 606998.876999999978579580783843994141,184926.4129999990109354257583618164063 607002.872000001021660864353179931641,184925.7470000009925570338964462280273 607007.752999998978339135646820068359,184922.420000001991866156458854675293 607012.190999999991618096828460693359,184917.0960000010090880095958709716797 607015.297999999951571226119995117188,184911.7710000019869767129421234130859 607015.297999999951571226119995117188,184907.5560000019904691725969314575195 607013.30099999904632568359375))"
+ );
+
+
+ return;
+ */
+
+ // 1-6
+ test_get_turns<polygon, polygon>::apply("1", 6, case_1[0], case_1[1]);
+ test_get_turns<polygon, polygon>::apply("2", 8, case_2[0], case_2[1]);
+ test_get_turns<polygon, polygon>::apply("3", 4, case_3[0], case_3[1]);
+ test_get_turns<polygon, polygon>::apply("4", 12, case_4[0], case_4[1]);
+ test_get_turns<polygon, polygon>::apply("5", 17, case_5[0], case_5[1]);
+ test_get_turns<polygon, polygon>::apply("6", 3, case_6[0], case_6[1]);
+
+ // 7-12
+ test_get_turns<polygon, polygon>::apply("7", 2, case_7[0], case_7[1]);
+ test_get_turns<polygon, polygon>::apply("8", 2, case_8[0], case_8[1]);
+ test_get_turns<polygon, polygon>::apply("9", 1, case_9[0], case_9[1]);
+ test_get_turns<polygon, polygon>::apply("10", 3, case_10[0], case_10[1]);
+ test_get_turns<polygon, polygon>::apply("11", 1, case_11[0], case_11[1]);
+ test_get_turns<polygon, polygon>::apply("12", 8, case_12[0], case_12[1]);
+
+ // 13-18
+ test_get_turns<polygon, polygon>::apply("13", 2, case_13[0], case_13[1]);
+ test_get_turns<polygon, polygon>::apply("14", 2, case_14[0], case_14[1]);
+ test_get_turns<polygon, polygon>::apply("15", 2, case_15[0], case_15[1]);
+ test_get_turns<polygon, polygon>::apply("16", 4, case_16[0], case_16[1]);
+ test_get_turns<polygon, polygon>::apply("17", 2, case_17[0], case_17[1]);
+ test_get_turns<polygon, polygon>::apply("18", 4, case_18[0], case_18[1]);
+
+ // 19-24
+ test_get_turns<polygon, polygon>::apply("19", 2, case_19[0], case_19[1]);
+ test_get_turns<polygon, polygon>::apply("20", 3, case_20[0], case_20[1]);
+ test_get_turns<polygon, polygon>::apply("21", 3, case_21[0], case_21[1]);
+ test_get_turns<polygon, polygon>::apply("22", 1, case_22[0], case_22[1]);
+ test_get_turns<polygon, polygon>::apply("23", 2, case_23[0], case_23[1]);
+ test_get_turns<polygon, polygon>::apply("24", 1, case_24[0], case_24[1]);
+
+ // 25-30
+ test_get_turns<polygon, polygon>::apply("25", 1, case_25[0], case_25[1]);
+ test_get_turns<polygon, polygon>::apply("26", 1, case_26[0], case_26[1]);
+ test_get_turns<polygon, polygon>::apply("27", 2, case_27[0], case_27[1]);
+ test_get_turns<polygon, polygon>::apply("28", 2, case_28[0], case_28[1]);
+ test_get_turns<polygon, polygon>::apply("29", 2, case_29[0], case_29[1]);
+ test_get_turns<polygon, polygon>::apply("30", 2, case_30[0], case_30[1]);
+
+ // 31-36
+ test_get_turns<polygon, polygon>::apply("31", 1, case_31[0], case_31[1]);
+ test_get_turns<polygon, polygon>::apply("32", 1, case_32[0], case_32[1]);
+ test_get_turns<polygon, polygon>::apply("33", 1, case_33[0], case_33[1]);
+ test_get_turns<polygon, polygon>::apply("34", 2, case_34[0], case_34[1]);
+ test_get_turns<polygon, polygon>::apply("35", 1, case_35[0], case_35[1]);
+ test_get_turns<polygon, polygon>::apply("36", 3, case_36[0], case_36[1]);
+
+ // 37-42
+ test_get_turns<polygon, polygon>::apply("37", 3, case_37[0], case_37[1]);
+ test_get_turns<polygon, polygon>::apply("38", 3, case_38[0], case_38[1]);
+ test_get_turns<polygon, polygon>::apply("39", 4, case_39[0], case_39[1]);
+ test_get_turns<polygon, polygon>::apply("40", 3, case_40[0], case_40[1]);
+ test_get_turns<polygon, polygon>::apply("41", 5, case_41[0], case_41[1]);
+ test_get_turns<polygon, polygon>::apply("42", 5, case_42[0], case_42[1]);
+
+ // 43-48
+ test_get_turns<polygon, polygon>::apply("43", 4, case_43[0], case_43[1]);
+ test_get_turns<polygon, polygon>::apply("44", 4, case_44[0], case_44[1]);
+ test_get_turns<polygon, polygon>::apply("45", 4, case_45[0], case_45[1]);
+ test_get_turns<polygon, polygon>::apply("46", 4, case_46[0], case_46[1]);
+ test_get_turns<polygon, polygon>::apply("47", 5, case_47[0], case_47[1]);
+
+ // 49-54
+ test_get_turns<polygon, polygon>::apply("50", 4, case_50[0], case_50[1]);
+ test_get_turns<polygon, polygon>::apply("51", 3, case_51[0], case_51[1]);
+ test_get_turns<polygon, polygon>::apply("52", 8, case_52[0], case_52[1]);
+ // A touching point interior/ring exterior/ring can be represented in two ways:
+ test_get_turns<polygon, polygon>::apply("53a", 4, case_53[0], case_53[1]);
+ test_get_turns<polygon, polygon>::apply("53b", 4, case_53[0], case_53[2]);
+ test_get_turns<polygon, polygon>::apply("54aa", 13, case_54[0], case_54[2]);
+ test_get_turns<polygon, polygon>::apply("54ab", 13, case_54[0], case_54[3]);
+ test_get_turns<polygon, polygon>::apply("54ba", 13, case_54[1], case_54[2]);
+ test_get_turns<polygon, polygon>::apply("54bb", 13, case_54[1], case_54[3]);
+
+ test_get_turns<polygon, polygon>::apply("55", 12, case_55[0], case_55[1]);
+ test_get_turns<polygon, polygon>::apply("56", 9, case_56[0], case_56[1]);
+
+
+ // other
+ test_get_turns<polygon, polygon>::apply("many_situations", 31, case_many_situations[0], case_many_situations[1]);
+
+
+ // ticket#17
+ test_get_turns<polygon, box>::apply("ticket_17", 6, ticket_17[0], ticket_17[1]);
+
+ // GGL-mailing list
+ test_get_turns<polygon, polygon>::apply("ggl_list_20110306_javier",
+ 4,
+ ggl_list_20110306_javier[0], ggl_list_20110306_javier[1]);
+
+#ifdef _MSC_VER // gcc returns 14 for float
+ // test_get_turns<polygon, polygon>::apply("ggl_list_20110716_enrico",
+ // 13,
+ // ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1]);
+
+#endif
+
+ // pies
+ test_get_turns<polygon, polygon>::apply("pie_23_16_16", 3, pie_23_16_16[0], pie_23_16_16[1]);
+ test_get_turns<polygon, polygon>::apply("pie_16_4_12", 2, pie_16_4_12[0], pie_16_4_12[1]);
+ test_get_turns<polygon, polygon>::apply("pie_4_13_15", 3, pie_4_13_15[0], pie_4_13_15[1]);
+ test_get_turns<polygon, polygon>::apply("pie_16_2_15_0", 2, pie_16_2_15_0[0], pie_16_2_15_0[1]);
+ test_get_turns<polygon, polygon>::apply("pie_20_20_7_100", 3, pie_20_20_7_100[0], pie_20_20_7_100[1]);
+ test_get_turns<polygon, polygon>::apply("pie_23_23_3_2000", 5, pie_23_23_3_2000[0], pie_23_23_3_2000[1]);
+
+
+ // line-line
+ test_get_turns<linestring, linestring>::apply("lineline1", 3, line_line1[0], line_line1[1]);
+
+ // line-polygon
+ test_get_turns<linestring, polygon>::apply("line_poly1", 4, line_line1[0], case_1[1]);
+ test_get_turns<linestring, polygon>::apply("line_poly2", 4, line_line1[1], case_1[0]);
+ test_get_turns<polygon, linestring>::apply("poly_line", 4, case_1[1], line_line1[0]);
+}
+
+
+template <typename T>
+void test_ccw()
+{
+ typedef bg::model::point<T, 2, bg::cs::cartesian> P;
+ typedef bg::model::polygon<P, false, true> polygon;
+ typedef boost::tuple<int> Tuple;
+
+
+ test_get_turns<polygon, polygon>::apply("ccw_1",
+ 6,
+ ccw_case_1[0], ccw_case_1[1]);
+
+ test_get_turns<polygon, polygon>::apply("ccw_9",
+ 1,
+ case_9[0], case_9[1]);
+
+}
+
+template <typename T>
+void test_open()
+{
+ typedef bg::model::point<T, 2, bg::cs::cartesian> P;
+ typedef bg::model::polygon<P, true, false> polygon;
+ typedef boost::tuple<int> Tuple;
+
+ test_get_turns<polygon, polygon>::apply("open_1",
+ 6,
+ open_case_1[0], open_case_1[1]);
+
+ test_get_turns<polygon, polygon>::apply("open_9",
+ 1,
+ open_case_9[0], open_case_9[1]);
+}
+
+
+
+int test_main(int, char* [])
+{
+ test_all<float>();
+ test_all<double>();
+ test_ccw<double>();
+ test_open<double>();
+
+#if ! defined(_MSC_VER)
+ test_all<long double>();
+#endif
+
+#if defined(HAVE_TTMATH)
+ test_all<ttmath_big>();
+#endif
+ return 0;
+}
+
+#endif
diff --git a/libs/geometry/test/algorithms/overlay/get_turns.vcproj b/libs/geometry/test/algorithms/overlay/get_turns.vcproj
new file mode 100644
index 000000000..8f1b41c0b
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/get_turns.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="get_turns"
+ ProjectGUID="{B63116BF-0F0C-4374-A6CE-77061FBC34FF}"
+ RootNamespace="get_turns"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\get_turns"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\get_turns"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\get_turns.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/merge_intersection_points.vcproj b/libs/geometry/test/algorithms/overlay/merge_intersection_points.vcproj
new file mode 100644
index 000000000..00afc97f9
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/merge_intersection_points.vcproj
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="merge_intersection_points"
+ ProjectGUID="{EB8223BB-6989-4AC8-A72E-4E076FE04547}"
+ RootNamespace="merge_intersection_points"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\merge_intersection_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\merge_intersection_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\merge_intersection_points.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/overlay.sln b/libs/geometry/test/algorithms/overlay/overlay.sln
new file mode 100644
index 000000000..9bbaff6f2
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/overlay.sln
@@ -0,0 +1,61 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "traverse", "traverse.vcproj", "{6260214E-DB6F-4934-ADF7-DD2B1666171B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "self_intersection_points", "self_intersection_points.vcproj", "{06B6DCBB-AEDA-49FA-81D9-EA8959958EFC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "get_turn_info", "get_turn_info.vcproj", "{8D98821A-5033-4616-9AF4-2AEAA42D8456}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "get_turns", "get_turns.vcproj", "{B63116BF-0F0C-4374-A6CE-77061FBC34FF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "relative_order", "relative_order.vcproj", "{4C012342-116A-4E5E-9869-90389D5BBEBD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assemble", "assemble.vcproj", "{306E829F-ACEC-42D5-B1D4-2531B2F56EA3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ccw_traverse", "ccw_traverse.vcproj", "{BA789719-B2FC-405A-9258-E9E4ABCE1791}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select_rings", "select_rings.vcproj", "{029117F7-1D6A-4A05-9FB7-93E09751C909}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {6260214E-DB6F-4934-ADF7-DD2B1666171B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6260214E-DB6F-4934-ADF7-DD2B1666171B}.Debug|Win32.Build.0 = Debug|Win32
+ {6260214E-DB6F-4934-ADF7-DD2B1666171B}.Release|Win32.ActiveCfg = Release|Win32
+ {6260214E-DB6F-4934-ADF7-DD2B1666171B}.Release|Win32.Build.0 = Release|Win32
+ {06B6DCBB-AEDA-49FA-81D9-EA8959958EFC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {06B6DCBB-AEDA-49FA-81D9-EA8959958EFC}.Debug|Win32.Build.0 = Debug|Win32
+ {06B6DCBB-AEDA-49FA-81D9-EA8959958EFC}.Release|Win32.ActiveCfg = Release|Win32
+ {06B6DCBB-AEDA-49FA-81D9-EA8959958EFC}.Release|Win32.Build.0 = Release|Win32
+ {8D98821A-5033-4616-9AF4-2AEAA42D8456}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8D98821A-5033-4616-9AF4-2AEAA42D8456}.Debug|Win32.Build.0 = Debug|Win32
+ {8D98821A-5033-4616-9AF4-2AEAA42D8456}.Release|Win32.ActiveCfg = Release|Win32
+ {8D98821A-5033-4616-9AF4-2AEAA42D8456}.Release|Win32.Build.0 = Release|Win32
+ {B63116BF-0F0C-4374-A6CE-77061FBC34FF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B63116BF-0F0C-4374-A6CE-77061FBC34FF}.Debug|Win32.Build.0 = Debug|Win32
+ {B63116BF-0F0C-4374-A6CE-77061FBC34FF}.Release|Win32.ActiveCfg = Release|Win32
+ {B63116BF-0F0C-4374-A6CE-77061FBC34FF}.Release|Win32.Build.0 = Release|Win32
+ {4C012342-116A-4E5E-9869-90389D5BBEBD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4C012342-116A-4E5E-9869-90389D5BBEBD}.Debug|Win32.Build.0 = Debug|Win32
+ {4C012342-116A-4E5E-9869-90389D5BBEBD}.Release|Win32.ActiveCfg = Release|Win32
+ {4C012342-116A-4E5E-9869-90389D5BBEBD}.Release|Win32.Build.0 = Release|Win32
+ {306E829F-ACEC-42D5-B1D4-2531B2F56EA3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {306E829F-ACEC-42D5-B1D4-2531B2F56EA3}.Debug|Win32.Build.0 = Debug|Win32
+ {306E829F-ACEC-42D5-B1D4-2531B2F56EA3}.Release|Win32.ActiveCfg = Release|Win32
+ {306E829F-ACEC-42D5-B1D4-2531B2F56EA3}.Release|Win32.Build.0 = Release|Win32
+ {BA789719-B2FC-405A-9258-E9E4ABCE1791}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BA789719-B2FC-405A-9258-E9E4ABCE1791}.Debug|Win32.Build.0 = Debug|Win32
+ {BA789719-B2FC-405A-9258-E9E4ABCE1791}.Release|Win32.ActiveCfg = Release|Win32
+ {BA789719-B2FC-405A-9258-E9E4ABCE1791}.Release|Win32.Build.0 = Release|Win32
+ {029117F7-1D6A-4A05-9FB7-93E09751C909}.Debug|Win32.ActiveCfg = Debug|Win32
+ {029117F7-1D6A-4A05-9FB7-93E09751C909}.Debug|Win32.Build.0 = Debug|Win32
+ {029117F7-1D6A-4A05-9FB7-93E09751C909}.Release|Win32.ActiveCfg = Release|Win32
+ {029117F7-1D6A-4A05-9FB7-93E09751C909}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/algorithms/overlay/overlay_cases.hpp b/libs/geometry/test/algorithms/overlay/overlay_cases.hpp
new file mode 100644
index 000000000..c3e4f356c
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/overlay_cases.hpp
@@ -0,0 +1,711 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+
+#ifndef BOOST_GEOMETRY_TEST_OVERLAY_CASES_HPP
+#define BOOST_GEOMETRY_TEST_OVERLAY_CASES_HPP
+
+#include <string>
+
+// See powerpoint
+
+static std::string case_1[2] = {
+ "POLYGON((0 1,2 5,5 3,0 1))",
+ "POLYGON((3 0,0 3,4 5,3 0))" };
+
+static std::string ccw_case_1[2] = {
+ "POLYGON((0 1,5 3,2 5,0 1))",
+ "POLYGON((3 0,4 5,0 3,3 0))" };
+
+static std::string open_case_1[2] = {
+ "POLYGON((0 1,2 5,5 3))",
+ "POLYGON((3 0,0 3,4 5))" };
+
+
+static std::string case_2[2] = {
+ "POLYGON((0 2,2 5,5 3,3 0,0 2))",
+ "POLYGON((0 4,4 5,5 1,1 0,0 4))" };
+
+static std::string case_3[2] = {
+ "POLYGON((1 2,2 4,4 3,3 1,1 2))",
+ "POLYGON((1 1,1 4,4 4,4 1,1 1))" };
+
+
+static std::string case_4[2] = {
+ "POLYGON((0 2,2 5,5 3,3 0,0 2))",
+ "POLYGON((0 4,4 5,5 1,1 0,0 4),(1 1,2 1,2 2,1 2,1 1),(3 3,4 3,4 4,3 4,3 3))" };
+
+static std::string case_5[2] = {
+ "POLYGON((0 4,1 5,2.5 4,3.5 5,5 4,4 3,5 2,4 1,3.5 0,3 1,2.5 0,2 1,1.5 0,1 3.5,0.25 3,1 2.5,0 2,0 4))",
+ "POLYGON((0.5 0.5,0.5 4.5,4.5 4.5,4.5 0.5,0.5 0.5))"
+ };
+
+static std::string case_6[2] = {
+ "POLYGON((0 1,2 5,5 2,0 1))",
+ "POLYGON((1 3,2 5,5 2,1 3))" };
+
+static std::string case_7[2] = {
+ "POLYGON((0 1,1 3,5 2,0 1))",
+ "POLYGON((1 3,2 5,5 2,1 3))" };
+
+static std::string case_8[2] = {
+ "POLYGON((0 0,0 4,4 0,0 0))",
+ "POLYGON((1 3,4 4,3 1,1 3))" };
+
+static std::string case_9[2] = {
+ "POLYGON((0 0,0 4,4 0,0 0))",
+ "POLYGON((2 2,2 4,5 4,2 2))" };
+
+static std::string ccw_case_9[2] = {
+ "POLYGON((0 0,4 0,0 4,0 0))",
+ "POLYGON((2 2,5 4,2 4,2 2))" };
+
+static std::string open_case_9[2] = {
+ "POLYGON((0 0,0 4,4 0))",
+ "POLYGON((2 2,2 4,5 4))" };
+
+static std::string case_10[2] = {
+ "POLYGON((0 0,2 4,4 0,0 0))",
+ "POLYGON((1 2,2 5,3 2,2 4,1 2))" };
+
+static std::string case_11[2] = {
+ "POLYGON((0 0,0 4,4 0,0 0))",
+ "POLYGON((1 2,2 2,2 1,1 1))" };
+
+static std::string case_12[2] = {
+ "POLYGON((0 1,1 4,2 2,3 4,4 1,0 1))",
+ "POLYGON((0 3,2 4,4 3,0 3))" };
+
+static std::string case_13[2] = {
+ "POLYGON((0 1,1 2,3 0,0 1))",
+ "POLYGON((0 3,2 3,2 1,0 3))" };
+
+static std::string case_14[2] = {
+ "POLYGON((0 0,0 4,2 2,4 0,0 0))",
+ "POLYGON((1 3,4 4,3 1,1 3))" };
+
+static std::string case_15[2] = {
+ "POLYGON((0 0,0 4,1.5 2.5,2.5 1.5,4 0,0 0))",
+ "POLYGON((1 3,4 4,3 1,1 3))" };
+
+static std::string case_16[2] = {
+ "POLYGON((1 2,3 4,2 1,1 2))",
+ "POLYGON((1 0,1 2,2 1,3 4,2 3,3 5,4 0,1 0))" };
+
+static std::string case_17[2] = {
+ "POLYGON((0 0,0 4,4 0,0 0))",
+ "POLYGON((1 1,1 3,3 1,1 1))" };
+
+static std::string case_18[2] = {
+ "POLYGON((0 0,0 4,1.5 2.5,2.5 1.5,4 0,0 0))",
+ "POLYGON((1 1,1 3,3 1,1 1))" };
+
+static std::string case_19[2] = {
+ "POLYGON((2 0,1 3,5 2,2 0))",
+ "POLYGON((1 3,2 5,5 2,1 3))" };
+
+static std::string case_20[2] = {
+ "POLYGON((2 0,1 3,5 2,2 0))",
+ "POLYGON((2 0,1 3,5 2,2 0))" };
+
+static std::string case_21[2] = {
+ "POLYGON((1 0,0 5,5 2,1 0),(2 1,3 2,1 3,2 1))",
+ "POLYGON((2 1,1 3,3 2,2 1))" };
+
+static std::string case_22[2] = {
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((2 4,5 5,4 2,2 4))" };
+
+static std::string case_23[2] = {
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((3 3,4 2,1 1,3 3))" };
+
+static std::string case_24[2] = {
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((2 2,4 2,1 1,2 2))" };
+
+static std::string case_25[2] = {
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((3 1,4 2,5 0,3 1))" };
+
+static std::string case_26[2] = {
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((3 1,4 2,5 4,4 0,3 1))" };
+
+static std::string case_27[2] = {
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((1 1,4 2,5 0,1 1))" };
+
+static std::string case_28[2] = {
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((1 1,4 2,5 4,5 0,1 1))" };
+
+static std::string case_29[2] = {
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((4 4,5 1,4 2,1 1,4 4))" };
+
+static std::string case_30[2] = {
+ "POLYGON((1 0,0 3,2 2,3 3,1 0))",
+ "POLYGON((1 2,2 2,2 4,4 3,3 1,1 2))" };
+
+static std::string case_31[2] = {
+ "POLYGON((0 0,0 3,2 2,0 0))",
+ "POLYGON((4 1,2 2,3 3,4 1))" };
+
+static std::string case_32[2] = {
+ "POLYGON((0 0,0 3,2 2,0 0))",
+ "POLYGON((4 1,3 0,2 2,4 1))" };
+
+static std::string case_33[2] = {
+ "POLYGON((0 0,0 3,2 2,0 0))",
+ "POLYGON((3 3,3 0,2 2,3 3))" };
+
+static std::string case_34[2] = {
+ "POLYGON((2 0,0 3,4 2,2 0))",
+ "POLYGON((2 1,4 2,5 3,4 1,2 1))" };
+
+static std::string case_35[2] = {
+ "POLYGON((1 0,0 3,5 3,4 2,5 1,1 0))",
+ "POLYGON((2 2,4 2,4 1,2 2))" };
+
+static std::string case_36[2] = {
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((1 5,5 5,4 2,3 3,2 1,1 2,1 5))" };
+
+static std::string case_37[2] = {
+ "POLYGON((4 0,2 2,5 5,4 0))",
+ "POLYGON((0 2,4 3,2 2,4 1,0 2))" };
+
+static std::string case_38[2] = {
+ "POLYGON((4 0,3 3,2 2,4 5,5 2,4 0))",
+ "POLYGON((1 1,1 3,4 4,3 3,4 2,1 1))" };
+
+static std::string case_39[2] = {
+ "POLYGON((0 4,4 8,7 7,8 4,5 3,4 0,0 4))",
+ "POLYGON((0 4,4 8,5 5,8 4,7 1,4 0,0 4))" };
+
+static std::string case_40[2] = {
+ "POLYGON((0 1,1 2,2 1,3 2,4 1,5 2,4 0,2 0,0 1))",
+ "POLYGON((0 3,2 4,4 4,5 2,4 3,3 2,2 3,1 2,0 3))" };
+
+static std::string case_41[2] = {
+ "POLYGON((3 1,1 4,3 3.5,5 3,3 1))",
+ "POLYGON((3 1,1 4,5 3,4 2,3 1))" };
+
+static std::string case_42[2] = {
+ "POLYGON((3 1,1 4,3 3.5,5 3,5 3,3 1))",
+ "POLYGON((3 1,1 4,1 4,5 3,4 2,3 1))" };
+
+// keyholing
+static std::string case_43[2] = {
+ "POLYGON((1 2,1 1,2 1,2 2.25,3 2.25,3 0,0 0,0 3,3 3,2.75 2,1 2))",
+ "POLYGON((1.5 1.5,1.5 2.5,2.5 2.5,2.5 1.5,1.5 1.5))" };
+// self-tangency
+
+static std::string case_44[2] = {
+ "POLYGON((0 0,0 3,3 3,3 2,0 1.5,3 1,3 0,0 0))",
+ "POLYGON((1 1,1 2,2 2,2 1,1 1))" };
+// self-intersection
+
+static std::string case_45[2] = {
+ "POLYGON((0.5 0,0.5 3,3 3,3 2,0 1.5,3 1,3 0,0.5 0))",
+ "POLYGON((1 1,1 2,2 2,2 1,1 1))" };
+// self-tangent
+
+static std::string case_46[2] = {
+ "POLYGON((2 0,2 3,5 3,5 2,2 1.5,5 1,5 0,2 0))",
+ "POLYGON((1.5 1,1.5 2,2.5 2,2.5 1,1.5 1))" };
+// self-tangent
+
+static std::string case_47[2] = {
+ "POLYGON((2.5 0,2.5 3,5 3,5 2,2 1.5,5 1,5 0,2.5 0))",
+ "POLYGON((2 1,2 2,3 2,3 1,2 1))" };
+
+static std::string case_49[2] = {
+ "POLYGON((1 0,1 1,2 2,3 3,4 3,4 0,1 0))",
+ "POLYGON((0 2,2 5,5 2,5 0,2 0,2 2,0 2))" };
+
+
+// 50, collinear opposite
+static std::string case_50[2] = {
+ "POLYGON((0 0,0 3,2 3,4 3,4 0,0 0))",
+ "POLYGON((0 3,0 5,5 5,5 0,4 0,4 3,2 3,0 3))" };
+
+// 51, fit
+static std::string case_51[2] = {
+ "POLYGON((0 0,0 5,5 5,5 0,0 0),(4 1,3 4,1 2,4 1))",
+ "POLYGON((1 2,3 4,4 1,1 2))" };
+
+// 52, partially equal, touching each other
+static std::string case_52[2] = {
+ "POLYGON((0 0,1 4,3 1,4 4,1 4,5 5,5 0,0 0))",
+ "POLYGON((0 0,1 4,3 1,4 4,1 4,5 5,4 1,0 0))" };
+
+// 53, wrapping a box, self-touching
+static std::string case_53[3] = {
+ "POLYGON((2 2,2 3,3 3,3 2,2 2))",
+ // ST self-tangent ext. ring, ST_IsValid=false
+ "POLYGON((0 2,0 5,5 5,5 0,2 0,2 2,3 2,3 1,4 1,4 4,1 4,1 3,2 3,2 2,0 2))",
+ // IET tangent ext/int ring, ST_IsValid=true
+ "POLYGON((0 2,0 5,5 5,5 0,2 0,2 2,0 2),(1 3,2 3,2 2,3 2,3 1,4 1,4 4,1 4,1 3))"
+ };
+
+static std::string case_54[4] = {
+ // ST: self-tangent ext. ring
+ "POLYGON((2 2,2 3,4 3,4 0,1 0,1 2,2 2,2 1,3 1,3 2,2 2))",
+ // IET: tangent ext/int ring
+ "POLYGON((2 2,2 3,4 3,4 0,1 0,1 2,2 2),(2 1,3 1,3 2,2 2,2 1))",
+ // other like in case53
+ case_53[1], // ST
+ case_53[2] // IET
+ };
+
+static std::string case_55[4] = {
+ // ST: self-tangent ext. ring
+ "POLYGON((2 2,3 3,4 3,4 0,1 0,1 1,2 2,2 1,3 1,3 2,2 2))",
+ // IET: tangent ext/int ring
+ "POLYGON((2 2,3 3,4 3,4 0,1 0,1 1,2 2),(2 1,3 1,3 2,2 2,2 1))",
+ // ST: self-tangent ext. ring
+ "POLYGON((0 2,0 5,5 5,5 0,2 0,2 2,3 1,4 1,4 4,1 4,1 3,2 2,0 2))" ,
+ // IET: tangent ext/int ring
+ "POLYGON((0 2,0 5,5 5,5 0,2 0,2 2,0 2),(1 3,2 2,3 1,4 1,4 4,1 4,1 3))"
+
+ // B, not a 4-fold intersection
+ //"POLYGON((2 2,3 3,4 3,4 0,1 0,1 1,2 2),(2 1,3 1,3 2,2.0 1.9,2 1))",
+ //"POLYGON((0 2,0 5,5 5,5 0,2 0,2 2,0 2),(1 3,2.1 2.1,3 1,4 1,4 4,1 4,1 3))"
+ // C, not a 4-fold intersection,
+ //"POLYGON((2 2,3 3,4 3,4 0,1 0,1 1,2 2),(2 1,3 1,3 2,2.0 1.9,2 1))",
+ //"POLYGON((0 2,0 5,5 5,5 0,2 0,2 2,0 2),(1 3,1.9 1.9,3 1,4 1,4 4,1 4,1 3))"
+ };
+
+static std::string case_56[2] = {
+ "POLYGON((0 0,0 1,2 3,3 0,4 2,5 0,0 0))",
+ //"POLYGON((0 -1,0 1,2 3,3 0,4 2,5 -1,0 -1))",
+ //"POLYGON((0 1,0 4,5 4,5 0,3 0,4 1,4 3,2 3,2 1,3 0,0 0))"
+ "POLYGON((1 0,1 4,5 4,5 0,3 0,4 1,4 3,2 3,2 1,3 0,1 0))"
+ };
+
+static std::string case_57[2] = {
+ case_56[0],
+ //"POLYGON((0 2,4 5,5 1,0 2))"
+ //"POLYGON((0 -1,0 1,2 3,3 0,4 2,5 -1,0 -1))",
+ //"POLYGON((0 0,0 1,2 3,3 0,4 2,6 0,0 0))",
+ "POLYGON((0 0,4 5,5 0,0 0))"
+ };
+
+// Case 58, either one ring with self-tangencies defining holes,
+// or three inner rings tangent to outer ring
+static std::string case_58[3] = {
+ "POLYGON((3 3,3 4,4 4,4 3,3 3))",
+ // ST: self-tangent
+ "POLYGON((0 2,0 5,4 4,1 4,1 3,4 4,2 3,2 2,4 4,3 2,4 2,4 4,5 0,0 2))",
+ // IET: inner/ext tangency
+ "POLYGON((0 2,0 5,4 4,5 0,0 2),(4 4,1 4,1 3,4 4),(4 4,2 3,2 2,4 4),(4 4,3 2,4 2,4 4))"
+ };
+
+static std::string case_59[3] = {
+ "POLYGON((0.5 3,3.5 3.5,3 0.5,2 2,0.5 3))",
+ case_53[1], // ST: self-tangent
+ case_53[2] // IET: inner/ext tangency
+ };
+static std::string case_60[3] = {
+ "POLYGON((1 3,5 5,3 1,1 3))",
+ case_53[1], // ST: self-tangent
+ case_53[2] // IET: inner/ext tangency
+ };
+
+// 60-..., actually there are multi-polygons but expressed here using self-tangencies
+static std::string case_61[2] = {
+ "POLYGON((1 1,1 2,2 2,2 3,3 3,3 2,2 2,2 1,1 1))",
+ "POLYGON((1 2,1 3,2 3,2 4,3 4,3 3,2 3,2 2,1 2))"
+ };
+
+// 62..69 TODO, most are multi but can be expressed by self-tangent-polygon as well
+
+static std::string case_70[2] = {
+ "POLYGON((1 0,1 3,4 3,4 0,1 0),(2 1,3 1,3 2,2 2,2 1))",
+ "POLYGON((1 0,1 2,4 2,4 0,3 0,3 1,2 1,2 0,1 0))"
+ };
+
+static std::string case_71[2] = {
+ "POLYGON((0 0,0 3,1 3,1 1,3 1,3 2,2 2,2 3,3 3,3 2,4 2,4 0,0 0))",
+ "POLYGON((0 2,0 3,3 3,3 2,0 2))"
+ };
+
+static std::string case_72[2] = {
+ "POLYGON((0 3,4 4,3 0,3 3,2 1,1 2,3 3,0 3))",
+ "POLYGON((0 0,1 4,3 3,4 1,0 0))"
+ };
+
+static std::string case_79[2] = {
+ "POLYGON((0 0,0 5,5 5,5 3,2 3,2 2,5 2,5 0,0 0))",
+ "POLYGON((0 0,0 5,5 5,5 0,2 0,2 2,1 2,1 0,0 0))"
+ };
+
+static std::string case_many_situations[2] = {
+ "POLYGON((2 6,2 14,10 18,18 14,18 6,16 5,14 4,12 3,10 2,8 3,6 4,4 5,2 6))",
+ "POLYGON((2 6,2 7,2 8,2 9,2 10,2 11,2 12,1 14"
+ ",4 14,4 15,7 15,7 18,8 17,9 20,10 18"
+ ",10 15.5,11 17.5,12 17,11 15,12 14.5,13 16.5,14 18.5,15 18,14 16,15 15.5,16 17.5,18 14"
+ ",19 13,17 11,19 9,19 7"
+ ",17 5,16 5,15 4.5,13 3.5,11 2.5,10 2"
+ ",8 3,6 4,4 5,2 6))" };
+
+static std::string collinear_overlaps[2] = {
+ "POLYGON((0 2,0 4,2 4,2 5,0 5,0 7,2 7,2 8,6 8,6 7,8 7,8 5,6 5,6 4,8 4,8 2,6 2,6 1,2 1,2 2,0 2))",
+ "POLYGON((3 0,3 2,1 2,1 3,3 3,3 4,1 4,1 5,3 5,3 6,1 6,1 7,3 7,3 9,5 9,5 7,7 7,7 6,5 6,5 5,7 5,7 4,5 4,5 3,7 3,7 2,5 2,5 0,3 0))" };
+
+
+static std::string line_line1[2] = {
+ "LINESTRING(0 1,2 5,5 3)", "LINESTRING(3 0,0 3,4 5)"};
+
+
+
+// Pies
+static std::string pie_23_16_16[2] = {
+ "POLYGON((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,3828 2144,3690 1812,3472 1527,3187 1309,2855 1171,2499 1125,2144 1171,1812 1309,1527 1527,1309 1812,1171 2144,1125 2499,1171 2855,1309 3187,1527 3472,1812 3690,2500 2500))",
+ "POLYGON((2500 2500,1525 1937,1413 2208,1375 2499,1413 2791,1525 3062,1704 3295,1937 3474,2208 3586,2499 3625,2791 3586,3062 3474,3295 3295,3474 3062,3586 2791,3625 2500,3586 2208,2500 2500))"
+ };
+
+static std::string pie_16_4_12[2] = {
+ "POLYGON((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,3828 2144,3690 1812,3472 1527,3187 1309,2855 1171,2499 1125,2144 1171,1812 1309,1527 1527,2500 2500))",
+ "POLYGON((2500 2500,2500 1375,2208 1413,1937 1525,1704 1704,2500 2500))"
+ };
+
+static std::string pie_4_13_15[2] = {
+ "POLYGON((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,2500 2500))",
+ "POLYGON((2500 2500,1704 1704,1525 1937,1413 2208,1375 2499,1413 2791,1525 3062,1704 3295,1937 3474,2208 3586,2499 3625,2791 3586,3062 3474,3295 3295,2500 2500))"
+ };
+
+static std::string pie_16_2_15_0[2] = {
+ "POLYGON((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,3828 2144,3690 1812,3472 1527,3187 1309,2855 1171,2499 1125,2144 1171,1812 1309,1527 1527,2500 2500))",
+ "POLYGON((2500 2500,1704 1704,1525 1937,2500 2500))"
+ };
+
+
+// Shifted pies
+static std::string pie_20_20_7_100[2] = {
+ "POLYGON((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,3828 2144,3690 1812,3472 1527,3187 1309,2855 1171,2499 1125,2144 1171,1812 1309,1527 1527,1309 1812,1171 2144,1125 2499,1171 2855,2500 2500))",
+ "POLYGON((2500 2600,3586 2308,3474 2037,3295 1804,3062 1625,2791 1513,2499 1475,2208 1513,1937 1625,1704 1804,1525 2037,1413 2308,1375 2600,1413 2891,1525 3162,1704 3395,1937 3574,2208 3686,2499 3725,2791 3686,3062 3574,2500 2600))"
+ };
+
+static std::string pie_23_23_3_2000[2] = {
+ "POLYGON((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,3828 2144,3690 1812,3472 1527,3187 1309,2855 1171,2499 1125,2144 1171,1812 1309,1527 1527,1309 1812,1171 2144,1125 2499,1171 2855,1309 3187,1527 3472,1812 3690,2500 2500))",
+ "POLYGON((2500 3500,3295 4295,3474 4062,3586 3791,3625 3500,3586 3208,3474 2937,3295 2704,3062 2525,2791 2413,2499 2375,2208 2413,1937 2525,1704 2704,1525 2937,1413 3208,1375 3500,1413 3791,1525 4062,1704 4295,1937 4474,2208 4586,2499 4625,2791 4586,2500 3500))"
+ };
+
+static std::string pie_23_21_12_500[2] = {
+ "POLYGON((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,3828 2144,3690 1812,3472 1527,3187 1309,2855 1171,2499 1125,2144 1171,1812 1309,1527 1527,1309 1812,1171 2144,1125 2499,1171 2855,1309 3187,1527 3472,1812 3690,2500 2500))",
+ "POLYGON((2500 3000,2500 1875,2208 1913,1937 2025,1704 2204,1525 2437,1413 2708,1375 3000,1413 3291,1525 3562,1704 3795,1937 3974,2208 4086,2499 4125,2791 4086,3062 3974,3295 3795,3474 3562,3586 3291,3625 3000,3586 2708,3474 2437,2500 3000))"
+ };
+
+// Self-tangent pies (but as single-polygon, this one is NOT VALID and (therefore) (currently) NOT WORKING)
+static std::string pie_5_12_12_0_7s[2] =
+{
+ "POLYGON((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,2500 2500))",
+ "POLYGON((2500 2500,2500 1375,2208 1413,1937 1525,1704 1704,1525 1937,1413 2208,1375 2500,1413 2791,1525 3062,1704 3295,1937 3474,2208 3586,2500 2500,2791 3586,3062 3474,3295 3295,3474 3062,3586 2791,3625 2500,3586 2208,2500 2500))"
+};
+
+
+// Cases coming from High volume (hv) tests
+static std::string hv_1[2] = {
+ "POLYGON((24.995166778564453 50.011310577392578,46.630809783935547 37.494682312011719,46.661380767822266 12.499360084533691,25.003841400146484 0.020658308640122414,3.3419711589813232 12.491842269897461,3.3638687133789062 37.487174987792969,24.995166778564453 50.011310577392578))",
+ "POLYGON((25.025228500366211 49.992599487304688,46.6719970703125 37.482185363769531,46.631874084472656 12.480358123779297,24.974153518676758 -0.011088892817497253,3.3419976234436035 12.524576187133789,3.3529467582702637 37.526435852050781,25.025228500366211 49.992599487304688))"
+ };
+
+static std::string hv_2[2] = {
+ "POLYGON((24.988700866699219 49.986705780029297,46.643772125244141 37.5079345703125,46.645118713378906 12.514699935913086,25.010652542114258 0.00024537215358577669,3.3652000427246094 12.495694160461426,3.3445985317230225 37.488922119140625,24.988700866699219 49.986705780029297))",
+ "POLYGON((24.993022918701172 49.977996826171875,46.643772125244141 37.503200531005859,46.634654998779297 12.51569938659668,25.005790710449219 0.0029967525042593479,3.3705389499664307 12.504646301269531,3.348651647567749 37.492141723632812,24.993022918701172 49.977996826171875))"
+ };
+
+static std::string hv_3[2] = {
+ "POLYGON((25.007728576660156 49.988899230957031,46.667163848876953 37.501667022705078,46.637229919433594 12.500443458557129,24.993251800537109 -0.01356174610555172,3.3565254211425781 12.512973785400391,3.3410670757293701 37.514209747314453,25.007728576660156 49.988899230957031))",
+ "POLYGON((24.998353958129883 49.993511199951172,46.659591674804688 37.507373809814453,46.646518707275391 12.505118370056152,25.002584457397461 -0.0109936548396945,3.3565335273742676 12.501456260681152,3.3392288684844971 37.503707885742188,24.998353958129883 49.993511199951172))"
+ };
+
+static std::string hv_4[2] = {
+ "POLYGON((25.009130477905273 50.022209167480469,46.670387268066406 37.500617980957031,46.666873931884766 12.480625152587891,24.992231369018555 -0.017777863889932632,3.3260366916656494 12.495262145996094,3.3394229412078857 37.515254974365234,25.009130477905273 50.022209167480469))",
+ "POLYGON((25.00263786315918 50.019630432128906,46.669231414794922 37.507579803466797,46.666202545166016 12.487733840942383,24.997152328491211 -0.020060751587152481,3.3308455944061279 12.492485046386719,3.3333024978637695 37.5123291015625,25.00263786315918 50.019630432128906))"
+ };
+
+static std::string hv_5[2] = {
+ "POLYGON((24.987522125244141 49.997768402099609,46.643741607666016 37.509471893310547,46.654956817626953 12.510490417480469,25.011669158935547 -0.00019846600480377674,3.3563058376312256 12.489578247070313,3.3433761596679687 37.488559722900391,24.987522125244141 49.997768402099609))",
+ "POLYGON((25.005760192871094 50.008182525634766,46.648590087890625 37.491542816162109,46.655918121337891 12.489977836608887,24.994773864746094 0.0050580352544784546,3.3391191959381104 12.499494552612305,3.3574333190917969 37.501052856445312,25.005760192871094 50.008182525634766))"
+ };
+
+static std::string hv_6[2] = {
+ "POLYGON((25.011470794677734 50.017532348632813,42.678981781005859 42.661365509033203,50.017532348632813 24.986530303955078,42.661365509033203 7.3190178871154785,24.986530303955078 -0.019533095881342888,7.3190178871154785 7.336634635925293,-0.019533095881342888 25.011470794677734,7.336634635925293 42.678981781005859,25.011470794677734 50.017532348632813))",
+ "POLYGON((25.002880096435547 50.013965606689453,46.671913146972656 37.507381439208984,46.660655975341797 12.488155364990234,24.9951171875 -0.024483053013682365,3.3334629535675049 12.494877815246582,3.3299689292907715 37.514102935791016,25.002880096435547 50.013965606689453))"
+ };
+
+static std::string hv_7[2] = {
+ "POLYGON((24.983684539794922 49.995647430419922,46.643482208251953 37.513137817382813,46.654392242431641 12.51393985748291,25.014318466186523 -0.0027416276279836893,3.3589246273040771 12.487411499023438,3.3391971588134766 37.486602783203125,24.983684539794922 49.995647430419922))",
+ "POLYGON((24.990163803100586 49.9993896484375,46.655281066894531 37.512466430664062,46.654388427734375 12.506458282470703,25.007841110229492 -0.012621366418898106,3.3524465560913086 12.491152763366699,3.3338801860809326 37.497154235839844,24.990163803100586 49.9993896484375))"
+ };
+
+static std::string dz_1[2] = {
+ "POLYGON((30.526203155517578 56.781166076660156,38.987510681152344 58.710700988769531,41.042613983154297 50.279010772705078,48.390048980712891 45.660350799560547,43.881126403808594 38.245067596435547,45.810657501220703 29.783760070800781,37.378971099853516 27.728654861450195,32.760307312011719 20.381219863891602,25.345026016235352 24.890144348144531,16.883718490600586 22.960611343383789,14.828612327575684 31.392299652099609,7.481177806854248 36.010959625244141,11.990103721618652 43.426242828369141,10.060568809509277 51.887550354003906,18.492258071899414 53.942657470703125,23.110919952392578 61.290092468261719,30.526203155517578 56.781166076660156))",
+ "POLYGON((12.580197334289551 33.274467468261719,14.852641105651855 24.577714920043945,21.524574279785156 30.601236343383789,18.734457015991211 22.056488037109375,27.603805541992188 23.51667594909668,20.636968612670898 17.836828231811523,28.887777328491211 14.270085334777832,19.956142425537109 13.258448600769043,24.968837738037109 5.7971897125244141,16.908138275146484 9.7749528884887695,17.091224670410156 0.78807485103607178,12.460672378540039 8.4923257827758789,7.7560214996337891 0.83309894800186157,8.0257854461669922 9.8177928924560547,-0.072908863425254822 5.9179673194885254,5.0115232467651367 13.330527305603027,-3.9099369049072266 14.42827033996582,4.3748917579650879 17.915260314941406,-2.5368332862854004 23.662046432495117,6.3180174827575684 22.116373062133789,3.6104514598846436 30.687637329101563,10.223971366882324 24.600040435791016,12.580197334289551 33.274467468261719))"
+ };
+
+static std::string dz_2[2] = {
+ "POLYGON((24.587966918945313 61.027225494384766,32.1783447265625 62.988296508789063,34.655326843261719 55.550270080566406,41.730445861816406 52.173538208007812,38.846851348876953 44.883510589599609,42.096187591552734 37.748981475830078,35.201282501220703 34.018035888671875,33.104434967041016 26.46403694152832,25.42442512512207 28.037921905517578,18.962528228759766 23.599054336547852,14.090974807739258 29.741334915161133,6.2876262664794922 30.494592666625977,6.5039811134338379 38.331226348876953,1.0104535818099976 43.924152374267578,6.2134823799133301 49.788291931152344,5.6002583503723145 57.603889465332031,13.355405807495117 58.751640319824219,17.909420013427734 65.132911682128906,24.587966918945313 61.027225494384766))",
+ "POLYGON((43.551433563232422 47.905071258544922,46.384872436523438 39.57366943359375,53.589195251464844 44.627212524414063,50.984420776367188 36.221515655517578,59.783241271972656 36.075325012207031,52.735191345214844 30.806018829345703,59.767654418945313 25.51593017578125,50.968441009521484 25.395713806152344,53.548389434814453 16.982362747192383,46.359016418457031 22.057153701782227,43.500991821289063 13.734155654907227,40.667552947998047 22.065553665161133,33.463230133056641 17.012012481689453,36.068000793457031 25.417709350585938,27.269184112548828 25.563901901245117,34.317234039306641 30.833206176757812,27.284770965576172 36.123294830322266,36.083980560302734 36.243511199951172,33.504035949707031 44.6568603515625,40.693408966064453 39.582073211669922,43.551433563232422 47.905071258544922))"
+ };
+
+static std::string dz_3[2] = {
+ "POLYGON((20.813335418701172 73.060707092285156,22.815366744995117 61.968788146972656,31.383756637573242 69.291458129882813,28.001794815063477 58.539661407470703,38.991741180419922 61.041633605957031,31.000555038452148 53.093067169189453,41.894393920898437 50.201171875,31.124666213989258 46.876754760742188,39.426750183105469 39.253490447998047,28.345697402954102 41.314804077148438,32.154121398925781 30.706569671630859,23.300275802612305 37.681396484375,21.742572784423828 26.518407821655273,17.144247055053711 36.808895111083984,10.5772705078125 27.648460388183594,11.287883758544922 38.897186279296875,1.2160475254058838 33.837848663330078,7.0728073120117187 43.467861175537109,-4.1965517997741699 43.668655395507812,5.4646410942077637 49.473834991455078,-4.4205660820007324 54.888763427734375,6.8317971229553223 55.539215087890625,0.59532338380813599 64.927780151367187,10.861076354980469 60.274494171142578,9.7020368576049805 71.485885620117188,16.629419326782227 62.594875335693359,20.813335418701172 73.060707092285156))",
+ "POLYGON((1.6459450721740723 46.720386505126953,10.693820953369141 61.892372131347656,7.2385158538818359 44.568569183349609,23.921955108642578 50.3751220703125,10.139513969421387 39.325347900390625,26.652151107788086 33.049518585205078,8.9915294647216797 33.444084167480469,17.606916427612305 18.02239990234375,4.3317174911499023 29.676681518554687,1.0186206102371216 12.32512378692627,-1.6595441102981567 29.785955429077148,-15.35089111328125 18.623508453369141,-6.1788778305053711 33.720771789550781,-23.842140197753906 33.970470428466797,-7.1116366386413574 39.639987945556641,-20.481979370117188 51.184993743896484,-4.0213727951049805 44.773937225341797,-6.8426628112792969 62.212215423583984,1.6459450721740723 46.720386505126953))"
+ };
+
+static std::string dz_4[2] = {
+ "POLYGON((36.179050445556641 50.613166809082031,40.804176330566406 39.819438934326172,52.211421966552734 42.607097625732422,48.816398620605469 31.365650177001953,59.346733093261719 26.168684005737305,49.520126342773438 19.73951530456543,54.246284484863281 8.9896402359008789,42.586078643798828 10.381030082702637,39.296642303466797 -0.89176815748214722,31.258771896362305 7.6691346168518066,21.492900848388672 1.1480809450149536,20.83837890625 12.87275505065918,9.1656351089477539 14.154719352722168,16.200717926025391 23.557058334350586,8.0829076766967773 32.042194366455078,19.515800476074219 34.722743988037109,18.751338958740234 46.440761566162109,29.232465744018555 41.145256042480469,36.179050445556641 50.613166809082031))",
+ "POLYGON((20.486696243286133 60.650150299072266,24.282432556152344 49.304500579833984,34.362251281738281 55.748767852783203,30.764263153076172 44.3388671875,42.706855773925781 43.627620697021484,33.089447021484375 36.511661529541016,42.333145141601563 28.916570663452148,30.369846343994141 28.81260871887207,33.383872985839844 17.234743118286133,23.644252777099609 24.182485580444336,19.277351379394531 13.044195175170898,15.48161506652832 24.389842987060547,5.40179443359375 17.945577621459961,8.9997835159301758 29.355476379394531,-2.9428071975708008 30.06672477722168,6.6745977401733398 37.182682037353516,-2.5690991878509521 44.777774810791016,9.394200325012207 44.881736755371094,6.3801741600036621 56.459602355957031,16.119794845581055 49.511859893798828,20.486696243286133 60.650150299072266))"
+ };
+
+
+// ticket_17 is keyholed, so has a hole formed by an deliberate intersection
+// This will fail the intersection/traversal process
+static std::string ticket_17[2] = {
+ "POLYGON ((-122.28139163 37.37319149,-122.28100699 37.37273669,-122.28002186 37.37303123,-122.27979681 37.37290072,-122.28007349 37.37240493,-122.27977334 37.37220360,-122.27819720 37.37288580,-122.27714184 37.37275161,-122.27678628 37.37253167,-122.27766437 37.37180973,-122.27804382 37.37121453,-122.27687664 37.37101354,-122.27645829 37.37203386,-122.27604423 37.37249110,-122.27632234 37.37343339,-122.27760980 37.37391082,-122.27812478 37.37800320,-122.26117222 37.39121007,-122.25572289 37.39566631,-122.25547269 37.39564971,-122.25366304 37.39552993,-122.24919976 37.39580268,-122.24417933 37.39366907,-122.24051443 37.39094143,-122.23246277 37.38100418,-122.23606766 37.38141338,-122.24001587 37.37738940,-122.23666848 37.37609347,-122.23057450 37.37882170,-122.22679803 37.37807143,-122.22525727 37.37448817,-122.22523229 37.37443000,-122.23083199 37.37609347,-122.23033486 37.37777891,-122.23169030 37.37732117,-122.23229178 37.37709687,-122.23237761 37.37631249,-122.23297776 37.37438834,-122.23872850 37.37165986,-122.24044511 37.36934068,-122.24671067 37.36865847,-122.24825570 37.36981819,-122.25151719 37.36947713,-122.25357721 37.36756706,-122.26001451 37.36579354,-122.25615213 37.36545239,-122.25486458 37.36245083,-122.25357721 37.36108651,-122.25194642 37.36013139,-122.24885652 37.35958557,-122.24911401 37.35849399,-122.25357721 37.35808470,-122.25675286 37.35897159,-122.25855539 37.35753887,-122.26181687 37.35828939,-122.26713837 37.35897159,-122.26782510 37.36108651,-122.26662339 37.36456559,-122.27288911 37.36722601,-122.27366159 37.36531602,-122.27168740 37.36470213,-122.27391900 37.36374701,-122.27074326 37.36245083,-122.27134408 37.35951742,-122.27426240 37.36135926,-122.27709482 37.36115474,-122.27966974 37.36231438,-122.27958391 37.36463382,-122.27572152 37.36463382,-122.27563569 37.36524779,-122.27700899 37.36593000,-122.27709482 37.36763529,-122.27554978 37.36838573,-122.27667254 37.36931478,-122.27677932 37.36932073,-122.27769362 37.36853987,-122.27942490 37.36830803,-122.28178776 37.36677917,-122.28509559 37.36443500,-122.28845129 37.36413744,-122.29194403 37.36695946,-122.29382577 37.36726817,-122.29600414 37.36898512,-122.29733083 37.36995398,-122.29593239 37.37141436,-122.29416649 37.37075898,-122.29325026 37.37108436,-122.29652910 37.37311697,-122.29584237 37.37374461,-122.29537583 37.37573372,-122.29487677 37.37752502,-122.30923212 37.37593011,-122.31122484 37.38230086,-122.31467994 37.38092472,-122.31715663 37.38252181,-122.32307970 37.38166978,-122.31985618 37.37667694,-122.32210304 37.37580220,-122.32581446 37.37589532,-122.32401730 37.37331839,-122.32960417 37.37189020,-122.33465527 37.37331906,-122.33425328 37.37623680,-122.33620676 37.37726132,-122.33397986 37.37822382,-122.33358918 37.38036590,-122.33202637 37.37986918,-122.33147954 37.38101784,-122.33394080 37.38198017,-122.33545239 37.38587943,-122.33478058 37.38785697,-122.33386050 37.38723721,-122.33350041 37.38571137,-122.33122003 37.38548891,-122.33140008 37.38650606,-122.33366042 37.38817490,-122.33244019 37.39157602,-122.33298157 37.39419201,-122.33164013 37.39477028,-122.33202017 37.39518351,-122.33358038 37.39499282,-122.33376050 37.39597811,-122.33550067 37.39734478,-122.33556069 37.39481797,-122.33344040 37.39292676,-122.33638094 37.38892189,-122.34240644 37.38852719,-122.34906293 37.38726898,-122.35072321 37.39338769,-122.34910291 37.39445252,-122.34796272 37.39410291,-122.34449043 37.39640534,-122.34500223 37.39729709,-122.34936291 37.39670910,-122.35098322 37.39531066,-122.35364623 37.39554510,-122.35434369 37.39612111,-122.35798429 37.39600988,-122.35768430 37.39478621,-122.36334519 37.39206871,-122.36604726 37.39203267,-122.36778592 37.39335592,-122.36518870 37.40022011,-122.36554552 37.40247752,-122.36370519 37.40331974,-122.36270506 37.40530591,-122.36320512 37.40670418,-122.36149849 37.40851392,-122.36730580 37.41054938,-122.37263720 37.41378932,-122.37161871 37.42076600,-122.36566153 37.42006292,-122.36520547 37.42742106,-122.37165953 37.43661157,-122.35943972 37.44459022,-122.35356359 37.44600810,-122.33792254 37.45796329,-122.35228518 37.47478091,-122.35127080 37.48181199,-122.34867342 37.48487322,-122.34359717 37.48801082,-122.33388431 37.48677650,-122.33142321 37.48429747,-122.32929580 37.48473149,-122.32609609 37.48291144,-122.32344850 37.48228229,-122.31924364 37.48410234,-122.31677299 37.48114051,-122.31431751 37.47848973,-122.31259201 37.47682190,-122.31515972 37.47568196,-122.31691389 37.47360309,-122.31292494 37.46960081,-122.31130153 37.46937743,-122.30889894 37.47124987,-122.30612839 37.47011613,-122.30149630 37.46568378,-122.30064277 37.46363784,-122.29283821 37.45922376,-122.28630141 37.45415497,-122.28883099 37.44629920,-122.28316717 37.44197138,-122.27554148 37.42297597,-122.25597410 37.40553692,-122.25196579 37.40129593,-122.25012043 37.40049143,-122.24823207 37.39897758,-122.24754551 37.39740941,-122.24778582 37.39621607,-122.24934787 37.39599102,-122.25005170 37.39871849,-122.25222328 37.39863668,-122.25342491 37.39737529,-122.25520162 37.39667289,-122.25528737 37.39522726,-122.27747460 37.37809616,-122.27977493 37.37858717,-122.28157729 37.37920106,-122.28322534 37.37952846,-122.28416939 37.38092656,-122.28621223 37.37984219,-122.28638389 37.37613857,-122.28382607 37.37843722,-122.27930278 37.37718220,-122.28196361 37.37652740,-122.28295058 37.37568167,-122.28216101 37.37523148,-122.28114822 37.37543608,-122.27934569 37.37528613,-122.27996369 37.37448121,-122.28104521 37.37454944,-122.28185197 37.37422883,-122.28290767 37.37474038,-122.28376597 37.37467224,-122.28428104 37.37399012,-122.28402346 37.37338989,-122.28610922 37.37364914,-122.28651264 37.37327388,-122.28672722 37.37207343,-122.28628398 37.37205448,-122.28574460 37.37166682,-122.28479711 37.37200981,-122.28327731 37.37137228,-122.28285511 37.37100700,-122.28279409 37.37125669,-122.28315527 37.37173756,-122.28321872 37.37220569,-122.28187007 37.37231918,-122.28193109 37.37294908,-122.28139163 37.37319149))",
+ "BOX(-122.280 37.377,-122.277 37.379)"};
+
+static std::string snl_1[2] = {
+ "POLYGON((184913.4512 606985.7794,184912.9 606987.146,184904.4135 606987.6514,184901.8476 607014.5934,184916.3978 607021.0602,184927.7148 607008.1264,184926.0981 606998.4262,184913.4512 606985.7794),(184907.556 607013.301,184905.782 607009.972,184906.004 607005.978,184908.444 606998.877,184912.215 606994.218,184919.314 606993.996,184922.42 606995.771,184925.747 606998.877,184926.413 607002.872,184925.747 607007.753,184922.42 607012.191,184917.096 607015.298,184911.771 607015.298,184907.556 607013.301))",
+ "POLYGON((184861.118 606901.158,184893.787 606898.483,184925.043 606913.4,184927.174 606951.759,184912.9 606987.146,184877.87 606989.232,184885.103 607023.774,184899.058 607022.743,184906.008 607044.948,184966.465 607025.02,184968.442 606961.3,185024.768 606947.402,185024.544 606941.355,185027.007 606937.323,185030.366 606934.187,185035.516 606933.963,185040.442 606935.531,185042.905 606939.115,185088.364 606931.385,185089.139 607015.509,185095.2 607011.3,185118.827 606995.545,185126.813 606991.995,185177.727 606973.799,185181.482 606966.676,185193.571 606977.795,185193.711 606960.3,185189.352 606779.02,185167.515 606783.844,185086.96 606801.241,185011.707 606817.809,185000 606819.304,184994.034 606819.794,184976.398 606819.572,184956.654 606817.131,184934.913 606813.137,184893.097 606804.927,184884.445 606831.555,184866.919 606883.481,184861.118 606901.158),(184907.556 607013.301,184905.782 607009.972,184906.004 607005.978,184908.444 606998.877,184912.215 606994.218,184919.314 606993.996,184922.42 606995.771,184925.747 606998.877,184926.413 607002.872,184925.747 607007.753,184922.42 607012.191,184917.096 607015.298,184911.771 607015.298,184907.556 607013.301))"};
+
+
+// Isovist (submitted by Brandon during Formal Review)
+static std::string isovist[2] =
+ {
+ "POLYGON((37.29449462890625 1.7902572154998779, 46.296027072709599 -2.4984308554828116, 45.389434814453125 -4.5143837928771973, 47.585065917176543 -6.1314922196594779, 46.523914387974358 -8.5152102535033496, 42.699958801269531 -4.4278755187988281, 42.577877044677734 -4.4900407791137695, 42.577911376953125 -4.4901103973388672, 40.758884429931641 -5.418975830078125, 40.6978759765625 -5.4500408172607422, 41.590042114257813 -7.2021245956420898, 57.297810222148939 -37.546793343968417, 50.974888957147442 -30.277285722290763, 37.140213012695313 1.3446992635726929, 37.000419616699219 1.664225697517395, 37.29449462890625 1.7902572154998779))",
+ "POLYGON((43.644271850585938 0.96149998903274536,43.764598846435547 0.93951499462127686,49.071769542946825 0.61489892713413252,48.43512638981781 -0.81299959072453376,47.830955505371094 -0.69758313894271851,47.263670054709685 -1.784876824891044,46.695858001708984 -1.6093428134918213,45.389434814453125 -4.5143837928771973,47.604561877161387 -6.087697464505224,46.559533858616469 -8.435196445683264,42.699958801269531 -4.4278755187988281,42.577877044677734 -4.4900407791137695,42.577911376953125 -4.4901103973388672,40.758884429931641 -5.418975830078125,40.6978759765625 -5.4500408172607422,41.590042114257813 -7.2021245956420898,57.524304765518266 -37.807195733984784,41.988733475572282 -19.945838749437218,41.821544647216797 -19.211688995361328,40.800632476806641 -17.208097457885742,39.966808319091797 -17.625011444091797,38.823680877685547 -16.296066284179688,37.326129913330078 -17.190576553344727,35.963497161865234 -15.476018905639648,35.656356811523438 -15.66030216217041,34.931102752685547 -16.223842620849609,34.634240447128811 -15.85007183479255,34.886280059814453 -14.120697975158691,34.658355712890625 -13.81736946105957,34.328716278076172 -13.992490768432617,33.598796844482422 -14.546377182006836,33.164891643669634 -14.000060288415174,33.566280364990234 -12.450697898864746,33.339523315429688 -12.147735595703125,32.998821258544922 -12.323249816894531,32.274600982666016 -12.879127502441406,31.682494778186321 -12.133624901803865,32.226280212402344 -10.790698051452637,32.000633239746094 -10.488097190856934,31.669155120849609 -10.653837203979492,30.947774887084961 -11.208560943603516,30.207040612748258 -10.275926149505661,30.896280288696289 -9.1206979751586914,30.670633316040039 -8.8180980682373047,30.339155197143555 -8.9838371276855469,29.619997024536133 -9.5368013381958008,29.135100397190627 -8.9262827849488211,32.718830108642578 -4.3281683921813965,32.708168029785156 -2.3611698150634766,32.708126068115234 -2.3611700534820557,32.708126068115234 -2.3611266613006592,30.501169204711914 -2.3718316555023193,27.069889344709196 -4.2926591211028242,26.472516656201325 -3.5380830513658776,36.954700469970703 1.2597870826721191,37.140213012695313 1.3446992635726929,37.000419616699219 1.664225697517395,37.29449462890625 1.7902572154998779,37.43402099609375 1.470055103302002,51.370888500897557 7.4163459734570729,51.20102152843122 7.1738039562841562,42.721500396728516 3.6584999561309814,42.721500396728516 2.2342472076416016,42.399410247802734 1.4956772327423096,43.644271850585938 0.96149998903274536))"
+ };
+
+static std::string ggl_list_20110306_javier[2] =
+ {
+ "POLYGON((-2 2,2002 2,2002 -2002,-2 -2002,-2 2),(0 -147.00000000000003,0 -2000,2000 -2000,2000 0,104 0,440 -240,400 -280,0 -147.00000000000003))",
+ "POLYGON((359.99000000000001 -280,0 -182,0 -147,400.00999999999999 -280,359.99000000000001 -280))"
+ };
+
+static std::string ggl_list_20110307_javier[2] =
+ {
+ "POLYGON((-2 2, 1842 2, 1842 -2362, -2 -2362, -2 2), (0 0, 0 -2360, 1840 -2360, 1840 0, 0 0))",
+ // "POLYGON((-0.01 -1960, 0 -1960, 0 -1880, 0.01 -1960, -0.01 -1960))"
+ "POLYGON ((-0.01 -1960, 80.01 -1960, 0 -1880, -0.01 -1960))"
+ };
+
+
+static std::string ggl_list_20110627_phillip[2] =
+ {
+ "POLYGON((537.99678544791459 124.30517362077681,437.36539413622404 142.02728895075373,456.33031803043468 249.50296671450121,556.96217263181723 231.78347688272990,537.99678544791459 124.30517362077681))",
+ "POLYGON((437.35 142.03,461.94 281.32,564.5 263.26,539.9 123.97,437.35 142.03))"
+ };
+
+static std::string ggl_list_20110716_enrico[2] =
+ {
+ "POLYGON((1.83691e-014 -300,-259.808 -150,-259.808 150,-5.51073e-014 300,259.808 150,259.808 -150,9.18455e-014 -300,1.83691e-014 -300),(7.65379e-014 -250,216.506 -125,216.506 125,-4.59227e-014 250,-216.506 125,-216.506 -125,1.53076e-014 -250,7.65379e-014 -250))",
+ "POLYGON((1.83691e-014 -300,-259.808 -150,-216.506 -125,-216.506 125,-259.808 150,-5.51073e-014 300,-4.59227e-014 250,216.506 125,259.808 150,259.808 -150,216.506 -125,7.65379e-014 -250,9.18455e-014 -300,1.83691e-014 -300),(6.12303e-014 -200,173.205 -100,173.205 100,-3.67382e-014 200,-173.205 100,-173.205 -100,1.22461e-014 -200,6.12303e-014 -200))"
+ };
+
+
+// Send on ggl-list by Christoph/Angus at 2011-08-19/20
+// This polygon combination fails to union in <float> but do in <double> or <ttmath>
+// It had previosly an error which has been fixed at 2011-08-30
+static std::string ggl_list_20110820_christophe[2] =
+{
+ "POLYGON((17.763942722600319 32.23605727739968,19.192448808558737 30.807551191441263,16.000000000000000 30.000000000000000,17.763942722600319 32.236057277399681))",
+ "POLYGON((0.24806946917841693 26.015444246572663,31.751930530821582 33.984555753427337,32.248069469178418 30.015444246572663,0.24806946917841693 26.015444246572663))"
+};
+
+
+// GEOS "TestOverlay" test.
+// Note that the first one WAS invalid and is made valid using SQL Server 2008 Spatial MakeValid() function
+static std::string geos_1_test_overlay[2] =
+ {
+ // Original: POLYGON((5417148.108 5658342.603,5417139.016 5658338.009,5417126.791 5658331.833,5417116.292 5658327.518,5417112.871 5658325.598,5417110.25 5658324.127,5417106.071 5658321.781,5417104.226 5658320.745,5417093.266 5658315.008,5417091.265 5658313.961,5417085.335 5658310.857,5417060.44 5658326.26,5417064.68 5658327.52,5417088.83 5658336.46,5417088.52 5658337.31,5417102.92 5658342.65,5417103.26 5658341.83,5417111.76 5658345.51,5417121.662 5658349.583,5417121.878 5658349.672,5417125.217 5658351.119,5417131.761 5658353.388,5417137.589 5658356.276,5417142.166 5658359.67,5417146.599 5658364.988,5417151.395 5658370.641,5417150.853 5658371.392,5417152.59741167 5658373.52811061,5417154.92 5658376.37,5417155.18955743 5658376.89699992,5417154.919 5658376.371,5417155.814 5658378.111,5417157.051 5658380.297,5417158.004 5658382.304,5417159.014 5658384.47,5417159.775 5658386.619,5417160.629 5658389.278,5417161.5 5658399.49,5417160.773 5658404.194,5417159.41 5658413.02,5417158.853 5658414.442,5417153.671 5658427.659,5417153.67051161 5658427.6586943,5417153.67 5658427.66,5417152.73 5658427.07,5417149.993 5658436.599,5417148.81 5658439.42,5417149.233 5658439.67,5417148.36 5658440.81,5417146.41 5658446.6,5417144.321 5658453.127,5417144.32092232 5658453.13043826,5417154.59 5658458.01,5417154.99551047 5658455.8409905,5417155.446 5658453.413,5417157.23981414 5658448.75748237,5417157.22660892 5658448.57861162,5417157.22660849 5658448.57860592,5417157.22660865 5658448.57860812,5417157.128 5658447.265,5417157.64950997 5658446.06368023,5417157.64950961 5658446.06368108,5417158.314 5658444.533,5417172.322 5658417.957,5417174.99 5658418.57,5417175.23 5658417.74,5417176.696 5658412.61,5417177.875 5658408.488,5417178.76 5658405.39,5417178.1 5658393.55,5417178.08 5658393.36,5417177.11 5658384.95,5417178.151 5658384.915,5417178.14836289 5658384.91508866,5417178.12 5658384.83,5417177.91415246 5658383.81114117,5417176.927 5658378.944,5417176.603 5658377.341,5417176.73975922 5658378.01762048,5417176.6 5658377.34,5417176.51210558 5658376.89535766,5417176.428 5658376.483,5417175.235 5658370.602,5417171.577 5658362.886,5417170.762 5658360.107,5417168.522 5658357.989,5417166.042 5658355.047,5417164.137 5658352.264,5417162.642 5658351.593,5417160.702 5658350.843,5417160.05417889 5658350.5823586,5417158.82 5658350.09,5417158.82103105 5658350.0862195,5417159.50373263 5658350.36089455,5417158.818 5658350.085,5417159.055 5658349.214,5417155.754 5658347.679,5417156.78066321 5658348.15640928,5417155.7525011 5658347.6811561,5417155.161 5658348.532,5417149.028 5658343.237,5417152.26877967 5658346.03496647,5417149.03 5658343.24,5417148.78133339 5658343.06701453,5417148.108 5658342.603))
+ "POLYGON((5417085.33499 5658310.85699,5417060.44 5658326.26001,5417064.67999 5658327.52002,5417088.82999 5658336.46002,5417088.51999 5658337.31,5417102.92001 5658342.65002,5417103.26001 5658341.83002,5417111.76001 5658345.51001,5417121.66199 5658349.58301,5417121.87799 5658349.672,5417125.21701 5658351.11902,5417131.76099 5658353.388,5417137.58899 5658356.276,5417142.16599 5658359.66998,5417146.599 5658364.98798,5417151.39499 5658370.64099,5417150.853 5658371.39203,5417152.59741 5658373.52814,5417154.92001 5658376.37,5417155.18806 5658376.89407,5417155.814 5658378.11102,5417157.05099 5658380.297,5417158.004 5658382.30402,5417159.01401 5658384.46997,5417159.77499 5658386.61902,5417160.629 5658389.27802,5417161.5 5658399.48999,5417160.77301 5658404.19397,5417159.41 5658413.02002,5417158.853 5658414.44202,5417153.67099 5658427.659,5417153.6705 5658427.65869,5417153.67001 5658427.65997,5417152.73001 5658427.07001,5417149.99301 5658436.599,5417148.81 5658439.41998,5417149.233 5658439.66998,5417148.35999 5658440.81,5417146.41 5658446.59998,5417144.32101 5658453.12701,5417144.32092 5658453.13043,5417154.59 5658458.01001,5417154.99551 5658455.841,5417155.44601 5658453.41302,5417157.23981 5658448.75751,5417157.22662 5658448.57861,5417157.12799 5658447.26501,5417157.64951 5658446.06366,5417158.314 5658444.53302,5417172.32199 5658417.95697,5417174.98999 5658418.57001,5417175.23001 5658417.73999,5417176.69601 5658412.60999,5417177.875 5658408.48798,5417178.76001 5658405.39001,5417178.10001 5658393.54999,5417178.07999 5658393.35999,5417177.10999 5658384.95001,5417178.14837 5658384.91507,5417178.12 5658384.83002,5417177.91415 5658383.81116,5417176.927 5658378.94397,5417176.603 5658377.341,5417176.73975 5658378.01764,5417176.60001 5658377.34003,5417176.51212 5658376.89539,5417176.42801 5658376.48297,5417175.23499 5658370.60199,5417171.577 5658362.88599,5417170.76199 5658360.10699,5417168.522 5658357.98901,5417166.04199 5658355.047,5417164.13699 5658352.26398,5417162.642 5658351.59302,5417160.702 5658350.84302,5417160.05417 5658350.58234,5417158.82001 5658350.09003,5417158.82104 5658350.08625,5417158.81799 5658350.08502,5417159.05499 5658349.21399,5417155.754 5658347.67902,5417156.78067 5658348.15643,5417155.7525 5658347.68115,5417155.16101 5658348.53198,5417149.02802 5658343.237,5417152.26877 5658346.03497,5417149.03 5658343.23999,5417148.78134 5658343.06702,5417148.108 5658342.60303,5417139.01599 5658338.00897,5417126.79099 5658331.83301,5417116.29199 5658327.51801,5417112.871 5658325.59802,5417110.25 5658324.12701,5417106.07101 5658321.78101,5417104.22601 5658320.745,5417093.26599 5658315.008,5417091.26501 5658313.961,5417085.33499 5658310.85699))",
+ "POLYGON((5417148.36 5658440.81,5417146.41 5658446.6,5417144.321 5658453.127,5417144.32092 5658453.13044,5417154.59 5658458.01,5417154.99551 5658455.84099,5417155.446 5658453.413,5417157.23981 5658448.75748,5417157.22661 5658448.57861,5417157.128 5658447.265,5417157.64951 5658446.06368,5417158.31 5658444.53,5417172.32 5658417.96,5417172.32037 5658417.96009,5417172.322 5658417.957,5417174.99 5658418.57,5417175.23 5658417.74,5417176.696 5658412.61,5417177.875 5658408.488,5417178.76 5658405.39,5417178.1 5658393.55,5417178.08 5658393.36,5417177.11 5658384.95,5417178.14836 5658384.91509,5417178.12 5658384.83,5417177.91415 5658383.81114,5417176.927 5658378.944,5417176.73976 5658378.01762,5417176.6 5658377.34,5417176.51211 5658376.89536,5417176.428 5658376.483,5417175.235 5658370.602,5417171.577 5658362.886,5417171.26172 5658361.81094,5417170.76 5658360.11,5417168.52 5658357.99,5417166.04 5658355.05,5417165.25343 5658353.89499,5417164.137 5658352.264,5417162.642 5658351.593,5417160.702 5658350.843,5417160.05418 5658350.58236,5417158.82 5658350.09,5417158.82103 5658350.08622,5417158.818 5658350.085,5417159.055 5658349.214,5417156.78066 5658348.15641,5417155.7525 5658347.68116,5417155.161 5658348.532,5417152.26878 5658346.03497,5417149.03 5658343.24,5417148.78133 5658343.06701,5417148.108 5658342.603,5417139.016 5658338.009,5417126.791 5658331.833,5417121.76604 5658329.76779,5417116.29 5658327.52,5417112.87 5658325.6,5417110.25 5658324.13,5417106.60319 5658322.07976,5417106.071 5658321.781,5417105.81727 5658321.63853,5417104.23 5658320.75,5417093.61267 5658315.18946,5417093.266 5658315.008,5417091.265 5658313.961,5417085.9075 5658311.15667,5417085.34 5658310.86,5417060.44 5658326.26,5417064.68 5658327.52,5417088.83 5658336.46,5417088.52 5658337.31,5417102.92 5658342.65,5417103.26 5658341.83,5417111.76 5658345.51,5417121.66 5658349.58,5417121.88 5658349.67,5417125.22 5658351.12,5417125.33012 5658351.15822,5417131.761 5658353.388,5417137.589 5658356.276,5417139.98755 5658358.0546,5417142.17 5658359.67,5417145.96673 5658364.22951,5417146.599 5658364.988,5417147.11101 5658365.5915,5417151.4 5658370.64,5417151.13021 5658371.0079,5417150.853 5658371.392,5417152.5974 5658373.5281,5417154.92 5658376.37,5417155.18956 5658376.897,5417155.814 5658378.111,5417157.051 5658380.297,5417158.004 5658382.304,5417159.014 5658384.47,5417159.36624 5658385.46469,5417159.78 5658386.62,5417160.63 5658389.28,5417161.5 5658399.49,5417160.773 5658404.194,5417159.41 5658413.02,5417158.853 5658414.442,5417153.671 5658427.659,5417153.67051 5658427.65869,5417153.67 5658427.66,5417152.73 5658427.07,5417149.993 5658436.599,5417148.81 5658439.42,5417149.233 5658439.67,5417148.36 5658440.81))"
+ };
+
+// Coming from "robustness.xml"
+static std::string geos_2[2] =
+ {
+ "POLYGON((742605.987032656 5087763.72510381,742599.903121688 5087760.56016809,742598.666141033 5087762.50894352,742591.100910753 5087758.50480931,742586.861672536 5087766.63211263,742591.417801844 5087769.04526206,742592.428792606 5087767.35034731,742601.541294342 5087772.18101105,742605.987032656 5087763.72510381))",
+ "POLYGON((742601.541294537 5087772.18101068,742592.428792606 5087767.35034731,742589.944404072 5087771.51539701,742583.880455986 5087782.54873438,742582.81550675 5087784.27809355,742583.216887765 5087784.43459684,742582.99081514 5087785.0349637,742592.341351823 5087789.67654,742593.375823205 5087787.7060691,742599.28794443 5087776.4640487,742601.541294537 5087772.18101068))"
+ };
+
+// Coming from "robustness.xml"
+static std::string geos_3[2] =
+ {
+ "POLYGON ((613697.0000000041909516 2369267.9999981997534633, 613797.0000000043073669 2368322.9999981978908181, 613643.0000000041909516 2367807.9999981969594955, 613674.0000000041909516 2367405.9999981969594955, 613400.0000000041909516 2367299.9999981955625117, 613200.0000000040745363 2366813.9999981950968504, 613252.0000000040745363 2366474.9999981927685440, 613094.0000000040745363 2366400.9999981927685440, 612695.0000000039581209 2365506.9999981909058988, 612326.0000000038417056 2365402.9999981909058988, 612145.0000000037252903 2365470.9999981913715601, 612061.0000000037252903 2365967.9999981918372214, 611724.0000000036088750 2366168.9999981927685440, 611334.0000000034924597 2366316.9999981927685440, 610743.0000000033760443 2366221.9999981932342052, 610174.0000000031432137 2366305.9999981927685440, 609973.0000000031432137 2367066.9999981955625117, 609073.0000000027939677 2367938.9999981974251568, 609061.0000000027939677 2368332.9999981974251568, 609151.0000000027939677 2368684.9999981992878020, 608919.0000000027939677 2368811.9999982002191246, 608801.0000000026775524 2369192.9999982002191246, 609161.0000000027939677 2369096.9999982006847858, 609161.0000000027939677 2369509.9999982025474310, 609857.0000000030267984 2369498.9999982011504471, 609762.0000000030267984 2369689.9999982020817697, 610796.0000000033760443 2369794.9999982025474310, 611332.0000000034924597 2370097.9999982025474310, 613149.0000000040745363 2370460.9999982034787536, 613613.0000000041909516 2369720.9999982016161084, 613697.0000000041909516 2369267.9999981997534633))",
+ "POLYGON ((607216.0000000019790605 2370623.9999982002191246, 608128.0000000019790605 2370312.9999982002191246, 608317.0000000030267984 2370101.9999982002191246, 608328.0000000030267984 2369868.9999982002191246, 608644.0000000030267984 2369847.9999982002191246, 608801.0000000030267984 2369192.9999982002191246, 608919.0000000030267984 2368811.9999982002191246, 609151.0000000030267984 2368684.9999982002191246, 609061.0000000030267984 2368332.9999982002191246, 608602.0000000030267984 2368124.9999982002191246, 607980.0000000019790605 2367585.9999982002191246, 607295.0000000019790605 2367062.9999981899745762, 606251.0000000019790605 2366697.9999981899745762, 605456.0000000019790605 2367679.9999982002191246, 605108.0000000019790605 2368377.9999982002191246, 604906.0000000019790605 2369083.9999982002191246, 604191.0000000010477379 2369719.9999982002191246, 604107.0000000010477379 2370057.9999982002191246, 604264.0000000010477379 2370397.9999982002191246, 604141.0000000010477379 2370768.9999982002191246, 604561.0000000010477379 2370448.9999982002191246, 604940.0000000019790605 2370406.9999982002191246, 605460.0000000019790605 2370792.9999982002191246, 605942.0000000019790605 2370945.9999982099980116, 606364.0000000019790605 2370892.9999982002191246, 606881.0000000019790605 2370988.9999982002191246, 607216.0000000019790605 2370623.9999982002191246))"
+ };
+
+// Coming from "TestRobustOverlayFixed.xml"
+static std::string geos_4[2] =
+ {
+ "POLYGON ((545 317, 617 379, 581 321, 545 317))",
+ "POLYGON ((484 290, 558 359, 543 309, 484 290))"
+ };
+
+static std::string ticket_5103[2] =
+ {
+ "POLYGON((-92810838 3618230,-94606872 1822196,-94999302 2214626,-93203268 4010660,-92810838 3618230))",
+ "POLYGON((-95269304 222758,-95260668 419862,-95234760 615696,-95192088 808228,-95132906 996442,-95057214 1178814,-94966028 1354074,-94860110 1520444,-94739968 1676908,-94606618 1822450,-94999048 2214880,-95165164 2033778,-95314770 1838706,-95446850 1631442,-95560388 1413510,-95654368 1186434,-95728282 951992,-95781368 711962,-95813626 468376,-95824294 222758,-95269304 222758))"
+ };
+
+static std::string ticket_7462[2] =
+ {
+ "POLYGON((0 0 , -0.3681253195 0.9297761917 , 2.421203136 2.034152031 , 2.789328575 1.104375958 , 0 0))",
+ "POLYGON((2.76143527 1.093332171 , 2.076887131 1.822299719 , 4.263789177 3.875944376 , 4.948337555 3.146976948 , 2.76143527 1.093332171))"
+ };
+
+
+static std::string ticket_8254[2] =
+ {
+ "POLYGON((0 0,-0.27224111308522275232 0.19250353717521062613,-0.27224111308522275232 0.96219700082478931691,0 1.154700537999999943,0 0))",
+ "POLYGON((-0.27224111308522286334 0.57751061210314269534,-0.27201435369399112885 0.57735026899999997152,-0.27224111308522280783 0.57718992589685735872,-0.27224111308522286334 0.57751061210314269534))"
+ };
+
+static std::string ggl_list_20120229_volker[3] =
+ {
+ "POLYGON((1716 1554,2076 2250,2436 2352,2796 1248,3156 2484,3516 2688,3516 2688,3156 2484,2796 1248,2436 2352,2076 2250, 1716 1554))",
+ "POLYGON((2500 1600,2500 2300,3200 2300,3200 1600,2500 1600))",
+ "POLYGON((1716 1554,2076 2250,2436 2352,2796 1248,3156 2484,3516 2688,3156 2483,2796 1247,2436 2351,2076 2249, 1716 1554))",
+ };
+
+static std::string ggl_list_20120717_volker[2] =
+ {
+ "POLYGON((1031 1056,3232 1056,3232 2856,1031 2856))",
+ "POLYGON((1032 1458,1032 1212,2136 2328,3234 2220,3234 2412,2136 2646))"
+ };
+
+
+static std::string buffer_rt_a[2] =
+ {
+ "POLYGON((1 7,1 8,1.0012 8.04907,1.00482 8.09802,1.01082 8.14673,1.01921 8.19509,1.02997 8.24298,1.04306 8.29028,1.05846 8.33689,1.07612 8.38268,1.09601 8.42756,1.11808 8.4714,1.14227 8.5141,1.16853 8.55557,1.19679 8.5957,1.22699 8.63439,1.25905 8.67156,1.29289 8.70711,1.32844 8.74095,1.36561 8.77301,1.4043 8.80321,1.44443 8.83147,1.4859 8.85773,1.5286 8.88192,1.57244 8.90399,1.61732 8.92388,1.66311 8.94154,1.70972 8.95694,1.75702 8.97003,1.80491 8.98079,1.85327 8.98918,1.90198 8.99518,1.95093 8.9988,2 9,3 9,3.04907 8.9988,3.09802 8.99518,3.14673 8.98918,3.19509 8.98079,3.24298 8.97003,3.29028 8.95694,3.33689 8.94154,3.38268 8.92388,3.42756 8.90399,3.4714 8.88192,3.5141 8.85773,3.55557 8.83147,3.5957 8.80321,3.63439 8.77301,3.67156 8.74095,3.70711 8.70711,3.74095 8.67156,3.77301 8.63439,3.80321 8.5957,3.83147 8.55557,3.85773 8.5141,3.88192 8.4714,3.90399 8.42756,3.92388 8.38268,3.94154 8.33689,3.95694 8.29028,3.97003 8.24298,3.98079 8.19509,3.98918 8.14673,3.99518 8.09802,3.9988 8.04907,4 8,4 7,3.9988 6.95093,3.99518 6.90198,3.98918 6.85327,3.98079 6.80491,3.97003 6.75702,3.95694 6.70972,3.94154 6.66311,3.92388 6.61732,3.90399 6.57244,3.88192 6.5286,3.85773 6.4859,3.83147 6.44443,3.80321 6.4043,3.77301 6.36561,3.74095 6.32844,3.70711 6.29289,3.67156 6.25905,3.63439 6.22699,3.5957 6.19679,3.55557 6.16853,3.5141 6.14227,3.4714 6.11808,3.42756 6.09601,3.38268 6.07612,3.33689 6.05846,3.29028 6.04306,3.24298 6.02997,3.19509 6.01921,3.14673 6.01082,3.09802 6.00482,3.04907 6.0012,3 6,2 6,1.95093 6.0012,1.90198 6.00482,1.85327 6.01082,1.80491 6.01921,1.75702 6.02997,1.70972 6.04306,1.66311 6.05846,1.61732 6.07612,1.57244 6.09601,1.5286 6.11808,1.4859 6.14227,1.44443 6.16853,1.4043 6.19679,1.36561 6.22699,1.32844 6.25905,1.29289 6.29289,1.25905 6.32844,1.22699 6.36561,1.19679 6.4043,1.16853 6.44443,1.14227 6.4859,1.11808 6.5286,1.09601 6.57244,1.07612 6.61732,1.05846 6.66311,1.04306 6.70972,1.02997 6.75702,1.01921 6.80491,1.01082 6.85327,1.00482 6.90198,1.0012 6.95093,1 7))",
+ "POLYGON((3 6,4 6,4.04907 5.9988,4.09802 5.99518,4.14673 5.98918,4.19509 5.98079,4.24298 5.97003,4.29028 5.95694,4.33689 5.94154,4.38268 5.92388,4.42756 5.90399,4.4714 5.88192,4.5141 5.85773,4.55557 5.83147,4.5957 5.80321,4.63439 5.77301,4.67156 5.74095,4.70711 5.70711,4.74095 5.67156,4.77301 5.63439,4.80321 5.5957,4.83147 5.55557,4.85773 5.5141,4.88192 5.4714,4.90399 5.42756,4.92388 5.38268,4.94154 5.33689,4.95694 5.29028,4.97003 5.24298,4.98079 5.19509,4.98918 5.14673,4.99518 5.09802,4.9988 5.04907,5 5,5 4,4.9988 3.95093,4.99518 3.90198,4.98918 3.85327,4.98079 3.80491,4.97003 3.75702,4.95694 3.70972,4.94154 3.66311,4.92388 3.61732,4.90399 3.57244,4.88192 3.5286,4.85773 3.4859,4.83147 3.44443,4.80321 3.4043,4.77301 3.36561,4.74095 3.32844,4.70711 3.29289,4.67156 3.25905,4.63439 3.22699,4.5957 3.19679,4.55557 3.16853,4.5141 3.14227,4.4714 3.11808,4.42756 3.09601,4.38268 3.07612,4.33689 3.05846,4.29028 3.04306,4.24298 3.02997,4.19509 3.01921,4.14673 3.01082,4.09802 3.00482,4.04907 3.0012,4 3,3 3,3 3,2 3,1.95093 3.0012,1.90198 3.00482,1.85327 3.01082,1.80491 3.01921,1.75702 3.02997,1.70972 3.04306,1.66311 3.05846,1.61732 3.07612,1.57244 3.09601,1.5286 3.11808,1.4859 3.14227,1.44443 3.16853,1.4043 3.19679,1.36561 3.22699,1.32844 3.25905,1.29289 3.29289,1.25905 3.32844,1.22699 3.36561,1.19679 3.4043,1.16853 3.44443,1.14227 3.4859,1.11808 3.5286,1.09601 3.57244,1.07612 3.61732,1.05846 3.66311,1.04306 3.70972,1.02997 3.75702,1.01921 3.80491,1.01082 3.85327,1.00482 3.90198,1.0012 3.95093,1 4,1 5,1.0012 5.04907,1.00482 5.09802,1.01082 5.14673,1.01921 5.19509,1.02997 5.24298,1.04306 5.29028,1.05846 5.33689,1.07612 5.38268,1.09601 5.42756,1.11808 5.4714,1.14227 5.5141,1.16853 5.55557,1.19679 5.5957,1.22699 5.63439,1.25905 5.67156,1.29289 5.70711,1.32844 5.74095,1.36561 5.77301,1.4043 5.80321,1.44443 5.83147,1.4859 5.85773,1.5286 5.88192,1.57244 5.90399,1.61732 5.92388,1.66311 5.94154,1.70972 5.95694,1.75702 5.97003,1.80491 5.98079,1.85327 5.98918,1.90198 5.99518,1.95093 5.9988,2 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6,3 6))"
+ };
+
+static std::string buffer_rt_f[2] =
+ {
+ "POLYGON((-0.29999999999999999 6.0000000000000000,-0.29999999999999999 7.0000000000000000,-0.30000000000000027 7.7242640687119302,0.21213203435596423 7.2121320343559638,1.2121320343559643 6.2121320343559638,1.7242640687119293 5.7000000000000002,1.0000000000000000 5.7000000000000002,0.00000000000000000 5.7000000000000002,-0.30000000000000027 5.7000000000000002,-0.29999999999999999 6.0000000000000000))",
+ "POLYGON((1.3000000000000000 9.0000000000000000,1.3000000000000000 8.0000000000000000,1.3000000000000007 7.7000000000000002,1.0000000000000000 7.7000000000000002,0.00000000000000000 7.7000000000000002,-0.29999999999999982 7.7000000000000002,-0.29999999999999999 8.0000000000000000,-0.29999999999999999 9.0000000000000000,-0.29999999999999982 9.3000000000000007,0.00000000000000000 9.3000000000000007,1.0000000000000000 9.3000000000000007,1.3000000000000007 9.3000000000000007,1.3000000000000000 9.0000000000000000))"
+ };
+
+static std::string buffer_rt_g[2] =
+ {
+ "POLYGON((2.0 8.0,2.0 9.0,2.0 10.0,3.0 10.0,4.0 10.0,6.4142135623730958 10.0,4.7071067811865479 8.2928932188134521,3.7071067811865475 7.2928932188134521,2.0 5.5857864376269051,2.0 8.0))",
+ "POLYGON((0.0 6.0,0.0 7.0,0.0 8.0,1.0 8.0,2.0 8.0,4.4142135623730958 8.0,2.7071067811865475 6.2928932188134521,1.7071067811865475 5.2928932188134521,-0.0 3.5857864376269042,0.0 6.0))"
+ };
+
+static std::string buffer_rt_g_boxes[5] =
+ {
+ "POLYGON((0 0,0 4,4 4,4 0,0 0))",
+ "POLYGON((2 2,2 4,6 4,6 2,2 2))",
+ "POLYGON((2 2,2 4,6 4,8 4,8 2,2 2))",
+ "POLYGON((2 2,2 4,6 4,6 6,8 6,8 2,2 2))",
+
+ "POLYGON((0 0,0 4,4 4,4 5,5 5,5 1,4 1,4 0,0 0))"
+ };
+
+// From buffer-robustness-test with segment-intersection "touching" with r ~ 1.16
+static std::string buffer_rt_i[2] =
+ {
+ "POLYGON((1.0 1.0,1.0 2.0,1.0 3.0,2.0 3.0,3.0 3.0,5.4142135623730949 3.0,3.7071067811865475 1.2928932188134525,2.7071067811865475 0.29289321881345254,1.0 -1.4142135623730949,1.0 1.0))",
+ "POLYGON((2.0 2.0,2.0 3.0,2.0 4.0,3.0 4.0,4.0 4.0,6.4142135623730958 4.0,4.7071067811865479 2.2928932188134525,3.7071067811865475 1.2928932188134525,2.0 -0.41421356237309387,2.0 2.0))"
+ };
+
+// Idem, but with a touch-in-the-middle
+static std::string buffer_rt_j[2] =
+ {
+ "POLYGON((1.0 4.0,1.0 5.0,1.0 6.0,2.0 6.0,3.0 6.0,5.4142135623730967 6.0,3.7071067811865475 4.2928932188134521,2.7071067811865475 3.2928932188134525,1.0 1.5857864376269055,1.0 4.0))",
+ "POLYGON((-1.0 2.0,-1.0 3.0,-1.0 4.0,0.00 4.0,1.0 4.0,3.4142135623730949 4.0,1.7071067811865475 2.2928932188134525,0.70710678118654746 1.2928932188134525,-1.0 -0.41421356237309492,-1.0 2.0))"
+ };
+
+// Nearly-collinear (two segments as-if meeting but not really)
+static std::string buffer_rt_l[2] =
+ {
+ "POLYGON((1.0 5.0,1.0 6.0,1.0 8.4142135623730958,2.7071067811865475 6.7071067811865479,3.7071067811865475 5.7071067811865479,5.4142135623730958 4.0,3.0 4.0,2.0 4.0,1.0 4.0,1.0 5.0))",
+ "POLYGON((5.0 1.0,5.0 2.0,5.0 4.4142135623730958,6.7071067811865479 2.7071067811865475,7.7071067811865479 1.7071067811865475,9.4142135623730958 0.00,7.0 0.0,6.0 0.0,5.0 0.0,5.0 1.0))"
+ };
+
+static std::string buffer_rt_m1[2] =
+ {
+ "POLYGON((3.0 2.0,3.0 3.0,3.0 5.4142135623730940,4.7071067811865479 3.7071067811865475,5.7071067811865479 2.7071067811865475,7.4142135623730940 1.0,5.0 1.0,4.0 1.0,3.0 1.0,3.0 2.0))",
+ "POLYGON((0.29289321881345254 2.7071067811865475,1.2928932188134525 3.7071067811865475,3.0 5.4142135623730949,3.0 3.0,3.0 2.0,3.0 1.0,2.0 1.0,1.0 1.0,-1.4142135623730949 1.0,0.29289321881345254 2.7071067811865475))"
+ };
+
+static std::string buffer_rt_m2[2] =
+ {
+ "POLYGON((-0.70710678118654746 3.7071067811865475,0.29289321881345254 4.7071067811865479,2.0 6.4142135623730967,2.0 4.0,2.0 3.0,2.0 2.0,1.0 2.0,0.00 2.0,-2.4142135623730949 2.0,-0.70710678118654746 3.7071067811865475))",
+ "POLYGON((2.2928932188134525 6.7071067811865479,3.2928932188134525 7.7071067811865479,5.0 9.4142135623730958,5.0 7.0,5.0 6.0,5.0 6.0,5.0 5.0,5.0 4.0,4.0 4.0,3.0 4.0,2.0 4.0,2.0 5.0,2.0 6.0,2.0 6.4142135623730958,2.2928932188134525 6.7071067811865479))"
+ };
+
+
+static std::string buffer_rt_n[2] =
+ {
+ "POLYGON((-0.70710678118654746 0.70710678118654746,0.29289321881345254 1.7071067811865475,2.0 3.4142135623730949,2.0 1.0,2.0 0.0,2.0 -1.0,1.0 -1.0,0.00 -1.0,-2.4142135623730949 -1.0,-0.70710678118654746 0.70710678118654746))",
+ "POLYGON((2.2928932188134525 3.7071067811865475,3.2928932188134525 4.7071067811865479,5.0 6.4142135623730958,5.0 4.0,5.0 3.0,5.0 2.0,4.0 2.0,3.0 2.0,0.58578643762690574 2.0,2.2928932188134525 3.7071067811865475))"
+ };
+
+static std::string buffer_rt_q[2] =
+ {
+ "POLYGON((6.0 6.0,7.0 6.0,9.4142135623730958 6.0,7.7071067811865479 4.2928932188134521,6.7071067811865479 3.2928932188134525,6.4142135623730949 3.0,6.0 3.0,5.0 3.0,4.0 3.0,4.0 4.0,4.0 5.0,4.0 6.0,5.0 6.0,6.0 6.0))",
+ "POLYGON((3.0 2.0,3.0 3.0,3.0 4.0,4.0 4.0,5.0 4.0,7.4142135623730958 4.0,5.7071067811865479 2.2928932188134525,4.7071067811865479 1.2928932188134525,3.0 -0.41421356237309581,3.0 2.0))"
+ };
+
+static std::string buffer_rt_r[2] =
+ {
+ "POLYGON((3.7071067811865475 0.29289321881345254,2.7071067811865475 -0.70710678118654746,2.0 -1.4142135623730949,1.2928932188134525 -0.70710678118654746,0.29289321881345254 0.29289321881345254,-0.41421356237309492 1.0,0.29289321881345254 1.7071067811865475,1.2928932188134525 2.7071067811865475,2.0000000000000004 3.4142135623730954,2.7071067811865475 2.7071067811865475,3.7071067811865475 1.7071067811865475,4.4142135623730958 1.0000000000000004,3.7071067811865475 0.29289321881345254))",
+ "POLYGON((5.7071067811865479 2.2928932188134525,4.7071067811865479 1.2928932188134525,4.4142135623730958 1.0,4.0 1.0,3.0 1.0,1.3819660112501053 1.0,2.1055728090000843 2.4472135954999579,3.1055728090000843 4.4472135954999583,3.7260485282911020 5.6881650340819956,4.7071067811865479 4.7071067811865479,5.7071067811865479 3.7071067811865475,6.4142135623730958 3.0,5.7071067811865479 2.2928932188134525))"
+ };
+
+
+static std::string buffer_rt_t[2] =
+ {
+ "POLYGON((0.00000000000000000 3.0,0.00000000000000000 4.0,0.00000000000000000 6.4142135623730958,1.7071067811865475 4.7071067811865479,2.7071067811865475 3.7071067811865475,4.4142135623730940 2.0,2.0 2.0,1.0 2.0,-0.00000000000000000 2.0,0.00000000000000000 3.0))",
+ "POLYGON((1.7071067811865475 3.2928932188134525,0.70710678118654746 2.2928932188134525,-1.0 0.58578643762690508,-1.0 3.0,-1.0 4.0,-1.0 4.0,-1.0 5.0,-1.0 7.4142135623730958,0.70710678118654746 5.7071067811865479,1.7071067811865475 4.7071067811865479,2.4142135623730954 4.0,1.7071067811865475 3.2928932188134525))"
+ };
+
+// Two circles, causing problems in sectionalize. Fixed by adding small buffer
+static std::string buffer_mp1[2] =
+ {
+ "POLYGON((7 5,6.989043790736547 4.790943073464693,6.956295201467611 4.584176618364482,6.902113032590307 4.381966011250105,6.827090915285202 4.1865267138484,6.732050807568878 4,6.618033988749895 3.824429495415054,6.486289650954788 3.661738787282284,6.338261212717717 3.513710349045212,6.175570504584946 3.381966011250105,6 3.267949192431122,5.8134732861516 3.172909084714799,5.618033988749895 3.097886967409693,5.415823381635519 3.043704798532389,5.209056926535308 3.010956209263453,5.000000000000001 3,4.790943073464693 3.010956209263453,4.584176618364483 3.043704798532389,4.381966011250106 3.097886967409693,4.186526713848401 3.172909084714798,4.00 3.267949192431122,3.824429495415055 3.381966011250104,3.661738787282284 3.513710349045211,3.513710349045212 3.661738787282284,3.381966011250105 3.824429495415053,3.267949192431122 4,3.172909084714798 4.1865267138484,3.097886967409693 4.381966011250106,3.043704798532389 4.584176618364483,3.010956209263453 4.790943073464694,3 5.00,3.010956209263453 5.209056926535308,3.043704798532389 5.415823381635521,3.097886967409694 5.618033988749897,3.172909084714799 5.813473286151603,3.267949192431124 6.00,3.381966011250107 6.175570504584949,3.513710349045214 6.338261212717719,3.661738787282286 6.486289650954791,3.824429495415056 6.618033988749897,4.00 6.732050807568879,4.186526713848402 6.827090915285202,4.381966011250107 6.902113032590307,4.584176618364483 6.956295201467611,4.790943073464693 6.989043790736547,5 7,5.209056926535306 6.989043790736547,5.415823381635518 6.956295201467611,5.618033988749893 6.902113032590307,5.813473286151598 6.827090915285202,6.00 6.732050807568879,6.175570504584943 6.618033988749897,6.338261212717713 6.486289650954792,6.486289650954785 6.33826121271772,6.618033988749891 6.175570504584951,6.732050807568874 6.00,6.827090915285199 5.813473286151607,6.902113032590305 5.618033988749902,6.95629520146761 5.415823381635526,6.989043790736545 5.209056926535316,7 5))",
+ "POLYGON((9 7,8.989043790736547 6.790943073464693,8.956295201467611 6.584176618364482,8.902113032590307 6.381966011250105,8.827090915285202 6.1865267138484,8.732050807568877 6,8.618033988749895 5.824429495415053,8.486289650954788 5.661738787282284,8.338261212717717 5.513710349045212,8.175570504584947 5.381966011250105,8 5.267949192431122,7.8134732861516 5.172909084714799,7.618033988749895 5.097886967409693,7.415823381635519 5.043704798532389,7.209056926535308 5.010956209263453,7.000000000000001 5,6.790943073464693 5.010956209263453,6.584176618364483 5.043704798532389,6.381966011250106 5.097886967409693,6.186526713848401 5.172909084714798,6.00 5.267949192431122,5.824429495415055 5.381966011250104,5.661738787282284 5.513710349045211,5.513710349045212 5.661738787282284,5.381966011250105 5.824429495415053,5.267949192431122 6,5.172909084714798 6.1865267138484,5.097886967409693 6.381966011250106,5.043704798532389 6.584176618364483,5.010956209263453 6.790943073464694,5 7.00,5.010956209263453 7.209056926535308,5.043704798532389 7.415823381635521,5.097886967409694 7.618033988749897,5.172909084714799 7.813473286151603,5.267949192431124 8.00,5.381966011250107 8.175570504584949,5.513710349045214 8.338261212717718,5.661738787282286 8.486289650954792,5.824429495415057 8.618033988749897,6.00 8.732050807568879,6.186526713848402 8.827090915285202,6.381966011250107 8.902113032590307,6.584176618364483 8.956295201467611,6.790943073464693 8.989043790736547,7 9,7.209056926535306 8.989043790736547,7.415823381635518 8.956295201467611,7.618033988749893 8.902113032590307,7.813473286151598 8.827090915285202,8.00 8.732050807568879,8.175570504584943 8.618033988749897,8.338261212717713 8.486289650954792,8.486289650954785 8.33826121271772,8.618033988749891 8.17557050458495,8.732050807568875 8.00,8.827090915285199 7.813473286151607,8.902113032590306 7.618033988749902,8.95629520146761 7.415823381635526,8.989043790736545 7.209056926535316,9 7))"
+ };
+
+// Union of two circles, unioned with third circle, having undetected inner polygon
+// This is a robustness issue in get_turn_info, collinear_opposite, fixed by checking consistency
+static std::string buffer_mp2[2] =
+ {
+ "POLYGON((7 8,6.9949042292205075 7.8573216336015355,6.9796428837618656 7.7153703234534294,6.954293731942319 7.5748694208940464,6.918985947228995 7.4365348863171405,6.8738994499995236 7.301071640801803,6.8192639907090369 7.1691699739962269,6.7553579791345113 7.0415020265598862,6.682507065662362 6.9187183650888047,6.6010824818487208 6.8014446669773063,6.5114991487085163 6.6902785321094296,6.4142135623730949 6.5857864376269051,6.3097214678905704 6.4885008512914837,6.1985553330226946 6.3989175181512792,6.0812816349111953 6.317492934337638,5.9584979734401138 6.2446420208654887,5.8308300260037731 6.180736009290964,5.698928359198197 6.1261005500004764,5.5634651136828603 6.081014052771005,5.4251305791059536 6.045706268057681,5.2846296765465715 6.0203571162381344,5.1426783663984654 6.0050957707794925,5.0000000000000009 6,4.8573216336015363 6.0050957707794925,4.7153703234534312 6.0203571162381344,4.5748694208940481 6.045706268057681,4.4365348863171423 6.081014052771005,4.3010716408018048 6.1261005500004764,4.1691699739962287 6.1807360092909622,4.041502026559888 6.2446420208654878,3.9187183650888064 6.3174929343376363,3.8014446669773077 6.3989175181512783,3.6902785321094314 6.4885008512914819,3.5857864376269064 6.5857864376269033,3.4885008512914846 6.6902785321094278,3.3989175181512805 6.8014446669773045,3.3174929343376389 6.9187183650888029,3.2446420208654896 7.0415020265598844,3.180736009290964 7.1691699739962251,3.1261005500004773 7.3010716408018013,3.0810140527710059 7.4365348863171379,3.0457062680576819 7.5748694208940437,3.0203571162381349 7.7153703234534268,3.0050957707794934 7.8573216336015328,3 7.9999999999999973,3.0050957707794925 8.1426783663984619,3.0203571162381344 8.284629676546567,3.0457062680576801 8.4251305791059501,3.0810140527710042 8.5634651136828559,3.1261005500004755 8.6989283591981934,3.1807360092909618 8.8308300260037704,3.2446420208654869 8.9584979734401102,3.3174929343376358 9.0812816349111927,3.398917518151277 9.198555333022691,3.488500851291481 9.3097214678905669,3.5857864376269024 9.4142135623730923,3.6902785321094269 9.5114991487085145,3.8014446669773028 9.601082481848719,3.918718365088802 9.6825070656623602,4.0415020265598844 9.7553579791345104,4.169169973996226 9.819263990709036,4.301071640801803 9.8738994499995236,4.4365348863171405 9.918985947228995,4.5748694208940472 9.9542937319423199,4.7153703234534312 9.9796428837618656,4.8573216336015381 9.9949042292205075,5.0000000000000036 10,5.142678366398469 9.9949042292205075,5.284629676546575 9.9796428837618656,5.425130579105959 9.9542937319423181,5.5634651136828657 9.9189859472289932,5.6989283591982032 9.8738994499995201,5.8308300260037802 9.8192639907090324,5.9584979734401209 9.7553579791345069,6.0812816349112033 9.6825070656623566,6.1985553330227017 9.6010824818487137,6.3097214678905784 9.5114991487085092,6.4142135623731038 9.4142135623730869,6.5114991487085252 9.3097214678905598,6.6010824818487288 9.1985553330226821,6.68250706566237 9.0812816349111838,6.7553579791345184 8.9584979734400996,6.8192639907090431 8.830830026003758,6.873899449999529 8.698928359198181,6.9189859472290003 8.5634651136828417,6.9542937319423235 8.4251305791059359,6.9796428837618683 8.284629676546551,6.9949042292205084 8.1426783663984441,7 8))",
+ "POLYGON((7.281120925915111 9.019979886500282,7.142678366398465 9.005095770779493,7.000000000000001 9,6.857321633601536 9.005095770779493,6.715370323453431 9.020357116238134,6.574869420894048 9.04570626805768,6.436534886317142 9.081014052771005,6.301071640801805 9.126100550000476,6.169169973996229 9.180736009290962,6.041502026559888 9.244642020865488,5.918718365088806 9.317492934337636,5.801444666977307 9.398917518151277,5.690278532109431 9.488500851291482,5.585786437626906 9.585786437626904,5.488500851291485 9.690278532109428,5.398917518151281 9.801444666977304,5.317492934337639 9.918718365088804,5.24464202086549 10.04150202655988,5.180736009290964 10.16916997399622,5.126100550000477 10.3010716408018,5.081014052771006 10.43653488631714,5.045706268057682 10.57486942089405,5.020357116238134 10.71537032345343,5.005095770779493 10.85732163360153,5 11,5.005095770779493 11.14267836639846,5.020357116238134 11.28462967654657,5.04570626805768 11.42513057910595,5.081014052771004 11.56346511368286,5.126100550000476 11.69892835919819,5.180736009290962 11.83083002600377,5.244642020865487 11.95849797344011,5.317492934337636 12.08128163491119,5.398917518151277 12.19855533302269,5.488500851291481 12.30972146789057,5.585786437626902 12.41421356237309,5.690278532109427 12.51149914870852,5.801444666977303 12.60108248184872,5.918718365088802 12.68250706566236,6.041502026559884 12.75535797913451,6.169169973996226 12.81926399070904,6.301071640801803 12.87389944999952,6.436534886317141 12.918985947229,6.574869420894047 12.95429373194232,6.715370323453431 12.97964288376187,6.857321633601538 12.99490422922051,7.000000000000004 13,7.142678366398469 12.99490422922051,7.284629676546575 12.97964288376187,7.425130579105959 12.95429373194232,7.563465113682866 12.91898594722899,7.698928359198203 12.87389944999952,7.83083002600378 12.81926399070903,7.958497973440121 12.75535797913451,8.081281634911203 12.68250706566236,8.198555333022702 12.60108248184871,8.309721467890579 12.51149914870851,8.414213562373103 12.41421356237309,8.511499148708525 12.30972146789056,8.60108248184873 12.19855533302268,8.682507065662371 12.08128163491118,8.755357979134519 11.9584979734401,8.819263990709043 11.83083002600376,8.873899449999529 11.69892835919818,8.918985947229 11.56346511368284,8.954293731942324 11.42513057910594,8.979642883761869 11.28462967654655,8.994904229220509 11.14267836639844,9 11,8.994904229220508 10.85732163360154,8.979642883761866 10.71537032345343,8.954293731942318 10.57486942089405,8.918985947228995 10.43653488631714,8.873899449999524 10.3010716408018,8.819263990709036 10.16916997399623,8.755357979134512 10.04150202655989,8.718879074084889 9.980020113499718,8.857321633601538 9.994904229220508,9.000000000000004 10,9.142678366398469 9.994904229220508,9.284629676546576 9.979642883761866,9.425130579105959 9.954293731942318,9.563465113682865 9.918985947228993,9.698928359198204 9.87389944999952,9.830830026003779 9.819263990709032,9.958497973440121 9.755357979134507,10.0812816349112 9.682507065662357,10.1985553330227 9.601082481848714,10.30972146789058 9.511499148708509,10.4142135623731 9.414213562373087,10.51149914870853 9.30972146789056,10.60108248184873 9.198555333022682,10.68250706566237 9.081281634911184,10.75535797913452 8.9584979734401,10.81926399070904 8.830830026003758,10.87389944999953 8.698928359198181,10.918985947229 8.563465113682842,10.95429373194232 8.425130579105936,10.97964288376187 8.284629676546551,10.99490422922051 8.142678366398444,11 8,10.99490422922051 7.857321633601536,10.97964288376187 7.715370323453429,10.95429373194232 7.574869420894046,10.918985947229 7.436534886317141,10.87389944999952 7.301071640801803,10.81926399070904 7.169169973996227,10.75535797913451 7.041502026559886,10.68250706566236 6.918718365088805,10.60108248184872 6.801444666977306,10.51149914870852 6.69027853210943,10.4142135623731 6.585786437626905,10.30972146789057 6.488500851291484,10.1985553330227 6.398917518151279,10.0812816349112 6.317492934337638,9.958497973440114 6.244642020865489,9.830830026003774 6.180736009290964,9.698928359198197 6.126100550000476,9.56346511368286 6.081014052771005,9.425130579105954 6.045706268057681,9.284629676546571 6.020357116238134,9.142678366398465 6.005095770779493,9.000000000000002 6,8.857321633601536 6.005095770779493,8.715370323453431 6.020357116238134,8.574869420894048 6.045706268057681,8.436534886317142 6.081014052771005,8.301071640801805 6.126100550000476,8.169169973996228 6.180736009290962,8.041502026559888 6.244642020865488,7.918718365088806 6.317492934337636,7.801444666977307 6.398917518151278,7.690278532109431 6.488500851291482,7.585786437626906 6.585786437626903,7.488500851291485 6.690278532109428,7.398917518151281 6.801444666977305,7.317492934337639 6.918718365088803,7.24464202086549 7.041502026559884,7.180736009290964 7.169169973996225,7.126100550000477 7.301071640801801,7.081014052771006 7.436534886317138,7.045706268057682 7.574869420894044,7.020357116238134 7.715370323453427,7.005095770779493 7.857321633601533,7 7.999999999999997,7.005095770779493 8.142678366398462,7.020357116238134 8.284629676546567,7.04570626805768 8.42513057910595,7.081014052771004 8.563465113682856,7.126100550000476 8.698928359198193,7.180736009290962 8.83083002600377,7.244642020865487 8.95849797344011,7.281120925915111 9.019979886500282))"
+ };
+
+static std::string collinear_opposite_right[2] =
+ {
+ "POLYGON((7 6,7 8,8 9,8 5,7 6))",
+ "POLYGON((5.9 5.9,5.9 10.1,7 9,7 7,5.9 5.9))"
+ };
+
+static std::string collinear_opposite_left[2] =
+ {
+ "POLYGON((7 6,7 8,6 9,8 11,8 5,7 6))",
+ "POLYGON((5 7,7 9,7 7,9 5,8 4,5 7))"
+ };
+
+static std::string collinear_opposite_straight[2] =
+ {
+ "POLYGON((7 6,7 8,7 9,8 8,8 7,7 6))",
+ "POLYGON((6 6,6 9,7 10,7 7,7 5,6 6))"
+ };
+
+
+#endif // BOOST_GEOMETRY_TEST_OVERLAY_CASES_HPP
diff --git a/libs/geometry/test/algorithms/overlay/overlay_common.hpp b/libs/geometry/test/algorithms/overlay/overlay_common.hpp
new file mode 100644
index 000000000..01fd109e5
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/overlay_common.hpp
@@ -0,0 +1,464 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+
+
+#ifndef BOOST_GEOMETRY_TEST_OVERLAY_COMMON_HPP
+#define BOOST_GEOMETRY_TEST_OVERLAY_COMMON_HPP
+
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's here so turn off warning
+#pragma warning( disable : 4244 )
+
+#endif // defined(_MSC_VER)
+
+
+
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);
+
+
+
+template <typename G1, typename G2, typename Functor, typename T>
+void test_overlay(std::string const& id, T const& expected,
+ std::string const& wkt1, std::string const& wkt2,
+ double precision = 0.001)
+{
+ if (wkt1.empty() || wkt2.empty())
+ {
+ return;
+ }
+
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ bg::correct(g1);
+ bg::correct(g2);
+
+ //std::cout << bg::wkt(g1) << std::endl;
+ //std::cout << bg::wkt(g2) << std::endl;
+
+ // Try the overlay-function in both ways
+ std::string caseid = id;
+//goto case_reversed;
+
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ std::cout << std::endl << std::endl << "# " << caseid << std::endl;
+#endif
+ Functor::template apply(caseid, expected, g1, g2, precision);
+
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ return;
+#endif
+
+//case_reversed:
+#if ! defined(BOOST_GEOMETRY_TEST_OVERLAY_NOT_EXCHANGED)
+ caseid = id + "_rev";
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ std::cout << std::endl << std::endl << "# " << caseid << std::endl;
+#endif
+
+ Functor::template apply(caseid, expected, g2, g1, precision);
+#endif
+}
+
+
+#if ! defined(BOOST_GEOMETRY_TEST_MULTI)
+
+template <typename P, typename Functor, typename T>
+void test_all(std::vector<T> const& expected)
+{
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::linestring<P> linestring;
+ typedef bg::model::box<P> box;
+
+ // compilation test only, will not output
+ //test_overlay<box, polygon, Functor>("", "", "", "");
+ typename boost::range_const_iterator<std::vector<T> >::type iterator
+ = boost::begin(expected);
+
+
+#ifndef ONLY_CASE_BRANDON
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("1", *iterator,
+ "POLYGON((0 1,2 5,5 3,0 1))",
+ "POLYGON((3 0,0 3,4 5,3 0))");
+ iterator++;
+
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("2", *iterator,
+ "POLYGON((0 2,2 5,5 3,3 0,0 2))",
+ "POLYGON((0 4,4 5,5 1,1 0,0 4))");
+ iterator++;
+
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("3", *iterator,
+ "POLYGON((1 2,2 4,4 3,3 1,1 2))",
+ "POLYGON((1 1,1 4,4 4,4 1,1 1))");
+ test_overlay<polygon, box, Functor>("3b", *iterator,
+ "POLYGON((1 2,2 4,4 3,3 1,1 2))",
+ "BOX(1 1,4 4)");
+ iterator++;
+
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("4", *iterator,
+ "POLYGON((0 2,2 5,5 3,3 0,0 2))",
+ "POLYGON((0 4,4 5,5 1,1 0,0 4),(1 1,2 1,2 2,1 2,1 1),(3 3,4 3,4 4,3 4,3 3))");
+ iterator++;
+
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("5", *iterator,
+ "POLYGON((0 4,1 5,2.5 4,3.5 5,5 4,4 3,5 2,4 1,3.5 0,3 1,2.5 0,2 1,1.5 0,1 3.5,0.25 3,1 2.5,0 2,0 4))",
+ "POLYGON((0.5 0.5,0.5 4.5,4.5 4.5,4.5 0.5,0.5 0.5))"
+ );
+ test_overlay<polygon, box, Functor>("5b", *iterator,
+ "POLYGON((0 4,1 5,2.5 4,3.5 5,5 4,4 3,5 2,4 1,3.5 0,3 1,2.5 0,2 1,1.5 0,1 3.5,0.25 3,1 2.5,0 2,0 4))",
+ "BOX(0.5 0.5,4.5 4.5)"
+ );
+ iterator++;
+
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("6", *iterator,
+ "POLYGON((0 1,2 5,5 2,0 1))",
+ "POLYGON((1 3,2 5,5 2,1 3))");
+ iterator++;
+
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("7", *iterator,
+ "POLYGON((0 1,1 3,5 2,0 1))",
+ "POLYGON((1 3,2 5,5 2,1 3))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("8", *iterator,
+ "POLYGON((0 0,0 4,4 0,0 0))",
+ "POLYGON((1 3,4 4,3 1,1 3))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("9", *iterator,
+ "POLYGON((0 0,0 4,4 0,0 0))",
+ "POLYGON((2 2,2 4,5 4,2 2))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("10", *iterator,
+ "POLYGON((0 0,2 4,4 0,0 0))",
+ "POLYGON((1 2,2 5,3 2,2 4,1 2))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("11", *iterator,
+ "POLYGON((0 0,0 4,4 0,0 0))",
+ "POLYGON((1 2,2 2,2 1,1 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("12", *iterator,
+ "POLYGON((0 1,1 4,2 2,3 4,4 1,0 1))",
+ "POLYGON((0 3,2 4,4 3,0 3))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("13", *iterator,
+ "POLYGON((0 1,1 2,3 0,0 1))",
+ "POLYGON((0 3,2 3,2 1,0 3))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("14", *iterator,
+ "POLYGON((0 0,0 4,2 2,4 0,0 0))",
+ "POLYGON((1 3,4 4,3 1,1 3))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("15", *iterator,
+ "POLYGON((0 0,0 4,1.5 2.5,2.5 1.5,4 0,0 0))",
+ "POLYGON((1 3,4 4,3 1,1 3))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("16", *iterator,
+ "POLYGON((1 2,3 4,2 1,1 2))",
+ "POLYGON((1 0,1 2,2 1,3 4,2 3,3 5,4 0,1 0))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("17", *iterator,
+ "POLYGON((0 0,0 4,4 0,0 0))",
+ "POLYGON((1 1,1 3,3 1,1 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("18", *iterator,
+ "POLYGON((0 0,0 4,1.5 2.5,2.5 1.5,4 0,0 0))",
+ "POLYGON((1 1,1 3,3 1,1 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("19", *iterator,
+ "POLYGON((2 0,1 3,5 2,2 0))",
+ "POLYGON((1 3,2 5,5 2,1 3))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("20", *iterator,
+ "POLYGON((2 0,1 3,5 2,2 0))",
+ "POLYGON((2 0,1 3,5 2,2 0))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("21", *iterator,
+ "POLYGON((1 0,0 5,5 2,1 0),(2 1,3 2,1 3,2 1))",
+ "POLYGON((2 1,1 3,3 2,2 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("22", *iterator,
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((2 4,5 5,4 2,2 4))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("23", *iterator,
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((3 3,4 2,1 1,3 3))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("24", *iterator,
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((2 2,4 2,1 1,2 2))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("25", *iterator,
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((3 1,4 2,5 0,3 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("26", *iterator,
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((3 1,4 2,5 4,4 0,3 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("27", *iterator,
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((1 1,4 2,5 0,1 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("28", *iterator,
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((1 1,4 2,5 4,5 0,1 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("29", *iterator,
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((4 4,5 1,4 2,1 1,4 4))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("30", *iterator,
+ "POLYGON((1 0,0 3,2 2,3 3,1 0))",
+ "POLYGON((1 2,2 2,2 4,4 3,3 1,1 2))");
+ iterator++;
+
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("31", *iterator,
+ "POLYGON((0 0,0 3,2 2,0 0))",
+ "POLYGON((4 1,2 2,3 3,4 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("32", *iterator,
+ "POLYGON((0 0,0 3,2 2,0 0))",
+ "POLYGON((4 1,3 0,2 2,4 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("33", *iterator,
+ "POLYGON((0 0,0 3,2 2,0 0))",
+ "POLYGON((3 3,3 0,2 2,3 3))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("34", *iterator,
+ "POLYGON((2 0,0 3,4 2,2 0))",
+ "POLYGON((2 1,4 2,5 3,4 1,2 1))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("35", *iterator,
+ "POLYGON((1 0,0 3,5 3,4 2,5 1,1 0))",
+ "POLYGON((2 2,4 2,4 1,2 2))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("36", *iterator,
+ "POLYGON((1 0,0 3,4 2,1 0))",
+ "POLYGON((1 5,5 5,4 2,3 3,2 1,1 2,1 5))");
+ iterator++;
+
+ // 37,38 in PPT but not yet implemented
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("37", *iterator,
+ "POLYGON((4 0,2 2,5 5,4 0))",
+ "POLYGON((0 2,4 3,2 2,4 1,0 2))");
+ iterator++;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("38", *iterator,
+ "POLYGON((4 0,3 3,2 2,4 5,5 2,4 0))",
+ "POLYGON((1 1,1 3,4 4,3 3,4 2,1 1))");
+ iterator++;
+
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("39", *iterator,
+ "POLYGON((0 4,4 8,7 7,8 4,5 3,4 0,0 4))",
+ "POLYGON((0 4,4 8,5 5,8 4,7 1,4 0,0 4))");
+ iterator++;
+
+ // keyholing
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("43", *iterator,
+ "POLYGON((1 2,1 1,2 1,2 2.25,3 2.25,3 0,0 0,0 3,3 3,2.75 2,1 2))",
+ "POLYGON((1.5 1.5,1.5 2.5,2.5 2.5,2.5 1.5,1.5 1.5))");
+ iterator++;
+
+ // self-tangency
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("44", *iterator,
+ "POLYGON((0 0,0 3,3 3,3 2,0 1.5,3 1,3 0,0 0))",
+ "POLYGON((1 1,1 2,2 2,2 1,1 1))");
+ iterator++;
+
+ // self-intersection
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("45", *iterator,
+ "POLYGON((0.5 0,0.5 3,3 3,3 2,0 1.5,3 1,3 0,0.5 0))",
+ "POLYGON((1 1,1 2,2 2,2 1,1 1))");
+ iterator++;
+
+ // self-tangent
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("46", *iterator,
+ "POLYGON((2 0,2 3,5 3,5 2,2 1.5,5 1,5 0,2 0))",
+ "POLYGON((1.5 1,1.5 2,2.5 2,2.5 1,1.5 1))");
+ iterator++;
+
+ // self-tangent
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("47", *iterator,
+ "POLYGON((2.5 0,2.5 3,5 3,5 2,2 1.5,5 1,5 0,2.5 0))",
+ "POLYGON((2 1,2 2,3 2,3 1,2 1))");
+ iterator++;
+
+
+ // 49, all
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<polygon, polygon, Functor, T>("49", *iterator,
+ "POLYGON((2 6,2 14,10 18,18 14,18 6,16 5,14 4,12 3,10 2,8 3,6 4,4 5,2 6))",
+ "POLYGON((2 6,2 7,2 8,2 9,2 10,2 11,2 12,1 14"
+ ",4 14,4 15,7 15,7 18,8 17,9 20,10 18"
+ ",10 15.5,11 17.5,12 17,11 15,12 14.5,13 16.5,14 18.5,15 18,14 16,15 15.5,16 17.5,18 14"
+ ",19 13,17 11,19 9,19 7"
+ ",17 5,16 5,15 4.5,13 3.5,11 2.5,10 2"
+ ",8 3,6 4,4 5,2 6))");
+ iterator++;
+
+
+ // ticket #17
+ BOOST_ASSERT(iterator != boost::end(expected));
+ std::string const ticket17 = "POLYGON ((-122.28139163 37.37319149,-122.28100699 37.37273669,-122.28002186 37.37303123,-122.27979681 37.37290072,-122.28007349 37.37240493,-122.27977334 37.37220360,-122.27819720 37.37288580,-122.27714184 37.37275161,-122.27678628 37.37253167,-122.27766437 37.37180973,-122.27804382 37.37121453,-122.27687664 37.37101354,-122.27645829 37.37203386,-122.27604423 37.37249110,-122.27632234 37.37343339,-122.27760980 37.37391082,-122.27812478 37.37800320,-122.26117222 37.39121007,-122.25572289 37.39566631,-122.25547269 37.39564971,-122.25366304 37.39552993,-122.24919976 37.39580268,-122.24417933 37.39366907,-122.24051443 37.39094143,-122.23246277 37.38100418,-122.23606766 37.38141338,-122.24001587 37.37738940,-122.23666848 37.37609347,-122.23057450 37.37882170,-122.22679803 37.37807143,-122.22525727 37.37448817,-122.22523229 37.37443000,-122.23083199 37.37609347,-122.23033486 37.37777891,-122.23169030 37.37732117,-122.23229178 37.37709687,-122.23237761 37.37631249,-122.23297776 37.37438834,-122.23872850 37.37165986,-122.24044511 37.36934068,-122.24671067 37.36865847,-122.24825570 37.36981819,-122.25151719 37.36947713,-122.25357721 37.36756706,-122.26001451 37.36579354,-122.25615213 37.36545239,-122.25486458 37.36245083,-122.25357721 37.36108651,-122.25194642 37.36013139,-122.24885652 37.35958557,-122.24911401 37.35849399,-122.25357721 37.35808470,-122.25675286 37.35897159,-122.25855539 37.35753887,-122.26181687 37.35828939,-122.26713837 37.35897159,-122.26782510 37.36108651,-122.26662339 37.36456559,-122.27288911 37.36722601,-122.27366159 37.36531602,-122.27168740 37.36470213,-122.27391900 37.36374701,-122.27074326 37.36245083,-122.27134408 37.35951742,-122.27426240 37.36135926,-122.27709482 37.36115474,-122.27966974 37.36231438,-122.27958391 37.36463382,-122.27572152 37.36463382,-122.27563569 37.36524779,-122.27700899 37.36593000,-122.27709482 37.36763529,-122.27554978 37.36838573,-122.27667254 37.36931478,-122.27677932 37.36932073,-122.27769362 37.36853987,-122.27942490 37.36830803,-122.28178776 37.36677917,-122.28509559 37.36443500,-122.28845129 37.36413744,-122.29194403 37.36695946,-122.29382577 37.36726817,-122.29600414 37.36898512,-122.29733083 37.36995398,-122.29593239 37.37141436,-122.29416649 37.37075898,-122.29325026 37.37108436,-122.29652910 37.37311697,-122.29584237 37.37374461,-122.29537583 37.37573372,-122.29487677 37.37752502,-122.30923212 37.37593011,-122.31122484 37.38230086,-122.31467994 37.38092472,-122.31715663 37.38252181,-122.32307970 37.38166978,-122.31985618 37.37667694,-122.32210304 37.37580220,-122.32581446 37.37589532,-122.32401730 37.37331839,-122.32960417 37.37189020,-122.33465527 37.37331906,-122.33425328 37.37623680,-122.33620676 37.37726132,-122.33397986 37.37822382,-122.33358918 37.38036590,-122.33202637 37.37986918,-122.33147954 37.38101784,-122.33394080 37.38198017,-122.33545239 37.38587943,-122.33478058 37.38785697,-122.33386050 37.38723721,-122.33350041 37.38571137,-122.33122003 37.38548891,-122.33140008 37.38650606,-122.33366042 37.38817490,-122.33244019 37.39157602,-122.33298157 37.39419201,-122.33164013 37.39477028,-122.33202017 37.39518351,-122.33358038 37.39499282,-122.33376050 37.39597811,-122.33550067 37.39734478,-122.33556069 37.39481797,-122.33344040 37.39292676,-122.33638094 37.38892189,-122.34240644 37.38852719,-122.34906293 37.38726898,-122.35072321 37.39338769,-122.34910291 37.39445252,-122.34796272 37.39410291,-122.34449043 37.39640534,-122.34500223 37.39729709,-122.34936291 37.39670910,-122.35098322 37.39531066,-122.35364623 37.39554510,-122.35434369 37.39612111,-122.35798429 37.39600988,-122.35768430 37.39478621,-122.36334519 37.39206871,-122.36604726 37.39203267,-122.36778592 37.39335592,-122.36518870 37.40022011,-122.36554552 37.40247752,-122.36370519 37.40331974,-122.36270506 37.40530591,-122.36320512 37.40670418,-122.36149849 37.40851392,-122.36730580 37.41054938,-122.37263720 37.41378932,-122.37161871 37.42076600,-122.36566153 37.42006292,-122.36520547 37.42742106,-122.37165953 37.43661157,-122.35943972 37.44459022,-122.35356359 37.44600810,-122.33792254 37.45796329,-122.35228518 37.47478091,-122.35127080 37.48181199,-122.34867342 37.48487322,-122.34359717 37.48801082,-122.33388431 37.48677650,-122.33142321 37.48429747,-122.32929580 37.48473149,-122.32609609 37.48291144,-122.32344850 37.48228229,-122.31924364 37.48410234,-122.31677299 37.48114051,-122.31431751 37.47848973,-122.31259201 37.47682190,-122.31515972 37.47568196,-122.31691389 37.47360309,-122.31292494 37.46960081,-122.31130153 37.46937743,-122.30889894 37.47124987,-122.30612839 37.47011613,-122.30149630 37.46568378,-122.30064277 37.46363784,-122.29283821 37.45922376,-122.28630141 37.45415497,-122.28883099 37.44629920,-122.28316717 37.44197138,-122.27554148 37.42297597,-122.25597410 37.40553692,-122.25196579 37.40129593,-122.25012043 37.40049143,-122.24823207 37.39897758,-122.24754551 37.39740941,-122.24778582 37.39621607,-122.24934787 37.39599102,-122.25005170 37.39871849,-122.25222328 37.39863668,-122.25342491 37.39737529,-122.25520162 37.39667289,-122.25528737 37.39522726,-122.27747460 37.37809616,-122.27977493 37.37858717,-122.28157729 37.37920106,-122.28322534 37.37952846,-122.28416939 37.38092656,-122.28621223 37.37984219,-122.28638389 37.37613857,-122.28382607 37.37843722,-122.27930278 37.37718220,-122.28196361 37.37652740,-122.28295058 37.37568167,-122.28216101 37.37523148,-122.28114822 37.37543608,-122.27934569 37.37528613,-122.27996369 37.37448121,-122.28104521 37.37454944,-122.28185197 37.37422883,-122.28290767 37.37474038,-122.28376597 37.37467224,-122.28428104 37.37399012,-122.28402346 37.37338989,-122.28610922 37.37364914,-122.28651264 37.37327388,-122.28672722 37.37207343,-122.28628398 37.37205448,-122.28574460 37.37166682,-122.28479711 37.37200981,-122.28327731 37.37137228,-122.28285511 37.37100700,-122.28279409 37.37125669,-122.28315527 37.37173756,-122.28321872 37.37220569,-122.28187007 37.37231918,-122.28193109 37.37294908,-122.28139163 37.37319149))";
+ //test_overlay<polygon, polygon, Functor, T>("44", *iterator, ticket17, "POLYGON((-122.297 37.368, -122.297 37.413, -122.242 37.413, -122.242 37.368, -122.297 37.368))");
+ //test_overlay<polygon, box, Functor>("44b", *iterator, ticket17, "BOX(-122.297 37.368,-122.242 37.413)");
+ test_overlay<polygon, box, Functor>("ticket_17", *iterator, ticket17, "BOX(-122.280 37.377,-122.277 37.379)");
+ iterator++;
+
+#endif
+
+ // Boost.List case Brandon
+ BOOST_ASSERT(iterator != boost::end(expected));
+ {
+ std::string p5 = "POLYGON((37.29449462890625 1.7902572154998779,37.000419616699219 1.664225697517395,37.140213012695313 1.3446992635726929,50.974888957147442 -30.277285722290763,57.297810222148939 -37.546793343968417,41.590042114257813 -7.2021245956420898,40.6978759765625 -5.4500408172607422,40.758884429931641 -5.418975830078125,42.577911376953125 -4.4901103973388672,42.577877044677734 -4.4900407791137695,42.699958801269531 -4.4278755187988281,46.523914387974358 -8.5152102535033496,47.585065917176543 -6.1314922196594779,45.389434814453125 -4.5143837928771973,46.296027072709599 -2.4984308554828116,37.43402099609375 1.470055103302002,37.29449462890625 1.7902572154998779))";
+ std::string p6 = "POLYGON((42.399410247802734 1.4956772327423096,42.721500396728516 2.2342472076416016,42.721500396728516 3.6584999561309814,51.20102152843122 7.1738039562841562,51.370888500897557 7.4163459734570729,37.43402099609375 1.470055103302002,37.29449462890625 1.7902572154998779,37.000419616699219 1.664225697517395,37.140213012695313 1.3446992635726929,36.954700469970703 1.2597870826721191,26.472516656201325 -3.5380830513658776,27.069889344709196 -4.2926591211028242,30.501169204711914 -2.3718316555023193,32.708126068115234 -2.3611266613006592,32.708126068115234 -2.3611700534820557,32.708168029785156 -2.3611698150634766,32.718830108642578 -4.3281683921813965,29.135100397190627 -8.9262827849488211,29.619997024536133 -9.5368013381958008,30.339155197143555 -8.9838371276855469,30.670633316040039 -8.8180980682373047,30.896280288696289 -9.1206979751586914,30.207040612748258 -10.275926149505661,30.947774887084961 -11.208560943603516,31.669155120849609 -10.653837203979492,32.000633239746094 -10.488097190856934,32.226280212402344 -10.790698051452637,31.682494778186321 -12.133624901803865,32.274600982666016 -12.879127502441406,32.998821258544922 -12.323249816894531,33.339523315429688 -12.147735595703125,33.566280364990234 -12.450697898864746,33.164891643669634 -14.000060288415174,33.598796844482422 -14.546377182006836,34.328716278076172 -13.992490768432617,34.658355712890625 -13.81736946105957,34.886280059814453 -14.120697975158691,34.634240447128811 -15.85007183479255,34.931102752685547 -16.223842620849609,35.656356811523438 -15.66030216217041,35.963497161865234 -15.476018905639648,37.326129913330078 -17.190576553344727,38.823680877685547 -16.296066284179688,39.966808319091797 -17.625011444091797,40.800632476806641 -17.208097457885742,41.821544647216797 -19.211688995361328,41.988733475572282 -19.945838749437218,57.524304765518266 -37.807195733984784,41.590042114257813 -7.2021245956420898,40.6978759765625 -5.4500408172607422,40.758884429931641 -5.418975830078125,42.577911376953125 -4.4901103973388672,42.577877044677734 -4.4900407791137695,42.699958801269531 -4.4278755187988281,46.559533858616469 -8.435196445683264,47.604561877161387 -6.087697464505224,45.389434814453125 -4.5143837928771973,46.695858001708984 -1.6093428134918213,47.263670054709685 -1.784876824891044,47.830955505371094 -0.69758313894271851,48.43512638981781 -0.81299959072453376,49.071769542946825 0.61489892713413252,43.764598846435547 0.93951499462127686,43.644271850585938 0.96149998903274536,42.399410247802734 1.4956772327423096))";
+ test_overlay<polygon, polygon, Functor>("isovist", *iterator, p5, p6);
+ }
+ iterator++;
+
+
+ return;
+
+
+#if ! defined(NO_LINESTRING_INTERSECTION)
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<linestring, linestring, Functor, T>("100", *iterator,
+ "LINESTRING(0 1,2 5,5 3)",
+ "LINESTRING(3 0,0 3,4 5)");
+#endif
+
+
+
+/*
+
+ test_overlay<box, polygon, Functor>(11, "box(1.5 1.5, 4.5 2.5)",
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))");
+ test_overlay<box, polygon, Functor>(21, "box(1.5 1.5, 4.5 2.5)",
+ "POLYGON((3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2))");
+ test_overlay<box, polygon, Functor>(12, "box(1.5 1.5, 4.5 2.5)",
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,5.3 2.5,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))");
+ test_overlay<box, polygon, Functor>(13, "box(1.5 1.5, 4.5 2.5)",
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))");
+ test_overlay<box, polygon, Functor>(23, "box(1.5 1.5, 4.5 2.5)",
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 2.3,5.0 2.3,5.0 2.1,4.5 2.1,4.5 1.9,4.0 1.9,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))");
+
+ test_overlay<box, polygon, Functor>(14, "box(1.5 1.5, 4.5 2.5)",
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 1.2,2.9 0.7,2 1.3))");
+
+ test_overlay<box, polygon, Functor>(15, "box(1.5 1.5, 4.5 2.5)",
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.0 3.0,5.0 2.0,2.9 0.7,2 1.3))");
+
+ test_overlay<box, polygon, Functor>(16, "box(0 0, 3 3)",
+ "POLYGON((2 2, 1 4, 2 4, 3 3, 2 2))");
+
+ test_overlay<box, polygon, Functor>(19, "box(115041.10 471900.10, 118334.60 474523.40)",
+ "POLYGON ((115483.40 474533.40, 116549.40 474059.20, 117199.90 473762.50, 117204.90 473659.50, 118339.40 472796.90, 118334.50 472757.90, 118315.10 472604.00, 118344.60 472520.90, 118277.90 472419.10, 118071.40 472536.80, 118071.40 472536.80, 117943.10 472287.70, 117744.90 472248.40, 117708.00 472034.50, 117481.90 472056.90, 117481.90 472056.90, 117272.30 471890.10, 117077.90 472161.20, 116146.60 473054.50, 115031.10 473603.30, 115483.40 474533.40))");
+*/
+}
+#endif
+
+#endif // BOOST_GEOMETRY_TEST_OVERLAY_COMMON_HPP
diff --git a/libs/geometry/test/algorithms/overlay/relative_order.cpp b/libs/geometry/test/algorithms/overlay/relative_order.cpp
new file mode 100644
index 000000000..18c51e2b3
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/relative_order.cpp
@@ -0,0 +1,207 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <iostream>
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry/algorithms/intersection.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_relative_order.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+
+template <typename P, typename T>
+void test_with_point(std::string const& caseid,
+ T pi_x, T pi_y, T pj_x, T pj_y,
+ T ri_x, T ri_y, T rj_x, T rj_y,
+ T si_x, T si_y, T sj_x, T sj_y,
+ int expected_order)
+{
+ P pi = bg::make<P>(pi_x, pi_y);
+ P pj = bg::make<P>(pj_x, pj_y);
+ P ri = bg::make<P>(ri_x, ri_y);
+ P rj = bg::make<P>(rj_x, rj_y);
+ P si = bg::make<P>(si_x, si_y);
+ P sj = bg::make<P>(sj_x, sj_y);
+
+ int order = bg::detail::overlay::get_relative_order<P>::apply(pi, pj, ri, rj, si, sj);
+
+ BOOST_CHECK_EQUAL(order, expected_order);
+
+
+
+
+ /*
+ std::cout << caseid
+ << (caseid.find("_") == std::string::npos ? " " : "")
+ << " " << method
+ << " " << detected
+ << " " << order
+ << std::endl;
+ */
+
+
+
+/*#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "get_turn_info_" << caseid
+ << "_" << string_from_type<typename bg::coordinate_type<P>::type>::name()
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<P> mapper(svg, 500, 500);
+ mapper.add(bg::make<P>(0, 0));
+ mapper.add(bg::make<P>(10, 10));
+
+ bg::model::linestring<P> p; p.push_back(pi); p.push_back(pj); p.push_back(pk);
+ bg::model::linestring<P> q; q.push_back(qi); q.push_back(qj); q.push_back(qk);
+ mapper.map(p, "opacity:0.8;stroke:rgb(0,192,0);stroke-width:3");
+ mapper.map(q, "opacity:0.8;stroke:rgb(0,0,255);stroke-width:3");
+
+ std::string style = ";font-family='Verdana';font-weight:bold";
+ std::string align = ";text-anchor:end;text-align:end";
+ int offset = 8;
+
+ mapper.text(pi, "pi", "fill:rgb(0,192,0)" + style, offset, offset);
+ mapper.text(pj, "pj", "fill:rgb(0,192,0)" + style, offset, offset);
+ mapper.text(pk, "pk", "fill:rgb(0,192,0)" + style, offset, offset);
+
+ mapper.text(qi, "qi", "fill:rgb(0,0,255)" + style + align, -offset, offset);
+ mapper.text(qj, "qj", "fill:rgb(0,0,255)" + style + align, -offset, offset);
+ mapper.text(qk, "qk", "fill:rgb(0,0,255)" + style + align, -offset, offset);
+
+
+ int factor = 1; // second info, if any, will go left by factor -1
+ int ch = '1';
+ for (typename tp_vector::const_iterator it = info.begin();
+ it != info.end();
+ ++it, factor *= -1, ch++)
+ {
+ bool at_j = it->method == bg::detail::overlay::method_crosses;
+ std::string op;
+ op += operation_char(it->operations[0].operation);
+ align = ";text-anchor:middle;text-align:center";
+ mapper.text(at_j ? pj : pk, op, "fill:rgb(255,128,0)" + style + align, offset * factor, -offset);
+
+ op.clear();
+ op += operation_char(it->operations[1].operation);
+ mapper.text(at_j ? qj : qk, op, "fill:rgb(255,128,0)" + style + align, offset * factor, -offset);
+
+ // Map intersection point + method
+ mapper.map(it->point, "opacity:0.8;fill:rgb(255,0,0);stroke:rgb(0,0,100);stroke-width:1");
+
+ op.clear();
+ op += method_char(it->method);
+ if (info.size() != 1)
+ {
+ op += ch;
+ op += " p:"; op += operation_char(it->operations[0].operation);
+ op += " q:"; op += operation_char(it->operations[1].operation);
+ }
+ mapper.text(it->point, op, "fill:rgb(255,0,0)" + style, offset, -offset);
+ }
+ }
+#endif
+*/
+}
+
+
+
+template <typename P>
+void test_all()
+{
+ test_with_point<P, double>("OLR1",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 3, 3, 7, 2, // s
+ 1);
+ test_with_point<P, double>("OLR2",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 3, 7, 7, 6, // s
+ -1);
+ test_with_point<P, double>("OLR3",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 4, 2, 9, 6, // s
+ 1);
+ test_with_point<P, double>("OLR4",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 3, 8, 9, 4, // s
+ -1);
+ test_with_point<P, double>("OLR5",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 4, 2, 8, 6, // s
+ 1);
+ test_with_point<P, double>("OLR6",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 3, 7, 9, 4, // s
+ -1);
+ test_with_point<P, double>("OLR7",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 1, 4, 7, 7, // s
+ -1);
+ test_with_point<P, double>("OLR8",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 1, 6, 7, 3, // s
+ 1);
+
+
+ test_with_point<P, double>("OD1",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 7, 2, 3, 3, // s
+ 1);
+
+ test_with_point<P, double>("OD9",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 7, 5, 3, 3, // s
+ 1);
+ test_with_point<P, double>("OD10",
+ 5, 1, 5, 8, // p
+ 3, 5, 7, 5, // r
+ 7, 5, 3, 7, // s
+ -1);
+ test_with_point<P, double>("OD11",
+ 5, 1, 5, 8, // p
+ 7, 5, 3, 5, // r
+ 3, 5, 7, 7, // s
+ -1);
+ test_with_point<P, double>("OD12",
+ 5, 1, 5, 8, // p
+ 7, 5, 3, 5, // r
+ 3, 5, 7, 3, // s
+ 1);
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/relative_order.vcproj b/libs/geometry/test/algorithms/overlay/relative_order.vcproj
new file mode 100644
index 000000000..eb577fafe
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/relative_order.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="relative_order"
+ ProjectGUID="{4C012342-116A-4E5E-9869-90389D5BBEBD}"
+ RootNamespace="relative_order"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\relative_order"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\relative_order"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\relative_order.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.cpp b/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.cpp
new file mode 100644
index 000000000..5dee530b9
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.cpp
@@ -0,0 +1,163 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <sstream>
+#include <fstream>
+#include <iomanip>
+#include <string>
+
+#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
+#define BOOST_GEOMETRY_NO_BOOST_TEST
+#define BOOST_GEOMETRY_TIME_OVERLAY
+
+#include <test_overlay_p_q.hpp>
+
+#include <boost/program_options.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
+#include <boost/timer.hpp>
+
+template <typename Polygon>
+inline void make_polygon(Polygon& polygon, int count_x, int count_y, int index, int offset)
+{
+ typedef typename bg::point_type<Polygon>::type point_type;
+ bg::exterior_ring(polygon).push_back(point_type(0, 0));
+ bg::exterior_ring(polygon).push_back(point_type(0, count_y * 10));
+ bg::exterior_ring(polygon).push_back(point_type(count_x * 10 + 10, count_y * 10));
+ bg::exterior_ring(polygon).push_back(point_type(count_x * 10 + 10, 0));
+ bg::exterior_ring(polygon).push_back(point_type(0, 0));
+
+ for(int j = 0; j < count_x; ++j)
+ {
+ for(int k = 0; k < count_y; ++k)
+ {
+ polygon.inners().push_back(Polygon::inner_container_type::value_type());
+ polygon.inners().back().push_back(point_type(offset + j * 10 + 1, k * 10 + 1));
+ polygon.inners().back().push_back(point_type(offset + j * 10 + 7, k * 10 + 5 + index));
+ polygon.inners().back().push_back(point_type(offset + j * 10 + 5 + index, k * 10 + 7));
+ polygon.inners().back().push_back(point_type(offset + j * 10 + 1, k * 10 + 1));
+ }
+ }
+ bg::correct(polygon);
+}
+
+
+
+template <typename Polygon>
+void test_star_comb(int count_x, int count_y, int offset, p_q_settings const& settings)
+{
+ Polygon p, q;
+
+ make_polygon(p, count_x, count_y, 0, 0);
+ make_polygon(q, count_x, count_y, 1, offset);
+
+ std::ostringstream out;
+ out << "interior_triangles";
+ test_overlay_p_q
+ <
+ Polygon,
+ typename bg::coordinate_type<Polygon>::type
+ >(out.str(), p, q, settings);
+}
+
+
+template <typename T, bool Clockwise, bool Closed>
+void test_all(int count, int count_x, int count_y, int offset, p_q_settings const& settings)
+{
+ boost::timer t;
+
+ typedef bg::model::polygon
+ <
+ bg::model::d2::point_xy<T>, Clockwise, Closed
+ > polygon;
+
+
+ int index = 0;
+ for(int i = 0; i < count; i++)
+ {
+ test_star_comb<polygon>(count_x, count_y, offset, settings);
+ }
+ std::cout
+ << " type: " << string_from_type<T>::name()
+ << " time: " << t.elapsed() << std::endl;
+}
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== interior_triangles ===\nAllowed options");
+
+ int offset = 0;
+ int count = 1;
+ int count_x = 10;
+ int count_y = 10;
+ bool ccw = false;
+ bool open = false;
+ p_q_settings settings;
+
+ description.add_options()
+ ("help", "Help message")
+ ("count", po::value<int>(&count)->default_value(1), "Number of tests")
+ ("count_x", po::value<int>(&count_x)->default_value(10), "Triangle count in x-direction")
+ ("count_y", po::value<int>(&count_y)->default_value(10), "Triangle count in y-direction")
+ ("offset", po::value<int>(&offset)->default_value(0), "Offset of second triangle in x-direction")
+ ("diff", po::value<bool>(&settings.also_difference)->default_value(false), "Include testing on difference")
+ ("ccw", po::value<bool>(&ccw)->default_value(false), "Counter clockwise polygons")
+ ("open", po::value<bool>(&open)->default_value(false), "Open polygons")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help"))
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ if (ccw && open)
+ {
+ test_all<double, false, false>(count, count_x, count_y, offset, settings);
+ }
+ else if (ccw)
+ {
+ test_all<double, false, true>(count, count_x, count_y, offset, settings);
+ }
+ else if (open)
+ {
+ test_all<double, true, false>(count, count_x, count_y, offset, settings);
+ }
+ else
+ {
+ test_all<double, true, true>(count, count_x, count_y, offset, settings);
+ }
+
+#if defined(HAVE_TTMATH)
+ // test_all<ttmath_big, true, true>(seed, count, max, svg, level);
+#endif
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.vcproj b/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.vcproj
new file mode 100644
index 000000000..831514b3e
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/interior_triangles.vcproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="interior_triangles"
+ ProjectGUID="{7583C2E3-AD74-4C34-8E94-9162F641B215}"
+ RootNamespace="interior_triangles"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\interior_triangles"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\interior_triangles"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\interior_triangles.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.cpp b/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.cpp
new file mode 100644
index 000000000..dce301c12
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.cpp
@@ -0,0 +1,300 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
+#define BOOST_GEOMETRY_NO_BOOST_TEST
+
+#include <test_overlay_p_q.hpp>
+
+#include <boost/program_options.hpp>
+#include <boost/timer.hpp>
+
+template <typename Polygon>
+inline void make_pie(Polygon& polygon,
+ int count, int offset, int offset_y, double factor1, int total_segment_count = 36)
+{
+ typedef typename bg::point_type<Polygon>::type p;
+ typedef typename bg::select_most_precise
+ <
+ typename bg::coordinate_type<Polygon>::type,
+ long double
+ >::type coordinate_type;
+
+ // Create pie
+ coordinate_type cx = 2500.0;
+ coordinate_type cy = 2500.0 + offset_y;
+
+ bg::exterior_ring(polygon).push_back(bg::make<p>(int(cx), int(cy)));
+
+ coordinate_type const dx = 5000.0;
+ coordinate_type const dy = 5000.0;
+
+ coordinate_type const half = 0.5;
+ coordinate_type const two = 2.0;
+
+ coordinate_type const a = coordinate_type(factor1) * half * dx;
+ coordinate_type const b = coordinate_type(factor1) * half * dy;
+
+ coordinate_type const pi = boost::math::constants::pi<long double>();
+ coordinate_type const delta = pi * two / total_segment_count;
+ coordinate_type angle = coordinate_type(offset) * delta;
+ for (int i = 0; i < count; i++, angle += delta)
+ {
+ coordinate_type const s = sin(angle);
+ coordinate_type const c = cos(angle);
+ coordinate_type const x = cx + a * s;
+ coordinate_type const y = cy + b * c;
+ bg::exterior_ring(polygon).push_back(bg::make<p>(int(x), int(y)));
+ }
+ bg::exterior_ring(polygon).push_back(bg::make<p>(int(cx), int(cy)));
+ bg::correct(polygon);
+}
+
+
+/*
+sql server
+
+TWO INNERS
+1a) select geometry::STGeomFromText('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,5 5,4 6,4 4),(6 6,5 5,6 4,6 6)) ', 0).STIsValid(); -> valid
+same:
+1b) POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,5 5,6 4,6 6,5 5,4 6,4 4)) -> valid
+
+I-E tangency IET
+2a) select geometry::STGeomFromText('POLYGON((0 0,0 10,10 10,10 0,0 0),(5 0,6 1,4 1,5 0))', 0).STIsValid(); -> valid
+same by Self tangency ST
+2b) select geometry::STGeomFromText('POLYGON((0 0,0 10,10 10,10 0,5 0,6 1,4 1,5 0, 0 0))', 0).STIsValid(); -> valid
+
+Two inners all tangent
+3a) POLYGON((0 0,0 10,10 10,10 0,0 0),(5 0,6 1,4 1,5 0),(5 1,6 2,4 2,5 1)) -> valid
+
+postgis:
+1a) select ST_IsValid(ST_GeomFromText('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,5 5,4 6,4 4),(6 6,5 5,6 4,6 6))', 0)); -> valid
+1b) POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,5 5,6 4,6 6,5 5,4 6,4 4)) -> NOT valid
+
+2a) POLYGON((0 0,0 10,10 10,10 0,0 0),(5 0,6 1,4 1,5 0)) -> valid
+2b) POLYGON((0 0,0 10,10 10,10 0,5 0,6 1,4 1,5 0, 0 0)) -> NOT valid (?)
+
+3a) POLYGON((0 0,0 10,10 10,10 0,0 0),(5 0,6 1,4 1,5 0),(5 1,6 2,4 2,5 1)) -> valid
+
+
+*/
+
+template <typename Polygon>
+inline void holify(Polygon& polygon)
+{
+ typedef typename bg::point_type<Polygon>::type point_type;
+
+ Polygon p;
+ bg::exterior_ring(p).push_back(bg::make<point_type>(0, 0));
+ bg::exterior_ring(p).push_back(bg::make<point_type>(0, 5000));
+ bg::exterior_ring(p).push_back(bg::make<point_type>(5000, 5000));
+ bg::exterior_ring(p).push_back(bg::make<point_type>(5000, 0));
+ bg::exterior_ring(p).push_back(bg::make<point_type>(0, 0));
+ bg::interior_rings(p).push_back(bg::exterior_ring(polygon));
+ bg::correct(p);
+
+ polygon = p;
+}
+
+template <typename MultiPolygon>
+inline void holify_multi(MultiPolygon& multi_polygon)
+{
+ typedef typename bg::point_type<MultiPolygon>::type point_type;
+
+ typename boost::range_value<MultiPolygon>::type p;
+
+ bg::exterior_ring(p).push_back(bg::make<point_type>(0, 0));
+ bg::exterior_ring(p).push_back(bg::make<point_type>(0, 5000));
+ bg::exterior_ring(p).push_back(bg::make<point_type>(5000, 5000));
+ bg::exterior_ring(p).push_back(bg::make<point_type>(5000, 0));
+ bg::exterior_ring(p).push_back(bg::make<point_type>(0, 0));
+
+ for (int i = 0; i < multi_polygon.size(); i++)
+ {
+ bg::interior_rings(p).push_back(bg::exterior_ring(multi_polygon[i]));
+ }
+
+ bg::correct(p);
+
+ multi_polygon.clear();
+ multi_polygon.push_back(p);
+}
+
+
+
+template <typename T, bool Clockwise, bool Closed>
+void test_pie(int total_segment_count, T factor_p, T factor_q,
+ bool multi, bool single_selftangent, p_q_settings const& settings)
+{
+ boost::timer t;
+ typedef bg::model::d2::point_xy<T> point_type;
+ typedef bg::model::polygon<point_type, Clockwise, Closed> polygon;
+ typedef bg::model::multi_polygon<polygon> multi_polygon;
+
+ int good_count = 0;
+ int bad_count = 0;
+
+ for (int a = 2; a < total_segment_count; a++)
+ {
+ polygon p;
+ make_pie(p, a, 0, 0, factor_p, total_segment_count);
+
+ //holify(p);
+
+ for (int b = 2; b < total_segment_count; b++)
+ {
+ for (int offset = 1; offset < total_segment_count; offset++)
+ {
+ //for (int y = 0; y <= 2500; y += 500)
+ int y = 0;
+ {
+ polygon q;
+ make_pie(q, b, offset, y, factor_q, total_segment_count);
+
+ if (! multi)
+ {
+ //holify(q);
+
+ std::ostringstream out;
+ out << "pie_" << a << "_" << b << "_" << offset << "_" << y;
+ if (test_overlay_p_q<polygon, T>(out.str(), p, q, settings))
+ {
+ good_count++;
+ }
+ else
+ {
+ bad_count++;
+ }
+ }
+ else
+ {
+ int left = total_segment_count - b - 2;
+ //std::cout << a << " " << b << " " << left << std::endl;
+ for (int c = 2; c < left; c++)
+ {
+ polygon q2;
+ make_pie(q2, c, offset + b + 1, y, factor_q, total_segment_count);
+
+ std::ostringstream out;
+ out << "pie_" << a << "_" << b << "_" << offset << "_" << y
+ << "_" << c
+ ;
+
+ bool good = false;
+
+ // Represent as either multi-polygon, or as single-self-touching-polygon (INVALID)
+ if (single_selftangent)
+ {
+ polygon q1 = q;
+ for (unsigned int i = 1; i < q2.outer().size(); i++)
+ {
+ q1.outer().push_back(q2.outer()[i]);
+ }
+ //holify(q1);
+ good = test_overlay_p_q<polygon, T>(out.str(), p, q1, settings);
+ }
+ else
+ {
+ multi_polygon mq;
+ mq.push_back(q);
+ mq.push_back(q2);
+ //holify_multi(mq);
+ good = test_overlay_p_q<polygon, T>(out.str(), p, mq, settings);
+ }
+
+ if (good)
+ {
+ good_count++;
+ }
+ else
+ {
+ bad_count++;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ std::cout
+ << "Time: " << t.elapsed() << std::endl
+ << "Good: " << good_count << std::endl
+ << "Bad: " << bad_count << std::endl;
+}
+
+
+template <typename T, bool Clockwise, bool Closed>
+void test_all(bool multi, bool single_selftangent, p_q_settings const& settings)
+{
+ test_pie<T, Clockwise, Closed>(24, 0.55, 0.45, multi, single_selftangent, settings);
+}
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== intersection_pies ===\nAllowed options");
+
+ p_q_settings settings;
+ bool multi = false;
+ bool ccw = false;
+ bool open = false;
+ bool single_selftangent = false; // keep false, true does not work!
+
+ description.add_options()
+ ("help", "Help message")
+ ("multi", po::value<bool>(&multi)->default_value(false), "Multiple tangencies at one point")
+ ("diff", po::value<bool>(&settings.also_difference)->default_value(false), "Include testing on difference")
+ ("ccw", po::value<bool>(&ccw)->default_value(false), "Counter clockwise polygons")
+ ("open", po::value<bool>(&open)->default_value(false), "Open polygons")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help"))
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ // template par's are: CoordinateType, Clockwise, Closed
+ if (ccw && open)
+ {
+ test_all<double, false, false>(multi, single_selftangent, settings);
+ }
+ else if (ccw)
+ {
+ test_all<double, false, true>(multi, single_selftangent, settings);
+ }
+ else if (open)
+ {
+ test_all<double, true, false>(multi, single_selftangent, settings);
+ }
+ else
+ {
+ test_all<double, true, true>(multi, single_selftangent, settings);
+ }
+ //test_all<long double>();
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.vcproj b/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.vcproj
new file mode 100644
index 000000000..1ead5e8e9
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/intersection_pies.vcproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="intersection_pies"
+ ProjectGUID="{24D92478-7C66-4DD5-A501-30A3D4376E4F}"
+ RootNamespace="intersection_pies"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersection_pies"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="&quot;C:\gmp\gmp-dynamic&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersection_pies"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\intersection_pies.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.cpp b/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.cpp
new file mode 100644
index 000000000..5858d1d5a
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.cpp
@@ -0,0 +1,182 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+#define BOOST_GEOMETRY_NO_BOOST_TEST
+
+
+#include <test_overlay_p_q.hpp>
+
+#include <boost/program_options.hpp>
+#include <boost/timer.hpp>
+
+template <typename Polygon>
+inline void make_star(Polygon& polygon,
+ int count, double factor1, double factor2, long double offset = 0)
+{
+ typedef typename bg::point_type<Polygon>::type p;
+ typedef typename bg::select_most_precise
+ <
+ typename bg::coordinate_type<Polygon>::type,
+ long double
+ >::type coordinate_type;
+
+ // Create star
+ coordinate_type cx = 25.0;
+ coordinate_type cy = 25.0;
+
+ coordinate_type dx = 50.0;
+ coordinate_type dy = 50.0;
+
+ coordinate_type half = 0.5;
+ coordinate_type two = 2.0;
+
+ coordinate_type a1 = coordinate_type(factor1) * half * dx;
+ coordinate_type b1 = coordinate_type(factor1) * half * dy;
+ coordinate_type a2 = coordinate_type(factor2) * half * dx;
+ coordinate_type b2 = coordinate_type(factor2) * half * dy;
+
+ coordinate_type pi = boost::math::constants::pi<long double>();
+ coordinate_type delta = pi * two / coordinate_type(count - 1);
+ coordinate_type angle = coordinate_type(offset) * delta;
+ for (int i = 0; i < count - 1; i++, angle += delta)
+ {
+ bool even = i % 2 == 0;
+ coordinate_type s = sin(angle);
+ coordinate_type c = cos(angle);
+ coordinate_type x = cx + (even ? a1 : a2) * s;
+ coordinate_type y = cy + (even ? b1 : b2) * c;
+ bg::exterior_ring(polygon).push_back(bg::make<p>(x, y));
+
+ }
+ bg::exterior_ring(polygon).push_back(bg::exterior_ring(polygon).front());
+}
+
+
+template <typename T, typename CalculationType>
+void test_star(int count, int min_points, int max_points, T rotation, p_q_settings const& settings)
+{
+ boost::timer t;
+ typedef bg::model::d2::point_xy<T> point_type;
+ typedef bg::model::polygon<point_type> polygon;
+
+ int n = 0;
+ for (int c = 0; c < count; c++)
+ {
+ for (int i = min_points; i <= max_points; i++)
+ {
+ std::ostringstream out;
+ out << "_" << string_from_type<T>::name() << "_"
+ << string_from_type<CalculationType>::name() << "_"
+ << i << "_int";
+
+ polygon p;
+ make_star(p, i * 2 + 1, 0.5, 1.0);
+ polygon q;
+ make_star(q, i * 2 + 1, 0.5, 1.0, rotation);
+
+ if (! test_overlay_p_q
+ <
+ polygon,
+ CalculationType
+ >(out.str(), p, q, settings))
+ {
+ return;
+ }
+ n++;
+ }
+ }
+ std::cout
+ << "polygons: " << n
+ << " type: " << string_from_type<T>::name()
+ << " time: " << t.elapsed() << std::endl;
+}
+
+template <typename T, typename CalculationType>
+void test_type(int count, int min_points, int max_points, T rotation, p_q_settings const& settings)
+{
+ test_star<T, CalculationType>(count, min_points, max_points, rotation, settings);
+}
+
+template <typename T>
+void test_all(std::string const& type, int count, int min_points, int max_points, T rotation, p_q_settings settings)
+{
+ if (type == "float")
+ {
+ settings.tolerance = 1.0e-3;
+ test_type<float, float>(count, min_points, max_points, rotation, settings);
+ }
+ else if (type == "double")
+ {
+ test_type<double, double>(count, min_points, max_points, rotation, settings);
+ }
+#if defined(HAVE_TTMATH)
+ else if (type == "ttmath")
+ {
+ test_type<ttmath_big, ttmath_big>(count, min_points, max_points, rotation, settings);
+ }
+#endif
+}
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== recursive_polygons ===\nAllowed options");
+
+ int count = 1;
+ //int seed = static_cast<unsigned int>(std::time(0));
+ std::string type = "float";
+ int min_points = 9;
+ int max_points = 9;
+ bool ccw = false;
+ bool open = false;
+ double rotation = 1.0e-13;
+ p_q_settings settings;
+
+ description.add_options()
+ ("help", "Help message")
+ //("seed", po::value<int>(&seed), "Initialization seed for random generator")
+ ("count", po::value<int>(&count)->default_value(1), "Number of tests")
+ ("diff", po::value<bool>(&settings.also_difference)->default_value(false), "Include testing on difference")
+ ("min_points", po::value<int>(&min_points)->default_value(9), "Minimum number of points")
+ ("max_points", po::value<int>(&max_points)->default_value(9), "Maximum number of points")
+ ("rotation", po::value<double>(&rotation)->default_value(1.0e-13), "Rotation angle")
+ ("ccw", po::value<bool>(&ccw)->default_value(false), "Counter clockwise polygons")
+ ("open", po::value<bool>(&open)->default_value(false), "Open polygons")
+ ("type", po::value<std::string>(&type)->default_value("float"), "Type (float,double)")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help"))
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ test_all(type, count, min_points, max_points, rotation, settings);
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.vcproj b/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.vcproj
new file mode 100644
index 000000000..5c41db055
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/intersection_stars.vcproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="intersection_stars"
+ ProjectGUID="{A76B81BF-B5B4-4D09-BB81-F235647891DE}"
+ RootNamespace="intersection_stars"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersection_stars"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="&quot;C:\gmp\gmp-dynamic&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersection_stars"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\intersection_stars.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/robustness/intersects.cpp b/libs/geometry/test/algorithms/overlay/robustness/intersects.cpp
new file mode 100644
index 000000000..e16caeb03
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/intersects.cpp
@@ -0,0 +1,174 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <sstream>
+#include <fstream>
+#include <iomanip>
+#include <string>
+
+#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
+#define BOOST_GEOMETRY_NO_BOOST_TEST
+//#define BOOST_GEOMETRY_TIME_OVERLAY
+
+#include <test_overlay_p_q.hpp>
+
+#include <boost/program_options.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
+#include <boost/timer.hpp>
+
+
+template <typename MultiPolygon>
+inline void make_polygon(MultiPolygon& mp, int count_x, int count_y, int index, int width_x)
+{
+ typedef typename bg::point_type<MultiPolygon>::type point_type;
+
+ for(int j = 0; j < count_x; ++j)
+ {
+ for(int k = 0; k < count_y; ++k)
+ {
+ mp.push_back(MultiPolygon::value_type());
+ mp.back().outer().push_back(point_type(width_x + j * 10 + 1, k * 10 + 1));
+ mp.back().outer().push_back(point_type(width_x + j * 10 + width_x, k * 10 + 5 + index));
+ mp.back().outer().push_back(point_type(width_x + j * 10 + 5 + index, k * 10 + 7));
+ mp.back().outer().push_back(point_type(width_x + j * 10 + 1, k * 10 + 1));
+ }
+ }
+}
+
+
+
+template <typename MultiPolygon>
+void test_intersects(int count_x, int count_y, int width_x, p_q_settings const& settings)
+{
+ MultiPolygon mp;
+
+ make_polygon(mp, count_x, count_y, 0, width_x);
+
+ bool const b = bg::intersects(mp);
+ if (b)
+ {
+ std::cout << " YES";
+ }
+
+ if(settings.svg)
+ {
+ typedef typename bg::coordinate_type<MultiPolygon>::type coordinate_type;
+ typedef typename bg::point_type<MultiPolygon>::type point_type;
+ std::ostringstream filename;
+ filename << "intersects_"
+ << string_from_type<coordinate_type>::name()
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+ bg::svg_mapper<point_type> mapper(svg, 500, 500);
+ mapper.add(mp);
+ mapper.map(mp, "fill-opacity:0.5;fill:rgb(153,204,0);"
+ "stroke:rgb(153,204,0);stroke-width:3");
+ }
+}
+
+
+template <typename T, bool Clockwise, bool Closed>
+void test_all(int count, int count_x, int count_y, int width_x, p_q_settings const& settings)
+{
+ boost::timer t;
+
+ typedef bg::model::polygon
+ <
+ bg::model::d2::point_xy<T>, Clockwise, Closed
+ > polygon;
+ typedef bg::model::multi_polygon
+ <
+ polygon
+ > multi_polygon;
+
+
+ int index = 0;
+ for(int i = 0; i < count; i++)
+ {
+ test_intersects<multi_polygon>(count_x, count_y, width_x, settings);
+ }
+ std::cout
+ << " type: " << string_from_type<T>::name()
+ << " time: " << t.elapsed() << std::endl;
+}
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== intersects ===\nAllowed options");
+
+ int width_x = 7;
+ int count = 1;
+ int count_x = 10;
+ int count_y = 10;
+ bool ccw = false;
+ bool open = false;
+ p_q_settings settings;
+
+ description.add_options()
+ ("help", "Help message")
+ ("count", po::value<int>(&count)->default_value(1), "Number of tests")
+ ("count_x", po::value<int>(&count_x)->default_value(10), "Triangle count in x-direction")
+ ("count_y", po::value<int>(&count_y)->default_value(10), "Triangle count in y-direction")
+ ("width_x", po::value<int>(&width_x)->default_value(7), "Width of triangle in x-direction")
+ ("ccw", po::value<bool>(&ccw)->default_value(false), "Counter clockwise polygons")
+ ("open", po::value<bool>(&open)->default_value(false), "Open polygons")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help"))
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ if (ccw && open)
+ {
+ test_all<double, false, false>(count, count_x, count_y, width_x, settings);
+ }
+ else if (ccw)
+ {
+ test_all<double, false, true>(count, count_x, count_y, width_x, settings);
+ }
+ else if (open)
+ {
+ test_all<double, true, false>(count, count_x, count_y, width_x, settings);
+ }
+ else
+ {
+ test_all<double, true, true>(count, count_x, count_y, width_x, settings);
+ }
+
+#if defined(HAVE_TTMATH)
+ // test_all<ttmath_big, true, true>(seed, count, max, svg, level);
+#endif
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/robustness/intersects.vcproj b/libs/geometry/test/algorithms/overlay/robustness/intersects.vcproj
new file mode 100644
index 000000000..8331792e5
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/intersects.vcproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="intersects"
+ ProjectGUID="{1AC9B120-3ED0-4444-86E5-1916108943C7}"
+ RootNamespace="intersects"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersects"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\intersects"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\intersects.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.cpp b/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.cpp
new file mode 100644
index 000000000..2dca58bbc
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.cpp
@@ -0,0 +1,252 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
+#define BOOST_GEOMETRY_NO_BOOST_TEST
+
+
+#include <test_overlay_p_q.hpp>
+
+#include <boost/program_options.hpp>
+#include <boost/timer.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
+
+
+struct star_params
+{
+ int count; // points of ellipse, not of star
+ double factor_1;
+ double factor_2;
+ double center_x;
+ double center_y;
+ double rotation;
+ star_params(int c, double f1, double f2, double x, double y, double r = 0)
+ : count(c)
+ , factor_1(f1)
+ , factor_2(f2)
+ , center_x(x)
+ , center_y(y)
+ , rotation(r)
+ {}
+};
+
+
+
+template <typename Polygon>
+inline void make_star(Polygon& polygon, star_params const& p)
+{
+ typedef typename bg::point_type<Polygon>::type P;
+ typedef typename bg::select_most_precise
+ <
+ typename bg::coordinate_type<Polygon>::type,
+ long double
+ >::type coordinate_type;
+
+ // Create star
+ coordinate_type cx = 25.0;
+ coordinate_type cy = 25.0;
+
+ coordinate_type dx = 50.0;
+ coordinate_type dy = 50.0;
+
+ coordinate_type half = 0.5;
+ coordinate_type two = 2.0;
+
+ coordinate_type a1 = coordinate_type(p.factor_1) * half * dx;
+ coordinate_type b1 = coordinate_type(p.factor_1) * half * dy;
+ coordinate_type a2 = coordinate_type(p.factor_2) * half * dx;
+ coordinate_type b2 = coordinate_type(p.factor_2) * half * dy;
+
+ coordinate_type pi = boost::math::constants::pi<long double>();
+ coordinate_type delta = pi * two / coordinate_type(p.count - 1);
+ coordinate_type angle = coordinate_type(p.rotation) * delta;
+ for (int i = 0; i < p.count - 1; i++, angle += delta)
+ {
+ bool even = i % 2 == 0;
+ coordinate_type s = sin(angle);
+ coordinate_type c = cos(angle);
+ coordinate_type x = p.center_x + cx + (even ? a1 : a2) * s;
+ coordinate_type y = p.center_y + cy + (even ? b1 : b2) * c;
+ bg::exterior_ring(polygon).push_back(bg::make<P>(x, y));
+
+ }
+ bg::exterior_ring(polygon).push_back(bg::exterior_ring(polygon).front());
+ bg::correct(polygon);
+}
+
+
+template <typename T, bool Clockwise, bool Closed>
+void test_star_ellipse(int seed, int index, star_params const& par_p,
+ star_params const& par_q, p_q_settings const& settings)
+{
+ typedef bg::model::d2::point_xy<T> point_type;
+ typedef bg::model::polygon<point_type, Clockwise, Closed> polygon;
+
+ polygon p, q;
+ make_star(p, par_p);
+ make_star(q, par_q);
+
+ std::ostringstream out;
+ out << "rse_" << seed << "_" << index;
+ test_overlay_p_q<polygon, T>(out.str(), p, q, settings);
+}
+
+template <typename T, bool Clockwise, bool Closed>
+void test_type(int seed, int count, p_q_settings const& settings)
+{
+ boost::timer t;
+
+ typedef boost::minstd_rand base_generator_type;
+
+ //boost::uniform_real<> random_factor(0.5, 1.2);
+ //boost::uniform_real<> random_location(-10.0, 10.0);
+ //boost::uniform_int<> random_points(5, 20);
+
+ // This set (next 4 lines) are now solved for the most part
+ // 2009-12-03, 3 or 4 errors in 1000000 calls
+ // 2009-12-07, no errors in 1000000 calls
+ //boost::uniform_real<> random_factor(1.0 - 1e-3, 1.0 + 1e-3);
+ //boost::uniform_real<> random_location(-1e-3, 1e-3);
+ //boost::uniform_real<> random_rotation(-1e-3, 1e-3);
+ //boost::uniform_int<> random_points(3, 3);
+
+ // 2009-12-08, still errors, see notes
+ // 2009-12-09, (probably) solved by order on side
+ // 2010-01-16: solved (no errors in 1000000 calls)
+ //boost::uniform_real<> random_factor(1.0 - 1e-3, 1.0 + 1e-3);
+ //boost::uniform_real<> random_location(-1e-3, -1e-3);
+ //boost::uniform_real<> random_rotation(-1e-3, 1e-3);
+ //boost::uniform_int<> random_points(3, 4);
+
+ // This set (next 4 lines) are now solved ("distance-zero"/"merge iiii" problem)
+ // 2009-12-03: 5,50 -> 2:1 000 000 wrong (2009-12-03)
+ // 2010-01-16: solved (no errors in 10000000 calls)
+ boost::uniform_real<> random_factor(0.3, 1.2);
+ boost::uniform_real<> random_location(-20.0, +20.0); // -25.0, +25.0
+ boost::uniform_real<> random_rotation(0, 0.5);
+ boost::uniform_int<> random_points(5, 15);
+
+ base_generator_type generator(seed);
+
+ boost::variate_generator<base_generator_type&, boost::uniform_real<> >
+ factor_generator(generator, random_factor);
+
+ boost::variate_generator<base_generator_type&, boost::uniform_real<> >
+ location_generator(generator, random_location);
+
+ boost::variate_generator<base_generator_type&, boost::uniform_real<> >
+ rotation_generator(generator, random_rotation);
+
+ boost::variate_generator<base_generator_type&, boost::uniform_int<> >
+ int_generator(generator, random_points);
+
+ for(int i = 0; i < count; i++)
+ {
+ test_star_ellipse<T, Clockwise, Closed>(seed, i + 1,
+ star_params(int_generator() * 2 + 1,
+ factor_generator(), factor_generator(),
+ location_generator(), location_generator(), rotation_generator()),
+ star_params(int_generator() * 2 + 1,
+ factor_generator(), factor_generator(),
+ location_generator(), location_generator(), rotation_generator()),
+ settings);
+ }
+ std::cout
+ << "type: " << string_from_type<T>::name()
+ << " time: " << t.elapsed() << std::endl;
+}
+
+template <bool Clockwise, bool Closed>
+void test_all(std::string const& type, int seed, int count, p_q_settings settings)
+{
+ if (type == "float")
+ {
+ settings.tolerance = 1.0e-3;
+ test_type<float, Clockwise, Closed>(seed, count, settings);
+ }
+ else if (type == "double")
+ {
+ test_type<double, Clockwise, Closed>(seed, count, settings);
+ }
+#if defined(HAVE_TTMATH)
+ else if (type == "ttmath")
+ {
+ test_type<ttmath_big, Clockwise, Closed>(seed, count, settings);
+ }
+#endif
+}
+
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== random_ellipses_stars ===\nAllowed options");
+
+ int count = 1;
+ int seed = static_cast<unsigned int>(std::time(0));
+ std::string type = "float";
+ bool ccw = false;
+ bool open = false;
+ p_q_settings settings;
+
+ description.add_options()
+ ("help", "Help message")
+ ("seed", po::value<int>(&seed), "Initialization seed for random generator")
+ ("count", po::value<int>(&count)->default_value(1), "Number of tests")
+ ("diff", po::value<bool>(&settings.also_difference)->default_value(false), "Include testing on difference")
+ ("ccw", po::value<bool>(&ccw)->default_value(false), "Counter clockwise polygons")
+ ("open", po::value<bool>(&open)->default_value(false), "Open polygons")
+ ("type", po::value<std::string>(&type)->default_value("float"), "Type (float,double)")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help"))
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ if (ccw && open)
+ {
+ test_all<false, false>(type, seed, count, settings);
+ }
+ else if (ccw)
+ {
+ test_all<false, true>(type, seed, count, settings);
+ }
+ else if (open)
+ {
+ test_all<true, false>(type, seed, count, settings);
+ }
+ else
+ {
+ test_all<true, true>(type, seed, count, settings);
+ }
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.vcproj b/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.vcproj
new file mode 100644
index 000000000..6f547c6f7
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/random_ellipses_stars.vcproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="random_ellipses_stars"
+ ProjectGUID="{C16633DE-83F8-40E3-9915-3B9C872C7B1E}"
+ RootNamespace="random_ellipses_stars"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\random_ellipses_stars"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;../../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\random_ellipses_stars"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;../../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\random_ellipses_stars.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.cpp b/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.cpp
new file mode 100644
index 000000000..19db1dab3
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.cpp
@@ -0,0 +1,217 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
+#define BOOST_GEOMETRY_NO_BOOST_TEST
+
+#include <test_overlay_p_q.hpp>
+
+#include <boost/program_options.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
+#include <boost/timer.hpp>
+
+
+template <typename Polygon, typename Generator>
+inline void make_polygon(Polygon& polygon, Generator& generator, bool triangular)
+{
+ typedef typename bg::point_type<Polygon>::type point_type;
+ typedef typename bg::coordinate_type<Polygon>::type coordinate_type;
+
+ coordinate_type x, y;
+ x = generator();
+ y = generator();
+
+ typename bg::ring_type<Polygon>::type& ring = bg::exterior_ring(polygon);
+
+ point_type p;
+ bg::set<0>(p, x); bg::set<1>(p, y); ring.push_back(p);
+ bg::set<0>(p, x); bg::set<1>(p, y + 1); ring.push_back(p);
+ bg::set<0>(p, x + 1); bg::set<1>(p, y + 1); ring.push_back(p);
+ bg::set<0>(p, x + 1); bg::set<1>(p, y); ring.push_back(p);
+ bg::set<0>(p, x); bg::set<1>(p, y); ring.push_back(p);
+
+ if (triangular)
+ {
+ // Remove a point depending on generator
+ int c = generator() % 4;
+ if (c >= 1 && c <= 3)
+ {
+ ring.erase(ring.begin() + c);
+ }
+ }
+}
+
+
+
+template <typename MultiPolygon, typename Generator>
+bool test_recursive_boxes(MultiPolygon& result, int& index,
+ Generator& generator,
+ int level, bool triangular, p_q_settings const& settings)
+{
+ MultiPolygon p, q;
+
+ // Generate two boxes
+ if (level == 0)
+ {
+ p.resize(1);
+ q.resize(1);
+ make_polygon(p.front(), generator, triangular);
+ make_polygon(q.front(), generator, triangular);
+ bg::correct(p);
+ bg::correct(q);
+ }
+ else
+ {
+ bg::correct(p);
+ bg::correct(q);
+ if (! test_recursive_boxes(p, index, generator, level - 1, triangular, settings)
+ || ! test_recursive_boxes(q, index, generator, level - 1, triangular, settings))
+ {
+ return false;
+ }
+ }
+
+ typedef typename boost::range_value<MultiPolygon>::type polygon;
+
+ std::ostringstream out;
+ out << "recursive_box_" << index++ << "_" << level;
+
+ if (! test_overlay_p_q
+ <
+ polygon,
+ typename bg::coordinate_type<MultiPolygon>::type
+ >(out.str(), p, q, settings))
+ {
+ return false;
+ }
+
+ MultiPolygon mp;
+ bg::detail::union_::union_insert
+ <
+ polygon
+ >(p, q, std::back_inserter(mp));
+
+ bg::unique(mp);
+ bg::simplify(mp, result, 0.01);
+ bg::correct(mp);
+ return true;
+}
+
+
+template <typename T, bool Clockwise, bool Closed>
+void test_all(int seed, int count, int field_size, int level, bool triangular, p_q_settings const& settings)
+{
+ boost::timer t;
+
+ typedef boost::minstd_rand base_generator_type;
+
+ base_generator_type generator(seed);
+
+ boost::uniform_int<> random_coordinate(0, field_size - 1);
+ boost::variate_generator<base_generator_type&, boost::uniform_int<> >
+ coordinate_generator(generator, random_coordinate);
+
+ typedef bg::model::polygon
+ <
+ bg::model::d2::point_xy<T>, Clockwise, Closed
+ > polygon;
+ typedef bg::model::multi_polygon<polygon> mp;
+
+
+ int index = 0;
+ for(int i = 0; i < count; i++)
+ {
+ mp p;
+ test_recursive_boxes<mp>(p, index, coordinate_generator, level, triangular, settings);
+ }
+ std::cout
+ << "polygons: " << index
+ << " type: " << string_from_type<T>::name()
+ << " time: " << t.elapsed() << std::endl;
+}
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== recursive_polygons ===\nAllowed options");
+
+ int count = 1;
+ int seed = static_cast<unsigned int>(std::time(0));
+ int level = 3;
+ int field_size = 10;
+ bool ccw = false;
+ bool open = false;
+ p_q_settings settings;
+ std::string form = "box";
+
+ description.add_options()
+ ("help", "Help message")
+ ("seed", po::value<int>(&seed), "Initialization seed for random generator")
+ ("count", po::value<int>(&count)->default_value(1), "Number of tests")
+ ("diff", po::value<bool>(&settings.also_difference)->default_value(false), "Include testing on difference")
+ ("level", po::value<int>(&level)->default_value(3), "Level to reach (higher->slower)")
+ ("size", po::value<int>(&field_size)->default_value(10), "Size of the field")
+ ("form", po::value<std::string>(&form)->default_value("box"), "Form of the polygons (box, triangle)")
+ ("ccw", po::value<bool>(&ccw)->default_value(false), "Counter clockwise polygons")
+ ("open", po::value<bool>(&open)->default_value(false), "Open polygons")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help")
+ || (form != "box" && form != "triangle"))
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ bool triangular = form != "box";
+
+
+ if (ccw && open)
+ {
+ test_all<double, false, false>(seed, count, field_size, level, triangular, settings);
+ }
+ else if (ccw)
+ {
+ test_all<double, false, true>(seed, count, field_size, level, triangular, settings);
+ }
+ else if (open)
+ {
+ test_all<double, true, false>(seed, count, field_size, level, triangular, settings);
+ }
+ else
+ {
+ test_all<double, true, true>(seed, count, field_size, level, triangular, settings);
+ }
+
+#if defined(HAVE_TTMATH)
+ // test_all<ttmath_big, true, true>(seed, count, max, svg, level);
+#endif
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.vcproj b/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.vcproj
new file mode 100644
index 000000000..b2cc41335
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/recursive_polygons.vcproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="recursive_polygons"
+ ProjectGUID="{E1AA569C-858C-4789-A6FF-5CDFB41C59D7}"
+ RootNamespace="recursive_polygons"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\recursive_polygons"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\recursive_polygons"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\recursive_polygons.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/robustness/robustness.sln b/libs/geometry/test/algorithms/overlay/robustness/robustness.sln
new file mode 100644
index 000000000..dd6ff8821
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/robustness.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "random_ellipses_stars", "random_ellipses_stars.vcproj", "{C16633DE-83F8-40E3-9915-3B9C872C7B1E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intersection_stars", "intersection_stars.vcproj", "{A76B81BF-B5B4-4D09-BB81-F235647891DE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intersection_pies", "intersection_pies.vcproj", "{24D92478-7C66-4DD5-A501-30A3D4376E4F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recursive_polygons", "recursive_polygons.vcproj", "{E1AA569C-858C-4789-A6FF-5CDFB41C59D7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "star_comb", "star_comb.vcproj", "{6D8C81C1-23CD-469E-8094-E0C01B51E944}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "interior_triangles", "interior_triangles.vcproj", "{7583C2E3-AD74-4C34-8E94-9162F641B215}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intersects", "intersects.vcproj", "{1AC9B120-3ED0-4444-86E5-1916108943C7}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C16633DE-83F8-40E3-9915-3B9C872C7B1E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C16633DE-83F8-40E3-9915-3B9C872C7B1E}.Debug|Win32.Build.0 = Debug|Win32
+ {C16633DE-83F8-40E3-9915-3B9C872C7B1E}.Release|Win32.ActiveCfg = Release|Win32
+ {C16633DE-83F8-40E3-9915-3B9C872C7B1E}.Release|Win32.Build.0 = Release|Win32
+ {A76B81BF-B5B4-4D09-BB81-F235647891DE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A76B81BF-B5B4-4D09-BB81-F235647891DE}.Debug|Win32.Build.0 = Debug|Win32
+ {A76B81BF-B5B4-4D09-BB81-F235647891DE}.Release|Win32.ActiveCfg = Release|Win32
+ {A76B81BF-B5B4-4D09-BB81-F235647891DE}.Release|Win32.Build.0 = Release|Win32
+ {24D92478-7C66-4DD5-A501-30A3D4376E4F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {24D92478-7C66-4DD5-A501-30A3D4376E4F}.Debug|Win32.Build.0 = Debug|Win32
+ {24D92478-7C66-4DD5-A501-30A3D4376E4F}.Release|Win32.ActiveCfg = Release|Win32
+ {24D92478-7C66-4DD5-A501-30A3D4376E4F}.Release|Win32.Build.0 = Release|Win32
+ {E1AA569C-858C-4789-A6FF-5CDFB41C59D7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E1AA569C-858C-4789-A6FF-5CDFB41C59D7}.Debug|Win32.Build.0 = Debug|Win32
+ {E1AA569C-858C-4789-A6FF-5CDFB41C59D7}.Release|Win32.ActiveCfg = Release|Win32
+ {E1AA569C-858C-4789-A6FF-5CDFB41C59D7}.Release|Win32.Build.0 = Release|Win32
+ {6D8C81C1-23CD-469E-8094-E0C01B51E944}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6D8C81C1-23CD-469E-8094-E0C01B51E944}.Debug|Win32.Build.0 = Debug|Win32
+ {6D8C81C1-23CD-469E-8094-E0C01B51E944}.Release|Win32.ActiveCfg = Release|Win32
+ {6D8C81C1-23CD-469E-8094-E0C01B51E944}.Release|Win32.Build.0 = Release|Win32
+ {7583C2E3-AD74-4C34-8E94-9162F641B215}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7583C2E3-AD74-4C34-8E94-9162F641B215}.Debug|Win32.Build.0 = Debug|Win32
+ {7583C2E3-AD74-4C34-8E94-9162F641B215}.Release|Win32.ActiveCfg = Release|Win32
+ {7583C2E3-AD74-4C34-8E94-9162F641B215}.Release|Win32.Build.0 = Release|Win32
+ {1AC9B120-3ED0-4444-86E5-1916108943C7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1AC9B120-3ED0-4444-86E5-1916108943C7}.Debug|Win32.Build.0 = Debug|Win32
+ {1AC9B120-3ED0-4444-86E5-1916108943C7}.Release|Win32.ActiveCfg = Release|Win32
+ {1AC9B120-3ED0-4444-86E5-1916108943C7}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/algorithms/overlay/robustness/star_comb.cpp b/libs/geometry/test/algorithms/overlay/robustness/star_comb.cpp
new file mode 100644
index 000000000..8b1269f61
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/star_comb.cpp
@@ -0,0 +1,146 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
+#define BOOST_GEOMETRY_NO_BOOST_TEST
+#define BOOST_GEOMETRY_TIME_OVERLAY
+
+
+#include <test_overlay_p_q.hpp>
+
+#include <boost/program_options.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
+#include <boost/timer.hpp>
+
+#include <star_comb.hpp>
+
+
+template <typename Polygon>
+void add(Polygon& polygon, double x, double y, int)
+{
+ typedef typename boost::geometry::point_type<Polygon>::type p;
+ boost::geometry::exterior_ring(polygon).push_back(boost::geometry::make<p>(x, y));
+}
+
+
+template <typename Polygon>
+void test_star_comb(int star_point_count, int comb_comb_count, double factor1, double factor2, bool do_union, p_q_settings const& settings)
+{
+ Polygon star, comb;
+ make_star(star, add<Polygon>, star_point_count, factor1, factor2);
+ make_comb(comb, add<Polygon>, comb_comb_count);
+
+ std::ostringstream out;
+ out << "star_comb";
+ test_overlay_p_q
+ <
+ Polygon,
+ typename bg::coordinate_type<Polygon>::type
+ >(out.str(), star, comb, settings);
+}
+
+
+template <typename T, bool Clockwise, bool Closed>
+void test_all(int count, int star_point_count, int comb_comb_count, double factor1, double factor2, bool do_union, p_q_settings const& settings)
+{
+ boost::timer t;
+
+ typedef bg::model::polygon
+ <
+ bg::model::d2::point_xy<T>, Clockwise, Closed
+ > polygon;
+
+
+ int index = 0;
+ for(int i = 0; i < count; i++)
+ {
+ test_star_comb<polygon>(star_point_count, comb_comb_count, factor1, factor2, do_union, settings);
+ }
+ std::cout
+ << " type: " << string_from_type<T>::name()
+ << " time: " << t.elapsed() << std::endl;
+}
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== star_comb ===\nAllowed options");
+
+ int count = 1;
+ bool do_union = false;
+ bool ccw = false;
+ bool open = false;
+ double factor1 = 1.1;
+ double factor2 = 0.2;
+ int point_count = 50;
+ p_q_settings settings;
+
+ description.add_options()
+ ("help", "Help message")
+ ("count", po::value<int>(&count)->default_value(1), "Number of tests")
+ ("point_count", po::value<int>(&point_count)->default_value(1), "Number of points in the star")
+ ("diff", po::value<bool>(&settings.also_difference)->default_value(false), "Include testing on difference")
+ ("ccw", po::value<bool>(&ccw)->default_value(false), "Counter clockwise polygons")
+ ("open", po::value<bool>(&open)->default_value(false), "Open polygons")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help"))
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ int star_point_count = point_count * 2 + 1;
+ int comb_comb_count = point_count;
+
+
+ if (ccw && open)
+ {
+ test_all<double, false, false>(count, star_point_count, comb_comb_count, factor1, factor2, do_union, settings);
+ }
+ else if (ccw)
+ {
+ test_all<double, false, true>(count, star_point_count, comb_comb_count, factor1, factor2, do_union, settings);
+ }
+ else if (open)
+ {
+ test_all<double, true, false>(count, star_point_count, comb_comb_count, factor1, factor2, do_union, settings);
+ }
+ else
+ {
+ test_all<double, true, true>(count, star_point_count, comb_comb_count, factor1, factor2, do_union, settings);
+ }
+
+#if defined(HAVE_TTMATH)
+ // test_all<ttmath_big, true, true>(seed, count, max, svg, level);
+#endif
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/robustness/star_comb.hpp b/libs/geometry/test/algorithms/overlay/robustness/star_comb.hpp
new file mode 100644
index 000000000..7019a26d5
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/star_comb.hpp
@@ -0,0 +1,130 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_STAR_COMB_HPP
+#define BOOST_GEOMETRY_STAR_COMB_HPP
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <boost/timer.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/math/constants/constants.hpp>
+
+#include <test_overlay_p_q.hpp>
+
+
+template <typename Polygon, typename AddFunctor>
+inline void make_star(Polygon& polygon, AddFunctor functor,
+ int count, double factor1, double factor2,
+ double offset = 0.0,
+ bool close = true,
+ double orientation = 1.0)
+{
+ // Create star
+ double cx = 25.0;
+ double cy = 25.0;
+
+ double dx = 50.0;
+ double dy = 50.0;
+
+ double a1 = factor1 * 0.5 * dx;
+ double b1 = factor1 * 0.5 * dy;
+ double a2 = factor2 * 0.5 * dx;
+ double b2 = factor2 * 0.5 * dy;
+
+ double delta = orientation * boost::math::constants::pi<double>() * 2.0 / (count - 1);
+ double angle = offset * delta;
+ double x0, y0;
+ bool first = true;
+ for (int i = 0; i < count - 1; i++, angle += delta)
+ {
+ bool even = i % 2 == 0;
+ double x = cx + (even ? a1 : a2) * sin(angle);
+ double y = cy + (even ? b1 : b2) * cos(angle);
+ functor(polygon, x, y, i);
+ if (first)
+ {
+ x0 = x;
+ y0 = y;
+ first = false;
+ }
+
+ }
+ if (close)
+ {
+ functor(polygon, x0, y0, count);
+ }
+}
+
+template <typename Vector>
+void ccw_pushback(Vector& vector, double x, double y, int)
+{
+ vector.push_back(boost::make_tuple(x, y));
+}
+
+template <typename Polygon, typename AddFunctor>
+inline void make_comb(Polygon& polygon, AddFunctor functor,
+ int count,
+ bool close = true,
+ bool clockwise = true)
+{
+ int n = 0;
+
+ if (! clockwise)
+ {
+ typedef boost::tuple<double, double> tup;
+ typedef std::vector<tup> vector_type;
+ vector_type vec;
+
+ // Create in clockwise order
+ make_comb(vec, ccw_pushback<vector_type>, count, close, true);
+
+ // Add in reverse
+ // (For GCC 3.4 have it const)
+ vector_type const& v = vec;
+ for (vector_type::const_reverse_iterator
+ it = v.rbegin(); it != v.rend(); ++it)
+ {
+ functor(polygon, it->get<0>(), it->get<1>(), n++);
+ }
+ return;
+ }
+
+ // Create comb
+ functor(polygon, 25.0, 0.0, n++);
+ functor(polygon, 0.0, 25.0, n++);
+ functor(polygon, 25.0, 50.0, n++);
+
+ // Function parameters
+ double diff = (25.0 / (count - 0.5)) / 2.0;
+
+ double b1 = -25.0;
+ double b2 = 25.0 - diff * 2.0;
+
+ double x1 = 50.0, x2 = 25.0;
+
+ for (int i = 0; i < count - 1; i++)
+ {
+ functor(polygon, x1, (x1 + b1), n++); x1 -= diff;
+ functor(polygon, x1, (x1 + b1), n++); x1 -= diff;
+ functor(polygon, x2, (x2 + b2), n++); x2 -= diff;
+ functor(polygon, x2, (x2 + b2), n++); x2 -= diff;
+ }
+ functor(polygon, x1, (x1 + b1), n++);
+
+ if (close)
+ {
+ functor(polygon, 25.0, 0.0, 4);
+ }
+}
+
+
+#endif // BOOST_GEOMETRY_STAR_COMB_HPP
+
diff --git a/libs/geometry/test/algorithms/overlay/robustness/star_comb.vcproj b/libs/geometry/test/algorithms/overlay/robustness/star_comb.vcproj
new file mode 100644
index 000000000..01a30306a
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/star_comb.vcproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="star_comb"
+ ProjectGUID="{6D8C81C1-23CD-469E-8094-E0C01B51E944}"
+ RootNamespace="star_comb"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\star_comb"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\star_comb"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\star_comb.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp b/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp
new file mode 100644
index 000000000..b13084982
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/robustness/test_overlay_p_q.hpp
@@ -0,0 +1,210 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+//
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_OVERLAY_P_Q_HPP
+#define BOOST_GEOMETRY_TEST_OVERLAY_P_Q_HPP
+
+#include <fstream>
+#include <iomanip>
+
+//#define BOOST_GEOMETRY_ROBUSTNESS_USE_DIFFERENCE
+
+
+#include <geometry_test_common.hpp>
+
+// For mixing int/float
+#if defined(_MSC_VER)
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4267 )
+#endif
+
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/io/svg/svg_mapper.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+#include <boost/geometry/algorithms/touches.hpp>
+
+struct p_q_settings
+{
+ bool svg;
+ bool also_difference;
+ bool wkt;
+ double tolerance;
+
+ p_q_settings()
+ : svg(false)
+ , also_difference(false)
+ , wkt(false)
+ , tolerance(1.0e-6)
+ {}
+};
+
+template <typename Geometry>
+inline typename bg::default_area_result<Geometry>::type p_q_area(Geometry const& g)
+{
+ try
+ {
+ return bg::area(g);
+ }
+ catch(bg::empty_input_exception const&)
+ {
+ return 0;
+ }
+}
+
+template <typename OutputType, typename CalculationType, typename G1, typename G2>
+static bool test_overlay_p_q(std::string const& caseid,
+ G1 const& p, G2 const& q,
+ p_q_settings const& settings)
+{
+ bool result = true;
+
+ typedef typename bg::coordinate_type<G1>::type coordinate_type;
+ typedef typename bg::point_type<G1>::type point_type;
+
+ bg::model::multi_polygon<OutputType> out_i, out_u, out_d, out_d2;
+
+ CalculationType area_p = p_q_area(p);
+ CalculationType area_q = p_q_area(q);
+ CalculationType area_d1 = 0, area_d2 = 0;
+
+ bg::intersection(p, q, out_i);
+ CalculationType area_i = p_q_area(out_i);
+
+ bg::union_(p, q, out_u);
+ CalculationType area_u = p_q_area(out_u);
+
+ double sum = (area_p + area_q) - area_u - area_i;
+
+ bool wrong = std::abs(sum) > settings.tolerance;
+
+ if (settings.also_difference)
+ {
+ bg::difference(p, q, out_d);
+ bg::difference(q, p, out_d2);
+ area_d1 = p_q_area(out_d);
+ area_d2 = p_q_area(out_d2);
+ double sum_d1 = (area_u - area_q) - area_d1;
+ double sum_d2 = (area_u - area_p) - area_d2;
+ bool wrong_d1 = std::abs(sum_d1) > settings.tolerance;
+ bool wrong_d2 = std::abs(sum_d2) > settings.tolerance;
+
+ if (wrong_d1 || wrong_d2)
+ {
+ wrong = true;
+ }
+ }
+
+ if (true)
+ {
+ if ((area_i > 0 && bg::touches(p, q))
+ || (area_i <= 0 && bg::intersects(p, q) && ! bg::touches(p, q)))
+ {
+ std::cout << "Wrong 'touch'! "
+ << " Intersection area: " << area_i
+ << " Touch gives: " << std::boolalpha << bg::touches(p, q)
+ << std::endl;
+ wrong = true;
+ }
+ }
+
+ bool svg = settings.svg;
+
+ if (wrong || settings.wkt)
+ {
+ if (wrong)
+ {
+ result = false;
+ svg = true;
+ }
+ bg::unique(out_i);
+ bg::unique(out_u);
+
+ std::cout
+ << "type: " << string_from_type<CalculationType>::name()
+ << " id: " << caseid
+ << " area i: " << area_i
+ << " area u: " << area_u
+ << " area p: " << area_p
+ << " area q: " << area_q
+ << " sum: " << sum;
+
+ if (settings.also_difference)
+ {
+ std::cout
+ << " area d1: " << area_d1
+ << " area d2: " << area_d2;
+ }
+ std::cout
+ << std::endl
+ << std::setprecision(9)
+ << " p: " << bg::wkt(p) << std::endl
+ << " q: " << bg::wkt(q) << std::endl
+ << " i: " << bg::wkt(out_i) << std::endl
+ << " u: " << bg::wkt(out_u) << std::endl
+ ;
+
+ }
+
+ if(svg)
+ {
+ std::ostringstream filename;
+ filename << "overlay_" << caseid << "_"
+ << string_from_type<coordinate_type>::name()
+ << string_from_type<CalculationType>::name()
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<point_type> mapper(svg, 500, 500);
+
+ mapper.add(p);
+ mapper.add(q);
+
+ // Input shapes in green/blue
+ mapper.map(p, "fill-opacity:0.5;fill:rgb(153,204,0);"
+ "stroke:rgb(153,204,0);stroke-width:3");
+ mapper.map(q, "fill-opacity:0.3;fill:rgb(51,51,153);"
+ "stroke:rgb(51,51,153);stroke-width:3");
+
+ if (settings.also_difference)
+ {
+ for (BOOST_AUTO(it, out_d.begin()); it != out_d.end(); ++it)
+ {
+ mapper.map(*it,
+ "opacity:0.8;fill:none;stroke:rgb(255,128,0);stroke-width:4;stroke-dasharray:1,7;stroke-linecap:round");
+ }
+ for (BOOST_AUTO(it, out_d2.begin()); it != out_d2.end(); ++it)
+ {
+ mapper.map(*it,
+ "opacity:0.8;fill:none;stroke:rgb(255,0,255);stroke-width:4;stroke-dasharray:1,7;stroke-linecap:round");
+ }
+ }
+ else
+ {
+ for (BOOST_AUTO(it, out_i.begin()); it != out_i.end(); ++it)
+ {
+ mapper.map(*it, "fill-opacity:0.1;stroke-opacity:0.4;fill:rgb(255,0,0);"
+ "stroke:rgb(255,0,0);stroke-width:4");
+ }
+ for (BOOST_AUTO(it, out_u.begin()); it != out_u.end(); ++it)
+ {
+ mapper.map(*it, "fill-opacity:0.1;stroke-opacity:0.4;fill:rgb(255,0,0);"
+ "stroke:rgb(255,0,255);stroke-width:4");
+ }
+ }
+ }
+ return result;
+}
+
+#endif // BOOST_GEOMETRY_TEST_OVERLAY_P_Q_HPP
diff --git a/libs/geometry/test/algorithms/overlay/select_rings.cpp b/libs/geometry/test/algorithms/overlay/select_rings.cpp
new file mode 100644
index 000000000..4d81336c8
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/select_rings.cpp
@@ -0,0 +1,130 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <algorithms/test_overlay.hpp>
+
+#include <boost/range/algorithm/copy.hpp>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
+#include <boost/geometry/algorithms/detail/overlay/assign_parents.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+#include <boost/assign/list_of.hpp>
+#include <boost/foreach.hpp>
+#include <boost/tuple/tuple.hpp>
+
+
+
+template
+<
+ typename Geometry1,
+ typename Geometry2,
+ bg::overlay_type OverlayType,
+ typename RingIdVector,
+ typename WithinVector
+>
+void test_geometry(std::string const& wkt1, std::string const& wkt2,
+ RingIdVector const& expected_ids,
+ WithinVector const& expected_withins)
+{
+ typedef bg::detail::overlay::ring_properties<typename bg::point_type<Geometry1>::type> properties;
+
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+
+ typedef std::map<bg::ring_identifier, properties> map_type;
+ map_type selected;
+ std::map<bg::ring_identifier, int> empty;
+
+ bg::detail::overlay::select_rings<OverlayType>(geometry1, geometry2, empty, selected, true);
+
+ BOOST_CHECK_EQUAL(selected.size(), expected_ids.size());
+ BOOST_CHECK_EQUAL(selected.size(), expected_withins.size());
+
+ if (selected.size() <= expected_ids.size())
+ {
+ BOOST_AUTO(eit, expected_ids.begin());
+ BOOST_AUTO(wit, expected_withins.begin());
+ for(typename map_type::const_iterator it = selected.begin(); it != selected.end(); ++it, ++eit, ++wit)
+ {
+ bg::ring_identifier const ring_id = it->first;
+ BOOST_CHECK_EQUAL(ring_id.source_index, eit->source_index);
+ BOOST_CHECK_EQUAL(ring_id.multi_index, eit->multi_index);
+ BOOST_CHECK_EQUAL(ring_id.ring_index, eit->ring_index);
+ BOOST_CHECK_EQUAL(it->second.within_code, *wit);
+ }
+ }
+}
+
+
+
+
+template <typename P>
+void test_all()
+{
+ // Point in correct clockwise ring -> should return true
+ typedef bg::ring_identifier rid;
+
+ test_geometry<bg::model::polygon<P>, bg::model::polygon<P>, bg::overlay_union>(
+ winded[0], winded[1],
+ boost::assign::list_of
+ (rid(0,-1,-1))
+ (rid(0,-1, 0))
+ (rid(0,-1, 1))
+ (rid(0,-1, 3))
+ (rid(1,-1, 1))
+ (rid(1,-1, 2)),
+
+ boost::assign::list_of
+ (-1)
+ (-1)
+ (-1)
+ (-1)
+ (-1)
+ (-1)
+ );
+
+ //boost::assign::tuple_list_of(0,-1,-1,-1)(0,-1,0,-1)(0,-1,1,-1)(0,-1,3,-1)(1,-1,1,-1)(1,-1,2,-1));
+
+ test_geometry<bg::model::polygon<P>, bg::model::polygon<P>, bg::overlay_intersection>(
+ winded[0], winded[1],
+ boost::assign::list_of
+ (rid(0,-1, 2))
+ (rid(1,-1,-1))
+ (rid(1,-1, 0))
+ (rid(1,-1, 3)),
+
+ boost::assign::list_of
+ (1)
+ (1)
+ (1)
+ (1)
+ );
+
+
+ //boost::assign::tuple_list_of(0,-1,2,1)(1,-1,-1,1)(1,-1,0,1)(1,-1,3,1));
+}
+
+
+
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/overlay/select_rings.vcproj b/libs/geometry/test/algorithms/overlay/select_rings.vcproj
new file mode 100644
index 000000000..5706311fc
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/select_rings.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="select_rings"
+ ProjectGUID="{029117F7-1D6A-4A05-9FB7-93E09751C909}"
+ RootNamespace="select_rings"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\select_rings"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../..;../../../../../boost/geometry/extensions/contrib/ttmath"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\select_rings"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../..;../../../../../boost/geometry/extensions/contrib/ttmath"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\select_rings.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/self_intersection_points.cpp b/libs/geometry/test/algorithms/overlay/self_intersection_points.cpp
new file mode 100644
index 000000000..91ee4bb34
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/self_intersection_points.cpp
@@ -0,0 +1,247 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <iomanip>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/algorithms/intersection.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+//#include <boost/geometry/algorithms/detail/overlay/self_intersection_points.hpp>
+#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+
+#include <algorithms/overlay/overlay_cases.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+
+struct test_self_intersection_points
+{
+ template <typename Geometry>
+ static void apply(std::string const& id,
+ boost::tuple<int, double, double> const& expected_count_and_center,
+ Geometry const& geometry, double precision)
+ {
+
+ typedef bg::detail::overlay::turn_info
+ <
+ typename bg::point_type<Geometry>::type
+ > turn_info;
+
+ std::vector<turn_info> turns;
+
+ ///bg::get_intersection_points(geometry, turns);
+
+ bg::detail::self_get_turn_points::no_interrupt_policy policy;
+ bg::self_turns
+ <
+ bg::detail::overlay::assign_null_policy
+ >(geometry, turns, policy);
+
+
+ typedef typename bg::coordinate_type<Geometry>::type ct;
+ ct zero = ct();
+ ct x = zero, y = zero;
+ BOOST_FOREACH(turn_info const& turn, turns)
+ {
+ x += bg::get<0>(turn.point);
+ y += bg::get<1>(turn.point);
+ }
+ int n = boost::size(turns);
+ if (n > 0)
+ {
+ x /= n;
+ y /= n;
+ }
+ /*std::cout << std::setprecision(8) << x << ", " << y << " "
+ << expected_count_and_center.get<1>()
+ << " " << expected_count_and_center.get<2>()
+ << std::endl;
+ */
+
+ BOOST_CHECK_EQUAL(expected_count_and_center.get<0>(), n);
+ //BOOST_CHECK_CLOSE(expected_count_and_center.get<1>(), x, precision);
+ //BOOST_CHECK_CLOSE(expected_count_and_center.get<2>(), y, precision);
+
+ if (n > 0)
+ {
+ BOOST_CHECK_EQUAL(bg::intersects(geometry), true);
+ }
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "self_ip" << id << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<typename bg::point_type<Geometry>::type> mapper(svg, 500, 500);
+ mapper.add(geometry);
+
+ mapper.map(geometry, "fill:rgb(255,255,128);stroke:rgb(0,0,0);stroke-width:1");
+
+ BOOST_FOREACH(turn_info const& turn, turns)
+ {
+ mapper.map(turn.point, "fill:rgb(255,128,0);stroke:rgb(0,0,100);stroke-width:1");
+ }
+ }
+#endif
+ }
+};
+
+
+template <typename Geometry, typename T>
+void test_self_overlay(std::string const& id, T const& expected,
+ std::string const& wkt, double precision = 0.001)
+{
+ if (wkt.empty())
+ {
+ return;
+ }
+
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+
+ std::string caseid = id;
+
+#ifdef GEOMETRY_DEBUG_INTERSECTION
+ std::cout << std::endl << std::endl << "# " << caseid << std::endl;
+#endif
+ test_self_intersection_points::apply(caseid, expected, geometry, precision);
+}
+
+
+#if ! defined(GEOMETRY_TEST_MULTI)
+
+template <typename P>
+void test_self_all()
+{
+ typedef bg::model::polygon<P> polygon;
+
+ // Just a normal polygon
+ test_self_overlay<polygon>("1", boost::make_tuple(0, 0, 0),
+ "POLYGON((0 0,0 4,1.5 2.5,2.5 1.5,4 0,0 0))");
+
+ // TODO: clean-up and visualize testcases
+
+
+
+ // Self intersecting
+ test_self_overlay<polygon>("2", boost::make_tuple(2, 2.40625, 2.125),
+ "POLYGON((1 2,1 1,2 1,2 2.25,3 2.25,3 0,0 0,0 3,3 3,2.75 2,1 2))");
+
+
+ // Self intersecting in last segment
+
+ test_self_overlay<polygon>("3", boost::make_tuple(1, 2, 2),
+ "POLYGON((0 2,2 4,2 0,4 2,0 2))");
+
+
+ // Self tangent
+
+ test_self_overlay<polygon>("4", boost::make_tuple(1, 2, 4),
+ "POLYGON((0 0,0 4,4 4,4 0,2 4,0 0))");
+
+
+ // Self tangent in corner
+
+ test_self_overlay<polygon>("5", boost::make_tuple(1, 0, 4),
+ "POLYGON((0 0,0 4,4 4,4 0,0 4,2 0,0 0))");
+
+
+ // With spike
+
+ test_self_overlay<polygon>("6", boost::make_tuple(1, 4, 2),
+ "POLYGON((0 0,0 4,4 4,4 2,6 2,4 2,4 0,0 0))");
+
+
+ // Non intersection, but with duplicate
+
+ test_self_overlay<polygon>("d1", boost::make_tuple(0, 0, 0),
+ "POLYGON((0 0,0 4,4 0,4 0,0 0))");
+
+
+ // With many duplicates
+
+ test_self_overlay<polygon>("d2", boost::make_tuple(0, 0, 0),
+ "POLYGON((0 0,0 1,0 1,0 1,0 2,0 2,0 3,0 3,0 3,0 3,0 4,2 4,2 4,4 4,4 0,4 0,3 0,3 0,3 0,3 0,3 0,0 0))");
+
+
+ // Hole: interior tangent to exterior
+
+ test_self_overlay<polygon>("h1", boost::make_tuple(1, 2, 4),
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 2,2 4,3 2,1 2))");
+
+
+ // Hole: interior intersecting exterior
+
+ test_self_overlay<polygon>("h2", boost::make_tuple(2, 4, 3.5),
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 3,5 4,1 1))");
+
+
+ // Hole: two intersecting holes
+ test_self_overlay<polygon>("h3", boost::make_tuple(2, 2.5, 2.5),
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 3,3 3,3 1,1 1),(2 2,2 3.5,3.5 3.5,3.5 2,2 2))");
+
+ // Hole: self-intersecting hole
+ test_self_overlay<polygon>("h4", boost::make_tuple(2, 2.06060606, 2.96969697),
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,3 3,3 2.5,1 3.5,1.5 3.5,1 1))");
+
+ // Many loops (e.g. as result from buffering)
+ test_self_overlay<polygon>("case_1", boost::make_tuple(6, 0, 0),
+ "POLYGON((1 3,0 9,9 5,1 7,9 8,2 5,10 10,9 2,1 3))");
+
+ test_self_overlay<polygon>("buffer_poly_indentation8_d_r", boost::make_tuple(3, 0, 0),
+ "POLYGON((-0.8 5,-0.799036 5.03925,-0.796148 5.07841,-0.791341 5.11738,-0.784628 5.15607,-0.776025 5.19438,-0.765552 5.23223,-0.753235 5.26951,-0.739104 5.30615,-0.723191 5.34204,-0.705537 5.37712,-0.686183 5.41128,-0.665176 5.44446,-0.642566 5.47656,-0.618408 5.50751,-0.592761 5.53725,-0.537247 5.59276,-0.507515 5.61841,-0.476559 5.64257,-0.444456 5.66518,-0.411282 5.68618,-0.377117 5.70554,-0.342044 5.72319,-0.306147 5.7391,-0.269512 5.75324,-0.232228 5.76555,-0.194384 5.77603,-0.156072 5.78463,-0.117384 5.79134,-0.0784137 5.79615,-0.0392541 5.79904,0 5.8,4 5.8,4.03925 5.79904,4.07841 5.79615,4.11738 5.79134,4.15607 5.78463,4.19438 5.77603,4.23223 5.76555,4.26951 5.75324,4.30615 5.7391,4.34204 5.72319,4.37712 5.70554,4.41128 5.68618,4.44446 5.66518,4.47656 5.64257,4.50751 5.61841,4.53725 5.59276,4.59276 5.53725,4.61841 5.50751,4.64257 5.47656,4.66518 5.44446,4.68618 5.41128,4.70554 5.37712,4.72319 5.34204,4.7391 5.30615,4.75324 5.26951,4.76555 5.23223,4.77603 5.19438,4.78463 5.15607,4.79134 5.11738,4.79615 5.07841,4.79904 5.03925,4.8 5,4.8 4,4.79976 3.98037,4.79904 3.96075,4.79783 3.94115,4.79615 3.92159,4.79398 3.90207,4.79134 3.88262,4.78822 3.86323,4.78463 3.84393,4.78056 3.82472,4.77603 3.80562,4.77102 3.78663,4.76555 3.76777,4.75962 3.74905,4.75324 3.73049,4.74639 3.71208,4.73137 3.67581,4.72319 3.65796,4.71458 3.64031,4.70554 3.62288,4.69607 3.60568,4.68618 3.58872,4.67588 3.572,4.66518 3.55554,4.65407 3.53935,4.64257 3.52344,4.63068 3.50781,4.61841 3.49249,4.60577 3.47746,4.59276 3.46275,4.5794 3.44837,4.56569 3.43431,3.56569 2.43431,3.53725 2.40724,3.50751 2.38159,3.47656 2.35743,3.44446 2.33482,3.41128 2.31382,3.37712 2.29446,3.34204 2.27681,3.30615 2.2609,3.26951 2.24676,3.23223 2.23445,3.19438 2.22397,3.15607 2.21537,3.11738 2.20866,3.07841 2.20385,3.03925 2.20096,2.96075 2.20096,2.92159 2.20385,2.88262 2.20866,2.84393 2.21537,2.80562 2.22397,2.76777 2.23445,2.73049 2.24676,2.69385 2.2609,2.65796 2.27681,2.62288 2.29446,2.58872 2.31382,2.55554 2.33482,2.52344 2.35743,2.49249 2.38159,2.46275 2.40724,2.43431 2.43431,2.8 2.06863,2.8 2.93137,2.43431 2.56569,2.46275 2.59276,2.49249 2.61841,2.52344 2.64257,2.55554 2.66518,2.58872 2.68618,2.62288 2.70554,2.65796 2.72319,2.69385 2.7391,2.73049 2.75324,2.76777 2.76555,2.80562 2.77603,2.84393 2.78463,2.88262 2.79134,2.92159 2.79615,2.96075 2.79904,3.03925 2.79904,3.07841 2.79615,3.11738 2.79134,3.15607 2.78463,3.19438 2.77603,3.23223 2.76555,3.26951 2.75324,3.30615 2.7391,3.34204 2.72319,3.37712 2.70554,3.41128 2.68618,3.44446 2.66518,3.47656 2.64257,3.50751 2.61841,3.53725 2.59276,3.56569 2.56569,4.56569 1.56569,4.5794 1.55163,4.59276 1.53725,4.60577 1.52254,4.61841 1.50751,4.63068 1.49219,4.64257 1.47656,4.65407 1.46065,4.66518 1.44446,4.67588 1.428,4.68618 1.41128,4.69607 1.39432,4.70554 1.37712,4.71458 1.35969,4.72319 1.34204,4.73137 1.32419,4.74639 1.28792,4.75324 1.26951,4.75962 1.25095,4.76555 1.23223,4.77102 1.21337,4.77603 1.19438,4.78056 1.17528,4.78463 1.15607,4.78822 1.13677,4.79134 1.11738,4.79398 1.09793,4.79615 1.07841,4.79783 1.05885,4.79904 1.03925,4.79976 1.01963,4.8 1,4.8 0,4.79904 -0.0392541,4.79615 -0.0784137,4.79134 -0.117384,4.78463 -0.156072,4.77603 -0.194384,4.76555 -0.232228,4.75324 -0.269512,4.7391 -0.306147,4.72319 -0.342044,4.70554 -0.377117,4.68618 -0.411282,4.66518 -0.444456,4.64257 -0.476559,4.61841 -0.507515,4.59276 -0.537247,4.53725 -0.592761,4.50751 -0.618408,4.47656 -0.642566,4.44446 -0.665176,4.41128 -0.686183,4.37712 -0.705537,4.34204 -0.723191,4.30615 -0.739104,4.26951 -0.753235,4.23223 -0.765552,4.19438 -0.776025,4.15607 -0.784628,4.11738 -0.791341,4.07841 -0.796148,4.03925 -0.799036,4 -0.8,0 -0.8,-0.0392541 -0.799036,-0.0784137 -0.796148,-0.117384 -0.791341,-0.156072 -0.784628,-0.194384 -0.776025,-0.232228 -0.765552,-0.269512 -0.753235,-0.306147 -0.739104,-0.342044 -0.723191,-0.377117 -0.705537,-0.411282 -0.686183,-0.444456 -0.665176,-0.476559 -0.642566,-0.507515 -0.618408,-0.537247 -0.592761,-0.592761 -0.537247,-0.618408 -0.507515,-0.642566 -0.476559,-0.665176 -0.444456,-0.686183 -0.411282,-0.705537 -0.377117,-0.723191 -0.342044,-0.739104 -0.306147,-0.753235 -0.269512,-0.765552 -0.232228,-0.776025 -0.194384,-0.784628 -0.156072,-0.791341 -0.117384,-0.796148 -0.0784137,-0.799036 -0.0392541,-0.8 0,-0.8 5))");
+
+ test_self_overlay<polygon>("toolkit_2", boost::make_tuple(12, 0, 0),
+ "POLYGON((170718 605997,170718 605997,170776 606016,170773 606015,170786 606020,170778 606016,170787 606021,170781 606017,170795 606028,170795 606028,170829 606055,170939 606140,170933 605968,170933 605968,170932 605908,170929 605834,170920 605866,170961 605803,170739 605684,170699 605749,170691 605766,170693 605762,170686 605775,170688 605771,170673 605794,170676 605790,170668 605800,170672 605796,170651 605818,170653 605816,170639 605829,170568 605899,170662 605943,170633 605875,170603 605961,170718 605997))");
+
+ // Real-life
+
+ std::string const ticket17 = "POLYGON ((-122.28139163 37.37319149,-122.28100699 37.37273669,-122.28002186 37.37303123,-122.27979681 37.37290072,-122.28007349 37.37240493,-122.27977334 37.37220360,-122.27819720 37.37288580,-122.27714184 37.37275161,-122.27678628 37.37253167,-122.27766437 37.37180973,-122.27804382 37.37121453,-122.27687664 37.37101354,-122.27645829 37.37203386,-122.27604423 37.37249110,-122.27632234 37.37343339,-122.27760980 37.37391082,-122.27812478 37.37800320,-122.26117222 37.39121007,-122.25572289 37.39566631,-122.25547269 37.39564971,-122.25366304 37.39552993,-122.24919976 37.39580268,-122.24417933 37.39366907,-122.24051443 37.39094143,-122.23246277 37.38100418,-122.23606766 37.38141338,-122.24001587 37.37738940,-122.23666848 37.37609347,-122.23057450 37.37882170,-122.22679803 37.37807143,-122.22525727 37.37448817,-122.22523229 37.37443000,-122.23083199 37.37609347,-122.23033486 37.37777891,-122.23169030 37.37732117,-122.23229178 37.37709687,-122.23237761 37.37631249,-122.23297776 37.37438834,-122.23872850 37.37165986,-122.24044511 37.36934068,-122.24671067 37.36865847,-122.24825570 37.36981819,-122.25151719 37.36947713,-122.25357721 37.36756706,-122.26001451 37.36579354,-122.25615213 37.36545239,-122.25486458 37.36245083,-122.25357721 37.36108651,-122.25194642 37.36013139,-122.24885652 37.35958557,-122.24911401 37.35849399,-122.25357721 37.35808470,-122.25675286 37.35897159,-122.25855539 37.35753887,-122.26181687 37.35828939,-122.26713837 37.35897159,-122.26782510 37.36108651,-122.26662339 37.36456559,-122.27288911 37.36722601,-122.27366159 37.36531602,-122.27168740 37.36470213,-122.27391900 37.36374701,-122.27074326 37.36245083,-122.27134408 37.35951742,-122.27426240 37.36135926,-122.27709482 37.36115474,-122.27966974 37.36231438,-122.27958391 37.36463382,-122.27572152 37.36463382,-122.27563569 37.36524779,-122.27700899 37.36593000,-122.27709482 37.36763529,-122.27554978 37.36838573,-122.27667254 37.36931478,-122.27677932 37.36932073,-122.27769362 37.36853987,-122.27942490 37.36830803,-122.28178776 37.36677917,-122.28509559 37.36443500,-122.28845129 37.36413744,-122.29194403 37.36695946,-122.29382577 37.36726817,-122.29600414 37.36898512,-122.29733083 37.36995398,-122.29593239 37.37141436,-122.29416649 37.37075898,-122.29325026 37.37108436,-122.29652910 37.37311697,-122.29584237 37.37374461,-122.29537583 37.37573372,-122.29487677 37.37752502,-122.30923212 37.37593011,-122.31122484 37.38230086,-122.31467994 37.38092472,-122.31715663 37.38252181,-122.32307970 37.38166978,-122.31985618 37.37667694,-122.32210304 37.37580220,-122.32581446 37.37589532,-122.32401730 37.37331839,-122.32960417 37.37189020,-122.33465527 37.37331906,-122.33425328 37.37623680,-122.33620676 37.37726132,-122.33397986 37.37822382,-122.33358918 37.38036590,-122.33202637 37.37986918,-122.33147954 37.38101784,-122.33394080 37.38198017,-122.33545239 37.38587943,-122.33478058 37.38785697,-122.33386050 37.38723721,-122.33350041 37.38571137,-122.33122003 37.38548891,-122.33140008 37.38650606,-122.33366042 37.38817490,-122.33244019 37.39157602,-122.33298157 37.39419201,-122.33164013 37.39477028,-122.33202017 37.39518351,-122.33358038 37.39499282,-122.33376050 37.39597811,-122.33550067 37.39734478,-122.33556069 37.39481797,-122.33344040 37.39292676,-122.33638094 37.38892189,-122.34240644 37.38852719,-122.34906293 37.38726898,-122.35072321 37.39338769,-122.34910291 37.39445252,-122.34796272 37.39410291,-122.34449043 37.39640534,-122.34500223 37.39729709,-122.34936291 37.39670910,-122.35098322 37.39531066,-122.35364623 37.39554510,-122.35434369 37.39612111,-122.35798429 37.39600988,-122.35768430 37.39478621,-122.36334519 37.39206871,-122.36604726 37.39203267,-122.36778592 37.39335592,-122.36518870 37.40022011,-122.36554552 37.40247752,-122.36370519 37.40331974,-122.36270506 37.40530591,-122.36320512 37.40670418,-122.36149849 37.40851392,-122.36730580 37.41054938,-122.37263720 37.41378932,-122.37161871 37.42076600,-122.36566153 37.42006292,-122.36520547 37.42742106,-122.37165953 37.43661157,-122.35943972 37.44459022,-122.35356359 37.44600810,-122.33792254 37.45796329,-122.35228518 37.47478091,-122.35127080 37.48181199,-122.34867342 37.48487322,-122.34359717 37.48801082,-122.33388431 37.48677650,-122.33142321 37.48429747,-122.32929580 37.48473149,-122.32609609 37.48291144,-122.32344850 37.48228229,-122.31924364 37.48410234,-122.31677299 37.48114051,-122.31431751 37.47848973,-122.31259201 37.47682190,-122.31515972 37.47568196,-122.31691389 37.47360309,-122.31292494 37.46960081,-122.31130153 37.46937743,-122.30889894 37.47124987,-122.30612839 37.47011613,-122.30149630 37.46568378,-122.30064277 37.46363784,-122.29283821 37.45922376,-122.28630141 37.45415497,-122.28883099 37.44629920,-122.28316717 37.44197138,-122.27554148 37.42297597,-122.25597410 37.40553692,-122.25196579 37.40129593,-122.25012043 37.40049143,-122.24823207 37.39897758,-122.24754551 37.39740941,-122.24778582 37.39621607,-122.24934787 37.39599102,-122.25005170 37.39871849,-122.25222328 37.39863668,-122.25342491 37.39737529,-122.25520162 37.39667289,-122.25528737 37.39522726,-122.27747460 37.37809616,-122.27977493 37.37858717,-122.28157729 37.37920106,-122.28322534 37.37952846,-122.28416939 37.38092656,-122.28621223 37.37984219,-122.28638389 37.37613857,-122.28382607 37.37843722,-122.27930278 37.37718220,-122.28196361 37.37652740,-122.28295058 37.37568167,-122.28216101 37.37523148,-122.28114822 37.37543608,-122.27934569 37.37528613,-122.27996369 37.37448121,-122.28104521 37.37454944,-122.28185197 37.37422883,-122.28290767 37.37474038,-122.28376597 37.37467224,-122.28428104 37.37399012,-122.28402346 37.37338989,-122.28610922 37.37364914,-122.28651264 37.37327388,-122.28672722 37.37207343,-122.28628398 37.37205448,-122.28574460 37.37166682,-122.28479711 37.37200981,-122.28327731 37.37137228,-122.28285511 37.37100700,-122.28279409 37.37125669,-122.28315527 37.37173756,-122.28321872 37.37220569,-122.28187007 37.37231918,-122.28193109 37.37294908,-122.28139163 37.37319149))";
+ test_self_overlay<polygon>("ticket17", boost::make_tuple(2, 0, 0), ticket17);
+
+ std::string const uscounty_ne = "POLYGON((-72.297814 44.183545,-72.30498 44.183149,-72.306552 44.183668,-72.321587 44.188629,-72.368353 44.204057,-72.362972 44.211115,-72.357354 44.218485,-72.336176 44.246264,-72.333283 44.25006,-72.329737 44.254806,-72.327061 44.258388,-72.316301 44.272583,-72.317394 44.293961,-72.317455 44.295412,-72.317621 44.298382,-72.31757 44.298423,-72.308843 44.30567,-72.308336 44.306161,-72.305947 44.30843,-72.295321 44.31908,-72.292014 44.321754,-72.289771 44.323567,-72.283878 44.32772,-72.282024 44.32927,-72.275139 44.335778,-72.271225 44.339322,-72.269779 44.340275,-72.269584 44.340461,-72.267563 44.343747,-72.255707 44.359532,-72.254273 44.361075,-72.249662 44.367162,-72.249549 44.367339,-72.24832 44.369514,-72.247963 44.369843,-72.245885 44.372717,-72.244210 44.375223,-72.240219 44.380321,-72.24014 44.380422,-72.229086 44.391162,-72.224592 44.39553,-72.224364 44.395751,-72.224549 44.395985,-72.226261 44.398726,-72.225478 44.399979,-72.223603 44.402875,-72.222984 44.403317,-72.222454 44.403753,-72.217109 44.411083,-72.218322 44.411745,-72.218833 44.412134,-72.218904 44.412313,-72.219023 44.412613,-72.219444 44.412803,-72.21963 44.412887,-72.220395 44.413162,-72.220619 44.413527,-72.22215 44.414167,-72.222276 44.414327,-72.222276 44.414784,-72.222565 44.415058,-72.22266 44.415469,-72.222565 44.415583,-72.22282 44.416063,-72.222757 44.416452,-72.222543 44.416596,-72.222247 44.416792,-72.221852 44.416792,-72.221439 44.416564,-72.22084 44.416647,-72.220708 44.416898,-72.221268 44.417736,-72.221378 44.418454,-72.220846 44.418454,-72.220492 44.418406,-72.220095 44.418422,-72.219850 44.418865,-72.220006 44.419292,-72.220514 44.419909,-72.220846 44.420637,-72.220581 44.421159,-72.220824 44.421665,-72.221732 44.42214,-72.222374 44.422757,-72.222971 44.422583,-72.223103 44.422282,-72.223259 44.421981,-72.223923 44.42195,-72.224874 44.421491,-72.22514 44.420827,-72.225557 44.420503,-72.226261 44.420157,-72.226305 44.419869,-72.226807 44.419643,-72.226863 44.419618,-72.227333 44.41927,-72.22776 44.41927,-72.228341 44.419488,-72.22864 44.419675,-72.229199 44.420381,-72.229136 44.421066,-72.228977 44.421181,-72.228945 44.421569,-72.228404 44.421958,-72.228297 44.421996,-72.228021 44.422096,-72.227097 44.422119,-72.226936 44.422302,-72.22649 44.422508,-72.225917 44.422645,-72.224831 44.423217,-72.224068 44.42324,-72.223654 44.423537,-72.223654 44.423717,-72.223654 44.423742,-72.223781 44.42381,-72.223908 44.424587,-72.223924 44.424667,-72.227403 44.426083,-72.228008 44.426329,-72.228662 44.426595,-72.229395 44.426894,-72.230747 44.427231,-72.230971 44.427489,-72.234293 44.428436,-72.236972 44.429199,-72.23719 44.430035,-72.238801 44.430515,-72.24147 44.43131,-72.249962 44.43504,-72.252411 44.436005,-72.255865 44.437305,-72.263358 44.440285,-72.268753 44.442368,-72.277045 44.445563,-72.282573 44.447693,-72.292033 44.451282,-72.299916 44.454331,-72.30082 44.45469,-72.321277 44.462572,-72.325974 44.464436,-72.337127 44.468707,-72.341171 44.470234,-72.348117 44.472931,-72.350859 44.473996,-72.358758 44.477037,-72.371940 44.482113,-72.37455 44.483117,-72.374648 44.483164,-72.374779 44.483225,-72.381115 44.485666,-72.381492 44.485688,-72.392298 44.489866,-72.403342 44.494088,-72.418579 44.499928,-72.418900 44.500046,-72.4255 44.502596,-72.426254 44.502888,-72.434315 44.506098,-72.429847 44.512045,-72.428773 44.513475,-72.421543 44.522929,-72.42088 44.523797,-72.419175 44.524889,-72.416181 44.528756,-72.415673 44.529497,-72.411684 44.534382,-72.403416 44.545482,-72.401901 44.547507,-72.398575 44.553005,-72.396373 44.555888,-72.394723 44.556887,-72.389997 44.563861,-72.38785 44.567083,-72.374786 44.584125,-72.374551 44.584042,-72.374141 44.583887,-72.364296 44.579947,-72.363627 44.579974,-72.362284 44.579484,-72.354192 44.576537,-72.351726 44.575587,-72.346763 44.573679,-72.326173 44.566333,-72.322536 44.56502,-72.312109 44.560996,-72.303198 44.557718,-72.30252 44.557467,-72.299574 44.556334,-72.28218 44.550137,-72.282083 44.550101,-72.280975 44.54965,-72.278823 44.548773,-72.268653 44.544573,-72.268148 44.544564,-72.267242 44.544547,-72.267178 44.544523,-72.266593 44.544303,-72.264975 44.543192,-72.263435 44.542639,-72.263284 44.542541,-72.262964 44.542336,-72.261344 44.544238,-72.259827 44.54559,-72.257865 44.548899,-72.254187 44.554001,-72.249372 44.560675,-72.241644 44.570815,-72.237928 44.576139,-72.237433 44.576818,-72.236396 44.578188,-72.226097 44.591711,-72.224712 44.59373,-72.21978 44.600803,-72.218155 44.602206,-72.210135 44.612594,-72.209324 44.613712,-72.208816 44.614535,-72.207016 44.617438,-72.202901 44.624073,-72.202293 44.625051,-72.199855 44.62841,-72.198157 44.630644,-72.194619 44.635355,-72.193153 44.637354,-72.19052 44.641163,-72.188343 44.644224,-72.184378 44.649871,-72.182172 44.652973,-72.176 44.661598,-72.173651 44.665011,-72.169648 44.67078,-72.165261 44.676857,-72.163971 44.678423,-72.162882 44.679959,-72.158868 44.685588,-72.156736 44.688747,-72.152374 44.694988,-72.150094 44.698355,-72.147612 44.7018,-72.147155 44.702567,-72.146873 44.703032,-72.146226 44.703325,-72.145589 44.702653,-72.141899 44.701438,-72.132779 44.698434,-72.128309 44.696934,-72.124544 44.695638,-72.110654 44.691192,-72.109358 44.690747,-72.088864 44.683714,-72.09305 44.694921,-72.094078 44.697511,-72.094433 44.698327,-72.09461 44.698776,-72.094955 44.699515,-72.095146 44.700011,-72.099952 44.712285,-72.100813 44.714476,-72.101332 44.715715,-72.101783 44.717146,-72.108368 44.733658,-72.114503 44.749624,-72.091369 44.738322,-72.083693 44.734606,-72.061312 44.723479,-72.039137 44.7125,-72.036351 44.711121,-72.02562 44.705812,-72.024818 44.705401,-72.012503 44.698821,-72.010696 44.699614,-72.007273 44.70299,-72.006749 44.703702,-72.005453 44.70441,-72.004999 44.704665,-72.002948 44.706065,-72.002574 44.706344,-71.998947 44.710903,-71.9954 44.715164,-71.995032 44.715247,-71.989775 44.720625,-71.988815 44.721224,-71.981344 44.728822,-71.98093 44.729224,-71.977211 44.732588,-71.976089 44.733763,-71.974770 44.735186,-71.974591 44.73538,-71.973434 44.736503,-71.97039 44.73946,-71.959927 44.749625,-71.958846 44.750086,-71.950606 44.758585,-71.950276 44.758952,-71.943595 44.765337,-71.939936 44.769032,-71.930968 44.765049,-71.928756 44.762738,-71.921857 44.759843,-71.902374 44.750318,-71.882733 44.740608,-71.882573 44.740269,-71.881573 44.739354,-71.876888 44.736935,-71.875148 44.736035,-71.874539 44.735721,-71.858381 44.72766,-71.837294 44.716637,-71.83775 44.716201,-71.852267 44.702366,-71.856071 44.69874,-71.856484 44.698345,-71.87445 44.681027,-71.881231 44.674373,-71.882862 44.67311,-71.883675 44.67175,-71.88436 44.671401,-71.885978 44.669571,-71.888314 44.667829,-71.890624 44.665594,-71.891007 44.664845,-71.898726 44.657917,-71.902653 44.654205,-71.910085 44.64718,-71.910282 44.647038,-71.907401 44.645283,-71.894791 44.638722,-71.89426 44.638626,-71.892962 44.637931,-71.874538 44.628066,-71.86852 44.625053,-71.848306 44.614173,-71.848221 44.614129,-71.842803 44.611203,-71.842732 44.611165,-71.843021 44.610884,-71.856079 44.597255,-71.856286 44.59707,-71.874003 44.580903,-71.874537 44.580409,-71.898111 44.557857,-71.89867 44.557286,-71.908656 44.54708,-71.884835 44.524403,-71.884487 44.524048,-71.874412 44.51323,-71.871838 44.510637,-71.871760 44.51054,-71.861209 44.500056,-71.856636 44.496178,-71.8567 44.496122,-71.874535 44.480282,-71.885627 44.470472,-71.891883 44.464859,-71.893164 44.46383,-71.903342 44.454655,-71.903549 44.454476,-71.912995 44.450245,-71.921348 44.446484,-71.922164 44.44623,-71.925058 44.444914,-71.926307 44.44418,-71.933287 44.441174,-71.91481 44.423081,-71.90842 44.416928,-71.905891 44.414322,-71.898406 44.407105,-71.897962 44.406696,-71.897325 44.406109,-71.886305 44.395364,-71.874506 44.383831,-71.867904 44.377301,-71.865579 44.374962,-71.858643 44.368062,-71.849854 44.359674,-71.847478 44.357361,-71.844776 44.354732,-71.841775 44.351811,-71.840508 44.350578,-71.837656 44.347801,-71.838072 44.347593,-71.83875 44.34721,-71.839767 44.346579,-71.840775 44.345795,-71.84159 44.3453,-71.842483 44.344757,-71.843283 44.34444,-71.844319 44.344204,-71.845288 44.343871,-71.845882 44.343666,-71.846346 44.343506,-71.848005 44.342766,-71.849099 44.342345,-71.849899 44.341978,-71.851118 44.341405,-71.85184 44.341143,-71.852628 44.340873,-71.85355 44.340717,-71.854404 44.340617,-71.855257 44.340589,-71.85619 44.340522,-71.857168 44.340463,-71.858155 44.340363,-71.859166 44.340369,-71.859940 44.340357,-71.860974 44.340282,-71.861941 44.340109,-71.86265 44.33992,-71.863291 44.339778,-71.863719 44.339644,-71.864485 44.339374,-71.865196 44.339071,-71.865895 44.338801,-71.866458 44.338514,-71.866753 44.338322,-71.867509 44.337964,-71.868253 44.337638,-71.869120 44.337288,-71.869616 44.337129,-71.869909 44.336962,-71.870573 44.336804,-71.871203 44.336686,-71.871488 44.336689,-71.871833 44.336641,-71.872472 44.336628,-71.873009 44.336736,-71.873713 44.336973,-71.874326 44.337195,-71.874535 44.337123,-71.874997 44.337226,-71.875514 44.337266,-71.875863 44.33737,-71.876122 44.337482,-71.8762 44.337539,-71.87629 44.337651,-71.876313 44.337732,-71.876324 44.337844,-71.876324 44.337925,-71.876358 44.338054,-71.876403 44.338167,-71.876448 44.338287,-71.876583 44.338424,-71.876685 44.338512,-71.876731 44.338548,-71.876973 44.338572,-71.877493 44.338615,-71.877628 44.338623,-71.877965 44.338719"
+ ",-71.878695 44.338964,-71.879896 44.339367,-71.880546 44.339559,-71.880962 44.33976,-71.881154 44.33988,-71.881895 44.340209,-71.883973 44.341228,-71.884917 44.341717,-71.885044 44.341794,-71.887531 44.3426,-71.888182 44.342807,-71.888483 44.342846,-71.888866 44.342916,-71.88893 44.342938,-71.888994 44.342945,-71.889404 44.343039,-71.889893 44.343174,-71.890324 44.343274,-71.890332 44.343272,-71.890380 44.343255,-71.890408 44.343246,-71.890456 44.343228,-71.890548 44.343209,-71.890644 44.343192,-71.890739 44.343177,-71.890844 44.343173,-71.890926 44.343201,-71.891373 44.343335,-71.892197 44.343693,-71.894326 44.344591,-71.895856 44.345209,-71.898726 44.346251,-71.900162 44.346722,-71.902332 44.347499,-71.903115 44.347694,-71.905036 44.348154,-71.906001 44.348239,-71.906909 44.348284,-71.917008 44.346714,-71.917434 44.346535,-71.918748 44.345555,-71.921314 44.343835,-71.921459 44.343739,-71.924607 44.342252,-71.925088 44.342024,-71.926666 44.340286,-71.928041 44.338516,-71.929109 44.337577,-71.932138 44.336541,-71.935395 44.33577,-71.936773 44.335684,-71.939049 44.335843,-71.942442 44.336805,-71.943365 44.337188,-71.944254 44.337643,-71.945162 44.337744,-71.952593 44.337689,-71.956516 44.337632,-71.958119 44.337544,-71.959965 44.337013,-71.961822 44.336634,-71.963133 44.336556,-71.972572 44.336781,-71.973300 44.336777,-71.977175 44.337518,-71.977971 44.33757,-71.979505 44.337354,-71.980559 44.337486,-71.98112 44.3375,-71.984281 44.336414,-71.984617 44.336243,-71.984729 44.335882,-71.986483 44.331218,-71.987862 44.330081,-71.988305 44.329768,-71.989058 44.329561,-71.992446 44.328548,-71.993662 44.327611,-71.999448 44.325595,-72.000793 44.325295,-72.001221 44.325234,-72.001792 44.325079,-72.002314 44.324871,-72.003547 44.324397,-72.00485 44.324054,-72.005532 44.323829,-72.00676 44.323357,-72.009976 44.321951,-72.012172 44.321408,-72.014543 44.321032,-72.015936 44.320849,-72.01913 44.320383,-72.019577 44.320498,-72.019801 44.32052,-72.019908 44.320683,-72.020149 44.320818,-72.021041 44.320887,-72.021994 44.321184,-72.025782 44.322054,-72.028201 44.322375,-72.029061 44.322398,-72.029698 44.32217,-72.031322 44.320936,-72.031959 44.320662,-72.033136 44.320365,-72.033137 44.319543,-72.033773 44.317989,-72.033806 44.317349,-72.033678 44.316823,-72.03317 44.31632,-72.032341 44.315752,-72.031937 44.315475,-72.031802 44.315383,-72.031739 44.314652,-72.031549 44.313966,-72.031708 44.313007,-72.032218 44.311955,-72.032505 44.310653,-72.032444 44.307134,-72.032316 44.306677,-72.032541 44.303752,-72.032955 44.302701,-72.033464 44.301878,-72.034324 44.300941,-72.03487 44.300512,-72.035660 44.29989,-72.03633 44.298634,-72.03703 44.297834,-72.039003 44.296463,-72.039836 44.296087,-72.040117 44.295962,-72.040543 44.295876,-72.041609 44.295665,-72.041856 44.29565,-72.043202 44.295579,-72.043775 44.295608,-72.044546 44.294969,-72.044926 44.294636,-72.045137 44.29391,-72.045265 44.293198,-72.045745 44.292448,-72.046302 44.291983,-72.047349 44.291581,-72.048216 44.291404,-72.049472 44.291186,-72.051541 44.290889,-72.053355 44.290501,-72.054046 44.289971,-72.055002 44.288945,-72.055964 44.288162,-72.056078 44.287893,-72.056409 44.287618,-72.057273 44.287163,-72.05888 44.28624,-72.059957 44.284767,-72.062298 44.281754,-72.065434 44.277235,-72.066464 44.275093,-72.067774 44.270976,-72.066464 44.268331,-72.065949 44.268666,-72.064544 44.267997,-72.062671 44.269336,-72.060846 44.269972,-72.05874 44.270005,-72.058646 44.269269,-72.059395 44.268365,-72.05888 44.266926,-72.059113 44.265787,-72.058553 44.265285,-72.059021 44.265018,-72.059581 44.264315,-72.059535 44.265687,-72.060378 44.264951,-72.061173 44.263377,-72.061033 44.26244,-72.060333 44.261643,-72.060398 44.261463,-72.060723 44.261313,-72.061173 44.261258,-72.061495 44.260726,-72.06156 44.260621,-72.061542 44.26047,-72.060878 44.260436,-72.060518 44.260284,-72.060307 44.259961,-72.060259 44.259789,-72.060163 44.259766,-72.060194 44.257778,-72.060099 44.257595,-72.059838 44.256295,-72.059782 44.256018,-72.059523 44.255798,-72.059432 44.255721,-72.059018 44.255013,-72.058161 44.253916,-72.058224 44.253823,-72.058033 44.253664,-72.05708 44.252064,-72.056889 44.251859,-72.055694 44.250061,-72.055641 44.249649,-72.055515 44.249615,-72.055483 44.24912,-72.055134 44.248435,-72.054276 44.247703,-72.05399 44.246926,-72.051002 44.244892,-72.050112 44.244046,-72.049604 44.243292,-72.048999 44.242058,-72.04846 44.241212,-72.04792 44.239498,-72.047889 44.238493,-72.048621 44.237145,-72.050209 44.235066,-72.050656 44.233581,-72.052118 44.229856,-72.052469 44.229239,-72.052532 44.228805,-72.053264 44.227114,-72.053581 44.22604,-72.053995 44.224028,-72.0539 44.222703,-72.053614 44.221081,-72.053518 44.221035,-72.053518 44.220852,-72.053423 44.220784,-72.053423 44.220601,-72.053328 44.220487,-72.053328 44.220327,-72.053043 44.219732,-72.052662 44.218841,-72.052966 44.217794,-72.053232 44.216876,-72.05495 44.213677,-72.055903 44.212694,-72.056952 44.212169,-72.058605 44.211803,-72.058954 44.211597,-72.059716 44.210752,-72.060067 44.209998,-72.060067 44.209816,-72.058987 44.208512,-72.058605 44.208215,-72.058542 44.208032,-72.05886 44.207667,-72.058987 44.207164,-72.058906 44.20701,-72.058796 44.206798,-72.058066 44.206067,-72.058194 44.204907,-72.058287 44.204056,-72.058987 44.202114,-72.059564 44.201223,-72.059614 44.201144,-72.059669 44.201061,-72.060067 44.200446,-72.060543 44.200012,-72.062035 44.199074,-72.063560 44.198457,-72.064005 44.198069,-72.064577 44.196949,-72.064608 44.196058,-72.064608 44.195692,-72.06499 44.194801,-72.065213 44.194115,-72.065403 44.192607,-72.066102 44.19039,-72.066166 44.189773,-72.065911 44.189293,-72.065085 44.188631,-72.064285 44.187888,-72.06299 44.186688,-72.061337 44.184951,-72.05956 44.182666,-72.059116 44.181912,-72.058956 44.18182,-72.057496 44.179444,-72.056987 44.178096,-72.056861 44.178027,-72.056862 44.177822,-72.056798 44.17773,-72.056798 44.177433,-72.056575 44.176679,-72.056480 44.176633,-72.05629 44.175742,-72.054734 44.173114,-72.054227 44.172108,-72.054005 44.170646,-72.05391 44.170577,-72.053783 44.169869,-72.053021 44.167903,-72.052196 44.166921,-72.051655 44.166463,-72.050575 44.165961,-72.049179 44.165138,-72.048925 44.164795,-72.048799 44.164498,-72.048672 44.164452,-72.048639 44.164201,-72.048418 44.163926,-72.048355 44.163058,-72.048101 44.162144,-72.047592 44.161801,-72.047022 44.161595,-72.046133 44.161549,-72.043244 44.161869,-72.042830 44.161754,-72.042386 44.161343,-72.042386 44.160817,-72.042672 44.160292,-72.043785 44.158852,-72.044102 44.158121,-72.044039 44.157435,-72.043785 44.157047,-72.0435 44.156841,-72.042801 44.156613,-72.042103 44.15659,-72.041119 44.156864,-72.040167 44.157023,-72.039594 44.156749,-72.039245 44.156703,-72.039150 44.156498,-72.03988 44.155932,-72.039976 44.155858,-72.040082 44.155749,-72.040737 44.155972,-72.041923 44.156312,-72.042043 44.156349,-72.042801 44.156613,-72.044676 44.157097,-72.044884 44.157151,-72.045078 44.157206,-72.045767 44.157401,-72.046234 44.157563,-72.047344 44.157836,-72.048554 44.158134,-72.058602 44.160893,-72.065528 44.162794,-72.066594 44.163099,-72.070984 44.164364,-72.083157 44.167671,-72.083344 44.167722,-72.083451 44.167775,-72.087279 44.168733,-72.091724 44.16998,-72.092625 44.170284,-72.097954 44.171765,-72.100237 44.172391,-72.100809 44.172548,-72.100996 44.172599,-72.101265 44.172673,-72.10189 44.172759,-72.102047 44.172803,-72.105729 44.173842,-72.109921 44.175046,-72.110927 44.175333,-72.116790 44.176949,-72.122705 44.178552,-72.124310 44.179174,-72.133395 44.181725,-72.138984 44.183365,-72.139194 44.183494,-72.139466 44.183503,-72.140796 44.183868,-72.151283 44.186773,-72.166147 44.190938,-72.16836 44.191508,-72.17026 44.192053,-72.171978 44.19207,-72.174381 44.192183,-72.175395 44.192186,-72.187153 44.191379,-72.190945 44.191111,-72.191322 44.191101,-72.192686 44.190957,-72.199012 44.190573,-72.204065 44.190303,-72.209594 44.190003,-72.210965 44.189741,-72.221076 44.189175,-72.229408 44.188625,-72.237321 44.188057,-72.238117 44.188023,-72.24954 44.187528,-72.271323 44.185807,-72.282972 44.184887,-72.297814 44.183545))";
+ test_self_overlay<polygon>("uscounty_ne", boost::make_tuple(1, 0, 0), uscounty_ne);
+
+
+
+}
+#endif
+
+
+#if ! defined(GEOMETRY_TEST_MULTI)
+int test_main(int, char* [])
+{
+ test_self_all<bg::model::d2::point_xy<double> >();
+ return 0;
+}
+#endif
diff --git a/libs/geometry/test/algorithms/overlay/self_intersection_points.vcproj b/libs/geometry/test/algorithms/overlay/self_intersection_points.vcproj
new file mode 100644
index 000000000..a4cdb8049
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/self_intersection_points.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="self_intersection_points"
+ ProjectGUID="{06B6DCBB-AEDA-49FA-81D9-EA8959958EFC}"
+ RootNamespace="self_intersection_points"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\self_intersection_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\self_intersection_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\self_intersection_points.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/split_rings.cpp b/libs/geometry/test/algorithms/overlay/split_rings.cpp
new file mode 100644
index 000000000..00cf9f85b
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/split_rings.cpp
@@ -0,0 +1,155 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <iomanip>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/split_rings.hpp>
+#include <boost/geometry/algorithms/area.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+
+struct test_split_rings
+{
+ template <typename Geometry>
+ static void apply(std::string const& id,
+ Geometry const& geometry,
+ int expected_ring_count,
+ double precision)
+ {
+
+ typedef typename bg::ring_type<Geometry>::type ring_type;
+ std::vector<ring_type> rings;
+ bg::split_rings(geometry, rings);
+
+ BOOST_CHECK_EQUAL(rings.size(), expected_ring_count);
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "split_rings_" << id << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<typename bg::point_type<Geometry>::type> mapper(svg, 500, 500);
+ mapper.add(geometry);
+
+ mapper.map(geometry, "fill:rgb(255,255,128);stroke:rgb(0,0,0);stroke-width:1");
+
+ BOOST_FOREACH(ring_type const& ring, rings)
+ {
+ std::string style = "opacity:0.6;fill:rgb";
+ std::string color = bg::area(ring) > 0 ? "(255,0,0)" : "(0,0,255)";
+ mapper.map(ring, style + color + ";stroke:rgb(128,128,128);stroke-width:3");
+ }
+ }
+#endif
+ }
+};
+
+
+template <typename Geometry>
+void test_geometry(std::string const& caseid,
+ std::string const& wkt,
+ int expected_ring_count, double precision = 0.001)
+{
+ if (wkt.empty())
+ {
+ return;
+ }
+
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+
+ test_split_rings::apply(caseid, geometry, expected_ring_count, precision);
+}
+
+
+#if ! defined(GEOMETRY_TEST_MULTI)
+
+template <typename P>
+void test_self_all()
+{
+ typedef bg::model::polygon<P> polygon;
+
+ // Simplex
+
+ test_geometry<polygon>("1", "POLYGON((0 0,0 10,10 10,5 2,5 8,10 0,0 0))", 2);
+
+
+ // // Many loops (e.g. as result from buffering)
+ test_geometry<polygon>("many_loops",
+ "POLYGON((1 3,0 9,9 5,1 7,9 8,2 5,10 10,9 2,1 3))", 3);
+
+
+ // From "mill" (flower)
+ test_geometry<polygon>("2",
+ "POLYGON((5 6.10557,3.64223 8.82111,4.28284 8.71716,2.28284 6.71716,2.17889 7.35777,4.89443 6,2.17889 4.64223,2.28284 5.28284,4.28284 3.28284,3.62547 3.14045,5 6.10557))",
+ 5);
+
+ test_geometry<polygon>("3",
+ "POLYGON((0.6 10.4,9.4 10.4,9.4 -0.4,7.59 -0.4,4.59 5.33667,4.25383 5.6797,2.67526 4.89042,4.28284 3.28284,3.62547 3.14045,5.15 7.20587,5.15 -0.4,0.6 -0.4,0.6 10.4))",
+ 4);
+
+ test_geometry<polygon>("4",
+ "POLYGON((0.6 10.4,9.4 10.4,9.4 -0.4,4.59 -0.4,4.59 5.5,4.70431 5.22003,3.93716 6.00284,5 7.06569,6.06284 6.00284,5.29569 5.22003,5.41 5.5,5.41 0.01,5.01 0.41,5.25 0.41,4.85 0.01,4.85 7.20587,6.37453 3.14045,5.71716 3.28284,7.71716 5.28284,7.82111 4.64223,5.10557 6,7.82111 7.35777,7.71716 6.71716,5.71716 8.71716,6.35777 8.82111,5 6.10557,3.64223 8.82111,4.28284 8.71716,2.28284 6.71716,2.17889 7.35777,4.89443 6,2.17889 4.64223,2.28284 5.28284,4.28284 3.28284,3.62547 3.14045,5.15 7.20587,5.15 -0.4,0.6 -0.4,0.6 10.4))",
+ 21);
+
+
+ // Split at end-point
+ test_geometry<polygon>("end1", "POLYGON((0 -1,0 10,10 10,10 0,-1 0,0 -1))", 2);
+ test_geometry<polygon>("end2", "POLYGON((0 -1,0 10,11 10,11 11,10 11,10 0,-1 0,0 -1))", 3);
+ test_geometry<polygon>("end3", "POLYGON((0 -1,0 10,11 10,11 12,12 12,12 11,10 11,10 0,-1 0,0 -1))", 4);
+
+ // Common boundaries
+ test_geometry<polygon>("common1", "POLYGON((0 0,0 10,10 10,10 0,15 0,15 5,10 5,10 0,0 0))", 2);
+
+
+ /*
+ // From us counties
+ test_geometry<polygon>("us_counties_1",
+ "POLYGON((-111.5261116995073 41.22069282150765,-111.5217628285303 41.22035416591237,-111.5169320292328 41.22267065617934,-111.5202664326763 41.22008222445458,-111.524706358225 41.21912313459525,-111.5275767689257 41.2191200646373,-111.5313115885788 41.21977799763464,-111.5361319416122 41.22230930953956,-111.5390149025386 41.22669307111289,-111.5389640868764 41.22665820699549,-111.5405314519348 41.226478917027,-111.5432483336679 41.22674131537675,-111.5420873870024 41.22669699246593,-111.5468899132279 41.22714783689431,-111.5460245791811 41.22698484329734,-111.549259355884 41.2274477430645,-111.5577408755315 41.22811342877968,-111.5617324131657 41.22965779857636,-111.5622074202574 41.22994756325099,-111.5670818828246 41.22909494401993,-111.5692718200805 41.22891062885189,-111.5728540853548 41.22873442382645,-111.5760492668632 41.22941962741943,-111.5791498048043 41.22837886418323,-111.5837423095737 41.22837646600842,-111.5873509885199 41.22912252997033,-111.5905502098084 41.23037015657303,-111.5905738976172 41.23038614536871,-111.5911014306057 41.23028197627109,-111.5941112302391 41.22824505355918,-111.595808135602 41.22727811489068,-111.5980905931322 41.22548836332129,-111.5989075933465 41.22473873279626,-111.6007963250705 41.22266022435337,-111.6036899443978 41.22086457915817,-111.6058137732627 41.22012887375856,-111.602749721482 41.22196865310281,-111.5997971061567 41.22806209012482,-111.6002070563618 41.23129419775559,-111.6028708561713 41.23528460733029,-111.5994206515041 41.23211047917744,-111.5970021250484 41.22731367405874,-111.5968553199938 41.2213333698604,-111.5978240860405 41.218735705151,-111.59872799008 41.21674091429518,-111.5990118775156 41.21586922673351,-111.5993569133788 41.21346252288525,-111.601620124863 41.20717717448136,-111.6036896381354 41.20413147570312,-111.6066477579892 41.20036520970371,-111.6170938638088 41.19792503997269,-111.6171211409054 41.197912672181,-111.6174792281175 41.19763333099935,-111.6154497071748 41.19990210883104,-111.6145469690724 41.20214793299209,-111.6143872042365 41.20466380077419,-111.6140900270553 41.2012073328748,-111.6150859490031 41.19660529794054,-111.6218436555485 41.19061554473284,-111.6263257242001 41.18915337689279,-111.6371251993805 41.18909914015737,-111.6373680096377 41.18885567474617,-111.6383949129559 41.18739026040299,-111.6411123401382 41.18431339866869,-111.6444453559743 41.18263938395823,-111.6475502757163 41.18131111472079,-111.6480824344513 41.18111660627603,-111.6487261483388 41.18018217910811,-111.6541286582274 41.17582409853807,-111.6607502293818 41.17606808683036,-111.6639928385305 41.17750001069842,-111.6627289991998 41.17881191178137,-111.6627289991998 41.16984763275211,-111.6723147297616 41.17250652017602,-111.6740201607502 41.17050691221176,-111.6809028142628 41.17126673355348,-111.6809650818884 41.17123939654464,-111.6853833520725 41.17029389383428,-111.6898658836949 41.17133338502266,-111.6902209084905 41.17152318556664,-111.6904607105552 41.17152361200778,-111.6937608878567 41.171379538936,-111.6956197940083 41.17208616938441,-111.6993728847585 41.17040839085778,-111.7047507179242 41.17328962730216,-111.705138917194 41.1733253907057,-111.7102826252236 41.17325145150028,-111.7134998796559 41.17582525522811,-111.713857740997 41.1760577731046,-111.7143713164526 41.17626863893947,-111.714718580845 41.17638849963699,-111.7161627293466 41.17641647553787,-111.7235652490785 41.17698889260424,-111.7252956636535 41.18063938630633,-111.7255467374265 41.18070780591805,-111.7276362413481 41.18341443465751,-111.7281195035541 41.18379477216856,-111.7289633137073 41.18400466618191,-111.7322463245943 41.18537474159142,-111.7350417499302 41.18787350954477,-111.7400241492817 41.18920498371762,-111.7403897806728 41.18992392192225,-111.7405871404544 41.18993880963902,-111.7419062185388 41.19156105303389,-111.7441017621743 41.19149230781282,-111.74633522639 41.19326425318707,-111.7521804511058 41.19568179191514,-111.7548256119847 41.2000988714596,-111.7562439764081 41.20369244649578,-111.756385520958 41.20741568356885,-111.7560620666084 41.21002180147129,-111.7557493627381 41.2115435666562,-111.7556682922401 41.21250032230501,-111.7549762228438 41.2083729918014,-111.753021260936 41.20652061558319,-111.7508964302413 41.20557195114677,-111.7490502562344 41.20743627992862,-111.7538043672131 41.20092160586289,-111.7599851908795 41.19974075159288,-111.7535482000425 41.20277936096064,-111.7771999505038 41.20664084862795,-111.7822946483749 41.20868575255317,-111.7890479847428 41.20857546302415,-111.7834053984034 41.21113545825469,-111.8070916837301 41.21164475084303,-111.7983239620671 41.20690941545636,-111.7989057748419 41.20685382060309,-111.7988970680348 41.20685567247974,-111.8003950034205 41.20645434489455,-111.8015510337817 41.20521459774467,-111.8040078302751 41.20352268624269,-111.8051400156104 41.20305119804074,-111.805500030827 41.2024512874073,-111.8087760206539 41.19898729003837,-111.8127632488366 41.19571430853862,-111.8168246456107 41.19449127428283,-111.8226375152909 41.19565019698728,-111.8231921576817 41.19623717584509,-111.8268842679184 41.19390830631116,-111.8294386474025 41.19326999358571,-111.8281081895357 41.1923520714658,-111.83461841217 41.19040911228597,-111.8363820197726 41.18976234820737,-111.8389082690123 41.18928774535946,-111.8407278566805 41.18914288072003,-111.8414848277101 41.18915262958935,-111.8446813084015 41.18866243446734,-111.845959886583 41.18861802620197,-111.8434859428467 41.18901816674433,-111.8524610560402 41.1882713958049,-111.8481595765179 41.18832631814151,-111.8496570501088 41.18779673144824,-111.8533671749084 41.18768855682465,-111.8555901658855 41.18738820608631,-111.8545856366929 41.18543601585669,-111.8575805827953 41.18393299249777,-111.8615394981653 41.18172167621498,-111.8609477242236 41.1754400940934,-111.8606336522941 41.17523901959252,-111.8627856637925 41.16997723323662,-111.8635235797656 41.16904436111794,-111.8633266432236 41.16866453458245,-111.8616523096336 41.16843313106372,-111.8616216864947 41.16843907484764,-111.8576102899319 41.16714259614227,-111.8547179142898 41.16646709783558,-111.849004376199 41.16243082584917,-111.8507419858166 41.16392775774389,-111.8449330541267 41.15938516033442,-111.8453252871628 41.14671969870953,-111.8475090520856 41.14347927334031,-111.8495994494861 41.14184555885641,-111.8555300241724 41.12935093455723,-111.8539570692924 41.12913464596177,-111.8600529353453 41.12732099986341,-111.8628893201463 41.12732099986341,-111.8661516016343 41.12766178921265,-111.8717554038871 41.12781992480323,-111.8727125056091 41.12781941462108,-111.8744250029675 41.12734726013537,-111.8884146775109 41.12740408919985,-111.8910337085167 41.12670722950872,-111.8905605241137 41.12684570910798,-111.9013989090858 41.12571131225988,-111.902772044475 41.12619651923274,-111.9129115072118 41.12403191483529,-111.9147507512154 41.12495153622086,-111.9201178874858 41.12566715447374,-111.9240696750495 41.12855499923182,-111.9276546757843 41.12501918886934,-111.9355598663484 41.12798289437448,-111.9479782385554 41.12689279975358,-111.9529681915247 41.12994221534668,-111.9568859680716 41.13081283226165,-111.9574421207222 41.13136898494051,-111.9640025656762 41.1310956332098,-111.9657332834527 41.1401588859141,-111.9717215703218 41.14239547503718,-111.9730675011477 41.14266466120236,-111.9787329018218 41.14336183402796,-111.9883596218439 41.14364222393152,-111.9931363926252 41.14354196764271,-111.9994051904948 41.14363978973041,-112.0021307818896 41.14345808374524,-112.019489139395 41.14254400074554,-112.0239643318703 41.14234399927284,-112.026875 41.142344,-112.027575 41.142344,-112.0287262996005 41.142444,-112.029675 41.142444,-112.0285706847393 41.14250516265326,-112.0334643259497 41.14254400007785,-112.037275 41.142544,-112.038460765726 41.14254315085275,-112.0431214055661 41.14232416334449,-112.045375 41.142443"
+ ",-112.045875 41.142443,-112.046183 41.142443,-112.046675 41.142443,-112.04701 41.142443,-112.047675 41.142443,-112.048675 41.142443,-112.050775 41.142443,-112.051675 41.142443,-112.0540827641383 41.14234300009903,-112.0612488438362 41.14234300000304,-112.0635234354713 41.14223960918194,-112.0770714181921 41.14244181784342,-112.083276 41.142343,-112.084776 41.142343,-112.0848417657806 41.14234299978541,-112.0924417865876 41.142443,-112.100276 41.142443,-112.103976 41.142443,-112.104114857411 41.14244299996745,-112.1076037688054 41.1425399140815,-112.112793190197 41.14242459354599,-112.1135036272676 41.14254300000501,-112.1226270227682 41.14254300006021,-112.1324270190691 41.142643,-112.1421638167791 41.142643,-112.1506273882427 41.14262237725859,-112.1576209575547 41.16131792925686,-112.152476 41.142743,-112.1733149590181 41.14274300002015,-112.1756526514941 41.14285431862275,-112.1721656863206 41.14330717334865,-112.1790628146085 41.14280884335523,-112.1808690864646 41.1427879609488,-112.1876051371955 41.1429370321104,-112.1984510116649 41.14057456440421,-112.1985386297479 41.14057190901539,-112.2482545857727 41.12928342466068,-112.2585216921568 41.1262568687031,-112.2815023152398 41.11964490348107,-112.3289786112679 41.10733319877986,-112.3533969705625 41.10142824273057,-112.5251560608342 41.05848586571712,-112.4535385157666 41.13192877978023,-112.3829356229766 41.20387761333999,-112.3628222295217 41.22454031797921,-112.3307981858544 41.25696262304565,-112.2578598211629 41.33099951523954,-112.2419961323004 41.34673900002596,-112.201955 41.34674,-112.198854 41.34674,-112.198567 41.34674,-112.197535 41.34674,-112.196755 41.34674,-112.183092 41.34674,-112.182661 41.34674,-112.174135 41.34674,-112.171521 41.34674,-112.164398 41.34674,-112.163765 41.34674,-112.162149 41.34674,-112.160616 41.34674,-112.152812 41.34674,-112.137305 41.34674,-112.133199 41.34674,-112.132112 41.34674,-112.1321083653075 41.34674,-112.1261408632321 41.34735552370944,-112.1210375425564 41.34723915345325,-112.0986867218297 41.34703960146247,-112.0991128873171 41.34703432373578,-112.096676 41.34703999999999,-112.0826884841567 41.34693962919125,-112.0727519042998 41.34683715821147,-112.0659830006501 41.34633201618576,-112.043791 41.346241,-112.038076 41.346241,-112.037476 41.346241,-112.033576 41.346241,-112.032963751752 41.346241,-112.0320859322845 41.34720047709238,-112.0293729847019 41.35158293065583,-112.0225987768525 41.35384099993897,-112.012945949278 41.35384099993896,-112.0051264048585 41.35982065155388,-111.9999931863867 41.35955048219633,-111.9985054002757 41.36093908247315,-111.9886378853145 41.36437975025613,-111.982438239708 41.36699931881362,-111.9768823000155 41.37105942855347,-111.9678461715639 41.3739866250941,-111.964824595067 41.37468391195694,-111.9684577169769 41.3568526391571,-111.9703144346862 41.35837247542384,-111.9717680562695 41.36002125916402,-111.9721806067458 41.36052336335063,-111.9722701353691 41.36056857086819,-111.9756933090284 41.36361139189865,-111.9764686134888 41.3653518489586,-111.9774815061067 41.36631107832983,-111.9784353725122 41.3673490439311,-111.9818608355456 41.36917725269873,-111.9855534354769 41.3760117250587,-111.9850442656137 41.37863404701749,-111.9854221363925 41.37887044147006,-111.977148428119 41.39494967066619,-111.9823464481754 41.39046084615109,-111.9775668170106 41.39635867866395,-111.9772955142989 41.39712343090701,-111.9777832268621 41.39396396792152,-111.9780769108747 41.39453595193084,-111.9779510967016 41.39732368111444,-111.9769673928205 41.40507237141038,-111.9776418373984 41.4063310929224,-111.979249745182 41.40756511192825,-111.9805546890196 41.41174800617959,-111.9821969091629 41.41376647554345,-111.9822412429523 41.41771857136868,-111.9841029081325 41.42395514822981,-111.9758267412905 41.42973332568962,-111.9744143892868 41.43003915215967,-111.974044426735 41.43044369722418,-111.9724487099302 41.43127793250221,-111.9714554951038 41.43218647543674,-111.9705674410934 41.4326839955389,-111.969173938818 41.43455463604666,-111.9691313074541 41.43514229114804,-111.9698532625346 41.44083524341373,-111.9563035057409 41.44387691758892,-111.9528519001313 41.4425035997071,-111.948862688548 41.43996812957263,-111.9436557129119 41.43464132813732,-111.944571811535 41.43108183151026,-111.9453783570838 41.43429662278894,-111.9453292374341 41.43423156460978,-111.9487047416977 41.4370350518674,-111.949293219852 41.43728152821434,-111.946617863753 41.43651233182759,-111.9427973525344 41.43430728368595,-111.9423776809036 41.43367777659645,-111.9419291943176 41.4334303851785,-111.9407777658475 41.43217660903539,-111.9381879763191 41.43031650193143,-111.9382493895579 41.43040002340472,-111.9372011434928 41.42981718018637,-111.934117584732 41.42860635849613,-111.9324487007684 41.4262717701259,-111.9302590931362 41.42612441754618,-111.925590477184 41.4240869309046,-111.9246983708718 41.42340851775217,-111.9216328785657 41.42175106235152,-111.9201304574531 41.41957427158692,-111.9218350345417 41.42105808569211,-111.9265579698133 41.4224674871054,-111.9269374253964 41.42243152261963,-111.92904005315 41.4216476704315,-111.9263529265228 41.42314117163985,-111.9215977648415 41.42317758175992,-111.9196428552148 41.42261319977101,-111.9169146898828 41.42287472206833,-111.9134215054519 41.42473907134696,-111.9126447259132 41.42469479648941,-111.9124490246428 41.42499795177306,-111.9092387641912 41.42755224569281,-111.9052380937632 41.42897848938426,-111.9002628533518 41.42946382895553,-111.8971561379816 41.42889450986716,-111.8960249780191 41.4283771327491,-111.8940193677521 41.42850175875044,-111.8960340763695 41.42767896956915,-111.9024176724123 41.42135665487622,-111.9015750043214 41.42528897612509,-111.8998000296643 41.4285722194028,-111.8966205495849 41.43183063874344,-111.8944406431162 41.43324514380939,-111.8926252959783 41.43414332950123,-111.8916804311569 41.43450204532494,-111.8813854987459 41.43984949127724,-111.880095916456 41.43458669143437,-111.8830979471463 41.43487808596424,-111.8730501071175 41.43221499037259,-111.8646587191902 41.42862291364479,-111.8681104012376 41.41281394982138,-111.8676066232081 41.41192879397556,-111.8662685472666 41.41047503332864,-111.8648360831269 41.40927056113344,-111.8617555367589 41.40987864206158,-111.8571815473483 41.40797796402953,-111.8529378794857 41.40290666028592,-111.8525219677778 41.40333283159944,-111.8527417149485 41.40333718389994,-111.8501119188309 41.40364548567232,-111.8450021686117 41.40306327006346,-111.843627880848 41.40234608708582,-111.8435199095021 41.40231074220579,-111.844881585803 41.40265278843807,-111.8349256853031 41.39920519979233,-111.832436319031 41.39890094762616,-111.8320872552582 41.39798934323525,-111.8361009415533 41.3978803505358,-111.8321021292179 41.40300459287702,-111.8241291143356 41.40167512219369,-111.8217725690825 41.40211299539512,-111.8212955423522 41.40200922486019,-111.8171546776915 41.40329458953078,-111.8125316083106 41.39846505320347,-111.8124294708664 41.39842288523761,-111.8124264284935 41.3984236578345,-111.8108857608745 41.39858652417184"
+ ",-111.809365213452 41.39987879371605,-111.8042760434507 41.4011908453571,-111.8020686543937 41.40053613590567,-111.8039046363505 41.40017458184678,-111.8042635478739 41.39999258459775,-111.7909954737669 41.40089644205416,-111.7929629310693 41.40139132981063,-111.7846743021944 41.40036870539331,-111.7827866126724 41.39571814524774,-111.7815214169703 41.39299863043483,-111.7828920971421 41.39327334027993,-111.7748509130635 41.38743730378992,-111.7752165761997 41.38718480775791,-111.7721697223399 41.38604483298051,-111.7750983614573 41.386555270279,-111.7639414583505 41.38192065911581,-111.761963781468 41.3800412809659,-111.7613108864837 41.37912231691754,-111.7612258742607 41.37910304832786,-111.7591299416527 41.37968085372221,-111.7577907259937 41.37944029328051,-111.7558579035919 41.38022277149841,-111.7512688505652 41.38095536128881,-111.7482174462501 41.37990334283357,-111.7486646160195 41.37996229584262,-111.7501551896196 41.37882469173843,-111.7454941763277 41.38178624311301,-111.7335398767194 41.38465825647904,-111.7344375425085 41.38458725363097,-111.7324914280349 41.38482975996588,-111.7308102203539 41.38492274099217,-111.730258 41.364938,-111.7400445096964 41.37466081033997,-111.7367972666407 41.37827413406988,-111.7369761626924 41.37865937323883,-111.7373499817572 41.38191202877975,-111.7362382343994 41.3896817282629,-111.7318062031051 41.39385726751244,-111.730934876677 41.39610325892399,-111.7281898573264 41.39852698503418,-111.7232992768295 41.40141614738422,-111.7216699706312 41.40155945218662,-111.7235231380814 41.40068052773415,-111.7265750913976 41.3963025736558,-111.7201029932023 41.40005616511778,-111.7177896512755 41.40746098221877,-111.7158070848994 41.41038399195119,-111.715655176932 41.41047706608663,-111.715983156649 41.40463400375688,-111.7204406800612 41.40810070196405,-111.7274933391879 41.41205246687121,-111.7285125917203 41.41467440623902,-111.728522980037 41.41344595317905,-111.7322942449122 41.41795959302958,-111.731896106543 41.42560633754115,-111.7320332087593 41.42926118743524,-111.729957646899 41.43302822141643,-111.7118843501114 41.43114694815002,-111.7140310900979 41.43355552193208,-111.7078739864605 41.43654866026967,-111.6998524797112 41.43271471504839,-111.6986652926243 41.42986102526688,-111.6975120881016 41.42897853603878,-111.6971210984819 41.4282934699863,-111.6961606079428 41.42773075204737,-111.6959864719628 41.42776692740181,-111.6933497690836 41.42989872972967,-111.6930019315523 41.42994586089555,-111.6917153721713 41.43152040923766,-111.6902295574764 41.4326187150197,-111.6857899530101 41.43448702217745,-111.6836120286734 41.43709471482509,-111.6771247652154 41.43723637943522,-111.6779983979918 41.43725697173675,-111.6749495172627 41.43734007411281,-111.6746735498744 41.43741591954125,-111.6720209667629 41.43783594325005,-111.6727109972352 41.43770166372526,-111.6553038799185 41.42796846134614,-111.6559813580971 41.42929086121254,-111.6584331526525 41.4317013458235,-111.6584370945208 41.43170379247909,-111.6526596626538 41.42834717102206,-111.6520987713805 41.42542774863863,-111.651155399945 41.42497098966823,-111.6485038542844 41.42069082966789,-111.6484473142877 41.42048207616851,-111.6481701857523 41.42030165647017,-111.6458111338422 41.41860283437335,-111.6435250708396 41.41556473317775,-111.6434325770253 41.41553749590582,-111.6387074295628 41.41091893071695,-111.6382542875749 41.40697282822121,-111.6430587268327 41.41423110967988,-111.6474946531616 41.41493287990986,-111.6519130312862 41.41196173789954,-111.6533453458041 41.4089750382549,-111.6534670630606 41.40818567942468,-111.6532180676668 41.41233729755218,-111.650141671316 41.41784707703802,-111.6506362105335 41.41721786169201,-111.6483458444573 41.42038505559527,-111.6399883913355 41.42456782419585,-111.6387619333563 41.42531302770971,-111.6372313167869 41.42610278062988,-111.6388772156545 41.42503724999391,-111.6241185051481 41.42565671005583,-111.6292989198989 41.42747881108829,-111.6330212257612 41.42632935426848,-111.6300888540781 41.42874135696512,-111.6258525865511 41.43045665694785,-111.6200937473438 41.43292197700307,-111.6163818162207 41.43227133372919,-111.6139121279047 41.43210192316946,-111.6127778034731 41.431778181874,-111.6100998879303 41.43186873969825,-111.6033371287108 41.42772766687219,-111.6022619251007 41.41977026042356,-111.6042208823911 41.42642276689722,-111.6042547368996 41.42641106290917,-111.608203778722 41.42866129535266,-111.6088030126456 41.42877501302603,-111.6100720883581 41.428785889551,-111.6085308515393 41.42932400636524,-111.606750545072 41.42926095100312,-111.6050156683234 41.42987323575301,-111.6032457428657 41.43066814395039,-111.5990673748855 41.43148472494484,-111.5935002234159 41.43042488220517,-111.5930272861467 41.42998515359408,-111.5930267097009 41.42998503477877,-111.5926383972181 41.42952847560235,-111.5893656740488 41.42939120933852,-111.5879879513229 41.42897465490946,-111.5877655061638 41.42920784693975,-111.5872128087414 41.42998364520915,-111.583805331358 41.43402279679681,-111.5850015607415 41.43257430449172,-111.5682595644039 41.43689127289402,-111.5655580307463 41.43431733658391,-111.5648140723382 41.43437789786282,-111.5588494686844 41.43147389314375,-111.5627733442355 41.43390475163831,-111.5467595603931 41.43097085352397,-111.5435231017314 41.4216909235525,-111.5442217676426 41.42410058028637,-111.5429581915997 41.4198629141784,-111.5415905096045 41.41916883276773,-111.5377466703981 41.42118674271469,-111.4999002636551 41.40754598864975,-111.49992321854 41.41992376877793,-111.5043942337116 41.42316548043323,-111.5074667581468 41.42367669767896,-111.5018577201973 41.42339139933106,-111.498492694593 41.42223736811422,-111.4908347022589 41.41568090530068,-111.4908130094445 41.41544015588016,-111.4899750552739 41.41493216608176,-111.4892746770538 41.41472074332899,-111.4877789754887 41.41479252991904,-111.4780235955907 41.41446855024663,-111.4758343817126 41.4101305233553,-111.4667945916543 41.408008495426,-111.4649303818979 41.39743051733797,-111.4670499026164 41.38880238826368,-111.4675403497742 41.39238946277144,-111.4682693256192 41.3896798556904,-111.468223034458 41.38866896494368,-111.4679524737185 41.3873696044556,-111.467909790308 41.38511421668602,-111.4689252899892 41.3893194192861,-111.4719613794916 41.39260783946975,-111.4773850453548 41.3939272250177,-111.4755047817366 41.39401042247292,-111.4730700536672 41.3936966334367,-111.4707125540257 41.39313997077441,-111.4681148394472 41.39206078401419,-111.4673020106218 41.39150164420799,-111.4650634653196 41.39118921312598,-111.4624398349077 41.3906400254072,-111.4605400175199 41.38972232484358,-111.4570460693707 41.38909801417777,-111.4548503602481 41.38578941112745,-111.4481916270633 41.37903507093495,-111.4538905371506 41.37167946112217,-111.4523110338275 41.37562482145626,-111.453122061191 41.38030214182341,-111.4559274593289 41.38258137778414,-111.4578400905912 41.38326186498487,-111.4580092624499 41.38328010181085,-111.4545500072416 41.38310423553524,-111.453828693243 41.38286176547096,-111.4513917306495 41.38316888047494,-111.4490880680225 41.38286920566615,-111.4458883535083 41.38283562865421,-111.4410455091279 41.38056286130516,-111.4296540092564 41.37759174629597,-111.4330684620716 41.37199485958408,-111.4325288499295 41.37170115977816,-111.433423614824 41.37148481989143,-111.4327514468304 41.37229760229101,-111.4292876194388 41.37329041914894,-111.4279628046368 41.37382224950171,-111.4310504194527 41.37201570165918,-111.4220511206116 41.37680632625185,-111.4132007135549 41.36916475528064,-111.4132556937664 41.36821137521456,-111.410599947015 41.3655167694235,-111.4095467780071 41.35588239586497,-111.4153923235931 41.35080670253447,-111.4157574283901 41.3503345776012,-111.4141595503214 41.35370156318688,-111.4141624489772 41.35339760480722,-111.4115288588478 41.35121628241728"
+ ",-111.4156461230987 41.34027082280225,-111.4156347336163 41.34011622708512,-111.4219171529141 41.33399691991721,-111.4230512496498 41.33351877639811,-111.4246536800136 41.33255158448824,-111.4278802645644 41.3316442458971,-111.4321841269485 41.3326384089827,-111.4310435307007 41.3328305819942,-111.4298921041398 41.33381070679388,-111.4325816436783 41.34640754412428,-111.4305938656625 41.34507358150004,-111.4288086603161 41.342542060306,-111.431481679049 41.34513109369425,-111.4287994278175 41.33815667720043,-111.4278232779227 41.33641772801344,-111.4265560012482 41.33289501968777,-111.4265560012482 41.32617628698502,-111.4272107382647 41.32560778902531,-111.4272178782421 41.32554523388917,-111.4261980734283 41.32225817088516,-111.4304919167739 41.31367048419434,-111.4363369977304 41.31257559725096,-111.4394237666417 41.31270635296883,-111.4394344156974 41.31270409565712,-111.441519161219 41.31236426658026,-111.4381960052264 41.31363247642526,-111.4343497992445 41.31844116068382,-111.4351634377084 41.3136073258965,-111.4398662896243 41.30910418220708,-111.4422468135143 41.30752683142005,-111.44538081134 41.30634785128562,-111.4477252742131 41.30622230681761,-111.4450982072919 41.30679223598104,-111.4415499070308 41.30926911751111,-111.440343520513 41.31155182354399,-111.4451062874178 41.31989072583871,-111.4414187617719 41.31986572481608,-111.4386063431991 41.31574156424257,-111.4372288340086 41.31425825843935,-111.4357467129998 41.3119401785306,-111.4339202494052 41.30822377235391,-111.4336625137004 41.30069611228576,-111.436193501451 41.29832538323529,-111.4342850140522 41.29308194363609,-111.4328391389641 41.29555271021763,-111.4325216530159 41.29665639935071,-111.4347508608123 41.30443260100356,-111.4360586780902 41.30564636670918,-111.4346792471093 41.30464063662748,-111.4254390049755 41.29528237788455,-111.4291302686912 41.29068338555521,-111.4261573074688 41.28463104839097,-111.4370267030589 41.27981638195083,-111.4375558321362 41.27935123578043,-111.4354383430839 41.27995632635503,-111.4416162807751 41.2758529929185,-111.4384076084416 41.27957295063146,-111.4377212864738 41.2850520602332,-111.4381740345049 41.28651100478594,-111.4384610963577 41.28700771059263,-111.4443864706288 41.29120163044556,-111.4392995187362 41.28993258176533,-111.437506253794 41.28634485567613,-111.4356263875061 41.28302577228677,-111.4349277183834 41.27937332380423,-111.4350242056712 41.26951553923891,-111.4419729572562 41.26823923756828,-111.443851402553 41.26628117225569,-111.4466503255125 41.26617791598309,-111.4466539930302 41.26617467737448,-111.4520015669708 41.26396940238351,-111.4535032224145 41.26442883740561,-111.4575335757568 41.26357415147228,-111.4483713214452 41.27007784433943,-111.4479650010794 41.2717768437342,-111.4480273600067 41.27313463677613,-111.4493445602483 41.27659822195652,-111.4478190730863 41.27422750187978,-111.4464117327744 41.26893674882813,-111.4496732569538 41.26159468063268,-111.4543300686382 41.25793771380997,-111.4571410161368 41.2577942766178,-111.4584177002777 41.25730159262817,-111.4553050787541 41.25932963474278,-111.4530081358515 41.26959930131982,-111.4508994156196 41.26371450013092,-111.4541957910179 41.25962837787136,-111.4533513082429 41.25606707336917,-111.4584511900491 41.24989054984832,-111.4611419330649 41.24901272751228,-111.4642296892219 41.2471079915566,-111.466302267792 41.24724208780359,-111.4612041454673 41.25525650795958,-111.4613628730978 41.25711686602586,-111.460012566547 41.25068020785515,-111.4631190491229 41.24557484651866,-111.4668960494423 41.24198842878425,-111.4691669157075 41.2417000374843,-111.4697812813245 41.24112614793989,-111.4746504843807 41.23477980181183,-111.4803977314971 41.23547461817721,-111.4807668379497 41.23549157614718,-111.4821598518453 41.235181287545,-111.4835147362251 41.23397825845257,-111.4913294700869 41.23144137067924,-111.4937928098947 41.23127714842143,-111.4853525806721 41.23734674935701,-111.4851730213113 41.24391252958296,-111.4868064098187 41.24667054274708,-111.4899998360328 41.24898263383229,-111.4827890866642 41.24415984037166,-111.4821185211798 41.23272415759732,-111.4852056387818 41.22855546079995,-111.4871367392634 41.22636620973306,-111.4877302368984 41.22602162842327,-111.4866371991571 41.22728810367443,-111.4862618064053 41.21244302667023,-111.5038439093175 41.21886594606829,-111.5086526752272 41.22023174933462,-111.5093913926803 41.21966687966173,-111.5156021372448 41.21908063181036,-111.5179945315531 41.21978213857661,-111.5200627063573 41.21974916010367,-111.5242768213902 41.22009310457656,-111.5261116995073 41.22069282150765))",
+ 22);
+ */
+
+}
+#endif
+
+
+
+#if ! defined(GEOMETRY_TEST_MULTI)
+int test_main(int, char* [])
+{
+ test_self_all<bg::model::d2::point_xy<double> >();
+ return 0;
+}
+#endif
diff --git a/libs/geometry/test/algorithms/overlay/split_rings.vcproj b/libs/geometry/test/algorithms/overlay/split_rings.vcproj
new file mode 100644
index 000000000..cb9b6bf78
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/split_rings.vcproj
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="split_rings"
+ ProjectGUID="{271231F9-F7DA-4218-8538-0E9DCD688D09}"
+ RootNamespace="split_rings"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\split_rings"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\split_rings"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\split_rings.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/traverse.cpp b/libs/geometry/test/algorithms/overlay/traverse.cpp
new file mode 100644
index 000000000..f3705ca03
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/traverse.cpp
@@ -0,0 +1,1030 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#define BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE
+//#define BOOST_GEOMETRY_OVERLAY_NO_THROW
+//#define TEST_WITH_SVG
+//#define HAVE_TTMATH
+
+#include <iostream>
+#include <iomanip>
+#include <fstream>
+#include <sstream>
+#include <string>
+
+#include <boost/type_traits/is_same.hpp>
+
+#ifdef HAVE_TTMATH
+# include <boost/geometry/contrib/ttmath_stub.hpp>
+#endif
+
+#include <geometry_test_common.hpp>
+
+
+// #define BOOST_GEOMETRY_DEBUG_ENRICH
+//#define BOOST_GEOMETRY_DEBUG_RELATIVE_ORDER
+
+// #define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
+// #define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
+
+
+#define BOOST_GEOMETRY_TEST_OVERLAY_NOT_EXCHANGED
+
+#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
+# define BOOST_GEOMETRY_DEBUG_IDENTIFIER
+#endif
+
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
+#include <boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp>
+#include <boost/geometry/algorithms/detail/overlay/traverse.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/correct.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <algorithms/overlay/overlay_cases.hpp>
+
+static inline std::string operation(int d)
+{
+ return d == 1 ? "union" : "intersection";
+}
+
+namespace detail
+{
+
+template
+<
+ typename G1, typename G2,
+ bg::detail::overlay::operation_type Direction,
+ bool Reverse1, bool Reverse2
+>
+struct test_traverse
+{
+
+ static void apply(std::string const& id,
+ std::size_t expected_count, double expected_area,
+ G1 const& g1, G2 const& g2,
+ double precision)
+ {
+ // DEBUG ONE or FEW CASE(S) ONLY
+ //if (! boost::contains(id, "36") || Direction != 1) return;
+ //if (! boost::contains(id, "iet_") || boost::contains(id, "st")) return;
+ //if (! boost::contains(id, "66") || Direction != 1) return;
+ //if (! boost::contains(id, "92") && ! boost::contains(id, "96") ) return;
+ //if (! (boost::contains(id, "58_st") || boost::contains(id, "59_st") || boost::contains(id, "60_st") || boost::contains(id, "83")) ) return;
+ //if (! (boost::contains(id, "81") || boost::contains(id, "82") || boost::contains(id, "84") || boost::contains(id, "85") || boost::contains(id, "68")) ) return;
+ //if (! (boost::contains(id, "81") || boost::contains(id, "86") || boost::contains(id, "88")) ) return;
+ //if (! boost::contains(id, "58_") || Direction != 1) return;
+ //if (! boost::contains(id, "55") || Direction != 1) return;
+ //if (! boost::contains(id, "55_iet_iet") || Direction != 1) return;
+ //if (! boost::contains(id, "55_st_iet") || Direction != 1) return;
+ //if (! boost::contains(id, "55_iet_st") || Direction != 1) return;
+ //if (! boost::contains(id, "54_st_st") || Direction != 1) return;
+ //if (! boost::contains(id, "54_iet_st") || Direction != 1) return;
+ //if (! (boost::contains(id, "54_") || boost::contains(id, "55_")) || Direction != 1) return;
+ //if (Direction != 1) return;
+ // END DEBUG ONE ...
+
+
+ /*** FOR REVERSING ONLY
+ {
+ // If one or both are invalid (e.g. ccw),
+ // they can be corrected by uncommenting this section
+ G1 cg1 = g1;
+ G2 cg2 = g2;
+ bg::correct(cg1);
+ bg::correct(cg2);
+ std::cout << std::setprecision(12)
+ << bg::wkt(cg1) << std::endl
+ << bg::wkt(cg2) << std::endl;
+ }
+ ***/
+
+#if defined(BOOST_GEOMETRY_DEBUG_OVERLAY) || defined(BOOST_GEOMETRY_DEBUG_ENRICH)
+ bool const ccw =
+ bg::point_order<G1>::value == bg::counterclockwise
+ || bg::point_order<G2>::value == bg::counterclockwise;
+
+ std::cout << std::endl
+ << "TRAVERSE"
+ << " " << id
+ << (ccw ? "_ccw" : "")
+ << " " << string_from_type<typename bg::coordinate_type<G1>::type>::name()
+ << "(" << operation(Direction) << ")" << std::endl;
+
+ //std::cout << bg::area(g1) << " " << bg::area(g2) << std::endl;
+#endif
+
+ typedef typename bg::strategy::side::services::default_strategy
+ <
+ typename bg::cs_tag<G1>::type
+ >::type side_strategy_type;
+
+
+ typedef bg::detail::overlay::traversal_turn_info
+ <
+ typename bg::point_type<G2>::type
+ > turn_info;
+ std::vector<turn_info> turns;
+
+ bg::detail::get_turns::no_interrupt_policy policy;
+ bg::get_turns<Reverse1, Reverse2, bg::detail::overlay::calculate_distance_policy>(g1, g2, turns, policy);
+ bg::enrich_intersection_points<Reverse1, Reverse2>(turns,
+ Direction == 1 ? bg::detail::overlay::operation_union
+ : bg::detail::overlay::operation_intersection,
+ g1, g2, side_strategy_type());
+
+ typedef bg::model::ring<typename bg::point_type<G2>::type> ring_type;
+ typedef std::vector<ring_type> out_vector;
+ out_vector v;
+
+
+ bg::detail::overlay::traverse
+ <
+ Reverse1, Reverse2,
+ G1, G2
+ >::apply(g1, g2, Direction, turns, v);
+
+ // Check number of resulting rings
+ BOOST_CHECK_MESSAGE(expected_count == boost::size(v),
+ "traverse: " << id
+ << " #shapes expected: " << expected_count
+ << " detected: " << boost::size(v)
+ << " type: " << string_from_type
+ <typename bg::coordinate_type<G1>::type>::name()
+ );
+
+ // Check total area of resulting rings
+ typename bg::default_area_result<G1>::type total_area = 0;
+ BOOST_FOREACH(ring_type const& ring, v)
+ {
+ total_area += bg::area(ring);
+ //std::cout << bg::wkt(ring) << std::endl;
+ }
+
+ BOOST_CHECK_CLOSE(expected_area, total_area, precision);
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "traverse_" << operation(Direction)
+ << "_" << id
+ << "_" << string_from_type<typename bg::coordinate_type<G1>::type>::name()
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<typename bg::point_type<G2>::type> mapper(svg, 500, 500);
+ mapper.add(g1);
+ mapper.add(g2);
+
+ // Input shapes in green/blue
+ mapper.map(g1, "fill-opacity:0.5;fill:rgb(153,204,0);"
+ "stroke:rgb(153,204,0);stroke-width:3");
+ mapper.map(g2, "fill-opacity:0.3;fill:rgb(51,51,153);"
+ "stroke:rgb(51,51,153);stroke-width:3");
+
+ // Traversal rings in magenta outline/red fill -> over blue/green this gives brown
+ BOOST_FOREACH(ring_type const& ring, v)
+ {
+ mapper.map(ring, "fill-opacity:0.2;stroke-opacity:0.4;fill:rgb(255,0,0);"
+ "stroke:rgb(255,0,255);stroke-width:8");
+ }
+
+ // turn points in orange, + enrichment/traversal info
+ typedef typename bg::coordinate_type<G1>::type coordinate_type;
+
+ // Simple map to avoid two texts at same place (note that can still overlap!)
+ std::map<std::pair<int, int>, int> offsets;
+ int index = 0;
+ int const margin = 5;
+
+ BOOST_FOREACH(turn_info const& turn, turns)
+ {
+ int lineheight = 10;
+ mapper.map(turn.point, "fill:rgb(255,128,0);"
+ "stroke:rgb(0,0,0);stroke-width:1", 3);
+
+ {
+ coordinate_type half = 0.5;
+ coordinate_type ten = 10;
+ // Map characteristics
+ // Create a rounded off point
+ std::pair<int, int> p
+ = std::make_pair(
+ boost::numeric_cast<int>(half
+ + ten * bg::get<0>(turn.point)),
+ boost::numeric_cast<int>(half
+ + ten * bg::get<1>(turn.point))
+ );
+ std::string style = "fill:rgb(0,0,0);font-family:Arial;font-size:10px";
+
+ if (turn.discarded)
+ {
+ style = "fill:rgb(92,92,92);font-family:Arial;font-size:6px";
+ lineheight = 6;
+ }
+
+ //if (! turn.is_discarded() && ! turn.blocked() && ! turn.both(bg::detail::overlay::operation_union))
+ //if (! turn.discarded)
+ {
+ std::ostringstream out;
+ out << index
+ << ": " << bg::method_char(turn.method)
+ << std::endl
+ << "op: " << bg::operation_char(turn.operations[0].operation)
+ << " / " << bg::operation_char(turn.operations[1].operation)
+ << (turn.is_discarded() ? " (discarded) " : turn.blocked() ? " (blocked)" : "")
+ << std::endl;
+
+ if (turn.operations[0].enriched.next_ip_index != -1)
+ {
+ out << "ip: " << turn.operations[0].enriched.next_ip_index;
+ }
+ else
+ {
+ out << "vx: " << turn.operations[0].enriched.travels_to_vertex_index
+ << " -> ip: " << turn.operations[0].enriched.travels_to_ip_index;
+ }
+ out << " / ";
+ if (turn.operations[1].enriched.next_ip_index != -1)
+ {
+ out << "ip: " << turn.operations[1].enriched.next_ip_index;
+ }
+ else
+ {
+ out << "vx: " << turn.operations[1].enriched.travels_to_vertex_index
+ << " -> ip: " << turn.operations[1].enriched.travels_to_ip_index;
+ }
+
+ out << std::endl;
+
+ /*out
+
+ << std::setprecision(3)
+ << "dist: " << boost::numeric_cast<double>(turn.operations[0].enriched.distance)
+ << " / " << boost::numeric_cast<double>(turn.operations[1].enriched.distance)
+ << std::endl
+ << "vis: " << bg::visited_char(turn.operations[0].visited)
+ << " / " << bg::visited_char(turn.operations[1].visited);
+ */
+
+ /*
+ out << index
+ << ": " << bg::operation_char(turn.operations[0].operation)
+ << " " << bg::operation_char(turn.operations[1].operation)
+ << " (" << bg::method_char(turn.method) << ")"
+ << (turn.ignore() ? " (ignore) " : " ")
+ << std::endl
+
+ << "ip: " << turn.operations[0].enriched.travels_to_ip_index
+ << "/" << turn.operations[1].enriched.travels_to_ip_index;
+
+ if (turn.operations[0].enriched.next_ip_index != -1
+ || turn.operations[1].enriched.next_ip_index != -1)
+ {
+ out << " [" << turn.operations[0].enriched.next_ip_index
+ << "/" << turn.operations[1].enriched.next_ip_index
+ << "]"
+ ;
+ }
+ out << std::endl;
+
+
+ out
+ << "vx:" << turn.operations[0].enriched.travels_to_vertex_index
+ << "/" << turn.operations[1].enriched.travels_to_vertex_index
+ << std::endl
+
+ << std::setprecision(3)
+ << "dist: " << turn.operations[0].enriched.distance
+ << " / " << turn.operations[1].enriched.distance
+ << std::endl
+ */
+
+
+
+ offsets[p] += lineheight;
+ int offset = offsets[p];
+ offsets[p] += lineheight * 3;
+ mapper.text(turn.point, out.str(), style, margin, offset, lineheight);
+ }
+ index++;
+ }
+ }
+ }
+#endif
+ }
+};
+}
+
+template
+<
+ typename G1, typename G2,
+ bg::detail::overlay::operation_type Direction,
+ bool Reverse1 = false,
+ bool Reverse2 = false
+>
+struct test_traverse
+{
+ typedef detail::test_traverse
+ <
+ G1, G2, Direction, Reverse1, Reverse2
+ > detail_test_traverse;
+
+ inline static void apply(std::string const& id, std::size_t expected_count, double expected_area,
+ std::string const& wkt1, std::string const& wkt2,
+ double precision = 0.001)
+ {
+ if (wkt1.empty() || wkt2.empty())
+ {
+ return;
+ }
+
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ bg::correct(g1);
+ bg::correct(g2);
+
+ //std::cout << bg::wkt(g1) << std::endl;
+ //std::cout << bg::wkt(g2) << std::endl;
+
+ // Try the overlay-function in both ways
+ std::string caseid = id;
+ //goto case_reversed;
+
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ std::cout << std::endl << std::endl << "# " << caseid << std::endl;
+#endif
+ detail_test_traverse::apply(caseid, expected_count, expected_area, g1, g2, precision);
+
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ return;
+#endif
+
+ //case_reversed:
+#if ! defined(BOOST_GEOMETRY_TEST_OVERLAY_NOT_EXCHANGED)
+ caseid = id + "_rev";
+#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
+ std::cout << std::endl << std::endl << "# " << caseid << std::endl;
+#endif
+
+ detail_test_traverse::apply(caseid, expected_count, expected_area, g2, g1, precision);
+#endif
+ }
+};
+
+#if ! defined(BOOST_GEOMETRY_TEST_MULTI)
+template <typename T>
+void test_all(bool test_self_tangencies = true, bool test_mixed = false)
+{
+ using namespace bg::detail::overlay;
+
+ typedef bg::model::point<T, 2, bg::cs::cartesian> P;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::box<P> box;
+
+ // 1-6
+ test_traverse<polygon, polygon, operation_intersection>::apply("1", 1, 5.4736, case_1[0], case_1[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("2", 1, 12.0545, case_2[0], case_2[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("3", 1, 5, case_3[0], case_3[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("4", 1, 10.2212, case_4[0], case_4[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("5", 2, 12.8155, case_5[0], case_5[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("6", 1, 4.5, case_6[0], case_6[1]);
+
+ // 7-12
+ test_traverse<polygon, polygon, operation_intersection>::apply("7", 0, 0, case_7[0], case_7[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("8", 0, 0, case_8[0], case_8[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("9", 0, 0, case_9[0], case_9[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("10", 0, 0, case_10[0], case_10[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("11", 1, 1, case_11[0], case_11[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("12", 2, 0.63333, case_12[0], case_12[1]);
+
+ // 13-18
+ test_traverse<polygon, polygon, operation_intersection>::apply("13", 0, 0, case_13[0], case_13[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("14", 0, 0, case_14[0], case_14[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("15", 0, 0, case_15[0], case_15[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("16", 0, 0, case_16[0], case_16[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("17", 1, 2, case_17[0], case_17[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("18", 1, 2, case_18[0], case_18[1]);
+
+ // 19-24
+ test_traverse<polygon, polygon, operation_intersection>::apply("19", 0, 0, case_19[0], case_19[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("20", 1, 5.5, case_20[0], case_20[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("21", 0, 0, case_21[0], case_21[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("22", 0, 0, case_22[0], case_22[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("23", 1, 1.4, case_23[0], case_23[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("24", 1, 1.0, case_24[0], case_24[1]);
+
+ // 25-30
+ test_traverse<polygon, polygon, operation_intersection>::apply("25", 0, 0, case_25[0], case_25[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("26", 0, 0, case_26[0], case_26[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("27", 1, 0.9545454, case_27[0], case_27[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("28", 1, 0.9545454, case_28[0], case_28[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("29", 1, 1.4, case_29[0], case_29[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("30", 1, 0.5, case_30[0], case_30[1]);
+
+ // 31-36
+ test_traverse<polygon, polygon, operation_intersection>::apply("31", 0, 0, case_31[0], case_31[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("32", 0, 0, case_32[0], case_32[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("33", 0, 0, case_33[0], case_33[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("34", 1, 0.5, case_34[0], case_34[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("35", 1, 1.0, case_35[0], case_35[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("36", 1, 1.625, case_36[0], case_36[1]);
+
+ // 37-42
+ test_traverse<polygon, polygon, operation_intersection>::apply("37", 2, 0.666666, case_37[0], case_37[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("38", 2, 0.971429, case_38[0], case_38[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("39", 1, 24, case_39[0], case_39[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("40", 0, 0, case_40[0], case_40[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("41", 1, 5, case_41[0], case_41[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("42", 1, 5, case_42[0], case_42[1]);
+
+ // 43-48 - invalid polygons
+ //test_traverse<polygon, polygon, operation_intersection>::apply("43", 2, 0.75, case_43[0], case_43[1]);
+ //test_traverse<polygon, polygon, operation_intersection>::apply("44", 1, 44, case_44[0], case_44[1]);
+ //test_traverse<polygon, polygon, operation_intersection>::apply("45", 1, 45, case_45[0], case_45[1]);
+ //test_traverse<polygon, polygon, operation_intersection>::apply("46", 1, 46, case_46[0], case_46[1]);
+ //test_traverse<polygon, polygon, operation_intersection>::apply("47", 1, 47, case_47[0], case_47[1]);
+
+ // 49-54
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("50", 0, 0, case_50[0], case_50[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("51", 0, 0, case_51[0], case_51[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("52", 1, 10.5, case_52[0], case_52[1]);
+ if (test_self_tangencies)
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("53_st", 0, 0, case_53[0], case_53[1]);
+ }
+ test_traverse<polygon, polygon, operation_intersection>::apply("53_iet", 0, 0, case_53[0], case_53[2]);
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("54_iet_iet", 1, 2, case_54[1], case_54[3]);
+ if (test_self_tangencies)
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("54_st_iet", 1, 2, case_54[0], case_54[3]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("54_iet_st", 1, 2, case_54[1], case_54[2]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("54_st_st", 1, 2, case_54[0], case_54[2]);
+ }
+
+ if (test_self_tangencies)
+ {
+ // 55-60
+ test_traverse<polygon, polygon, operation_intersection>::apply("55_st_st", 1, 2, case_55[0], case_55[2]);
+ }
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("55_st_iet", 1, 2, case_55[0], case_55[3]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("55_iet_st", 1, 2, case_55[1], case_55[2]);
+ if (test_self_tangencies)
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("56", 2, 4.5, case_56[0], case_56[1]);
+ }
+ test_traverse<polygon, polygon, operation_intersection>::apply("55_iet_iet", 1, 2, case_55[1], case_55[3]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("57", 2, 5.9705882, case_57[0], case_57[1]);
+
+ if (test_self_tangencies)
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("58_st",
+ 2, 0.333333, case_58[0], case_58[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("59_st",
+ 2, 1.5416667, case_59[0], case_59[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("60_st",
+ 3, 2, case_60[0], case_60[1]);
+ }
+ test_traverse<polygon, polygon, operation_intersection>::apply("58_iet",
+ 2, 0.333333, case_58[0], case_58[2]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("59_iet",
+ 2, 1.5416667, case_59[0], case_59[2]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("60_iet",
+ 3, 2, case_60[0], case_60[2]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("61_st",
+ 0, 0, case_61[0], case_61[1]);
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("70",
+ 2, 4, case_70[0], case_70[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("71",
+ 2, 2, case_71[0], case_71[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("72",
+ 3, 2.85, case_72[0], case_72[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("79",
+ 2, 20, case_79[0], case_79[1]);
+
+ // other
+
+
+ // pies (went wrong when not all cases where implemented, especially some collinear (opposite) cases
+ test_traverse<polygon, polygon, operation_intersection>::apply("pie_16_4_12",
+ 1, 491866.5, pie_16_4_12[0], pie_16_4_12[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("pie_23_21_12_500",
+ 2, 2363199.3313, pie_23_21_12_500[0], pie_23_21_12_500[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("pie_23_23_3_2000",
+ 2, 1867779.9349, pie_23_23_3_2000[0], pie_23_23_3_2000[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("pie_23_16_16",
+ 2, 2128893.9555, pie_23_16_16[0], pie_23_16_16[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("pie_16_2_15_0",
+ 0, 0, pie_16_2_15_0[0], pie_16_2_15_0[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("pie_4_13_15",
+ 1, 490887.06678, pie_4_13_15[0], pie_4_13_15[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("pie_20_20_7_100",
+ 2, 2183372.2718, pie_20_20_7_100[0], pie_20_20_7_100[1]);
+
+
+
+ // 1-6
+ test_traverse<polygon, polygon, operation_union>::apply("1", 1, 11.5264, case_1[0], case_1[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("2", 1, 17.9455, case_2[0], case_2[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("3", 1, 9, case_3[0], case_3[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("4", 3, 17.7788, case_4[0], case_4[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("5", 2, 18.4345, case_5[0], case_5[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("6", 1, 9, case_6[0], case_6[1]);
+
+ // 7-12
+ test_traverse<polygon, polygon, operation_union>::apply("7", 1, 9, case_7[0], case_7[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("8", 1, 12, case_8[0], case_8[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("9", 0, 0 /*UU 2, 11*/, case_9[0], case_9[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("10", 1, 9, case_10[0], case_10[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("11", 1, 8, case_11[0], case_11[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("12", 2, 8.36667, case_12[0], case_12[1]);
+
+ // 13-18
+ test_traverse<polygon, polygon, operation_union>::apply("13", 1, 4, case_13[0], case_13[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("14", 1, 12, case_14[0], case_14[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("15", 1, 12, case_15[0], case_15[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("16", 1, 9, case_16[0], case_16[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("17", 1, 8, case_17[0], case_17[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("18", 1, 8, case_18[0], case_18[1]);
+
+ // 19-24
+ test_traverse<polygon, polygon, operation_union>::apply("19", 1, 10, case_19[0], case_19[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("20", 1, 5.5, case_20[0], case_20[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("21", 0, 0, case_21[0], case_21[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("22", 0, 0 /*UU 2, 9.5*/, case_22[0], case_22[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("23", 1, 6.1, case_23[0], case_23[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("24", 1, 5.5, case_24[0], case_24[1]);
+
+ // 25-30
+ test_traverse<polygon, polygon, operation_union>::apply("25", 0, 0 /*UU 2, 7*/, case_25[0], case_25[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("26", 0, 0 /*UU 2, 7.5 */, case_26[0], case_26[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("27", 1, 8.04545, case_27[0], case_27[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("28", 1, 10.04545, case_28[0], case_28[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("29", 1, 8.1, case_29[0], case_29[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("30", 1, 6.5, case_30[0], case_30[1]);
+
+ // 31-36
+ test_traverse<polygon, polygon, operation_union>::apply("31", 0, 0 /*UU 2, 4.5 */, case_31[0], case_31[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("32", 0, 0 /*UU 2, 4.5 */, case_32[0], case_32[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("33", 0, 0 /*UU 2, 4.5 */, case_33[0], case_33[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("34", 1, 6.0, case_34[0], case_34[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("35", 1, 10.5, case_35[0], case_35[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("36", 1 /*UU 2*/, 14.375, case_36[0], case_36[1]);
+
+ // 37-42
+ test_traverse<polygon, polygon, operation_union>::apply("37", 1, 7.33333, case_37[0], case_37[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("38", 1, 9.52857, case_38[0], case_38[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("39", 1, 40.0, case_39[0], case_39[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("40", 0, 0 /*UU 2, 11 */, case_40[0], case_40[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("41", 1, 5, case_41[0], case_41[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("42", 1, 5, case_42[0], case_42[1]);
+
+ // 43-48
+ //test_traverse<polygon, polygon, operation_union>::apply("43", 3, 8.1875, case_43[0], case_43[1]);
+ //test_traverse<polygon, polygon, operation_union>::apply("44", 1, 44, case_44[0], case_44[1]);
+ //test_traverse<polygon, polygon, operation_union>::apply("45", 1, 45, case_45[0], case_45[1]);
+ //test_traverse<polygon, polygon, operation_union>::apply("46", 1, 46, case_46[0], case_46[1]);
+ //test_traverse<polygon, polygon, operation_union>::apply("47", 1, 47, case_47[0], case_47[1]);
+
+ // 49-54
+
+ test_traverse<polygon, polygon, operation_union>::apply("50", 1, 25, case_50[0], case_50[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("51", 0, 0, case_51[0], case_51[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("52", 1, 15.5, case_52[0], case_52[1]);
+ if (test_self_tangencies)
+ {
+ test_traverse<polygon, polygon, operation_union>::apply("53_st", 2, 16, case_53[0], case_53[1]);
+ }
+ test_traverse<polygon, polygon, operation_union>::apply("53_iet",
+ 2, 16, case_53[0], case_53[2]);
+ if (test_self_tangencies)
+ {
+ test_traverse<polygon, polygon, operation_union>::apply("54_st_st", 2, 20, case_54[0], case_54[2]);
+ test_traverse<polygon, polygon, operation_union>::apply("54_st_iet", 2, 20, case_54[0], case_54[3]);
+ test_traverse<polygon, polygon, operation_union>::apply("54_iet_st", 2, 20, case_54[1], case_54[2]);
+ }
+ test_traverse<polygon, polygon, operation_union>::apply("54_iet_iet", 2, 20, case_54[1], case_54[3]);
+
+ if (test_mixed)
+ {
+ test_traverse<polygon, polygon, operation_union>::apply("55_st_iet", 2, 18, case_55[0], case_55[3]);
+ test_traverse<polygon, polygon, operation_union>::apply("55_iet_st", 2, 18, case_55[1], case_55[2]);
+ // moved to mixed
+ test_traverse<polygon, polygon, operation_union>::apply("55_iet_iet", 3, 18, case_55[1], case_55[3]);
+ }
+
+ // 55-60
+ if (test_self_tangencies)
+ {
+ // 55 with both input polygons having self tangencies (st_st) generates 1 correct shape
+ test_traverse<polygon, polygon, operation_union>::apply("55_st_st", 1, 18, case_55[0], case_55[2]);
+ // 55 with one of them self-tangency, other int/ext ring tangency generate 2 correct shapes
+
+ test_traverse<polygon, polygon, operation_union>::apply("56", 2, 14, case_56[0], case_56[1]);
+ }
+ test_traverse<polygon, polygon, operation_union>::apply("57", 1, 14.029412, case_57[0], case_57[1]);
+
+ if (test_self_tangencies)
+ {
+ test_traverse<polygon, polygon, operation_union>::apply("58_st",
+ 4, 12.16666, case_58[0], case_58[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("59_st",
+ 2, 17.208333, case_59[0], case_59[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("60_st",
+ 3, 19, case_60[0], case_60[1]);
+ }
+ test_traverse<polygon, polygon, operation_union>::apply("58_iet",
+ 4, 12.16666, case_58[0], case_58[2]);
+ test_traverse<polygon, polygon, operation_union>::apply("59_iet",
+ 1, -3.791666, // 2, 17.208333), outer ring (ii/ix) is done by ASSEMBLE
+ case_59[0], case_59[2]);
+ test_traverse<polygon, polygon, operation_union>::apply("60_iet",
+ 3, 19, case_60[0], case_60[2]);
+ test_traverse<polygon, polygon, operation_union>::apply("61_st",
+ 1, 4, case_61[0], case_61[1]);
+
+ test_traverse<polygon, polygon, operation_union>::apply("70",
+ 1, 9, case_70[0], case_70[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("71",
+ 2, 9, case_71[0], case_71[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("72",
+ 1, 10.65, case_72[0], case_72[1]);
+
+
+
+ // other
+ test_traverse<polygon, polygon, operation_intersection>::apply("collinear_overlaps",
+ 1, 24,
+ collinear_overlaps[0], collinear_overlaps[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_overlaps",
+ 1, 50,
+ collinear_overlaps[0], collinear_overlaps[1]);
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("many_situations", 1, 184, case_many_situations[0], case_many_situations[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("many_situations",
+ 1, 207, case_many_situations[0], case_many_situations[1]);
+
+
+ // From "intersection piets", robustness test.
+ // This all went wrong in the past
+ // (when not all cases (get_turns) where implemented,
+ // especially important are some collinear (opposite) cases)
+ test_traverse<polygon, polygon, operation_union>::apply("pie_16_4_12",
+ 1, 3669665.5, pie_16_4_12[0], pie_16_4_12[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("pie_23_21_12_500",
+ 1, 6295516.7185, pie_23_21_12_500[0], pie_23_21_12_500[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("pie_23_23_3_2000",
+ 1, 7118735.0530, pie_23_23_3_2000[0], pie_23_23_3_2000[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("pie_23_16_16",
+ 1, 5710474.5406, pie_23_16_16[0], pie_23_16_16[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("pie_16_2_15_0",
+ 1, 3833641.5, pie_16_2_15_0[0], pie_16_2_15_0[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("pie_4_13_15",
+ 1, 2208122.43322, pie_4_13_15[0], pie_4_13_15[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("pie_20_20_7_100",
+ 1, 5577158.72823, pie_20_20_7_100[0], pie_20_20_7_100[1]);
+
+ /*
+ if (test_not_valid)
+ {
+ test_traverse<polygon, polygon, operation_union>::apply("pie_5_12_12_0_7s",
+ 1, 3271710.48516, pie_5_12_12_0_7s[0], pie_5_12_12_0_7s[1]);
+ }
+ */
+
+ static const bool is_float
+ = boost::is_same<T, float>::value;
+ static const bool is_double
+ = boost::is_same<T, double>::value
+ || boost::is_same<T, long double>::value;
+
+ static const double float_might_deviate_more = is_float ? 0.1 : 0.001; // In some cases up to 1 promille permitted
+
+ // GCC: does not everywhere handle float correctly (in our algorithms)
+ bool const is_float_on_non_msvc =
+#if defined(_MSC_VER)
+ false;
+#else
+ is_float;
+#endif
+
+
+
+ // From "Random Ellipse Stars", robustness test.
+ // This all went wrong in the past
+ // when using Determinant/ra/rb and comparing with 0/1
+ // Solved now by avoiding determinant / using sides
+ // ("hv" means "high volume")
+ {
+ double deviation = is_float ? 0.01 : 0.001;
+ test_traverse<polygon, polygon, operation_union>::apply("hv1", 1, 1624.508688461573, hv_1[0], hv_1[1], deviation);
+ test_traverse<polygon, polygon, operation_intersection>::apply("hv1", 1, 1622.7200125123809, hv_1[0], hv_1[1], deviation);
+
+ test_traverse<polygon, polygon, operation_union>::apply("hv2", 1, 1622.9193392726836, hv_2[0], hv_2[1], deviation);
+ test_traverse<polygon, polygon, operation_intersection>::apply("hv2", 1, 1622.1733591429329, hv_2[0], hv_2[1], deviation);
+
+ test_traverse<polygon, polygon, operation_union>::apply("hv3", 1, 1624.22079205664, hv_3[0], hv_3[1], deviation);
+ test_traverse<polygon, polygon, operation_intersection>::apply("hv3", 1, 1623.8265057282042, hv_3[0], hv_3[1], deviation);
+
+
+ if (! is_float)
+ {
+ test_traverse<polygon, polygon, operation_union>::apply("hv4", 1, 1626.5146964146334, hv_4[0], hv_4[1], deviation);
+ test_traverse<polygon, polygon, operation_intersection>::apply("hv4", 1, 1626.2580370864305, hv_4[0], hv_4[1], deviation);
+ test_traverse<polygon, polygon, operation_union>::apply("hv5", 1, 1624.2158307261871, hv_5[0], hv_5[1], deviation);
+ test_traverse<polygon, polygon, operation_intersection>::apply("hv5", 1, 1623.4506071521519, hv_5[0], hv_5[1], deviation);
+
+ // Case 2009-12-07
+ test_traverse<polygon, polygon, operation_intersection>::apply("hv6", 1, 1604.6318757402121, hv_6[0], hv_6[1], deviation);
+ test_traverse<polygon, polygon, operation_union>::apply("hv6", 1, 1790.091872401327, hv_6[0], hv_6[1], deviation);
+
+ // Case 2009-12-08, needing sorting on side in enrich_intersection_points
+ test_traverse<polygon, polygon, operation_union>::apply("hv7", 1, 1624.5779453641017, hv_7[0], hv_7[1], deviation);
+ test_traverse<polygon, polygon, operation_intersection>::apply("hv7", 1, 1623.6936420295772, hv_7[0], hv_7[1], deviation);
+ }
+ }
+
+ // From "Random Ellipse Stars", robustness test.
+ // This all went wrong in the past when distances (see below) were zero (dz)
+ // "Distance zero", dz, means: the distance between two intersection points
+ // on a same segment is 0, therefore it can't be sorted normally, therefore
+ // the chance is 50% that the segments are not sorted correctly and the wrong
+ // decision is taken.
+ // Solved now (by sorting on sides in those cases)
+ if (! is_float_on_non_msvc)
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("dz_1",
+ 3, 16.887537949472005, dz_1[0], dz_1[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("dz_1",
+ 3, 1444.2621305732864, dz_1[0], dz_1[1]);
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("dz_2",
+ 2, 68.678921274288541, dz_2[0], dz_2[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("dz_2",
+ 2, 1505.4202304878663, dz_2[0], dz_2[1]);
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("dz_3",
+ 6, 192.49316937645651, dz_3[0], dz_3[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("dz_3",
+ 6, 1446.496005965641, dz_3[0], dz_3[1]);
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("dz_4",
+ 1, 473.59423868207693, dz_4[0], dz_4[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("dz_4",
+ 1, 1871.6125138873476, dz_4[0], dz_4[1]);
+ }
+
+ // Real-life problems
+
+ // SNL (Subsidiestelsel Natuur & Landschap - verAANnen)
+
+ if (! is_float_on_non_msvc)
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("snl-1",
+ 2, 286.996062095888,
+ snl_1[0], snl_1[1],
+ float_might_deviate_more);
+
+ test_traverse<polygon, polygon, operation_union>::apply("snl-1",
+ 2, 51997.5408506132,
+ snl_1[0], snl_1[1],
+ float_might_deviate_more);
+ }
+
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("isov",
+ 1, 88.1920, isovist[0], isovist[1],
+ float_might_deviate_more);
+ test_traverse<polygon, polygon, operation_union>::apply("isov",
+ 1, 313.3604, isovist[0], isovist[1],
+ float_might_deviate_more);
+ }
+
+ // GEOS tests
+ if (! is_float)
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("geos_1_test_overlay",
+ 1, 3461.02330171138, geos_1_test_overlay[0], geos_1_test_overlay[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("geos_1_test_overlay",
+ 1, 3461.31592235516, geos_1_test_overlay[0], geos_1_test_overlay[1]);
+
+ if (! is_double)
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("geos_2",
+ 2, 2.157e-6, // by bg/ttmath; sql server reports: 2.20530228034477E-06
+ geos_2[0], geos_2[1]);
+ }
+ test_traverse<polygon, polygon, operation_union>::apply("geos_2",
+ 1, 350.550662845485,
+ geos_2[0], geos_2[1]);
+ }
+
+ if (! is_float && ! is_double)
+ {
+ test_traverse<polygon, polygon, operation_intersection>::apply("geos_3",
+ 1, 2.484885e-7,
+ geos_3[0], geos_3[1]);
+ }
+
+ if (! is_float_on_non_msvc)
+ {
+ // Sometimes output is reported as 29229056
+ test_traverse<polygon, polygon, operation_union>::apply("geos_3",
+ 1, 29391548.5,
+ geos_3[0], geos_3[1],
+ float_might_deviate_more);
+
+ // Sometimes output is reported as 0.078125
+ test_traverse<polygon, polygon, operation_intersection>::apply("geos_4",
+ 1, 0.0836884926070727,
+ geos_4[0], geos_4[1],
+ float_might_deviate_more);
+ }
+
+ test_traverse<polygon, polygon, operation_union>::apply("geos_4",
+ 1, 2304.41633605957,
+ geos_4[0], geos_4[1]);
+
+ if (! is_float)
+ {
+
+#if defined(_MSC_VER)
+ double const expected = if_typed_tt<T>(3.63794e-17, 0.0);
+ int expected_count = if_typed_tt<T>(1, 0);
+#else
+ double const expected = if_typed<T, long double>(2.77555756156289135106e-17, 0.0);
+ int expected_count = if_typed<T, long double>(1, 0);
+#endif
+
+ // Calculate intersection/union of two triangles. Robustness case.
+ // ttmath can form a very small intersection triangle
+ // (which is even not accomplished by SQL Server/PostGIS)
+ std::string const caseid = "ggl_list_20110820_christophe";
+ test_traverse<polygon, polygon, operation_intersection>::apply(caseid,
+ expected_count, expected,
+ ggl_list_20110820_christophe[0], ggl_list_20110820_christophe[1]);
+ test_traverse<polygon, polygon, operation_union>::apply(caseid,
+ 1, 67.3550722317627,
+ ggl_list_20110820_christophe[0], ggl_list_20110820_christophe[1]);
+ }
+
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_f",
+ 1, 4.60853,
+ buffer_rt_f[0], buffer_rt_f[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply("buffer_rt_f",
+ 1, 0.0002943725152286,
+ buffer_rt_f[0], buffer_rt_f[1], 0.01);
+
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g",
+ 1, 16.571,
+ buffer_rt_g[0], buffer_rt_g[1]);
+
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g_boxes1",
+ 1, 20,
+ buffer_rt_g_boxes[0], buffer_rt_g_boxes[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g_boxes2",
+ 1, 24,
+ buffer_rt_g_boxes[0], buffer_rt_g_boxes[2]);
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g_boxes3",
+ 1, 28,
+ buffer_rt_g_boxes[0], buffer_rt_g_boxes[3]);
+
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_rt_g_boxes43",
+ 1, 30,
+ buffer_rt_g_boxes[4], buffer_rt_g_boxes[3]);
+
+
+ if (boost::is_same<T, double>::value)
+ {
+ test_traverse<polygon, polygon, operation_union>::apply("buffer_mp2",
+ 2, 36.7535642, buffer_mp2[0], buffer_mp2[1], 0.01);
+ }
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_rr",
+ 1, 6.41, collinear_opposite_right[0], collinear_opposite_right[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_ll",
+ 1, 11.75, collinear_opposite_left[0], collinear_opposite_left[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_ss",
+ 1, 6, collinear_opposite_straight[0], collinear_opposite_straight[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_lr",
+ 1, 8.66, collinear_opposite_left[0], collinear_opposite_right[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("collinear_opposite_rl",
+ 1, 9, collinear_opposite_right[0], collinear_opposite_left[1]);
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("ticket_7462", 1, 0.220582, ticket_7462[0], ticket_7462[1]);
+
+#ifdef BOOST_GEOMETRY_OVERLAY_NO_THROW
+ {
+ // NOTE: currently throws (normally)
+ std::string caseid = "ggl_list_20120229_volker";
+ test_traverse<polygon, polygon, operation_union>::apply(caseid,
+ 1, 99,
+ ggl_list_20120229_volker[0], ggl_list_20120229_volker[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply(caseid,
+ 1, 99,
+ ggl_list_20120229_volker[0], ggl_list_20120229_volker[1]);
+ caseid = "ggl_list_20120229_volker_2";
+ test_traverse<polygon, polygon, operation_union>::apply(caseid,
+ 1, 99,
+ ggl_list_20120229_volker[2], ggl_list_20120229_volker[1]);
+ test_traverse<polygon, polygon, operation_intersection>::apply(caseid,
+ 1, 99,
+ ggl_list_20120229_volker[2], ggl_list_20120229_volker[1]);
+ }
+#endif
+}
+
+template <typename T>
+void test_open()
+{
+ using namespace bg::detail::overlay;
+
+ typedef bg::model::polygon
+ <
+ bg::model::point<T, 2, bg::cs::cartesian>,
+ true, false
+ > polygon;
+
+ test_traverse<polygon, polygon, operation_intersection>::apply("open_1", 1, 5.4736,
+ open_case_1[0], open_case_1[1]);
+ test_traverse<polygon, polygon, operation_union>::apply("open_1", 1, 11.5264,
+ open_case_1[0], open_case_1[1]);
+}
+
+
+template <typename T>
+void test_ccw()
+{
+ using namespace bg::detail::overlay;
+
+ typedef bg::model::polygon
+ <
+ bg::model::point<T, 2, bg::cs::cartesian>,
+ false, true
+ > polygon;
+
+ test_traverse<polygon, polygon, operation_intersection, true, true>::apply("ccw_1", 1, 5.4736,
+ ccw_case_1[0], ccw_case_1[1]);
+ test_traverse<polygon, polygon, operation_union, true, true>::apply("ccw_1", 1, 11.5264,
+ ccw_case_1[0], ccw_case_1[1]);
+}
+
+
+
+int test_main(int, char* [])
+{
+#if defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
+ test_all<double>();
+#else
+ test_all<float>();
+ test_all<double>();
+ test_open<double>();
+ test_ccw<double>();
+
+#if ! defined(_MSC_VER)
+ test_all<long double>();
+#endif
+
+#ifdef HAVE_TTMATH
+ test_all<ttmath_big>();
+#endif
+#endif
+
+ return 0;
+ }
+
+#endif
diff --git a/libs/geometry/test/algorithms/overlay/traverse.vcproj b/libs/geometry/test/algorithms/overlay/traverse.vcproj
new file mode 100644
index 000000000..f5c83a551
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/traverse.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="traverse"
+ ProjectGUID="{6260214E-DB6F-4934-ADF7-DD2B1666171B}"
+ RootNamespace="traverse"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\traverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../..;../..;../../../../../boost/geometry/extensions/contrib/ttmath"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\traverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../..;../..;../../../../../boost/geometry/extensions/contrib/ttmath"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\traverse.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/overlay/traverse_gmp.cpp b/libs/geometry/test/algorithms/overlay/traverse_gmp.cpp
new file mode 100644
index 000000000..46da653d8
--- /dev/null
+++ b/libs/geometry/test/algorithms/overlay/traverse_gmp.cpp
@@ -0,0 +1,209 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#if defined(_MSC_VER)
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4267 )
+#endif
+
+//#define GEOMETRY_DEBUG_INTERSECTION
+
+
+#include <iostream>
+#include <iomanip>
+#include <string>
+#include <fstream>
+
+#include <boost/numeric_adaptor/numeric_adaptor.hpp>
+#include <boost/numeric_adaptor/gmp_value_type.hpp>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
+#include <boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp>
+#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
+#include <boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp>
+#include <boost/geometry/algorithms/detail/overlay/traverse.hpp>
+
+
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#define TEST_WITH_SVG
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+
+
+template <typename OutputType, typename G1, typename G2>
+void test_traverse(std::string const& caseid, G1 const& g1, G2 const& g2)
+{
+ typedef bg::detail::intersection::intersection_point
+ <typename bg::point_type<G2>::type> ip;
+ typedef typename boost::range_const_iterator<std::vector<ip> >::type iterator;
+ typedef std::vector<ip> ip_vector;
+ ip_vector ips;
+
+ typedef typename bg::strategy::side::services::default_strategy
+ <
+ typename bg::cs_tag<G1>::type
+ >::type strategy_type;
+
+
+ typedef bg::detail::overlay::traversal_turn_info
+ <
+ typename bg::point_type<G2>::type
+ > turn_info;
+ typedef typename boost::range_iterator<const std::vector<turn_info> >::type iterator;
+ std::vector<turn_info> ips;
+
+ bg::get_turns<false, false, bg::detail::overlay::calculate_distance_policy>(g1, g2, ips);
+ bg::enrich_intersection_points(ips, g1, g2, strategy_type());
+
+ typedef bg::model::ring<typename bg::point_type<G2>::type> ring_type;
+ typedef std::vector<ring_type> out_vector;
+ out_vector v;
+
+
+
+ bg::traverse
+ <
+ strategy_type,
+ ring_type
+ >
+ (
+ g1, g2, -1, ips, std::back_inserter(v)
+ );
+
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ std::ostringstream filename;
+ filename << "intersection_" << caseid << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ // Trick to have this always LongDouble
+ //typedef bg::model::d2::point_xy<long double> P;
+ typedef typename bg::point_type<G1>::type P;
+ //typename bg::replace_point_type<G1, P>::type rg1;
+ //typename bg::replace_point_type<G2, P>::type rg2;
+
+ bg::svg_mapper<P> mapper(svg, 1000, 800);
+
+ mapper.add(g1);
+ mapper.add(g2);
+
+ // Input shapes in green/blue
+ mapper.map(g1, "opacity:0.8;fill:rgb(0,255,0);"
+ "stroke:rgb(0,0,0);stroke-width:1");
+ mapper.map(g2, "opacity:0.8;fill:rgb(0,0,255);"
+ "stroke:rgb(0,0,0);stroke-width:1");
+
+ // Traversal rings in red
+ for (typename out_vector::const_iterator it = boost::begin(v);
+ it != boost::end(v);
+ ++it)
+ {
+ mapper.map(*it, "fill-opacity:0.1;stroke-opacity:0.9;"
+ "fill:rgb(255,0,0);stroke:rgb(255,0,0);stroke-width:5");
+
+ std::cout << bg::wkt(*it) << std::endl;
+ std::cout << bg::area(*it) << std::endl;
+ }
+
+ // IP's in orange
+ for (iterator it = boost::begin(ips); it != boost::end(ips); ++it)
+ {
+ mapper.map(it->point, "fill:rgb(255,128,0);"
+ "stroke:rgb(0,0,100);stroke-width:1");
+ }
+ }
+#endif
+}
+
+template <typename OutputType, typename G1, typename G2>
+void test_one(std::string const& caseid, std::string const& wkt1, std::string const& wkt2)
+{
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ bg::correct(g1);
+ bg::correct(g2);
+ std::cout << "area1 " << bg::area(g1) << " " << " area2: " << bg::area(g2) << std::endl;
+
+ test_traverse<OutputType>(caseid, g1, g2);
+}
+
+
+#if ! defined(GEOMETRY_TEST_MULTI)
+
+template <typename P>
+void test_traverse_gmp(std::string const& caseid)
+{
+ typedef bg::model::polygon<P> polygon;
+ std::cout << typeid(typename bg::coordinate_type<P>::type).name() << std::endl;
+ std::cout << std::setprecision(30) << std::numeric_limits<float>::epsilon() << std::endl;
+ std::cout << std::setprecision(30) << std::numeric_limits<double>::epsilon() << std::endl;
+ std::cout << std::setprecision(30) << std::numeric_limits<long double>::epsilon() << std::endl;
+
+ static std::string brandon[3] =
+ {
+ //37.43402099609375 1.470055103302002,
+ "POLYGON((37.29449462890625 1.7902572154998779,37.000419616699219 1.664225697517395,37.140213012695313 1.3446992635726929,50.974888957147442 -30.277285722290763,57.297810222148939 -37.546793343968417,41.590042114257813 -7.2021245956420898,40.6978759765625 -5.4500408172607422,40.758884429931641 -5.418975830078125,42.577911376953125 -4.4901103973388672,42.577877044677734 -4.4900407791137695,42.699958801269531 -4.4278755187988281,46.523914387974358 -8.5152102535033496,47.585065917176543 -6.1314922196594779,45.389434814453125 -4.5143837928771973,46.296027072709599 -2.4984308554828116,37.29449462890625 1.7902572154998779))",
+ "POLYGON((42.399410247802734 1.4956772327423096,42.721500396728516 2.2342472076416016,42.721500396728516 3.6584999561309814,51.20102152843122 7.1738039562841562,51.370888500897557 7.4163459734570729,37.43402099609375 1.470055103302002,37.29449462890625 1.7902572154998779,37.000419616699219 1.664225697517395,37.140213012695313 1.3446992635726929,36.954700469970703 1.2597870826721191,26.472516656201325 -3.5380830513658776,27.069889344709196 -4.2926591211028242,30.501169204711914 -2.3718316555023193,32.708126068115234 -2.3611266613006592,32.708126068115234 -2.3611700534820557,32.708168029785156 -2.3611698150634766,32.718830108642578 -4.3281683921813965,29.135100397190627 -8.9262827849488211,29.619997024536133 -9.5368013381958008,30.339155197143555 -8.9838371276855469,30.670633316040039 -8.8180980682373047,30.896280288696289 -9.1206979751586914,30.207040612748258 -10.275926149505661,30.947774887084961 -11.208560943603516,31.669155120849609 -10.653837203979492,32.000633239746094 -10.488097190856934,32.226280212402344 -10.790698051452637,31.682494778186321 -12.133624901803865,32.274600982666016 -12.879127502441406,32.998821258544922 -12.323249816894531,33.339523315429688 -12.147735595703125,33.566280364990234 -12.450697898864746,33.164891643669634 -14.000060288415174,33.598796844482422 -14.546377182006836,34.328716278076172 -13.992490768432617,34.658355712890625 -13.81736946105957,34.886280059814453 -14.120697975158691,34.634240447128811 -15.85007183479255,34.931102752685547 -16.223842620849609,35.656356811523438 -15.66030216217041,35.963497161865234 -15.476018905639648,37.326129913330078 -17.190576553344727,38.823680877685547 -16.296066284179688,39.966808319091797 -17.625011444091797,40.800632476806641 -17.208097457885742,41.821544647216797 -19.211688995361328,41.988733475572282 -19.945838749437218,57.524304765518266 -37.807195733984784,41.590042114257813 -7.2021245956420898,40.6978759765625 -5.4500408172607422,40.758884429931641 -5.418975830078125,42.577911376953125 -4.4901103973388672,42.577877044677734 -4.4900407791137695,42.699958801269531 -4.4278755187988281,46.559533858616469 -8.435196445683264,47.604561877161387 -6.087697464505224,45.389434814453125 -4.5143837928771973,46.695858001708984 -1.6093428134918213,47.263670054709685 -1.784876824891044,47.830955505371094 -0.69758313894271851,48.43512638981781 -0.81299959072453376,49.071769542946825 0.61489892713413252,43.764598846435547 0.93951499462127686,43.644271850585938 0.96149998903274536,42.399410247802734 1.4956772327423096))",
+ "POLYGON((43.644271850585938 0.96149998903274536,43.764598846435547 0.93951499462127686,49.071769542946825 0.61489892713413252,48.43512638981781 -0.81299959072453376,47.830955505371094 -0.69758313894271851,47.263670054709685 -1.784876824891044,46.695858001708984 -1.6093428134918213,45.389434814453125 -4.5143837928771973,47.604561877161387 -6.087697464505224,46.559533858616469 -8.435196445683264,42.699958801269531 -4.4278755187988281,42.577877044677734 -4.4900407791137695,42.577911376953125 -4.4901103973388672,40.758884429931641 -5.418975830078125,40.6978759765625 -5.4500408172607422,41.590042114257813 -7.2021245956420898,57.524304765518266 -37.807195733984784,41.988733475572282 -19.945838749437218,41.821544647216797 -19.211688995361328,40.800632476806641 -17.208097457885742,39.966808319091797 -17.625011444091797,38.823680877685547 -16.296066284179688,37.326129913330078 -17.190576553344727,35.963497161865234 -15.476018905639648,35.656356811523438 -15.66030216217041,34.931102752685547 -16.223842620849609,34.634240447128811 -15.85007183479255,34.886280059814453 -14.120697975158691,34.658355712890625 -13.81736946105957,34.328716278076172 -13.992490768432617,33.598796844482422 -14.546377182006836,33.164891643669634 -14.000060288415174,33.566280364990234 -12.450697898864746,33.339523315429688 -12.147735595703125,32.998821258544922 -12.323249816894531,32.274600982666016 -12.879127502441406,31.682494778186321 -12.133624901803865,32.226280212402344 -10.790698051452637,32.000633239746094 -10.488097190856934,31.669155120849609 -10.653837203979492,30.947774887084961 -11.208560943603516,30.207040612748258 -10.275926149505661,30.896280288696289 -9.1206979751586914,30.670633316040039 -8.8180980682373047,30.339155197143555 -8.9838371276855469,29.619997024536133 -9.5368013381958008,29.135100397190627 -8.9262827849488211,32.718830108642578 -4.3281683921813965,32.708168029785156 -2.3611698150634766,32.708126068115234 -2.3611700534820557,32.708126068115234 -2.3611266613006592,30.501169204711914 -2.3718316555023193,27.069889344709196 -4.2926591211028242,26.472516656201325 -3.5380830513658776,36.954700469970703 1.2597870826721191,37.140213012695313 1.3446992635726929,37.000419616699219 1.664225697517395,37.29449462890625 1.7902572154998779,37.43402099609375 1.470055103302002,51.370888500897557 7.4163459734570729,51.20102152843122 7.1738039562841562,42.721500396728516 3.6584999561309814,42.721500396728516 2.2342472076416016,42.399410247802734 1.4956772327423096,43.644271850585938 0.96149998903274536))"
+ };
+
+
+ // Test the FORWARD case
+ test_one<polygon, polygon, polygon>(caseid, brandon[0], brandon[1]);
+}
+#endif
+
+
+
+int main(int argc, char** argv)
+{
+ int mode = (argc > 1) ? atol(argv[1]) : 1;
+ switch(mode)
+ {
+ case 1 :
+ test_traverse_gmp<bg::model::d2::point_xy<float> >("float");
+ break;
+ case 2 :
+ test_traverse_gmp<bg::model::d2::point_xy<double> >("double");
+ break;
+ case 3 :
+ test_traverse_gmp<bg::model::d2::point_xy<long double> >("long double");
+ break;
+ case 4 :
+ #if defined(HAVE_TTMATH)
+ test_traverse_gmp<bg::model::d2::point_xy<ttmath_big> >("ttmath_big");
+ #endif
+ break;
+ }
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/perimeter.cpp b/libs/geometry/test/algorithms/perimeter.cpp
new file mode 100644
index 000000000..54fcd3c57
--- /dev/null
+++ b/libs/geometry/test/algorithms/perimeter.cpp
@@ -0,0 +1,63 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <algorithms/test_perimeter.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ // 3-4-5 triangle
+ //test_geometry<std::pair<P, P> >("LINESTRING(0 0,3 4)", 5);
+
+ test_geometry<bg::model::ring<P> >(
+ "POLYGON((0 0,0 1,1 1,1 0,0 0))", 4);
+ test_geometry<bg::model::polygon<P> >(
+ "POLYGON((0 0,0 1,1 0,0 0))", 1.0 + 1.0 + sqrt(2.0));
+ test_geometry<bg::model::polygon<P> >(
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,2 1,2 2,1 2,1 1))", 20);
+}
+
+template <typename P>
+void test_open()
+{
+ typedef bg::model::polygon<P, true, false> open_polygon;
+ test_geometry<open_polygon>("POLYGON((0 0,0 1,1 1,1 0))", 4);
+}
+
+template <typename P>
+void test_empty_input()
+{
+ bg::model::polygon<P> poly_empty;
+ bg::model::ring<P> ring_empty;
+
+ test_empty_input(poly_empty);
+ test_empty_input(ring_empty);
+}
+
+int test_main(int, char* [])
+{
+ //test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+ test_open<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ // test_empty_input<bg::model::d2::point_xy<int> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/perimeter.vcproj b/libs/geometry/test/algorithms/perimeter.vcproj
new file mode 100644
index 000000000..a39d1880f
--- /dev/null
+++ b/libs/geometry/test/algorithms/perimeter.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="perimeter"
+ ProjectGUID="{EFC23FC0-86D3-4C81-A218-26F0D5A4D50B}"
+ RootNamespace="perimeter"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\perimeter"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\perimeter"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\perimeter.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/reverse.cpp b/libs/geometry/test/algorithms/reverse.cpp
new file mode 100644
index 000000000..d74b756c4
--- /dev/null
+++ b/libs/geometry/test/algorithms/reverse.cpp
@@ -0,0 +1,75 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <algorithms/test_reverse.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <test_common/test_point.hpp>
+#include <test_geometries/all_custom_linestring.hpp>
+#include <test_geometries/all_custom_ring.hpp>
+#include <test_geometries/wrapped_boost_array.hpp>
+
+template <typename LineString>
+void test_linestring()
+{
+ // Simplex
+ test_geometry<LineString >(
+ "LINESTRING(0 0,1 1)",
+ "LINESTRING(1 1,0 0)");
+
+ // Three points, middle should stay the same
+ test_geometry<LineString >(
+ "LINESTRING(0 0,1 1,2 2)",
+ "LINESTRING(2 2,1 1,0 0)");
+
+ // Four points
+ test_geometry<LineString >(
+ "LINESTRING(0 0,1 1,2 2,3 3)",
+ "LINESTRING(3 3,2 2,1 1,0 0)");
+}
+
+template <typename Ring>
+void test_ring()
+{
+ test_geometry<Ring>(
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0))",
+ "POLYGON((4 0,2 1,0 2,0 7,4 9,8 7,8 2,4 0))");
+}
+
+template <typename Point>
+void test_all()
+{
+ test_linestring<bg::model::linestring<Point> >();
+ test_linestring<all_custom_linestring<Point> >();
+
+ // Polygon with holes
+ test_geometry<bg::model::polygon<Point> >(
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0),(7 3,7 6,1 6,1 3,4 3,7 3))",
+ "POLYGON((4 0,2 1,0 2,0 7,4 9,8 7,8 2,4 0),(7 3,4 3,1 3,1 6,7 6,7 3))");
+
+ // Check compilation
+ test_geometry<Point>("POINT(0 0)", "POINT(0 0)");
+
+ test_ring<bg::model::ring<Point> >();
+ test_ring<all_custom_ring<Point> >();
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/reverse.vcproj b/libs/geometry/test/algorithms/reverse.vcproj
new file mode 100644
index 000000000..9f438a8c2
--- /dev/null
+++ b/libs/geometry/test/algorithms/reverse.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="reverse"
+ ProjectGUID="{14B5DFC5-D511-4D8C-A231-EE90A05687E1}"
+ RootNamespace="reverse"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\reverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\reverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\reverse.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/simplify.cpp b/libs/geometry/test/algorithms/simplify.cpp
new file mode 100644
index 000000000..66c8599c4
--- /dev/null
+++ b/libs/geometry/test/algorithms/simplify.cpp
@@ -0,0 +1,107 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iterator>
+
+
+#include <algorithms/test_simplify.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <test_geometries/wrapped_boost_array.hpp>
+#include <test_common/test_point.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::linestring<P> >(
+ "LINESTRING(0 0,5 5,10 10)",
+ "LINESTRING(0 0,10 10)", 1.0);
+
+ test_geometry<bg::model::linestring<P> >(
+ "LINESTRING(0 0, 5 5, 6 5, 10 10)",
+ "LINESTRING(0 0,10 10)", 1.0);
+
+ test_geometry<bg::model::linestring<P> >(
+ "LINESTRING(0 0,5 5,7 5,10 10)",
+ "LINESTRING(0 0,5 5,7 5,10 10)", 1.0);
+
+ /* TODO fix this
+ test_geometry<test::wrapped_boost_array<P, 10> >(
+ "LINESTRING(0 0,5 5,7 5,10 10)",
+ "LINESTRING(0 0,5 5,7 5,10 10)", 1.0);
+ */
+
+ test_geometry<bg::model::ring<P> >(
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0))",
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,4 0))", 1.0);
+
+ test_geometry<bg::model::polygon<P> >(
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0))",
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,4 0))", 1.0);
+
+ test_geometry<bg::model::polygon<P> >(
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0),(7 3,7 6,1 6,1 3,4 3,7 3))",
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,4 0),(7 3,7 6,1 6,1 3,7 3))", 1.0);
+
+/*
+
+Above can be checked in PostGIS by:
+
+select astext(ST_Simplify(geomfromtext('LINESTRING(0 0, 5 5, 10 10)'),1.0)) as simplified
+union all select astext(ST_Simplify(geomfromtext('LINESTRING(0 0, 5 5, 6 5, 10 10)'),1.0))
+union all select astext(ST_Simplify(geomfromtext('LINESTRING(0 0, 5 5, 7 5, 10 10)'),1.0))
+union all select astext(ST_Simplify(geomfromtext('POLYGON((4 0, 8 2, 8 7, 4 9, 0 7, 0 2, 2 1, 4 0))'),1.0))
+union all select astext(ST_Simplify(geomfromtext('POLYGON((4 0, 8 2, 8 7, 4 9, 0 7, 0 2, 2 1, 4 0),(7 3, 7 6, 1 6, 1 3, 4 3, 7 3))'),1.0))
+*/
+
+ // Just check compilation
+ test_geometry<P>(
+ "POINT(0 0)",
+ "POINT(0 0)", 1.0);
+
+
+ test_geometry<bg::model::ring<P> >(
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0))",
+ "POLYGON((4 0,8 2,8 7,4 9,0 7,0 2,4 0))", 1.0);
+}
+
+
+template <typename P>
+void test_spherical()
+{
+ test_geometry<bg::model::linestring<P> >(
+ "LINESTRING(4.1 52.1,4.2 52.2,4.3 52.3)",
+ "LINESTRING(4.1 52.1,4.3 52.3)", 0.01);
+}
+
+
+int test_main(int, char* [])
+{
+ // Integer compiles, but simplify-process fails (due to distances)
+ //test_all<bg::model::d2::point_xy<int> >();
+
+ test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+ test_spherical<bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+ test_spherical<bg::model::point<ttmath_big, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/simplify.vcproj b/libs/geometry/test/algorithms/simplify.vcproj
new file mode 100644
index 000000000..3193c8abf
--- /dev/null
+++ b/libs/geometry/test/algorithms/simplify.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="simplify"
+ ProjectGUID="{B1760CB8-553B-42AB-B54E-3D0320FF252F}"
+ RootNamespace="simplify"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\simplify"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\simplify"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\simplify.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/test_area.hpp b/libs/geometry/test/algorithms/test_area.hpp
new file mode 100644
index 000000000..394fd1099
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_area.hpp
@@ -0,0 +1,84 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_AREA_HPP
+#define BOOST_GEOMETRY_TEST_AREA_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+template <typename Geometry>
+void test_area(Geometry const& geometry,
+ typename bg::default_area_result<Geometry>::type expected_area)
+{
+ typename bg::default_area_result<Geometry>::type area = bg::area(geometry);
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Geometry>::type).name()
+ << " "
+ << typeid(typename bg::default_area_result<Geometry>::type).name()
+ << " "
+ << "area : " << bg::area(geometry)
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(area, expected_area, 0.0001);
+
+ // Test with explicitly defined strategies
+ bg::strategy::area::surveyor
+ <
+ typename bg::point_type<Geometry>::type
+ > strategy1;
+
+ area = bg::area(geometry, strategy1);
+
+ bg::strategy::area::surveyor
+ <
+ typename bg::point_type<Geometry>::type,
+ typename bg::coordinate_type<Geometry>::type
+ > strategy2;
+
+ area = bg::area(geometry, strategy2);
+
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt,
+ typename bg::default_area_result<Geometry>::type expected_area)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ test_area(geometry, expected_area);
+}
+
+template <typename Geometry>
+void test_empty_input(Geometry const& geometry)
+{
+ try
+ {
+ bg::area(geometry);
+ }
+ catch(bg::empty_input_exception const& )
+ {
+ return;
+ }
+ BOOST_CHECK_MESSAGE(false, "A empty_input_exception should have been thrown" );
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_centroid.hpp b/libs/geometry/test/algorithms/test_centroid.hpp
new file mode 100644
index 000000000..2ab584ef6
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_centroid.hpp
@@ -0,0 +1,99 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_CENTROID_HPP
+#define BOOST_GEOMETRY_TEST_CENTROID_HPP
+
+// Test-functionality, shared between single and multi tests
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/algorithms/centroid.hpp>
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+template <std::size_t D>
+struct check_result
+{
+ template <typename Point1, typename Point2>
+ static void apply(Point1 const& actual, Point2 const& expected)
+ {
+ check_result<D-1>::apply(actual, expected);
+ BOOST_CHECK_CLOSE(bg::get<D-1>(actual), bg::get<D-1>(expected), 0.001);
+ }
+};
+
+template <>
+struct check_result<0>
+{
+ template <typename Point1, typename Point2>
+ static void apply(Point1 const&, Point2 const&)
+ {}
+};
+
+
+template <typename CalculationType, typename Geometry, typename Point>
+void test_with_other_calculation_type(Geometry const& geometry, Point& c1)
+{
+ typedef typename bg::point_type<Geometry>::type point_type;
+ // Calculate it with user defined strategy
+ point_type c2;
+ bg::centroid(geometry, c2,
+ bg::strategy::centroid::bashein_detmer<point_type, point_type, CalculationType>());
+
+ std::cout << typeid(CalculationType).name() << ": " << std::setprecision(20)
+ << bg::get<0>(c2) << " " << bg::get<1>(c2)
+ << " -> difference: " << bg::distance(c1, c2)
+ << std::endl;
+}
+
+template <typename Geometry, typename T>
+void test_centroid(std::string const& wkt, T const& d1, T const& d2, T const& d3 = T(), T const& d4 = T(), T const& d5 = T())
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ typedef typename bg::point_type<Geometry>::type point_type;
+ point_type c1;
+ bg::centroid(geometry, c1);
+ check_result<bg::dimension<Geometry>::type::value>::apply(c1, boost::make_tuple(d1, d2, d3, d4, d5));
+
+#ifdef REPORT_RESULTS
+ std::cout << "normal: " << std::setprecision(20) << bg::get<0>(c1) << " " << bg::get<1>(c1) << std::endl;
+
+ //test_with_other_calculation_type<long long>(geometry, c1);
+ test_with_other_calculation_type<float>(geometry, c1);
+ test_with_other_calculation_type<long double>(geometry, c1);
+#if defined(HAVE_TTMATH)
+ test_with_other_calculation_type<ttmath_big>(geometry, c1);
+#endif
+
+#endif
+}
+
+template <typename Geometry>
+void test_centroid_exception()
+{
+ Geometry geometry;
+ try
+ {
+ typename bg::point_type<Geometry>::type c;
+ bg::centroid(geometry, c);
+ }
+ catch(bg::centroid_exception const& )
+ {
+ return;
+ }
+ BOOST_CHECK_MESSAGE(false, "A centroid_exception should have been thrown" );
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_convert.hpp b/libs/geometry/test/algorithms/test_convert.hpp
new file mode 100644
index 000000000..281fdf936
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_convert.hpp
@@ -0,0 +1,69 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_CONVERT_HPP
+#define BOOST_GEOMETRY_TEST_CONVERT_HPP
+
+
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/algorithms/convert.hpp>
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/variant/variant.hpp>
+
+#include <geometry_test_common.hpp>
+
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+
+template <typename Geometry2, typename Geometry1>
+void check_mixed(Geometry1 const& geometry1, std::string const& expected)
+{
+ Geometry2 geometry2;
+ bg::convert(geometry1, geometry2);
+
+ std::ostringstream out;
+ out << bg::wkt(geometry2);
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+template <typename Geometry1, typename Geometry2>
+void test_mixed(std::string const& wkt, std::string const& expected)
+{
+ Geometry1 geometry1;
+ bg::read_wkt(wkt, geometry1);
+ check_mixed<Geometry2>(geometry1, expected);
+ check_mixed<Geometry2>(boost::variant<Geometry1>(geometry1), expected);
+}
+
+template <typename Geometry1, typename Geometry2>
+void test_mixed_identical_result(std::string const& wkt)
+{
+ test_mixed<Geometry1, Geometry2>(wkt, wkt);
+ test_mixed<Geometry2, Geometry1>(wkt, wkt);
+}
+
+template <typename Geometry1, typename Geometry2>
+void test_mixed_reversible_result(std::string const& wkt1, std::string const& wkt2)
+{
+ test_mixed<Geometry1, Geometry2>(wkt1, wkt2);
+ test_mixed<Geometry2, Geometry1>(wkt2, wkt1);
+}
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_convex_hull.hpp b/libs/geometry/test/algorithms/test_convex_hull.hpp
new file mode 100644
index 000000000..a6a108a79
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_convex_hull.hpp
@@ -0,0 +1,127 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_CONVEX_HULL_HPP
+#define BOOST_GEOMETRY_TEST_CONVEX_HULL_HPP
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/convex_hull.hpp>
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+
+#include <boost/geometry/geometries/polygon.hpp>
+
+
+template <typename Geometry, typename Hull>
+void test_convex_hull(Geometry const& geometry, Hull const& hull,
+ std::size_t size_original, std::size_t size_hull,
+ double expected_area, bool reverse)
+{
+
+ std::size_t n = bg::num_points(hull);
+
+ BOOST_CHECK_MESSAGE(n == size_hull,
+ "convex hull: " << bg::wkt(geometry)
+ << " -> " << bg::wkt(hull)
+ << " type "
+ << (typeid(typename bg::coordinate_type<Hull>::type).name())
+ << " -> Expected: " << size_hull
+ << " detected: " << n);
+
+
+ // We omit this check as it is not important for the hull algorithm
+ // BOOST_CHECK(bg::num_points(geometry) == size_original);
+
+ typename bg::default_area_result<Geometry>::type ah = bg::area(hull);
+ if (reverse)
+ {
+ ah = -ah;
+ }
+
+//std::cout << "Area: " << bg::area(geometry) << std::endl;
+//std::cout << bg::wkt(hull) << std::endl;
+
+ BOOST_CHECK_CLOSE(ah, expected_area, 0.001);
+}
+
+template <typename Geometry, bool Clockwise>
+void test_geometry_order(std::string const& wkt,
+ std::size_t size_original, std::size_t size_hull,
+ double expected_area)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+
+ bg::model::polygon
+ <
+ typename bg::point_type<Geometry>::type,
+ Clockwise
+ > hull;
+
+ // Test version with output iterator
+ bg::detail::convex_hull::convex_hull_insert(geometry, std::back_inserter(hull.outer()));
+ test_convex_hull(geometry, hull,
+ size_original, size_hull, expected_area, ! Clockwise);
+
+ // Test version with ring as output
+ bg::clear(hull);
+ bg::convex_hull(geometry, hull.outer());
+ test_convex_hull(geometry, hull, size_original, size_hull, expected_area, false);
+
+ // Test version with polygon as output
+ bg::clear(hull);
+ bg::convex_hull(geometry, hull);
+ test_convex_hull(geometry, hull, size_original, size_hull, expected_area, false);
+
+ // Test version with strategy
+ bg::clear(hull);
+ bg::strategy::convex_hull::graham_andrew
+ <
+ Geometry,
+ typename bg::point_type<Geometry>::type
+ > graham;
+ bg::convex_hull(geometry, hull.outer(), graham);
+ test_convex_hull(geometry, hull, size_original, size_hull, expected_area, false);
+
+ // Test version with output iterator and strategy
+ bg::clear(hull);
+ bg::detail::convex_hull::convex_hull_insert(geometry, std::back_inserter(hull.outer()), graham);
+ test_convex_hull(geometry, hull, size_original, size_hull, expected_area, ! Clockwise);
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt,
+ std::size_t size_original, std::size_t size_hull,
+ double expected_area)
+{
+ test_geometry_order<Geometry, true>(wkt, size_original, size_hull, expected_area);
+ test_geometry_order<Geometry, false>(wkt, size_original, size_hull, expected_area);
+}
+
+template <typename Geometry>
+void test_empty_input()
+{
+ Geometry geometry;
+ bg::model::polygon
+ <
+ typename bg::point_type<Geometry>::type
+ > hull;
+
+ bg::convex_hull(geometry, hull);
+ BOOST_CHECK_MESSAGE(bg::num_points(hull) == 0, "Output convex hull should be empty" );
+}
+
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_covered_by.hpp b/libs/geometry/test/algorithms/test_covered_by.hpp
new file mode 100644
index 000000000..efaa6f789
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_covered_by.hpp
@@ -0,0 +1,123 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+
+#ifndef BOOST_GEOMETRY_TEST_COVERED_BY_HPP
+#define BOOST_GEOMETRY_TEST_COVERED_BY_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+
+ bool detected = bg::covered_by(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "covered_by: " << wkt1
+ << " in " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+/*
+
+template <typename Point, bool Clockwise, bool Closed>
+void test_ordered_ring(std::string const& wkt_point,
+ std::string const& wkt_geometry, bool expected)
+{
+ typedef bg::model::ring<Point, Clockwise, Closed> ring_type;
+ ring_type ring;
+ Point point;
+
+ bg::read_wkt(wkt_geometry, ring);
+ if (! Clockwise)
+ {
+ std::reverse(boost::begin(ring), boost::end(ring));
+ }
+ if (! Closed)
+ {
+ ring.resize(ring.size() - 1);
+ }
+
+ bg::read_wkt(wkt_point, point);
+
+ bool detected = bg::covered_by(point, ring);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "covered_by: " << wkt_point
+ << " in " << wkt_geometry
+ << " -> Expected: " << expected
+ << " detected: " << detected
+ << " clockwise: " << int(Clockwise)
+ << " closed: " << int(Closed)
+ );
+
+ // other strategy (note that this one cannot detect OnBorder
+ // (without modifications)
+
+ bg::strategy::covered_by::franklin<Point> franklin;
+ detected = bg::covered_by(point, ring, franklin);
+ if (! on_border)
+ {
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "covered_by: " << wkt_point
+ << " in " << wkt_geometry
+ << " -> Expected: " << expected
+ << " detected: " << detected
+ << " clockwise: " << int(Clockwise)
+ << " closed: " << int(Closed)
+ );
+ }
+
+
+ bg::strategy::covered_by::crossings_multiply<Point> cm;
+ detected = bg::covered_by(point, ring, cm);
+ if (! on_border)
+ {
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "covered_by: " << wkt_point
+ << " in " << wkt_geometry
+ << " -> Expected: " << expected
+ << " detected: " << detected
+ << " clockwise: " << int(Clockwise)
+ << " closed: " << int(Closed)
+ );
+ }
+}
+
+template <typename Point>
+void test_ring(std::string const& wkt_point,
+ std::string const& wkt_geometry,
+ bool expected)
+{
+ test_ordered_ring<Point, true, true>(wkt_point, wkt_geometry, expected);
+ test_ordered_ring<Point, false, true>(wkt_point, wkt_geometry, expected);
+ test_ordered_ring<Point, true, false>(wkt_point, wkt_geometry, expected);
+ test_ordered_ring<Point, false, false>(wkt_point, wkt_geometry, expected);
+ test_geometry<Point, bg::model::polygon<Point> >(wkt_point, wkt_geometry, expected);
+}
+*/
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_difference.hpp b/libs/geometry/test/algorithms/test_difference.hpp
new file mode 100644
index 000000000..c3e34206d
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_difference.hpp
@@ -0,0 +1,310 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_DIFFERENCE_HPP
+#define BOOST_GEOMETRY_TEST_DIFFERENCE_HPP
+
+#include <fstream>
+#include <iomanip>
+
+#include <boost/foreach.hpp>
+#include <geometry_test_common.hpp>
+
+#include <boost/range/algorithm/copy.hpp>
+
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/difference.hpp>
+#include <boost/geometry/algorithms/sym_difference.hpp>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/length.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
+# define BOOST_GEOMETRY_DEBUG_IDENTIFIER
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+# include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
+#endif
+
+
+template <typename Output, typename G1, typename G2>
+void difference_output(std::string const& caseid, G1 const& g1, G2 const& g2, Output const& output)
+{
+#if defined(TEST_WITH_SVG)
+ {
+ typedef typename bg::coordinate_type<G1>::type coordinate_type;
+ typedef typename bg::point_type<G1>::type point_type;
+
+ std::ostringstream filename;
+ filename << "difference_"
+ << caseid << "_"
+ << string_from_type<coordinate_type>::name()
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<point_type> mapper(svg, 500, 500);
+
+ mapper.add(g1);
+ mapper.add(g2);
+
+ mapper.map(g1, "fill-opacity:0.3;fill:rgb(51,51,153);stroke:rgb(51,51,153);stroke-width:3");
+ mapper.map(g2, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:3");
+
+
+ for (typename Output::const_iterator it = output.begin(); it != output.end(); ++it)
+ {
+ mapper.map(*it,
+ //sym ? "fill-opacity:0.2;stroke-opacity:0.4;fill:rgb(255,255,0);stroke:rgb(255,0,255);stroke-width:8" :
+ "fill-opacity:0.2;stroke-opacity:0.4;fill:rgb(255,0,0);stroke:rgb(255,0,255);stroke-width:8");
+ }
+ }
+#endif
+}
+
+template <typename OutputType, typename G1, typename G2>
+void test_difference(std::string const& caseid, G1 const& g1, G2 const& g2,
+ std::size_t expected_count, int expected_point_count,
+ double expected_area,
+ double percentage = 0.0001,
+ bool sym = false)
+{
+ std::vector<OutputType> clip;
+
+ typedef typename bg::coordinate_type<G1>::type coordinate_type;
+
+ if (sym)
+ {
+ bg::sym_difference(g1, g2, clip);
+ }
+ else
+ {
+ bg::difference(g1, g2, clip);
+ }
+
+ typename bg::default_area_result<G1>::type area = 0;
+ std::size_t n = 0;
+ for (typename std::vector<OutputType>::iterator it = clip.begin();
+ it != clip.end();
+ ++it)
+ {
+ if (expected_point_count >= 0)
+ {
+ n += bg::num_points(*it);
+ }
+
+ area += bg::area(*it);
+ }
+
+ difference_output(caseid, g1, g2, clip);
+
+#ifndef BOOST_GEOMETRY_DEBUG_ASSEMBLE
+ {
+ // Test inserter functionality
+ // Test if inserter returns output-iterator (using Boost.Range copy)
+ std::vector<OutputType> inserted, array_with_one_empty_geometry;
+ array_with_one_empty_geometry.push_back(OutputType());
+ if (sym)
+ {
+ boost::copy(array_with_one_empty_geometry, bg::detail::sym_difference::sym_difference_insert<OutputType>(g1, g2, std::back_inserter(inserted)));
+ }
+ else
+ {
+ boost::copy(array_with_one_empty_geometry, bg::detail::difference::difference_insert<OutputType>(g1, g2, std::back_inserter(inserted)));
+ }
+
+ BOOST_CHECK_EQUAL(boost::size(clip), boost::size(inserted) - 1);
+ }
+#endif
+
+
+
+#if ! defined(BOOST_GEOMETRY_NO_BOOST_TEST)
+ if (expected_point_count >= 0)
+ {
+ BOOST_CHECK_MESSAGE(n == std::size_t(expected_point_count),
+ "difference: " << caseid
+ << " #points expected: " << expected_point_count
+ << " detected: " << n
+ << " type: " << string_from_type<coordinate_type>::name()
+ );
+ }
+
+ if (expected_count > 0)
+ {
+ BOOST_CHECK_MESSAGE(clip.size() == expected_count,
+ "difference: " << caseid
+ << " #outputs expected: " << expected_count
+ << " detected: " << clip.size()
+ << " type: " << string_from_type<coordinate_type>::name()
+ );
+ }
+
+ BOOST_CHECK_CLOSE(area, expected_area, percentage);
+#endif
+
+
+}
+
+
+#ifdef BOOST_GEOMETRY_CHECK_WITH_POSTGIS
+static int counter = 0;
+#endif
+
+
+template <typename OutputType, typename G1, typename G2>
+void test_one(std::string const& caseid,
+ std::string const& wkt1, std::string const& wkt2,
+ std::size_t expected_count1,
+ int expected_point_count1,
+ double expected_area1,
+
+ std::size_t expected_count2,
+ int expected_point_count2,
+ double expected_area2,
+
+ double percentage = 0.0001)
+{
+#ifdef BOOST_GEOMETRY_CHECK_WITH_SQLSERVER
+ std::cout
+ << "-- " << caseid << std::endl
+ << "with qu as (" << std::endl
+ << "select geometry::STGeomFromText('" << wkt1 << "',0) as p," << std::endl
+ << "geometry::STGeomFromText('" << wkt2 << "',0) as q)" << std::endl
+ << "select " << std::endl
+ << " p.STDifference(q).STNumGeometries() as cnt1,p.STDifference(q).STNumPoints() as pcnt1,p.STDifference(q).STArea() as area1," << std::endl
+ << " q.STDifference(p).STNumGeometries() as cnt2,q.STDifference(p).STNumPoints() as pcnt2,q.STDifference(p).STArea() as area2," << std::endl
+ << " p.STDifference(q) as d1,q.STDifference(p) as d2 from qu" << std::endl << std::endl;
+#endif
+
+
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ bg::correct(g1);
+ bg::correct(g2);
+
+ test_difference<OutputType>(caseid + "_a", g1, g2,
+ expected_count1, expected_point_count1,
+ expected_area1, percentage);
+#ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE
+ return;
+#endif
+ test_difference<OutputType>(caseid + "_b", g2, g1,
+ expected_count2, expected_point_count2,
+ expected_area2, percentage);
+ test_difference<OutputType>(caseid + "_s", g1, g2,
+ expected_count1 + expected_count2,
+ expected_point_count1 + expected_point_count2,
+ expected_area1 + expected_area2,
+ percentage, true);
+
+
+#ifdef BOOST_GEOMETRY_CHECK_WITH_POSTGIS
+ std::cout
+ << (counter > 0 ? "union " : "")
+ << "select " << counter++
+ << ", '" << caseid << "' as caseid"
+ << ", ST_NumPoints(ST_Difference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ << ", ST_NumGeometries(ST_Difference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ << ", ST_Area(ST_Difference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ //<< ", " << expected_area1 << " as expected_area_a"
+ //<< ", " << expected_count1 << " as expected_count_a"
+ << ", ST_NumPoints(ST_Difference(ST_GeomFromText('" << wkt2 << "'), "
+ << " ST_GeomFromText('" << wkt1 << "'))) "
+ << ", ST_NumGeometries(ST_Difference(ST_GeomFromText('" << wkt2 << "'), "
+ << " ST_GeomFromText('" << wkt1 << "'))) "
+ << ", ST_Area(ST_Difference(ST_GeomFromText('" << wkt2 << "'), "
+ << " ST_GeomFromText('" << wkt1 << "'))) "
+ //<< ", " << expected_area2 << " as expected_area_b"
+ //<< ", " << expected_count2 << " as expected_count_b"
+ << ", ST_NumPoints(ST_SymDifference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ << ", ST_NumGeometries(ST_SymDifference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ << ", ST_Area(ST_SymDifference(ST_GeomFromText('" << wkt1 << "'), "
+ << " ST_GeomFromText('" << wkt2 << "'))) "
+ //<< ", " << expected_area1 + expected_area2 << " as expected_area_s"
+ //<< ", " << expected_count1 + expected_count2 << " as expected_count_s"
+ << std::endl;
+#endif
+
+}
+
+template <typename OutputType, typename G1, typename G2>
+void test_one_lp(std::string const& caseid,
+ std::string const& wkt1, std::string const& wkt2,
+ std::size_t expected_count,
+ int expected_point_count,
+ double expected_length)
+{
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ bg::correct(g1);
+
+ std::vector<OutputType> pieces;
+ bg::difference(g1, g2, pieces);
+
+ typename bg::default_length_result<G1>::type length = 0;
+ std::size_t n = 0;
+ std::size_t piece_count = 0;
+ for (typename std::vector<OutputType>::iterator it = pieces.begin();
+ it != pieces.end();
+ ++it)
+ {
+ if (expected_point_count >= 0)
+ {
+ n += bg::num_points(*it);
+ }
+ piece_count++;
+ length += bg::length(*it);
+ }
+
+ BOOST_CHECK_MESSAGE(piece_count == expected_count,
+ "difference: " << caseid
+ << " #outputs expected: " << expected_count
+ << " detected: " << pieces.size()
+ );
+
+ if (expected_point_count >= 0)
+ {
+ BOOST_CHECK_EQUAL(n, std::size_t(expected_point_count));
+ }
+
+ BOOST_CHECK_CLOSE(length, expected_length, 0.001);
+
+ std::string lp = "lp_";
+ difference_output(lp + caseid, g1, g2, pieces);
+}
+
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_distance.hpp b/libs/geometry/test/algorithms/test_distance.hpp
new file mode 100644
index 000000000..271bdab6e
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_distance.hpp
@@ -0,0 +1,158 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_DISTANCE_HPP
+#define BOOST_GEOMETRY_TEST_DISTANCE_HPP
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+
+// Define a custom distance strategy
+// For this one, the "taxicab" distance,
+// see http://en.wikipedia.org/wiki/Taxicab_geometry
+
+// For a point-point-distance operation, one typename Point is enough.
+// For a point-segment-distance operation, there is some magic inside
+// using another point type and casting if necessary. Therefore,
+// two point-types are necessary.
+template <typename P1, typename P2 = P1>
+struct taxicab_distance
+{
+ static inline typename bg::coordinate_type<P1>::type apply(
+ P1 const& p1, P2 const& p2)
+ {
+ using bg::get;
+ using bg::math::abs;
+ return abs(get<0>(p1) - get<1>(p2))
+ + abs(get<1>(p1) - get<1>(p2));
+ }
+};
+
+
+
+namespace boost { namespace geometry { namespace strategy { namespace distance { namespace services
+{
+
+template <typename P1, typename P2>
+struct tag<taxicab_distance<P1, P2> >
+{
+ typedef strategy_tag_distance_point_point type;
+};
+
+
+template <typename P1, typename P2>
+struct return_type<taxicab_distance<P1, P2> >
+{
+ typedef typename coordinate_type<P1>::type type;
+};
+
+
+template<typename P1, typename P2, typename PN1, typename PN2>
+struct similar_type<taxicab_distance<P1, P2>, PN1, PN2>
+{
+ typedef taxicab_distance<PN1, PN2> type;
+};
+
+
+template<typename P1, typename P2, typename PN1, typename PN2>
+struct get_similar<taxicab_distance<P1, P2>, PN1, PN2>
+{
+ static inline typename similar_type
+ <
+ taxicab_distance<P1, P2>, PN1, PN2
+ >::type apply(taxicab_distance<P1, P2> const& )
+ {
+ return taxicab_distance<PN1, PN2>();
+ }
+};
+
+template <typename P1, typename P2>
+struct comparable_type<taxicab_distance<P1, P2> >
+{
+ typedef taxicab_distance<P1, P2> type;
+};
+
+template <typename P1, typename P2>
+struct get_comparable<taxicab_distance<P1, P2> >
+{
+ static inline taxicab_distance<P1, P2> apply(taxicab_distance<P1, P2> const& input)
+ {
+ return input;
+ }
+};
+
+template <typename P1, typename P2>
+struct result_from_distance<taxicab_distance<P1, P2> >
+{
+ template <typename T>
+ static inline typename coordinate_type<P1>::type apply(taxicab_distance<P1, P2> const& , T const& value)
+ {
+ return value;
+ }
+};
+
+
+}}}}} // namespace bg::strategy::distance::services
+
+
+
+
+
+template <typename Geometry1, typename Geometry2>
+void test_distance(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ long double expected_distance)
+{
+ typename bg::default_distance_result<Geometry1>::type distance = bg::distance(geometry1, geometry2);
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Geometry1>::type).name()
+ << std::endl
+ << typeid(typename bg::default_distance_result<Geometry1>::type).name()
+ << std::endl
+ << "distance : " << bg::distance(geometry1, geometry2)
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(distance, expected_distance, 0.0001);
+}
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& wkt1, std::string const& wkt2, double expected_distance)
+{
+ Geometry1 geometry1;
+ bg::read_wkt(wkt1, geometry1);
+ Geometry2 geometry2;
+ bg::read_wkt(wkt2, geometry2);
+
+ test_distance(geometry1, geometry2, expected_distance);
+}
+
+template <typename Geometry1, typename Geometry2>
+void test_empty_input(Geometry1 const& geometry1, Geometry2 const& geometry2)
+{
+ try
+ {
+ bg::distance(geometry1, geometry2);
+ }
+ catch(bg::empty_input_exception const& )
+ {
+ return;
+ }
+ BOOST_CHECK_MESSAGE(false, "A empty_input_exception should have been thrown" );
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_envelope.hpp b/libs/geometry/test/algorithms/test_envelope.hpp
new file mode 100644
index 000000000..3010ef901
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_envelope.hpp
@@ -0,0 +1,107 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_ENVELOPE_HPP
+#define BOOST_GEOMETRY_TEST_ENVELOPE_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/envelope.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+template<typename Box, std::size_t DimensionCount>
+struct check_result
+{};
+
+template <typename Box>
+struct check_result<Box, 2>
+{
+ typedef typename bg::coordinate_type<Box>::type ctype;
+ typedef typename boost::mpl::if_
+ <
+ boost::is_arithmetic<ctype>,
+ double,
+ ctype
+ >::type type;
+
+ static void apply(Box const& b, const type& x1, const type& y1, const type& z1,
+ const type& x2, const type& y2, const type& z2)
+ {
+ BOOST_CHECK_CLOSE((bg::get<bg::min_corner, 0>(b)), x1, 0.001);
+ BOOST_CHECK_CLOSE((bg::get<bg::min_corner, 1>(b)), y1, 0.001);
+
+ BOOST_CHECK_CLOSE((bg::get<bg::max_corner, 0>(b)), x2, 0.001);
+ BOOST_CHECK_CLOSE((bg::get<bg::max_corner, 1>(b)), y2, 0.001);
+ }
+};
+
+template <typename Box>
+struct check_result<Box, 3>
+{
+ typedef typename bg::coordinate_type<Box>::type ctype;
+ typedef typename boost::mpl::if_
+ <
+ boost::is_arithmetic<ctype>,
+ double,
+ ctype
+ >::type type;
+
+ static void apply(Box const& b, const type& x1, const type& y1, const type& z1,
+ const type& x2, const type& y2, const type& z2)
+ {
+ BOOST_CHECK_CLOSE((bg::get<bg::min_corner, 0>(b)), x1, 0.001);
+ BOOST_CHECK_CLOSE((bg::get<bg::min_corner, 1>(b)), y1, 0.001);
+ BOOST_CHECK_CLOSE((bg::get<bg::min_corner, 2>(b)), z1, 0.001);
+
+ BOOST_CHECK_CLOSE((bg::get<bg::max_corner, 0>(b)), x2, 0.001);
+ BOOST_CHECK_CLOSE((bg::get<bg::max_corner, 1>(b)), y2, 0.001);
+ BOOST_CHECK_CLOSE((bg::get<bg::max_corner, 2>(b)), z2, 0.001);
+ }
+};
+
+
+template <typename Geometry, typename T>
+void test_envelope(std::string const& wkt,
+ const T& x1, const T& x2,
+ const T& y1, const T& y2,
+ const T& z1 = 0, const T& z2 = 0)
+{
+ typedef bg::model::box<typename bg::point_type<Geometry>::type > box_type;
+
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ box_type b;
+ bg::envelope(geometry, b);
+
+ check_result<box_type, bg::dimension<Geometry>::type::value>::apply(b, x1, y1, z1, x2, y2, z2);
+}
+
+template <typename Geometry, typename T>
+void test_envelope_strategy(std::string const& wkt,
+ const T& x1, const T& x2,
+ const T& y1, const T& y2,
+ const T& z1 = 0, const T& z2 = 0)
+{
+ typedef bg::model::box<typename bg::point_type<Geometry>::type > box_type;
+
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ box_type b;
+ bg::envelope(geometry, b);
+
+ check_result<box_type, bg::dimension<Geometry>::type::value>::apply(b, x1, y1, z1, x2, y2, z2);
+}
+
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_equals.hpp b/libs/geometry/test/algorithms/test_equals.hpp
new file mode 100644
index 000000000..f641a96af
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_equals.hpp
@@ -0,0 +1,58 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_EQUALS_HPP
+#define BOOST_GEOMETRY_TEST_EQUALS_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/algorithms/equals.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/variant/variant.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void check_geometry(Geometry1 const& geometry1,
+ Geometry2 const& geometry2,
+ std::string const& caseid,
+ std::string const& wkt1,
+ std::string const& wkt2,
+ bool expected)
+{
+ bool detected = bg::equals(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "case: " << caseid
+ << " equals: " << wkt1
+ << " to " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& caseid,
+ std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+
+ check_geometry(geometry1, geometry2, caseid, wkt1, wkt2, expected);
+ check_geometry(boost::variant<Geometry1>(geometry1), geometry2, caseid, wkt1, wkt2, expected);
+ check_geometry(geometry1, boost::variant<Geometry2>(geometry2), caseid, wkt1, wkt2, expected);
+ check_geometry(boost::variant<Geometry1>(geometry1), boost::variant<Geometry2>(geometry2), caseid, wkt1, wkt2, expected);
+}
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_expand.hpp b/libs/geometry/test/algorithms/test_expand.hpp
new file mode 100644
index 000000000..ebf22e374
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_expand.hpp
@@ -0,0 +1,56 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_EXPAND_HPP
+#define BOOST_GEOMETRY_TEST_EXPAND_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/expand.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+
+
+template <typename Geometry, typename Box>
+void test_expand(Box& box,
+ std::string const& wkt,
+ std::string const& expected)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+
+ bg::expand(box, geometry);
+
+ std::ostringstream out;
+ out << bg::dsv(box, ",", "(", ")", ",", "", "");
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+template <typename Geometry, typename Box>
+void test_expand_other_strategy(Box& box,
+ std::string const& wkt,
+ std::string const& expected)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+
+
+ bg::expand(box, geometry);
+
+ std::ostringstream out;
+ out << bg::dsv(box, ",", "(", ")", ",", "", "");
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_for_each.hpp b/libs/geometry/test/algorithms/test_for_each.hpp
new file mode 100644
index 000000000..b93b72de3
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_for_each.hpp
@@ -0,0 +1,277 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_FOR_EACH_HPP
+#define BOOST_GEOMETRY_TEST_FOR_EACH_HPP
+
+#include <geometry_test_common.hpp>
+
+#include <boost/config.hpp>
+#include <boost/geometry/algorithms/for_each.hpp>
+
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+
+
+template<typename Point>
+inline void translate_x_function(Point& p)
+{
+ bg::set<0>(p, bg::get<0>(p) + 100.0);
+}
+
+template<typename Point>
+struct scale_y_functor
+{
+ inline void operator()(Point& p)
+ {
+ bg::set<1>(p, bg::get<1>(p) * 100.0);
+ }
+};
+
+template<typename Point>
+struct sum_x_functor
+{
+ typename bg::coordinate_type<Point>::type sum;
+
+ sum_x_functor()
+ : sum(0)
+ {}
+
+ inline void operator()(Point const& p)
+ {
+ sum += bg::get<0>(p);
+ }
+};
+
+// Per segment
+static std::ostringstream g_out;
+
+template<typename Segment>
+inline void stream_segment(Segment const& s)
+{
+ g_out << bg::dsv(s) << " ";
+}
+
+template<typename Segment>
+struct sum_segment_length
+{
+ typename bg::coordinate_type<Segment>::type sum;
+
+ sum_segment_length()
+ : sum(0)
+ {}
+ inline void operator()(Segment const& s)
+ {
+ sum += bg::distance(s.first, s.second);
+ }
+};
+
+template<typename Segment>
+inline void modify_segment(Segment& s)
+{
+ if (bg::math::equals(bg::get<0,0>(s), 1.0))
+ {
+ bg::set<0,0>(s, 10.0);
+ }
+}
+
+
+template <typename Geometry>
+void test_per_point_const(Geometry const& geometry, int expected)
+{
+ typedef typename bg::point_type<Geometry>::type point_type;
+
+ // Class (functor)
+ sum_x_functor<point_type> functor;
+ functor = bg::for_each_point(geometry, functor);
+ BOOST_CHECK_EQUAL(functor.sum, expected);
+
+
+ // Lambda
+#if !defined(BOOST_NO_CXX11_LAMBDAS)
+
+ typename bg::coordinate_type<point_type>::type sum_x = 0;
+
+ bg::for_each_point
+ (
+ geometry,
+ [&sum_x](point_type const& p)
+ {
+ sum_x += bg::get<0>(p);
+ }
+
+ );
+
+ BOOST_CHECK_EQUAL(sum_x, expected);
+#endif
+}
+
+template <typename Geometry>
+void test_per_point_non_const(Geometry& geometry,
+ std::string const& expected1,
+ std::string const& expected2)
+{
+#if !defined(BOOST_NO_CXX11_LAMBDAS)
+ Geometry copy = geometry;
+#endif
+
+ typedef typename bg::point_type<Geometry>::type point_type;
+
+ // function
+ bg::for_each_point(geometry, translate_x_function<point_type>);
+ std::ostringstream out1;
+ out1 << bg::wkt(geometry);
+
+ BOOST_CHECK_MESSAGE(out1.str() == expected1,
+ "for_each_point: "
+ << " expected " << expected1
+ << " got " << bg::wkt(geometry));
+
+ // functor
+ bg::for_each_point(geometry, scale_y_functor<point_type>());
+
+ std::ostringstream out2;
+ out2 << bg::wkt(geometry);
+
+ BOOST_CHECK_MESSAGE(out2.str() == expected2,
+ "for_each_point: "
+ << " expected " << expected2
+ << " got " << bg::wkt(geometry));
+
+#if !defined(BOOST_NO_CXX11_LAMBDAS)
+ // Lambda, both functions above together. Without / with capturing
+
+ geometry = copy;
+ bg::for_each_point
+ (
+ geometry,
+ [](point_type& p)
+ {
+ bg::set<0>(p, bg::get<0>(p) + 100);
+ }
+
+ );
+
+ typename bg::coordinate_type<point_type>::type scale = 100;
+ bg::for_each_point
+ (
+ geometry,
+ [&](point_type& p)
+ {
+ bg::set<1>(p, bg::get<1>(p) * scale);
+ }
+
+ );
+
+ std::ostringstream out3;
+ out3 << bg::wkt(geometry);
+
+ BOOST_CHECK_MESSAGE(out3.str() == expected2,
+ "for_each_point (lambda): "
+ << " expected " << expected2
+ << " got " << bg::wkt(geometry));
+#endif
+
+}
+
+
+template <typename Geometry>
+void test_per_point(std::string const& wkt
+ , int expected_sum_x
+ , std::string const& expected1
+ , std::string const& expected2
+ )
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ test_per_point_const(geometry, expected_sum_x);
+ test_per_point_non_const(geometry, expected1, expected2);
+}
+
+
+
+template <typename Geometry>
+void test_per_segment_const(Geometry const& geometry,
+ std::string const& expected_dsv,
+ double expected_length)
+{
+ typedef typename bg::point_type<Geometry>::type point_type;
+
+ // function
+ g_out.str("");
+ g_out.clear();
+ bg::for_each_segment(geometry,
+ stream_segment<bg::model::referring_segment<point_type const> >);
+ std::string out = g_out.str();
+ boost::trim(out);
+ BOOST_CHECK_EQUAL(out, expected_dsv);
+
+ // functor
+ sum_segment_length<bg::model::referring_segment<point_type const> > functor;
+ functor = bg::for_each_segment(geometry, functor);
+
+ BOOST_CHECK_CLOSE(functor.sum, expected_length, 0.0001);
+}
+
+
+template <typename Geometry>
+void test_per_segment_non_const(Geometry& geometry,
+ std::string const& expected_wkt)
+{
+ typedef typename bg::point_type<Geometry>::type point_type;
+
+ // function
+ bg::for_each_segment(geometry,
+ modify_segment<bg::model::referring_segment<point_type> >);
+
+ std::ostringstream out;
+ out << bg::wkt(geometry);
+
+ BOOST_CHECK_MESSAGE(out.str() == expected_wkt,
+ "for_each_segment: "
+ << " expected " << expected_wkt
+ << " got " << bg::wkt(geometry));
+
+ // function is working here, functor works for all others,
+ // it will also work here.
+}
+
+
+template <typename Geometry>
+void test_per_segment(std::string const& wkt
+ , std::string const& expected_dsv
+ , double expected_length
+ , std::string const& expected_wkt
+ )
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ test_per_segment_const(geometry, expected_dsv, expected_length);
+ test_per_segment_non_const(geometry, expected_wkt);
+}
+
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt
+ , int expected_sum_x
+ , std::string const& expected1
+ , std::string const& expected2
+ , std::string const& expected_dsv
+ , double expected_length
+ , std::string const& expected_wkt
+ )
+{
+ test_per_point<Geometry>(wkt, expected_sum_x, expected1, expected2);
+ test_per_segment<Geometry>(wkt, expected_dsv, expected_length, expected_wkt);
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_intersection.hpp b/libs/geometry/test/algorithms/test_intersection.hpp
new file mode 100644
index 000000000..4594cb19e
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_intersection.hpp
@@ -0,0 +1,241 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_INTERSECTION_HPP
+#define BOOST_GEOMETRY_TEST_INTERSECTION_HPP
+
+#include <fstream>
+#include <iomanip>
+
+#include <boost/foreach.hpp>
+
+#include <boost/geometry/algorithms/intersection.hpp>
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/length.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+#include <geometry_test_common.hpp>
+
+
+template <typename OutputType, typename CalculationType, typename G1, typename G2>
+typename bg::default_area_result<G1>::type test_intersection(std::string const& caseid,
+ G1 const& g1, G2 const& g2,
+ std::size_t expected_count = 0, std::size_t expected_point_count = 0,
+ double expected_length_or_area = 0,
+ double percentage = 0.0001,
+ bool debug = false)
+{
+ static const bool is_line = bg::geometry_id<OutputType>::type::value == 2;
+
+ if (debug)
+ {
+ std::cout << std::endl << "case " << caseid << std::endl;
+ }
+
+
+ typedef typename bg::coordinate_type<G1>::type coordinate_type;
+ typedef typename bg::point_type<G1>::type point_type;
+
+ typedef bg::strategy_intersection
+ <
+ typename bg::cs_tag<point_type>::type,
+ G1,
+ G2,
+ point_type,
+ CalculationType
+ > strategy;
+
+ // Check both normal behaviour, and _inserter behaviour
+ if (! debug)
+ {
+ std::vector<OutputType> out;
+ bg::intersection(g1, g2, out);
+ }
+ std::vector<OutputType> clip;
+ bg::detail::intersection::intersection_insert<OutputType>(g1, g2, std::back_inserter(clip), strategy());
+
+
+ typename bg::default_area_result<G1>::type length_or_area = 0;
+ std::size_t n = 0;
+ for (typename std::vector<OutputType>::iterator it = clip.begin();
+ it != clip.end();
+ ++it)
+ {
+ if (expected_point_count > 0)
+ {
+ n += bg::num_points(*it, true);
+ }
+
+ // instead of specialization we check it run-time here
+ length_or_area += is_line
+ ? bg::length(*it)
+ : bg::area(*it);
+
+ if (debug)
+ {
+ std::cout << std::setprecision(20) << bg::wkt(*it) << std::endl;
+ }
+ }
+
+
+#if ! defined(BOOST_GEOMETRY_NO_BOOST_TEST)
+ if (expected_point_count > 0)
+ {
+ BOOST_CHECK_MESSAGE(n == expected_point_count,
+ "intersection: " << caseid
+ << " #points expected: " << expected_point_count
+ << " detected: " << n
+ << " type: " << string_from_type<coordinate_type>::name()
+ );
+ }
+
+ if (expected_count > 0)
+ {
+ BOOST_CHECK_MESSAGE(clip.size() == expected_count,
+ "intersection: " << caseid
+ << " #outputs expected: " << expected_count
+ << " detected: " << clip.size()
+ << " type: " << string_from_type<coordinate_type>::name()
+ );
+ }
+
+ double const detected_length_or_area = boost::numeric_cast<double>(length_or_area);
+ BOOST_CHECK_CLOSE(detected_length_or_area, expected_length_or_area, percentage);
+#endif
+
+
+#if defined(TEST_WITH_SVG)
+ {
+ bool const ccw =
+ bg::point_order<G1>::value == bg::counterclockwise
+ || bg::point_order<G2>::value == bg::counterclockwise;
+ bool const open =
+ bg::closure<G1>::value == bg::open
+ || bg::closure<G2>::value == bg::open;
+
+ std::ostringstream filename;
+ filename << "intersection_"
+ << caseid << "_"
+ << string_from_type<coordinate_type>::name()
+ << string_from_type<CalculationType>::name()
+ << (ccw ? "_ccw" : "")
+ << (open ? "_open" : "")
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper<point_type> mapper(svg, 500, 500);
+
+ mapper.add(g1);
+ mapper.add(g2);
+
+ mapper.map(g1, is_line
+ ? "opacity:0.6;stroke:rgb(0,255,0);stroke-width:5"
+ : "fill-opacity:0.5;fill:rgb(153,204,0);"
+ "stroke:rgb(153,204,0);stroke-width:3");
+ mapper.map(g2, "fill-opacity:0.3;fill:rgb(51,51,153);"
+ "stroke:rgb(51,51,153);stroke-width:3");
+
+ for (typename std::vector<OutputType>::const_iterator it = clip.begin();
+ it != clip.end(); ++it)
+ {
+ mapper.map(*it, "fill-opacity:0.2;stroke-opacity:0.4;fill:rgb(255,0,0);"
+ "stroke:rgb(255,0,255);stroke-width:8");
+ }
+ }
+#endif
+
+ if (debug)
+ {
+ std::cout << "end case " << caseid << std::endl;
+ }
+
+ return length_or_area;
+}
+
+template <typename OutputType, typename G1, typename G2>
+typename bg::default_area_result<G1>::type test_one(std::string const& caseid,
+ std::string const& wkt1, std::string const& wkt2,
+ std::size_t expected_count = 0, std::size_t expected_point_count = 0,
+ double expected_length_or_area = 0,
+ double percentage = 0.0001,
+ bool debug = false)
+{
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ // Reverse if necessary
+ bg::correct(g1);
+ bg::correct(g2);
+
+ return test_intersection<OutputType, void>(caseid, g1, g2,
+ expected_count, expected_point_count,
+ expected_length_or_area, percentage,
+ debug);
+}
+
+template <typename OutputType, typename Areal, typename Linear>
+void test_one_lp(std::string const& caseid,
+ std::string const& wkt_areal, std::string const& wkt_linear,
+ std::size_t expected_count = 0, std::size_t expected_point_count = 0,
+ double expected_length = 0,
+ double percentage = 0.0001,
+ bool debug1 = false, bool debug2 = false)
+{
+ Areal areal;
+ bg::read_wkt(wkt_areal, areal);
+ bg::correct(areal);
+
+ Linear linear;
+ bg::read_wkt(wkt_linear, linear);
+
+ test_intersection<OutputType, void>(caseid, areal, linear,
+ expected_count, expected_point_count,
+ expected_length, percentage, debug1);
+
+ // A linestring reversed should deliver exactly the same.
+ bg::reverse(linear);
+
+ test_intersection<OutputType, void>(caseid + "_rev", areal, linear,
+ expected_count, expected_point_count,
+ expected_length, percentage, debug2);
+}
+
+template <typename Geometry1, typename Geometry2>
+void test_point_output(std::string const& wkt1, std::string const& wkt2, unsigned int expected_count)
+{
+ Geometry1 g1;
+ bg::read_wkt(wkt1, g1);
+ bg::correct(g1);
+
+ Geometry2 g2;
+ bg::read_wkt(wkt2, g2);
+ bg::correct(g2);
+
+ std::vector<typename bg::point_type<Geometry1>::type> points;
+ bg::intersection(g1, g2, points);
+ BOOST_CHECK_EQUAL(points.size(), expected_count);
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_intersects.hpp b/libs/geometry/test/algorithms/test_intersects.hpp
new file mode 100644
index 000000000..dac1b1eae
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_intersects.hpp
@@ -0,0 +1,67 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_INTERSECTS_HPP
+#define BOOST_GEOMETRY_TEST_INTERSECTS_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/algorithms/intersects.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+
+ bool detected = bg::intersects(geometry1, geometry2);
+ bool detected2 = bg::intersects(geometry2, geometry1);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "intersects: " << wkt1
+ << " with " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+ BOOST_CHECK_MESSAGE(detected2 == expected,
+ "intersects: " << wkt1
+ << " with " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected2);
+}
+
+
+template <typename Geometry>
+void test_self_intersects(std::string const& wkt, bool expected)
+{
+ Geometry geometry;
+
+ bg::read_wkt(wkt, geometry);
+
+ bool detected = bg::intersects(geometry);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "intersects: " << wkt
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_length.hpp b/libs/geometry/test/algorithms/test_length.hpp
new file mode 100644
index 000000000..d91ba4989
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_length.hpp
@@ -0,0 +1,64 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_LENGTH_HPP
+#define BOOST_GEOMETRY_TEST_LENGTH_HPP
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/length.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/variant/variant.hpp>
+
+
+template <typename Geometry>
+void test_length(Geometry const& geometry, long double expected_length)
+{
+ BOOST_AUTO(length, bg::length(geometry));
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Geometry>::type).name()
+ << std::endl
+ << typeid(typename bg::default_length_result<Geometry>::type).name()
+ << std::endl
+ << "length : " << bg::length(geometry)
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(length, expected_length, 0.0001);
+}
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, double expected_length)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ test_length(geometry, expected_length);
+ test_length(boost::variant<Geometry>(geometry), expected_length);
+}
+
+template <typename Geometry>
+void test_empty_input(Geometry const& geometry)
+{
+ try
+ {
+ bg::length(geometry);
+ }
+ catch(bg::empty_input_exception const& )
+ {
+ return;
+ }
+ BOOST_CHECK_MESSAGE(false, "A empty_input_exception should have been thrown" );
+}
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_overlaps.hpp b/libs/geometry/test/algorithms/test_overlaps.hpp
new file mode 100644
index 000000000..b4e76a340
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_overlaps.hpp
@@ -0,0 +1,44 @@
+// Generic Geometry2 Library
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_OVERLAPS_HPP
+#define BOOST_GEOMETRY_TEST_OVERLAPS_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/algorithms/overlaps.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+
+ bool detected = bg::overlaps(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "overlaps: " << wkt1
+ << " with " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_overlay.hpp b/libs/geometry/test/algorithms/test_overlay.hpp
new file mode 100644
index 000000000..8b7bd0172
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_overlay.hpp
@@ -0,0 +1,161 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_OVERLAY_HPP
+#define BOOST_GEOMETRY_TEST_OVERLAY_HPP
+
+#include <string>
+
+// 1. (Example) testcases
+static std::string example_box = "box(1.5 1.5, 4.5 2.5)";
+
+static std::string example_polygon =
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"
+ "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))";
+
+static std::string example_ring =
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))";
+
+static std::string example_star =
+ "POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))";
+
+static std::string polygon_empty = "POLYGON EMPTY";
+
+// 2. Alphabetically ordered testcase pairs
+
+static std::string crossed[2] =
+ {"POLYGON((0 0,0 5,5 5,5 0,0 0),(4 1,3 4,1 2,4 1))",
+ "POLYGON((2 1,1 4,4 3,2 1))"};
+
+static std::string disjoint[2] =
+ {"POLYGON((3 0,3 1,4 1,4 0,3 0))",
+ "POLYGON((3 4,3 5,4 5,4 4,3 4))"};
+
+static std::string distance_zero[2] =
+ {"POLYGON((1 1,1 4,4 4,4 1,1 1))",
+ "POLYGON((1.9 0.9,2.0 4.000001,2.1 1.0,1.9 0.9))"};
+
+// e-45 gives 'convenient' IEEE-single-FP-error,
+static std::string epsilon[2] =
+ {"POLYGON((0.0 0.0"
+ ",3.0e-45 4.0e-45"
+ ",4.0e-45 1.0e-45"
+ ",0.0 0.0))",
+ "POLYGON((2.0e-45 2.0e-45"
+ ",6.0e-45 4.0e-45"
+ ",4.0e-45 -1.0e-45"
+ ",2.0e-45 2.0e-45))"};
+
+static std::string epsilon_multi_ip[2] =
+ {
+ "POLYGON("
+ "(0.0e-44 2.0e-44,0.5e-44 2.5e-44,1.2e-44 2.0e-44,1.7e-44 2.5e-44,2.5e-44 2.0e-44,2.0e-44 1.5e-44"
+ ",2.5e-44 1.0e-44,2.0e-44 0.5e-44,1.7e-44 0.0e-44,1.5e-44 0.5e-44,1.2e-44 0.0e-44,1.0e-44 0.5e-44"
+ ",0.7e-44 0.0e-44,0.5e-44 1.7e-44,0.12e-44 1.5e-44,0.5e-44 1.2e-44,0.0e-44 1.0e-44,0.0e-44 2.0e-44))",
+ "POLYGON("
+ "(0.2e-44 0.2e-44,0.2e-44 2.2e-44,2.2e-44 2.2e-44,2.2e-44 0.2e-44,0.2e-44 0.2e-44))"
+ };
+
+static std::string equal_holes_disjoint[2] =
+ {"POLYGON((0 0,0 9,9 9,9 0,0 0),(1 1,4 1,4 8,1 8,1 1),(5 1,8 1,8 4,5 4,5 1))",
+ "POLYGON((0 0,0 9,9 9,9 0,0 0),(1 1,4 1,4 8,1 8,1 1),(5 5,8 5,8 8,5 8,5 5))"};
+
+static std::string first_within_second[2] =
+ {"POLYGON((2 2,2 3,3 3,3 2,2 2))",
+ "POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))"};
+
+static std::string first_within_hole_of_second[2] =
+ {"POLYGON((2 2,2 3,3 3,3 2,2 2))",
+ "POLYGON((0 0, 0 5, 5 5, 5 0, 0 0),(1 1,4 1,4 4,1 4,1 1))"};
+
+// == case 52
+static std::string fitting[2] =
+ {"POLYGON((0 0,0 5,5 5,5 0,0 0),(4 1,3 4,1 2,4 1))",
+ "POLYGON((1 2,3 4,4 1,1 2))"};
+
+static std::string identical[2] =
+ {"POLYGON((0 0,0 1,1 1,1 0,0 0))",
+ "POLYGON((1 1,1 0,0 0,0 1,1 1))"};
+
+// case 2102 from "algorithms/detail/overlay/robustness/assemble.hpp"
+static std::string intersect_exterior_and_interiors_winded[2] =
+ {"POLYGON((2 0.5,0.5 2,0.5 8,2 9.5,6 9.5,8.5 8,8.5 2,7 0.5,2 0.5),(2 2,7 2,7 8,2 8,2 2))",
+ "POLYGON((1 1,1 9,8 9,8 1,1 1),(4 4,5 4,5 5,4 5,4 4))"};
+
+static std::string intersect_holes_disjoint[2] =
+ {"POLYGON((0 0,0 7,5 7,5 0,0 0),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2 4,3 4,3 5,2 5,2 4))"};
+
+static std::string intersect_holes_intersect[2] =
+ {"POLYGON((0 0,0 7,5 7,5 0,0 0),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2.5 2.5,3.5 2.5,3.5 3.5,2.5 3.5,2.5 2.5))"};
+
+static std::string intersect_holes_intersect_and_disjoint[2] =
+ {"POLYGON((0 0,0 7,5 7,5 0,0 0),(2 2,3 2,3 3,2 3,2 2),(2 4,3 4,3 5,2 5,2 4))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2.5 2.5,3.5 2.5,3.5 3.5,2.5 3.5,2.5 2.5))"};
+
+static std::string intersect_holes_intersect_and_touch[2] =
+ {"POLYGON((0 0,0 7,5 7,5 0,0 0),(2 2,3 2,3 3,2 3,2 2),(2.5 4,3 4.5,2.5 5,2 4.5,2.5 4))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2.5 2.5,3.5 2.5,3.5 3.5,2.5 3.5,2.5 2.5),(3.5 4,4 4.5,3.5 5,3 4.5,3.5 4))"};
+
+static std::string intersect_holes_new_ring[2] =
+ {"POLYGON((4 4,4 16,16 16,16 4,4 4),(7 6,14 10,7 14,11 10,7 6))",
+ "POLYGON((2 2,2 18,18 18,18 2,2 2),(13 6,9 10,13 14,6 10,13 6))"};
+
+static std::string isovist1[2] =
+ {
+ "POLYGON((37.29449462890625 1.7902572154998779, 46.296027072709599 -2.4984308554828116, 45.389434814453125 -4.5143837928771973, 47.585065917176543 -6.1314922196594779, 46.523914387974358 -8.5152102535033496, 42.699958801269531 -4.4278755187988281, 42.577877044677734 -4.4900407791137695, 42.577911376953125 -4.4901103973388672, 40.758884429931641 -5.418975830078125, 40.6978759765625 -5.4500408172607422, 41.590042114257813 -7.2021245956420898, 57.297810222148939 -37.546793343968417, 50.974888957147442 -30.277285722290763, 37.140213012695313 1.3446992635726929, 37.000419616699219 1.664225697517395, 37.29449462890625 1.7902572154998779))",
+ "POLYGON((43.644271850585938 0.96149998903274536,43.764598846435547 0.93951499462127686,49.071769542946825 0.61489892713413252,48.43512638981781 -0.81299959072453376,47.830955505371094 -0.69758313894271851,47.263670054709685 -1.784876824891044,46.695858001708984 -1.6093428134918213,45.389434814453125 -4.5143837928771973,47.604561877161387 -6.087697464505224,46.559533858616469 -8.435196445683264,42.699958801269531 -4.4278755187988281,42.577877044677734 -4.4900407791137695,42.577911376953125 -4.4901103973388672,40.758884429931641 -5.418975830078125,40.6978759765625 -5.4500408172607422,41.590042114257813 -7.2021245956420898,57.524304765518266 -37.807195733984784,41.988733475572282 -19.945838749437218,41.821544647216797 -19.211688995361328,40.800632476806641 -17.208097457885742,39.966808319091797 -17.625011444091797,38.823680877685547 -16.296066284179688,37.326129913330078 -17.190576553344727,35.963497161865234 -15.476018905639648,35.656356811523438 -15.66030216217041,34.931102752685547 -16.223842620849609,34.634240447128811 -15.85007183479255,34.886280059814453 -14.120697975158691,34.658355712890625 -13.81736946105957,34.328716278076172 -13.992490768432617,33.598796844482422 -14.546377182006836,33.164891643669634 -14.000060288415174,33.566280364990234 -12.450697898864746,33.339523315429688 -12.147735595703125,32.998821258544922 -12.323249816894531,32.274600982666016 -12.879127502441406,31.682494778186321 -12.133624901803865,32.226280212402344 -10.790698051452637,32.000633239746094 -10.488097190856934,31.669155120849609 -10.653837203979492,30.947774887084961 -11.208560943603516,30.207040612748258 -10.275926149505661,30.896280288696289 -9.1206979751586914,30.670633316040039 -8.8180980682373047,30.339155197143555 -8.9838371276855469,29.619997024536133 -9.5368013381958008,29.135100397190627 -8.9262827849488211,32.718830108642578 -4.3281683921813965,32.708168029785156 -2.3611698150634766,32.708126068115234 -2.3611700534820557,32.708126068115234 -2.3611266613006592,30.501169204711914 -2.3718316555023193,27.069889344709196 -4.2926591211028242,26.472516656201325 -3.5380830513658776,36.954700469970703 1.2597870826721191,37.140213012695313 1.3446992635726929,37.000419616699219 1.664225697517395,37.29449462890625 1.7902572154998779,37.43402099609375 1.470055103302002,51.370888500897557 7.4163459734570729,51.20102152843122 7.1738039562841562,42.721500396728516 3.6584999561309814,42.721500396728516 2.2342472076416016,42.399410247802734 1.4956772327423096,43.644271850585938 0.96149998903274536))"
+ };
+
+static std::string new_hole[2] =
+ {"POLYGON((2 2,2 5,5 5,5 2,2 2))",
+ "POLYGON((0 0,0 6,3 6,3 4,1 4,1 3,3 3,3 0,0 0))"};
+
+static std::string only_hole_intersections[3] =
+ {"POLYGON((0 0,0 10,20 10,20 0,0 0),(1 1,7 5,5 7,1 1),(11 1,17 5,15 7,11 1))",
+ "POLYGON((0 0,0 10,20 10,20 0,0 0),(1 1,7 6,6 7,1 1),(11 1,17 6,16 7,11 1))",
+ "POLYGON((0.5 0.5,0.5 9.5,19.5 9.5,19.5 0.5,0.5 0.5),(1 1,7 6,6 7,1 1),(11 1,17 6,16 7,11 1))"};
+
+static std::string side_side[2] =
+ {"POLYGON((0 0,0 1,1 1,1 0,0 0))",
+ "POLYGON((1 0,1 1,2 1,2 0,1 0))"};
+
+static std::string simplex_normal[2] =
+ {"POLYGON((0 1,2 5,5 3,0 1))",
+ "POLYGON((3 0,0 3,4 5,3 0))"};
+
+static std::string simplex_reversed[2] =
+ {"POLYGON((0 1,5 3,2 5,0 1))",
+ "POLYGON((3 0,4 5,0 3,3 0))"};
+
+static std::string star_comb_15[2] =
+ {"POLYGON((25 52.5,27.1694 29.5048,46.5004 42.146,29.8746 26.1126,51.8105 18.8807,28.9092 21.8826,36.9318 0.223356,25 20,13.0682 0.223356,21.0908 21.8826,-1.81052 18.8807,20.1254 26.1126,3.49963 42.146,22.8306 29.5048,25 52.5))",
+ "POLYGON((25 0,0 25,25 50,50 25,49.0741 24.0741,25 48.1481,24.0741 47.2222,48.1481 23.1481,47.2222 22.2222,23.1481 46.2963,22.2222 45.3704,46.2963 21.2963,45.3704 20.3704,21.2963 44.4444,20.3704 43.5185,44.4444 19.4444,43.5185 18.5185,19.4444 42.5926,18.5185 41.6667,42.5926 17.5926,41.6667 16.6667,17.5926 40.7407,16.6667 39.8148,40.7407 15.7407,39.8148 14.8148,15.7407 38.8889,14.8148 37.963,38.8889 13.8889,37.963 12.963,13.8889 37.037,12.963 36.1111,37.037 12.037,36.1111 11.1111,12.037 35.1852,11.1111 34.2593,35.1852 10.1852,34.2593 9.25926,10.1852 33.3333,9.25926 32.4074,33.3333 8.33333,32.4074 7.40741,8.33333 31.4815,7.40741 30.5556,31.4815 6.48148,30.5556 5.55556,6.48148 29.6296,5.55556 28.7037,29.6296 4.62963,28.7037 3.7037,4.62963 27.7778,3.7037 26.8519,27.7778 2.77778,26.8519 1.85185,2.77778 25.9259,1.85185 25,25.9259 0.925926,25 0))"};
+
+static std::string two_bends[2] =
+ {"POLYGON((0 4,4 8,7 7,8 4,5 3,4 0,0 4))",
+ "POLYGON((0 4,4 8,5 5,8 4,7 1,4 0,0 4))"};
+
+// within each other, having no intersections but many holes within each other
+static std::string winded[2] =
+ {"POLYGON((0 0,0 11,11 11,11 0,0 0),(3 3,4 3,4 4,3 4,3 3),(5 3,6 3,6 4,5 4,5 3),(2 6,7 6,7 9,2 9,2 6),(9 2,10 2,10 5,9 5,9 2))",
+ "POLYGON((1 1,1 10,10 10,10 6,8 6,8 1,1 1),(2 2,7 2,7 5,2 5,2 2),(3 7,4 7,4 8,3 8,3 7),(5 7,6 7,6 8,5 8,5 7),(8 7,9 7,9 8,8 8,8 7))"};
+
+static std::string within_holes_disjoint[2] =
+ {"POLYGON((0 0,0 7,7 7,7 0,0 0),(2 2,3 2,3 3,2 3,2 2))",
+ "POLYGON((1 1,1 6,6 6,6 1,1 1),(2 4,3 4,3 5,2 5,2 4))"};
+
+// == case 53
+static std::string wrapped[3] = {
+ "POLYGON((2 2,2 3,3 3,3 2,2 2))",
+ /*a:*/ "POLYGON((0 2,0 5,5 5,5 0,2 0,2 2,3 2,3 1,4 1,4 4,1 4,1 3,2 3,2 2,0 2))", // NOT st_isvalid
+ /*b:*/ "POLYGON((0 2,0 5,5 5,5 0,2 0,2 2,0 2),(1 3,2 3,2 2,3 2,3 1,4 1,4 4,1 4,1 3))" // st_isvalid
+ };
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_perimeter.hpp b/libs/geometry/test/algorithms/test_perimeter.hpp
new file mode 100644
index 000000000..0d6a9537a
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_perimeter.hpp
@@ -0,0 +1,64 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_PERIMETER_HPP
+#define BOOST_GEOMETRY_TEST_PERIMETER_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/perimeter.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+template <typename Geometry>
+void test_perimeter(Geometry const& geometry, long double expected_perimeter)
+{
+ typename bg::default_distance_result<Geometry>::type perimeter = bg::perimeter(geometry);
+
+#ifdef GEOMETRY_TEST_DEBUG
+ std::ostringstream out;
+ out << typeid(typename bg::coordinate_type<Geometry>::type).name()
+ << std::endl
+ << typeid(typename bg::perimeter_result<Geometry>::type).name()
+ << std::endl
+ << "perimeter : " << bg::perimeter(geometry)
+ << std::endl;
+ std::cout << out.str();
+#endif
+
+ BOOST_CHECK_CLOSE(perimeter, expected_perimeter, 0.0001);
+}
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, double expected_perimeter)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ test_perimeter(geometry, expected_perimeter);
+}
+
+template <typename Geometry>
+void test_empty_input(Geometry const& geometry)
+{
+ try
+ {
+ bg::perimeter(geometry);
+ }
+ catch(bg::empty_input_exception const& )
+ {
+ return;
+ }
+ BOOST_CHECK_MESSAGE(false, "A empty_input_exception should have been thrown" );
+}
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_relate.hpp b/libs/geometry/test/algorithms/test_relate.hpp
new file mode 100644
index 000000000..e747a4047
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_relate.hpp
@@ -0,0 +1,33 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_RELATE_HPP
+#define BOOST_GEOMETRY_TEST_RELATE_HPP
+
+#include <string>
+
+
+static std::string disjoint_simplex[2] =
+ {"POLYGON((0 0,0 2,2 2,0 0))",
+ "POLYGON((1 0,3 2,3 0,1 0))"};
+
+static std::string touch_simplex[2] =
+ {"POLYGON((0 0,0 2,2 2,0 0))",
+ "POLYGON((2 2,3 2,3 0,2 2))"};
+
+static std::string overlaps_box[2] =
+ {"POLYGON((0 0,0 2,2 2,0 0))",
+ "POLYGON((1 1,3 2,3 0,1 1))"};
+
+static std::string within_simplex[2] =
+ {"POLYGON((0 0,1 4,4 1,0 0))",
+ "POLYGON((1 1,1 3,3 1,1 1))"};
+
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_reverse.hpp b/libs/geometry/test/algorithms/test_reverse.hpp
new file mode 100644
index 000000000..97e537f7b
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_reverse.hpp
@@ -0,0 +1,38 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_REVERSE_HPP
+#define BOOST_GEOMETRY_TEST_REVERSE_HPP
+
+// Test-functionality, shared between single and multi tests
+
+#include <geometry_test_common.hpp>
+#include <boost/geometry/algorithms/reverse.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, std::string const& expected)
+{
+ Geometry geometry;
+
+ bg::read_wkt(wkt, geometry);
+ bg::reverse(geometry);
+
+ std::ostringstream out;
+ out << bg::wkt(geometry);
+
+ BOOST_CHECK_MESSAGE(out.str() == expected,
+ "reverse: " << wkt
+ << " expected " << expected
+ << " got " << out.str());
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_simplify.hpp b/libs/geometry/test/algorithms/test_simplify.hpp
new file mode 100644
index 000000000..30f0998f7
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_simplify.hpp
@@ -0,0 +1,96 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_SIMPLIFY_HPP
+#define BOOST_GEOMETRY_TEST_SIMPLIFY_HPP
+
+// Test-functionality, shared between single and multi tests
+
+#include <geometry_test_common.hpp>
+#include <boost/geometry/algorithms/simplify.hpp>
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+template <typename Tag, typename Geometry>
+struct test_inserter
+{
+ static void apply(Geometry& , std::string const& , double )
+ {}
+};
+
+template <typename Geometry>
+struct test_inserter<bg::linestring_tag, Geometry>
+{
+ static void apply(Geometry& geometry, std::string const& expected, double distance)
+ {
+ Geometry simplified;
+ bg::detail::simplify::simplify_insert(geometry,
+ std::back_inserter(simplified), distance);
+
+ std::ostringstream out;
+ out << bg::wkt(simplified);
+ BOOST_CHECK_EQUAL(out.str(), expected);
+ }
+};
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, std::string const& expected, double distance)
+{
+ Geometry geometry, simplified;
+
+ // Generate polygon using only integer coordinates and obvious results
+ // Polygon is a hexagon, having one extra point (2,1) on a line which should be filtered out.
+ bg::read_wkt(wkt, geometry);
+ bg::simplify(geometry, simplified, distance);
+
+ {
+ std::ostringstream out;
+ out << bg::wkt(simplified);
+
+ BOOST_CHECK_MESSAGE(out.str() == expected,
+ "simplify: " << bg::wkt(geometry)
+ << " expected " << expected
+ << " got " << bg::wkt(simplified));
+ }
+
+ // Check using user-specified strategy
+ typedef typename bg::point_type<Geometry>::type point_type;
+ typedef typename bg::cs_tag<point_type>::type tag;
+ typedef bg::strategy::distance::projected_point
+ <
+ point_type,
+ point_type
+ > strategy;
+ typedef bg::strategy::simplify::douglas_peucker
+ <
+ point_type,
+ strategy
+ > simplify_strategy_type;
+
+ BOOST_CONCEPT_ASSERT( (bg::concept::SimplifyStrategy<simplify_strategy_type>) );
+ bg::simplify(geometry, simplified, distance, simplify_strategy_type());
+
+ {
+ std::ostringstream out;
+ out << bg::wkt(simplified);
+ BOOST_CHECK_EQUAL(out.str(), expected);
+ }
+
+ // Check inserter (if applicable)
+ test_inserter
+ <
+ typename bg::tag<Geometry>::type,
+ Geometry
+ >::apply(geometry, expected, distance);
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_touches.hpp b/libs/geometry/test/algorithms/test_touches.hpp
new file mode 100644
index 000000000..aa88ea96d
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_touches.hpp
@@ -0,0 +1,61 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_TOUCHES_HPP
+#define BOOST_GEOMETRY_TEST_TOUCHES_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/algorithms/touches.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_touches(std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+
+ bool detected = bg::touches(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "touches: " << wkt1
+ << " with " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+template <typename Geometry>
+void test_self_touches(std::string const& wkt, bool expected)
+{
+ Geometry geometry;
+
+ bg::read_wkt(wkt, geometry);
+
+ bool detected = bg::touches(geometry);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "touches: " << wkt
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_union.hpp b/libs/geometry/test/algorithms/test_union.hpp
new file mode 100644
index 000000000..c449c66e3
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_union.hpp
@@ -0,0 +1,174 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_UNION_HPP
+#define BOOST_GEOMETRY_TEST_UNION_HPP
+
+#include <fstream>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/range/algorithm/copy.hpp>
+
+#include <boost/geometry/algorithms/union.hpp>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/length.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+#if defined(TEST_WITH_SVG)
+# include <boost/geometry/io/svg/svg_mapper.hpp>
+#endif
+
+
+
+template <typename OutputType, typename G1, typename G2>
+void test_union(std::string const& caseid, G1 const& g1, G2 const& g2,
+ std::size_t expected_count, std::size_t expected_hole_count,
+ int expected_point_count, double expected_area,
+ double percentage)
+{
+ typedef typename bg::coordinate_type<G1>::type coordinate_type;
+ std::vector<OutputType> clip;
+ bg::union_(g1, g2, clip);
+
+ typename bg::default_area_result<G1>::type area = 0;
+ std::size_t n = 0;
+ std::size_t holes = 0;
+ for (typename std::vector<OutputType>::iterator it = clip.begin();
+ it != clip.end(); ++it)
+ {
+ area += bg::area(*it);
+ holes += bg::num_interior_rings(*it);
+ n += bg::num_points(*it, true);
+ }
+
+ {
+ // Test inserter functionality
+ // Test if inserter returns output-iterator (using Boost.Range copy)
+ std::vector<OutputType> inserted, array_with_one_empty_geometry;
+ array_with_one_empty_geometry.push_back(OutputType());
+ boost::copy(array_with_one_empty_geometry, bg::detail::union_::union_insert<OutputType>(g1, g2, std::back_inserter(inserted)));
+
+ typename bg::default_area_result<G1>::type area_inserted = 0;
+ int index = 0;
+ for (typename std::vector<OutputType>::iterator it = inserted.begin();
+ it != inserted.end();
+ ++it, ++index)
+ {
+ // Skip the empty polygon created above to avoid the empty_input_exception
+ if (bg::num_points(*it) > 0)
+ {
+ area_inserted += bg::area(*it);
+ }
+ }
+ BOOST_CHECK_EQUAL(boost::size(clip), boost::size(inserted) - 1);
+ BOOST_CHECK_CLOSE(area_inserted, expected_area, percentage);
+ }
+
+
+
+ /***
+ std::cout << "case: " << caseid
+ << " n: " << n
+ << " area: " << area
+ << " polygons: " << boost::size(clip)
+ << " holes: " << holes
+ << std::endl;
+ ***/
+
+ if (expected_point_count >= 0)
+ {
+ BOOST_CHECK_MESSAGE(n == std::size_t(expected_point_count),
+ "union: " << caseid
+ << " #points expected: " << expected_point_count
+ << " detected: " << n
+ << " type: " << string_from_type<coordinate_type>::name()
+ );
+ }
+
+ BOOST_CHECK_EQUAL(clip.size(), expected_count);
+ BOOST_CHECK_EQUAL(holes, expected_hole_count);
+ BOOST_CHECK_CLOSE(area, expected_area, percentage);
+
+#if defined(TEST_WITH_SVG)
+ {
+ bool const ccw =
+ bg::point_order<G1>::value == bg::counterclockwise
+ || bg::point_order<G2>::value == bg::counterclockwise;
+ bool const open =
+ bg::closure<G1>::value == bg::open
+ || bg::closure<G2>::value == bg::open;
+
+ std::ostringstream filename;
+ filename << "union_"
+ << caseid << "_"
+ << string_from_type<coordinate_type>::name()
+ << (ccw ? "_ccw" : "")
+ << (open ? "_open" : "")
+ << ".svg";
+
+ std::ofstream svg(filename.str().c_str());
+
+ bg::svg_mapper
+ <
+ typename bg::point_type<G2>::type
+ > mapper(svg, 500, 500);
+ mapper.add(g1);
+ mapper.add(g2);
+
+ mapper.map(g1, "fill-opacity:0.5;fill:rgb(153,204,0);"
+ "stroke:rgb(153,204,0);stroke-width:3");
+ mapper.map(g2, "fill-opacity:0.3;fill:rgb(51,51,153);"
+ "stroke:rgb(51,51,153);stroke-width:3");
+ //mapper.map(g1, "opacity:0.6;fill:rgb(0,0,255);stroke:rgb(0,0,0);stroke-width:1");
+ //mapper.map(g2, "opacity:0.6;fill:rgb(0,255,0);stroke:rgb(0,0,0);stroke-width:1");
+
+ for (typename std::vector<OutputType>::const_iterator it = clip.begin();
+ it != clip.end(); ++it)
+ {
+ mapper.map(*it, "fill-opacity:0.2;stroke-opacity:0.4;fill:rgb(255,0,0);"
+ "stroke:rgb(255,0,255);stroke-width:8");
+ //mapper.map(*it, "opacity:0.6;fill:none;stroke:rgb(255,0,0);stroke-width:5");
+ }
+ }
+#endif
+}
+
+template <typename OutputType, typename G1, typename G2>
+void test_one(std::string const& caseid, std::string const& wkt1, std::string const& wkt2,
+ std::size_t expected_count, std::size_t expected_hole_count,
+ int expected_point_count, double expected_area,
+ double percentage = 0.001)
+{
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ // Reverse if necessary
+ bg::correct(g1);
+ bg::correct(g2);
+
+ test_union<OutputType>(caseid, g1, g2,
+ expected_count, expected_hole_count, expected_point_count,
+ expected_area, percentage);
+}
+
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_unique.hpp b/libs/geometry/test/algorithms/test_unique.hpp
new file mode 100644
index 000000000..09d4981af
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_unique.hpp
@@ -0,0 +1,39 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+
+#ifndef BOOST_GEOMETRY_TEST_UNIQUE_HPP
+#define BOOST_GEOMETRY_TEST_UNIQUE_HPP
+
+// Test-functionality, shared between single and multi tests
+
+#include <geometry_test_common.hpp>
+#include <boost/geometry/algorithms/unique.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, std::string const& expected)
+{
+ Geometry geometry;
+
+ bg::read_wkt(wkt, geometry);
+ bg::unique(geometry);
+
+ std::ostringstream out;
+ out << bg::wkt(geometry);
+
+ BOOST_CHECK_MESSAGE(out.str() == expected,
+ "unique: " << wkt
+ << " expected " << expected
+ << " got " << out.str());
+}
+
+
+#endif
diff --git a/libs/geometry/test/algorithms/test_within.hpp b/libs/geometry/test/algorithms/test_within.hpp
new file mode 100644
index 000000000..bc3f9958d
--- /dev/null
+++ b/libs/geometry/test/algorithms/test_within.hpp
@@ -0,0 +1,126 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+
+#ifndef BOOST_GEOMETRY_TEST_WITHIN_HPP
+#define BOOST_GEOMETRY_TEST_WITHIN_HPP
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+#include <boost/geometry/strategies/cartesian/point_in_box.hpp>
+#include <boost/geometry/strategies/cartesian/box_in_box.hpp>
+#include <boost/geometry/strategies/agnostic/point_in_box_by_side.hpp>
+
+
+template <typename Geometry1, typename Geometry2>
+void test_geometry(std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ Geometry1 geometry1;
+ Geometry2 geometry2;
+
+ bg::read_wkt(wkt1, geometry1);
+ bg::read_wkt(wkt2, geometry2);
+
+ bool detected = bg::within(geometry1, geometry2);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "within: " << wkt1
+ << " in " << wkt2
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+
+template <typename Point, bool Clockwise, bool Closed>
+void test_ordered_ring(std::string const& wkt_point,
+ std::string const& wkt_geometry, bool expected, bool on_border)
+{
+ typedef bg::model::ring<Point, Clockwise, Closed> ring_type;
+ ring_type ring;
+ Point point;
+
+ bg::read_wkt(wkt_geometry, ring);
+ if (! Clockwise)
+ {
+ std::reverse(boost::begin(ring), boost::end(ring));
+ }
+ if (! Closed)
+ {
+ ring.resize(ring.size() - 1);
+ }
+
+ bg::read_wkt(wkt_point, point);
+
+ bool detected = bg::within(point, ring);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "within: " << wkt_point
+ << " in " << wkt_geometry
+ << " -> Expected: " << expected
+ << " detected: " << detected
+ << " clockwise: " << int(Clockwise)
+ << " closed: " << int(Closed)
+ );
+
+ // other strategy (note that this one cannot detect OnBorder
+ // (without modifications)
+
+ bg::strategy::within::franklin<Point> franklin;
+ detected = bg::within(point, ring, franklin);
+ if (! on_border)
+ {
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "within: " << wkt_point
+ << " in " << wkt_geometry
+ << " -> Expected: " << expected
+ << " detected: " << detected
+ << " clockwise: " << int(Clockwise)
+ << " closed: " << int(Closed)
+ );
+ }
+
+
+ bg::strategy::within::crossings_multiply<Point> cm;
+ detected = bg::within(point, ring, cm);
+ if (! on_border)
+ {
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "within: " << wkt_point
+ << " in " << wkt_geometry
+ << " -> Expected: " << expected
+ << " detected: " << detected
+ << " clockwise: " << int(Clockwise)
+ << " closed: " << int(Closed)
+ );
+ }
+}
+
+template <typename Point>
+void test_ring(std::string const& wkt_point,
+ std::string const& wkt_geometry,
+ bool expected, bool on_border)
+{
+ test_ordered_ring<Point, true, true>(wkt_point, wkt_geometry, expected, on_border);
+ test_ordered_ring<Point, false, true>(wkt_point, wkt_geometry, expected, on_border);
+ test_ordered_ring<Point, true, false>(wkt_point, wkt_geometry, expected, on_border);
+ test_ordered_ring<Point, false, false>(wkt_point, wkt_geometry, expected, on_border);
+ test_geometry<Point, bg::model::polygon<Point> >(wkt_point, wkt_geometry, expected);
+}
+
+#endif
diff --git a/libs/geometry/test/algorithms/touches.cpp b/libs/geometry/test/algorithms/touches.cpp
new file mode 100644
index 000000000..84430d527
--- /dev/null
+++ b/libs/geometry/test/algorithms/touches.cpp
@@ -0,0 +1,154 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <algorithms/test_touches.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::polygon<P> polygon;
+
+ // Just a normal polygon
+ test_self_touches<polygon>("POLYGON((0 0,0 4,1.5 2.5,2.5 1.5,4 0,0 0))", false);
+
+ // Self intersecting
+ test_self_touches<polygon>("POLYGON((1 2,1 1,2 1,2 2.25,3 2.25,3 0,0 0,0 3,3 3,2.75 2,1 2))", false);
+
+ // Self touching at a point
+ test_self_touches<polygon>("POLYGON((0 0,0 3,2 3,2 2,1 2,1 1,2 1,2 2,3 2,3 0,0 0))", true);
+
+ // Self touching at a segment
+ test_self_touches<polygon>("POLYGON((0 0,0 3,2 3,2 2,1 2,1 1,2 1,2 2.5,3 2.5,3 0,0 0))", true);
+
+ // Touching at corner
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ "POLYGON((100 100,100 200,200 200, 200 100,100 100))",
+ true
+ );
+
+ // Intersecting at corner
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,101 101,100 0,0 0))",
+ "POLYGON((100 100,100 200,200 200, 200 100,100 100))",
+ false
+ );
+
+ // Touching at side (interior of a segment)
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ "POLYGON((200 0,100 50,200 100,200 0))",
+ true
+ );
+
+ // Touching at side (partly collinear)
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ "POLYGON((200 20,100 20,100 80,200 80,200 20))",
+ true
+ );
+
+ // Completely equal
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ false
+ );
+
+ // Spatially equal
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ "POLYGON((0 0,0 100,100 100,100 80,100 20,100 0,0 0))",
+ false
+ );
+
+ // Spatially equal (without equal segments)
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ "POLYGON((0 0,0 50,0 100,50 100,100 100,100 50,100 0,50 0,0 0))",
+ false
+ );
+
+
+ // Touching at side (opposite equal)
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ "POLYGON((200 0,100 0,100 100,200 100,200 0))",
+ true
+ );
+
+ // Touching at side (opposite equal - but with real "equal" turning point)
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 80,100 20,100 0,0 0))",
+ "POLYGON((200 0,100 0,100 20,100 80,100 100,200 100,200 0))",
+ true
+ );
+ // First partly collinear to side, than overlapping
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ "POLYGON((200 20,100 20,100 50,50 50,50 80,100 80,200 80,200 20))",
+ false
+ );
+
+ // Touching interior (= no touch)
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0))",
+ "POLYGON((20 20,20 80,100 50,20 20))",
+ false
+ );
+
+ // Fitting in hole
+ test_touches<polygon, polygon>
+ (
+ "POLYGON((0 0,0 100,100 100,100 0,0 0),(40 40,60 40,60 60,40 60,40 40))",
+ "POLYGON((40 40,40 60,60 60,60 40,40 40))",
+ true
+ );
+
+}
+
+
+
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
+
+/*
+with viewy as
+(
+select geometry::STGeomFromText('POLYGON((0 0,0 100,100 100,100 0,0 0))',0) as p
+ , geometry::STGeomFromText('POLYGON((200 0,100 50,200 100,200 0))',0) as q
+)
+-- select p from viewy union all select q from viewy
+select p.STTouches(q) from viewy
+*/ \ No newline at end of file
diff --git a/libs/geometry/test/algorithms/touches.vcproj b/libs/geometry/test/algorithms/touches.vcproj
new file mode 100644
index 000000000..79cc17048
--- /dev/null
+++ b/libs/geometry/test/algorithms/touches.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="touches"
+ ProjectGUID="{8359726E-9F03-4300-8F63-1FEAC84251D0}"
+ RootNamespace="touches"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\touches"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\touches"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\touches.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/transform.cpp b/libs/geometry/test/algorithms/transform.cpp
new file mode 100644
index 000000000..7a9c1c32a
--- /dev/null
+++ b/libs/geometry/test/algorithms/transform.cpp
@@ -0,0 +1,140 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <sstream>
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/algorithms/transform.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/io/dsv/write.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <test_common/test_point.hpp>
+
+template <typename P1, typename P2>
+void test_transform_point(
+ typename bg::select_most_precise
+ <
+ typename bg::coordinate_type<P1>::type,
+ double
+ >::type value)
+{
+ P1 p1;
+ bg::set<0>(p1, 1);
+ bg::set<1>(p1, 2);
+ P2 p2;
+ BOOST_CHECK(bg::transform(p1, p2));
+
+ BOOST_CHECK_CLOSE(value * bg::get<0>(p1), bg::get<0>(p2), 0.001);
+ BOOST_CHECK_CLOSE(value * bg::get<1>(p1), bg::get<1>(p2), 0.001);
+}
+
+template <typename P1, typename P2>
+void test_transform_linestring()
+{
+ bg::model::linestring<P1> line1;
+ line1.push_back(bg::make<P1>(1, 1));
+ line1.push_back(bg::make<P1>(2, 2));
+ bg::model::linestring<P2> line2;
+ BOOST_CHECK(bg::transform(line1, line2));
+ BOOST_CHECK_EQUAL(line1.size(), line2.size());
+
+ std::ostringstream out1, out2;
+ out1 << bg::wkt(line1);
+ out2 << bg::wkt(line2);
+ BOOST_CHECK_EQUAL(out1.str(), out1.str());
+}
+
+
+template <typename P1, typename P2>
+void test_all(double value = 1.0)
+{
+ test_transform_point<P1, P2>(value);
+ test_transform_linestring<P1, P2>();
+}
+
+template <typename T, typename DegreeOrRadian>
+void test_transformations(double phi, double theta, double r)
+{
+ typedef bg::model::point<T, 3, bg::cs::cartesian> cartesian_type;
+ cartesian_type p;
+
+ // 1: using spherical coordinates
+ {
+ typedef bg::model::point<T, 3, bg::cs::spherical<DegreeOrRadian> > spherical_type;
+ spherical_type sph1;
+ assign_values(sph1, phi, theta, r);
+ BOOST_CHECK(transform(sph1, p));
+
+ spherical_type sph2;
+ BOOST_CHECK(transform(p, sph2));
+
+ BOOST_CHECK_CLOSE(bg::get<0>(sph1), bg::get<0>(sph2), 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(sph1), bg::get<1>(sph2), 0.001);
+
+ //std::cout << dsv(p) << std::endl;
+ //std::cout << dsv(sph2) << std::endl;
+ }
+
+ // 2: using spherical coordinates on unit sphere
+ {
+ typedef bg::model::point<T, 2, bg::cs::spherical<DegreeOrRadian> > spherical_type;
+ spherical_type sph1, sph2;
+ assign_values(sph1, phi, theta);
+ BOOST_CHECK(transform(sph1, p));
+ BOOST_CHECK(transform(p, sph2));
+
+ BOOST_CHECK_CLOSE(bg::get<0>(sph1), bg::get<0>(sph2), 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(sph1), bg::get<1>(sph2), 0.001);
+
+ //std::cout << dsv(sph1) << " " << dsv(p) << " " << dsv(sph2) << std::endl;
+ }
+}
+
+int test_main(int, char* [])
+{
+ typedef bg::model::d2::point_xy<double > P;
+ test_all<P, P>();
+ test_all<bg::model::d2::point_xy<int>, bg::model::d2::point_xy<float> >();
+
+ test_all<bg::model::point<double, 2, bg::cs::spherical<bg::degree> >,
+ bg::model::point<double, 2, bg::cs::spherical<bg::radian> > >(bg::math::d2r);
+ test_all<bg::model::point<double, 2, bg::cs::spherical<bg::radian> >,
+ bg::model::point<double, 2, bg::cs::spherical<bg::degree> > >(bg::math::r2d);
+
+ test_all<bg::model::point<int, 2, bg::cs::spherical<bg::degree> >,
+ bg::model::point<float, 2, bg::cs::spherical<bg::radian> > >(bg::math::d2r);
+
+ test_transformations<float, bg::degree>(4, 52, 1);
+ test_transformations<double, bg::degree>(4, 52, 1);
+
+ test_transformations<float, bg::radian>(3 * bg::math::d2r, 51 * bg::math::d2r, 1);
+ test_transformations<double, bg::radian>(3 * bg::math::d2r, 51 * bg::math::d2r, 1);
+
+#if defined(HAVE_TTMATH)
+ typedef bg::model::d2::point_xy<ttmath_big > PT;
+ test_all<PT, PT>();
+ test_transformations<ttmath_big, bg::degree>(4, 52, 1);
+ test_transformations<ttmath_big, bg::radian>(3 * bg::math::d2r, 51 * bg::math::d2r, 1);
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/transform.vcproj b/libs/geometry/test/algorithms/transform.vcproj
new file mode 100644
index 000000000..fcf3c902d
--- /dev/null
+++ b/libs/geometry/test/algorithms/transform.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="transform"
+ ProjectGUID="{41413E56-08DA-4592-94D2-5311FE90C62B}"
+ RootNamespace="transform"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\transform"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\transform"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\transform.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/union.cpp b/libs/geometry/test/algorithms/union.cpp
new file mode 100644
index 000000000..751825244
--- /dev/null
+++ b/libs/geometry/test/algorithms/union.cpp
@@ -0,0 +1,442 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+#define BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE
+#define TEST_ISOVIST
+
+//#define BOOST_GEOMETRY_DEBUG_ASSEMBLE
+//#define BOOST_GEOMETRY_DEBUG_IDENTIFIER
+
+
+#include <algorithms/test_union.hpp>
+#include <algorithms/test_overlay.hpp>
+
+#include <algorithms/overlay/overlay_cases.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+
+template <typename Ring, typename Polygon>
+void test_areal()
+{
+ typedef typename bg::coordinate_type<Polygon>::type ct;
+
+ test_one<Polygon, Polygon, Polygon>("simplex_normal",
+ simplex_normal[0], simplex_normal[1],
+ 1, 0, 13, 11.526367);
+
+ test_one<Polygon, Polygon, Polygon>("simplex_with_empty_1",
+ simplex_normal[0], polygon_empty,
+ 1, 0, 4, 8.0);
+ test_one<Polygon, Polygon, Polygon>("simplex_with_empty_2",
+ polygon_empty, simplex_normal[0],
+ 1, 0, 4, 8.0);
+
+ test_one<Polygon, Polygon, Polygon>("star_ring", example_star, example_ring,
+ 1, 0, 23, 5.67017141);
+
+ // This sample was selected because of the border case, and ttmath generates one point more.
+ test_one<Polygon, Polygon, Polygon>("star_poly", example_star, example_polygon,
+ 1, 1,
+ if_typed_tt<ct>(28, 27), 5.647949);
+
+ // Pseudo-box as Polygon
+ // (note, internally, the intersection points is different, so yes,
+ // it has to be tested)
+ test_one<Polygon, Polygon, Polygon>("box_poly3", "POLYGON((1.5 1.5 , 1.5 2.5 , 4.5 2.5 , 4.5 1.5 , 1.5 1.5))",
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,5.3 2.5,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 1, 1, 15, 5.93625);
+
+ test_one<Polygon, Polygon, Polygon>("first_within_second",
+ first_within_second[0], first_within_second[1],
+ 1, 0, 5, 25.0);
+
+ test_one<Polygon, Polygon, Polygon>("second_within_first",
+ first_within_second[1], first_within_second[0],
+ 1, 0, 5, 25.0);
+
+ test_one<Polygon, Polygon, Polygon>("first_within_hole_of_second",
+ first_within_hole_of_second[0], first_within_hole_of_second[1],
+ 2, 1, 15, 17.0);
+
+ test_one<Polygon, Polygon, Polygon>("new_hole",
+ new_hole[0], new_hole[1],
+ 1, 1, 14, 23.0);
+
+ test_one<Polygon, Polygon, Polygon>("side_side",
+ side_side[0], side_side[1], 1, 0, 7, 2.0);
+
+ test_one<Polygon, Polygon, Polygon>("identical",
+ identical[0], identical[1], 1, 0, 5, 1.0);
+
+ test_one<Polygon, Polygon, Polygon>("disjoint",
+ disjoint[0], disjoint[1], 2, 0, 10, 2.0);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_intersect",
+ intersect_holes_intersect[0], intersect_holes_intersect[1],
+ 1, 1, 14, 39.75);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_intersect_and_disjoint",
+ intersect_holes_intersect_and_disjoint[0], intersect_holes_intersect_and_disjoint[1],
+ 1, 1, 14, 39.75);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_intersect_and_touch",
+ intersect_holes_intersect_and_touch[0], intersect_holes_intersect_and_touch[1],
+ 1, 1, 14, 39.75);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_new_ring",
+ intersect_holes_new_ring[0], intersect_holes_new_ring[1],
+ 1, 2, 15, 253.8961);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_holes_disjoint",
+ intersect_holes_disjoint[0],
+ intersect_holes_disjoint[1],
+ 1, 0, 9, 40.0);
+
+ test_one<Polygon, Polygon, Polygon>("within_holes_disjoint",
+ within_holes_disjoint[0], within_holes_disjoint[1],
+ 1, 0, 5, 49.0);
+
+ test_one<Polygon, Polygon, Polygon>("winded",
+ winded[0], winded[1],
+ 1, 5, 30, 114.0);
+
+ test_one<Polygon, Polygon, Polygon>("two_bends",
+ two_bends[0], two_bends[1],
+ 1, 0, 7, 40.0);
+
+ test_one<Polygon, Polygon, Polygon>("star_comb_15",
+ star_comb_15[0], star_comb_15[1],
+ 1, 27, 204, 898.09693338);
+
+ test_one<Polygon, Polygon, Polygon>("equal_holes_disjoint",
+ equal_holes_disjoint[0], equal_holes_disjoint[1],
+ 1, 1, 10, 81 - 3 * 7);
+
+ test_one<Polygon, Polygon, Polygon>("only_hole_intersections1",
+ only_hole_intersections[0], only_hole_intersections[1],
+ 1, 2, 13, 190.9090909);
+ test_one<Polygon, Polygon, Polygon>("only_hole_intersections2",
+ only_hole_intersections[0], only_hole_intersections[2],
+ 1, 2, 13, 190.9090909);
+
+ test_one<Polygon, Polygon, Polygon>("intersect_exterior_and_interiors_winded",
+ intersect_exterior_and_interiors_winded[0], intersect_exterior_and_interiors_winded[1],
+ 1, 1, 26, 66.5333333);
+
+ test_one<Polygon, Polygon, Polygon>("crossed",
+ crossed[0], crossed[1],
+ 1, 3, 17, 23.5); // Area from SQL Server - was somehow wrong before
+
+ test_one<Polygon, Polygon, Polygon>("fitting",
+ fitting[0], fitting[1],
+ 1, 0, 5, 25);
+
+ test_one<Polygon, Polygon, Polygon>("distance_zero",
+ distance_zero[0], distance_zero[1],
+ 1, 0, 11, 9.0098387);
+
+ test_one<Polygon, Polygon, Polygon>("wrapped_a",
+ wrapped[0], wrapped[1],
+ 1, 1, 16, 16);
+ test_one<Polygon, Polygon, Polygon>("wrapped_b",
+ wrapped[0], wrapped[2],
+ 1, 1, 16, 16);
+
+ test_one<Polygon, Polygon, Polygon>("9",
+ case_9[0], case_9[1], 2, 0, 8, 11);
+ test_one<Polygon, Polygon, Polygon>("22",
+ case_22[0], case_22[1], 2, 0, 8, 9.5);
+ test_one<Polygon, Polygon, Polygon>("25",
+ case_25[0], case_25[1], 2, 0, 8, 7);
+ test_one<Polygon, Polygon, Polygon>("26",
+ case_26[0], case_26[1], 2, 0, 9, 7.5);
+ test_one<Polygon, Polygon, Polygon>("31",
+ case_31[0], case_31[1], 2, 0, 8, 4.5);
+ test_one<Polygon, Polygon, Polygon>("32",
+ case_32[0], case_32[1], 2, 0, 8, 4.5);
+ test_one<Polygon, Polygon, Polygon>("33",
+ case_33[0], case_33[1], 2, 0, 8, 4.5);
+ test_one<Polygon, Polygon, Polygon>("36",
+ case_36[0], case_36[1], 1, 0, 10, 14.375);
+ test_one<Polygon, Polygon, Polygon>("40",
+ case_40[0], case_40[1], 2, 0, 18, 11);
+
+ // Test rings which should be generated by assemble
+ test_one<Polygon, Polygon, Polygon>("53_iet",
+ case_53[0], case_53[2], 1, 1, 16, 16);
+ test_one<Polygon, Polygon, Polygon>("58_iet",
+ case_58[0], case_58[2], 1, 3, 20, 12.16666);
+ test_one<Polygon, Polygon, Polygon>("59_iet",
+ case_59[0], case_59[2], 1, 1, 14, 17.20833);
+
+
+ /*
+ test_one<Polygon, Polygon, Polygon>(102,
+ simplex_normal[0], simplex_reversed[1],
+ 1, 0, 7, X);
+
+ test_one<Polygon, Polygon, Polygon>(103,
+ simplex_reversed[0], simplex_normal[1],
+ 1, 0, 7, 24.0);
+
+ test_one<Polygon, Polygon, Polygon>(104,
+ simplex_reversed[0], simplex_reversed[1],
+ 1, 0, 7, 24.0);
+
+ test_one<Polygon, Polygon, Polygon>(100,
+ star_15, comb_15,
+ 1, 10, 7, 24.0);
+ */
+
+ // test some other input/output types
+
+ // 1 input Ring
+ test_one<Polygon, Polygon, Ring>("identical_pr", identical[0], identical[1], 1, 0, 5, 1.0);
+ test_one<Polygon, Ring, Polygon>("identical_rp", identical[0], identical[1], 1, 0, 5, 1.0);
+
+ // 2 input rings
+ test_one<Polygon, Ring, Ring>("identical_rr", identical[0], identical[1], 1, 0, 5, 1.0);
+
+ // output is also Ring
+ test_one<Ring, Ring, Ring>("identical_rrr", identical[0], identical[1], 1, 0, 5, 1.0);
+
+ // "new hole", tested with Ring -> the newly formed hole will be omitted
+ test_one<Ring, Ring, Ring>("new_hole_discarded", new_hole[0], new_hole[1], 1, 0, 9, 24.0);
+
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110306_javier",
+ ggl_list_20110306_javier[0], ggl_list_20110306_javier[1],
+ 1, 1, 16, 80456.4904910401);
+
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110307_javier",
+ ggl_list_20110307_javier[0], ggl_list_20110307_javier[1],
+ 1, 1, 13, 20016.4);
+
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110627_phillip",
+ ggl_list_20110627_phillip[0], ggl_list_20110627_phillip[1],
+ 1, 0,
+ if_typed<ct, double>(5, if_typed_tt<ct>(8, 7)),
+ 14729.07145);
+
+
+ // Float gives sometimes 14, sometimes 14 points
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110716_enrico",
+ ggl_list_20110716_enrico[0], ggl_list_20110716_enrico[1],
+ 1, 1,
+ if_typed<ct, double>(18, if_typed<ct, float>(-1, 17)),
+ 129904.197692871);
+
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20110820_christophe",
+ ggl_list_20110820_christophe[0], ggl_list_20110820_christophe[1],
+ if_typed<ct, float>(2, 1),
+ 0,
+ if_typed_tt<ct>(9, 8),
+ 67.3550722317627);
+
+
+#ifdef TEST_ISOVIST
+#ifdef _MSC_VER
+ test_one<Polygon, Polygon, Polygon>("isovist",
+ isovist1[0], isovist1[1],
+ 1,
+ 0,
+ if_typed<ct, float>(71, if_typed<ct, double>(70, 73)),
+ 313.36036462, 0.1);
+
+ // SQL Server gives: 313.360374193241
+ // PostGIS gives: 313.360364623393
+
+#endif
+#endif
+
+ // Ticket 5103 https://svn.boost.org/trac/boost/ticket/5103
+ // This ticket was actually reported for Boost.Polygon
+ // We check it for Boost.Geometry as well.
+ // SQL Server gives: 2515271331437.69
+ // PostGIS gives: 2515271327070.52
+ // Boost.Geometry gives: 2515271327070.5237746891 (ttmath)
+ // 2515271327070.5156 (double)
+ // 2515271320603.0000 (int)
+ // Note the int-test was tested outside of this unit test. It is in two points 0.37 off (logical for an int).
+ // Because of the width of the polygon (400000 meter) this causes a substantial difference.
+
+ test_one<Polygon, Polygon, Polygon>("ticket_5103", ticket_5103[0], ticket_5103[1],
+ 1, 0, 25, 2515271327070.5);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_a", buffer_rt_a[0], buffer_rt_a[1],
+ 1, 0, 265, 19.280667);
+
+ // Robustness issues, followed out buffer-robustness-tests, test them also reverse
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_f", buffer_rt_f[0], buffer_rt_f[1],
+ 1, 0, if_typed<ct, double>(22, 23), 4.60853);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_f_rev", buffer_rt_f[1], buffer_rt_f[0],
+ 1, 0, if_typed<ct, double>(22, 23), 4.60853);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_g", buffer_rt_g[0], buffer_rt_g[1],
+ 1, 0, 17, 16.571);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_g_rev", buffer_rt_g[1], buffer_rt_g[0],
+ 1, 0, 17, 16.571);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_i", buffer_rt_i[0], buffer_rt_i[1],
+ 1, 0, 13, 13.6569);
+
+ bool test_rt_i_rev = true;
+#ifndef _MSC_VER
+ if (boost::is_same<ct, float>::type::value)
+ {
+ // TODO: this case has to be fixed for gcc/float on non-Windows
+ test_rt_i_rev = false;
+ }
+
+#endif
+ if (test_rt_i_rev)
+ {
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_i_rev", buffer_rt_i[1], buffer_rt_i[0],
+ 1, 0, 13, 13.6569);
+ }
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_j", buffer_rt_j[0], buffer_rt_j[1],
+ 1, 0, -1, 16.5711);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_j_rev", buffer_rt_j[1], buffer_rt_j[0],
+ 1, 0, -1, 16.5711);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_l", buffer_rt_l[0], buffer_rt_l[1],
+ 1, 0, -1, 19.3995);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_l_rev", buffer_rt_l[1], buffer_rt_l[0],
+ 1, 0, -1, 19.3995);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_m1", buffer_rt_m1[0], buffer_rt_m1[1],
+ 1, 0, if_typed_tt<ct>(14, 13), 19.4852);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_m1_rev", buffer_rt_m1[1], buffer_rt_m1[0],
+ 1, 0, if_typed_tt<ct>(14, 13), 19.4852);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_m2", buffer_rt_m2[0], buffer_rt_m2[1],
+ 1, 0, if_typed_tt<ct>(20, 19), 21.4853);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_m2_rev", buffer_rt_m2[1], buffer_rt_m2[0],
+ 1, 0, if_typed_tt<ct>(20, 19), 21.4853);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_q", buffer_rt_q[0], buffer_rt_q[1],
+ 1, 0, if_typed<ct, float>(18, 17), 18.5710);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_q_rev", buffer_rt_q[1], buffer_rt_q[0],
+ 1, 0, if_typed<ct, float>(18, 17), 18.5710);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_r", buffer_rt_r[0], buffer_rt_r[1],
+ 1, 0, if_typed<ct, float>(19, 20), 21.07612);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_r_rev", buffer_rt_r[1], buffer_rt_r[0],
+ 1, 0, if_typed_tt<ct>(20, 19), 21.07612);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_t", buffer_rt_t[0], buffer_rt_t[1],
+ 1, 0, if_typed_tt<ct>(16, 14), 15.6569);
+ test_one<Polygon, Polygon, Polygon>("buffer_rt_t_ref", buffer_rt_t[1], buffer_rt_t[0],
+ 1, 0, if_typed_tt<ct>(16, 14), 15.6569);
+
+ test_one<Polygon, Polygon, Polygon>("buffer_mp1", buffer_mp1[0], buffer_mp1[1],
+ 1, 0, 91, 22.815);
+
+ if (boost::is_same<ct, double>::type::value)
+ {
+ // Contains robustness issue for collinear-opposite.
+ // In double it delivers a polygon and a hole
+ test_one<Polygon, Polygon, Polygon>("buffer_mp2", buffer_mp2[0], buffer_mp2[1],
+ 1, 1, 218, 36.7535642);
+ }
+ else if (boost::is_same<ct, float>::type::value)
+ {
+ // In float (and ttmath) it delivers one polygon
+ test_one<Polygon, Polygon, Polygon>("buffer_mp2", buffer_mp2[0], buffer_mp2[1],
+ 1, 0, 217, 36.7528377);
+ }
+}
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::ring<P> ring;
+ typedef bg::model::box<P> box;
+
+ test_areal<ring, polygon>();
+
+#if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
+ // Open
+ test_areal<bg::model::ring<P, true, false>, bg::model::polygon<P, true, false> >();
+
+ // Counter clockwise
+ test_areal<bg::model::ring<P, false>, bg::model::polygon<P, false> >();
+
+ // Counter clockwise and open
+ test_areal<bg::model::ring<P, false, false>, bg::model::polygon<P, false, false> >();
+#endif
+
+ test_one<polygon, box, polygon>("box_ring", example_box, example_ring,
+ 1, 1, 15, 6.38875);
+
+ test_one<polygon, box, polygon>("box_poly", example_box, example_polygon,
+ 1, 3, 23, 6.30983);
+
+
+ test_one<polygon, box, polygon>("box_poly1", example_box,
+ "POLYGON((3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2))",
+ 1, 1, 15, 6.38875);
+ test_one<polygon, box, polygon>("box_poly2", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,5.3 2.5,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 1, 1, 15, 5.93625);
+
+ // 3: see areal
+
+ test_one<polygon, box, polygon>("box_poly4", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 1, 1, 15, 4.651245);
+
+ test_one<polygon, box, polygon>("box_poly5", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 2.3,5.0 2.3,5.0 2.1,4.5 2.1,4.5 1.9,4.0 1.9,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
+ 1, 1, 21, 4.7191);
+
+ test_one<polygon, box, polygon>("box_poly6", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 1.2,2.9 0.7,2 1.3))",
+ 1, 1, 15, 4.2174);
+
+ test_one<polygon, box, polygon>("box_poly7", example_box,
+ "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.0 3.0,5.0 2.0,2.9 0.7,2 1.3))",
+ 1, 1, 17, 4.270554);
+
+ test_one<polygon, box, polygon>("box_poly8", "box(0 0, 3 3)",
+ "POLYGON((2 2, 1 4, 2 4, 3 3, 2 2))",
+ 1, 0, 8, 10.25);
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+#if defined(HAVE_TTMATH)
+ std::cout << "Testing TTMATH" << std::endl;
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+#if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
+ test_all<bg::model::d2::point_xy<float> >();
+ //test_all<bg::model::d2::point_xy<long double> >();
+
+#if defined(HAVE_TTMATH)
+ std::cout << "Testing TTMATH" << std::endl;
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/union.vcproj b/libs/geometry/test/algorithms/union.vcproj
new file mode 100644
index 000000000..a3399b777
--- /dev/null
+++ b/libs/geometry/test/algorithms/union.vcproj
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="union"
+ ProjectGUID="{CA5EE1D6-CB4B-4A15-85C5-31D5C00289C4}"
+ RootNamespace="union"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\union"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/bigobj"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\union"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;NONDLL;_CRT_SECURE_NO_WARNINGS"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\union.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/unique.cpp b/libs/geometry/test/algorithms/unique.cpp
new file mode 100644
index 000000000..4460029eb
--- /dev/null
+++ b/libs/geometry/test/algorithms/unique.cpp
@@ -0,0 +1,60 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <algorithms/test_unique.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+
+template <typename Point>
+void test_all()
+{
+ test_geometry<bg::model::linestring<Point> >(
+ "LINESTRING(0 0,1 1)",
+ "LINESTRING(0 0,1 1)");
+
+ test_geometry<bg::model::linestring<Point> >(
+ "LINESTRING(0 0,1 1,1 1)",
+ "LINESTRING(0 0,1 1)");
+
+ test_geometry<bg::model::linestring<Point> >(
+ "LINESTRING(0 0,0 0,1 1)",
+ "LINESTRING(0 0,1 1)");
+
+ // Consecutive points
+ test_geometry<bg::model::linestring<Point> >(
+ "LINESTRING(0 0,0 0,0 0,0 0,1 1,1 1,1 1)",
+ "LINESTRING(0 0,1 1)");
+
+ // Other types
+ test_geometry<bg::model::ring<Point> >(
+ "POLYGON((0 0,0 1,1 1,1 1,1 1,1 0,0 0,0 0))",
+ "POLYGON((0 0,0 1,1 1,1 0,0 0))");
+
+ // With holes
+ test_geometry<bg::model::polygon<Point> >(
+ "POLYGON((0 0,0 10,10 10,10 10,10 10,10 0,0 0,0 0))",
+ "POLYGON((0 0,0 10,10 10,10 0,0 0))");
+}
+
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/unique.vcproj b/libs/geometry/test/algorithms/unique.vcproj
new file mode 100644
index 000000000..e4a67084e
--- /dev/null
+++ b/libs/geometry/test/algorithms/unique.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="unique"
+ ProjectGUID="{104D31F9-49BA-4A1A-B84F-0A3AEE3C4DB2}"
+ RootNamespace="unique"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\unique"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\unique"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\unique.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/algorithms/within.cpp b/libs/geometry/test/algorithms/within.cpp
new file mode 100644
index 000000000..ccf75c673
--- /dev/null
+++ b/libs/geometry/test/algorithms/within.cpp
@@ -0,0 +1,271 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <algorithms/test_within.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ // trivial case
+ test_ring<P>("POINT(1 1)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", true, false);
+
+ // on border/corner
+ test_ring<P>("POINT(0 0)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false, true);
+ test_ring<P>("POINT(0 1)", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false, true);
+
+ // aligned to segment/vertex
+ test_ring<P>("POINT(1 1)", "POLYGON((0 0,0 3,3 3,3 1,2 1,2 0,0 0))", true, false);
+ test_ring<P>("POINT(1 1)", "POLYGON((0 0,0 3,4 3,3 1,2 2,2 0,0 0))", true, false);
+
+ // same polygon, but point on border
+ test_ring<P>("POINT(3 3)", "POLYGON((0 0,0 3,3 3,3 1,2 1,2 0,0 0))", false, true);
+ test_ring<P>("POINT(3 3)", "POLYGON((0 0,0 3,4 3,3 1,2 2,2 0,0 0))", false, true);
+
+ // holes
+ test_geometry<P, bg::model::polygon<P> >("POINT(2 2)",
+ "POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,3 1,3 3,1 3,1 1))", false);
+
+ typedef bg::model::box<P> box_type;
+
+ test_geometry<P, box_type>("POINT(1 1)", "BOX(0 0,2 2)", true);
+ test_geometry<P, box_type>("POINT(0 0)", "BOX(0 0,2 2)", false);
+ test_geometry<P, box_type>("POINT(2 2)", "BOX(0 0,2 2)", false);
+ test_geometry<P, box_type>("POINT(0 1)", "BOX(0 0,2 2)", false);
+ test_geometry<P, box_type>("POINT(1 0)", "BOX(0 0,2 2)", false);
+
+ test_geometry<box_type, box_type>("BOX(1 1,2 2)", "BOX(0 0,3 3)", true);
+ test_geometry<box_type, box_type>("BOX(0 0,3 3)", "BOX(1 1,2 2)", false);
+
+ /*
+ test_within_code<P, box_type>("POINT(1 1)", "BOX(0 0,2 2)", 1);
+ test_within_code<P, box_type>("POINT(1 0)", "BOX(0 0,2 2)", 0);
+ test_within_code<P, box_type>("POINT(0 1)", "BOX(0 0,2 2)", 0);
+ test_within_code<P, box_type>("POINT(0 3)", "BOX(0 0,2 2)", -1);
+ test_within_code<P, box_type>("POINT(3 3)", "BOX(0 0,2 2)", -1);
+
+ test_within_code<box_type, box_type>("BOX(1 1,2 2)", "BOX(0 0,3 3)", 1);
+ test_within_code<box_type, box_type>("BOX(0 1,2 2)", "BOX(0 0,3 3)", 0);
+ test_within_code<box_type, box_type>("BOX(1 0,2 2)", "BOX(0 0,3 3)", 0);
+ test_within_code<box_type, box_type>("BOX(1 1,2 3)", "BOX(0 0,3 3)", 0);
+ test_within_code<box_type, box_type>("BOX(1 1,3 2)", "BOX(0 0,3 3)", 0);
+ test_within_code<box_type, box_type>("BOX(1 1,3 4)", "BOX(0 0,3 3)", -1);
+ */
+
+ // Real-life problem (solved now), point is in the middle, 409623 is also a coordinate
+ // on the border, has been wrong in the past (2009)
+ test_ring<P>("POINT(146383 409623)",
+ "POLYGON((146351 410597,146521 410659,147906 410363,148088 410420"
+ ",148175 410296,148281 409750,148215 409623,148154 409666,148154 409666"
+ ",148130 409625,148035 409626,148035 409626,148008 409544,147963 409510"
+ ",147993 409457,147961 409352,147261 408687,147008 408586,145714 408840"
+ ",145001 409033,144486 409066,144616 409308,145023 410286,145254 410488"
+ ",145618 410612,145618 410612,146015 410565,146190 410545,146351 410597))",
+ true, false);
+}
+
+template <typename Point>
+void test_spherical()
+{
+ typedef typename bg::coordinate_type<Point>::type ct;
+ bg::model::polygon<Point> wrangel;
+
+ // SQL Server check (no geography::STWithin, so check with intersection trick)
+ /*
+
+ with q as (
+ select geography::STGeomFromText('POLYGON((-178.569 71.5641,-179.034 71.5977,-179.305 71.5514,-179.629 71.5772,-180 71.5358,179.53 71.4383,178.872 71.2175,178.618 71.0355,178.791 70.7964,179.273 70.8886,179.678 70.8955,-180 70.9972,-179.274 70.9078,-178.819 70.98,-177.939 71.0375,-177.62 71.1166,-177.439 71.2269,-177.503 71.2775,-177.833 71.3461,-178.018 71.4497,-178.569 71.5641))',4326) as wrangel
+ )
+
+ select wrangel.STArea()/1000000.0
+ ,geography::STGeomFromText('POINT(-179.3 71.27)',4326).STIntersection(wrangel).STAsText() as workaround_within_1
+ ,geography::STGeomFromText('POINT(-179.9 70.95)',4326).STIntersection(wrangel).STAsText() as workaround_within_2
+ ,geography::STGeomFromText('POINT(179.9 70.95)',4326).STIntersection(wrangel).STAsText() as workaround_within_3
+ from q
+
+ -> 7669.10402181435 POINT (-179.3 71.27) GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY
+
+ PostGIS knows Within for Geography neither, and the intersection trick gives the same result
+
+ */
+
+ bg::read_wkt("POLYGON((-178.568604 71.564148,-178.017548 71.449692,-177.833313 71.3461,-177.502838 71.277466 ,-177.439453 71.226929,-177.620026 71.116638,-177.9389 71.037491,-178.8186 70.979965,-179.274445 70.907761,-180 70.9972,179.678314 70.895538,179.272766 70.888596,178.791016 70.7964,178.617737 71.035538,178.872192 71.217484,179.530273 71.4383 ,-180 71.535843 ,-179.628601 71.577194,-179.305298 71.551361,-179.03421 71.597748,-178.568604 71.564148))", wrangel);
+
+ bool within = bg::within(Point(-179.3, 71.27), wrangel);
+ BOOST_CHECK_EQUAL(within, true);
+
+ within = bg::within(Point(-179.9, 70.95), wrangel);
+ BOOST_CHECK_EQUAL(within, false);
+
+ within = bg::within(Point(179.9, 70.95), wrangel);
+ BOOST_CHECK_EQUAL(within, false);
+
+ // Test using great circle mapper
+ // http://www.gcmap.com/mapui?P=5E52N-9E53N-7E50N-5E52N,7E52.5N,8E51.5N,6E51N
+
+ bg::model::polygon<Point> triangle;
+ bg::read_wkt("POLYGON((5 52,9 53,7 50,5 52))", triangle);
+ BOOST_CHECK_EQUAL(bg::within(Point(7, 52.5), triangle), true);
+ BOOST_CHECK_EQUAL(bg::within(Point(8.0, 51.5), triangle), false);
+ BOOST_CHECK_EQUAL(bg::within(Point(6.0, 51.0), triangle), false);
+
+ // Test spherical boxes
+ // See also http://www.gcmap.com/mapui?P=1E45N-19E45N-19E55N-1E55N-1E45N,10E55.1N,10E45.1N
+ bg::model::box<Point> box;
+ bg::read_wkt("POLYGON((1 45,19 55))", box);
+ BOOST_CHECK_EQUAL(bg::within(Point(10, 55.1), box), true);
+ BOOST_CHECK_EQUAL(bg::within(Point(10, 55.2), box), true);
+ BOOST_CHECK_EQUAL(bg::within(Point(10, 55.3), box), true);
+ BOOST_CHECK_EQUAL(bg::within(Point(10, 55.4), box), false);
+
+ BOOST_CHECK_EQUAL(bg::within(Point(10, 45.1), box), false);
+ BOOST_CHECK_EQUAL(bg::within(Point(10, 45.2), box), false);
+ BOOST_CHECK_EQUAL(bg::within(Point(10, 45.3), box), false);
+ BOOST_CHECK_EQUAL(bg::within(Point(10, 45.4), box), true);
+
+ // Crossing the dateline (Near Tuvalu)
+ // http://www.gcmap.com/mapui?P=178E10S-178W10S-178W6S-178E6S-178E10S,180W5.999S,180E9.999S
+ // http://en.wikipedia.org/wiki/Tuvalu
+
+ bg::model::box<Point> tuvalu(Point(178, -10), Point(-178, -6));
+ BOOST_CHECK_EQUAL(bg::within(Point(180, -8), tuvalu), true);
+ BOOST_CHECK_EQUAL(bg::within(Point(-180, -8), tuvalu), true);
+ BOOST_CHECK_EQUAL(bg::within(Point(180, -5.999), tuvalu), false);
+ BOOST_CHECK_EQUAL(bg::within(Point(180, -10.001), tuvalu), true);
+}
+
+void test_3d()
+{
+ typedef boost::geometry::model::point<double, 3, boost::geometry::cs::cartesian> point_type;
+ typedef boost::geometry::model::box<point_type> box_type;
+ box_type box(point_type(0, 0, 0), point_type(4, 4, 4));
+ BOOST_CHECK_EQUAL(bg::within(point_type(2, 2, 2), box), true);
+ BOOST_CHECK_EQUAL(bg::within(point_type(2, 4, 2), box), false);
+ BOOST_CHECK_EQUAL(bg::within(point_type(2, 2, 4), box), false);
+ BOOST_CHECK_EQUAL(bg::within(point_type(2, 2, 5), box), false);
+
+ box_type box2(point_type(2, 2, 2), point_type(3, 3, 3));
+ BOOST_CHECK_EQUAL(bg::within(box2, box), true);
+
+}
+
+template <typename P1, typename P2>
+void test_mixed_of()
+{
+ typedef boost::geometry::model::polygon<P1> polygon_type1;
+ typedef boost::geometry::model::polygon<P2> polygon_type2;
+ typedef boost::geometry::model::box<P1> box_type1;
+ typedef boost::geometry::model::box<P2> box_type2;
+
+ polygon_type1 poly1, poly2;
+ boost::geometry::read_wkt("POLYGON((0 0,0 5,5 5,5 0,0 0))", poly1);
+ boost::geometry::read_wkt("POLYGON((0 0,0 5,5 5,5 0,0 0))", poly2);
+
+ box_type1 box1(P1(1, 1), P1(4, 4));
+ box_type2 box2(P2(0, 0), P2(5, 5));
+ P1 p1(3, 3);
+ P2 p2(3, 3);
+
+ BOOST_CHECK_EQUAL(bg::within(p1, poly2), true);
+ BOOST_CHECK_EQUAL(bg::within(p2, poly1), true);
+ BOOST_CHECK_EQUAL(bg::within(p2, box1), true);
+ BOOST_CHECK_EQUAL(bg::within(p1, box2), true);
+ BOOST_CHECK_EQUAL(bg::within(box1, box2), true);
+ BOOST_CHECK_EQUAL(bg::within(box2, box1), false);
+}
+
+
+void test_mixed()
+{
+ // Mixing point types and coordinate types
+ test_mixed_of
+ <
+ boost::geometry::model::d2::point_xy<double>,
+ boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>
+ >();
+ test_mixed_of
+ <
+ boost::geometry::model::d2::point_xy<float>,
+ boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>
+ >();
+ test_mixed_of
+ <
+ boost::geometry::model::d2::point_xy<int>,
+ boost::geometry::model::d2::point_xy<double>
+ >();
+}
+
+void test_strategy()
+{
+ // Test by explicitly specifying a strategy
+ typedef bg::model::d2::point_xy<double> point_type;
+ typedef bg::model::box<point_type> box_type;
+ point_type p(3, 3);
+ box_type b(point_type(0, 0), point_type(5, 5));
+
+ bool r = bg::within(p, b,
+ bg::strategy::within::point_in_box<point_type, box_type>());
+ BOOST_CHECK_EQUAL(r, true);
+
+ r = bg::within(b, b,
+ bg::strategy::within::box_in_box<box_type, box_type>());
+ BOOST_CHECK_EQUAL(r, false);
+
+ r = bg::within(p, b,
+ bg::strategy::within::point_in_box_by_side<point_type, box_type>());
+ BOOST_CHECK_EQUAL(r, true);
+}
+
+
+void test_large_integers()
+{
+ typedef bg::model::point<int, 2, bg::cs::cartesian> int_point_type;
+ typedef bg::model::point<double, 2, bg::cs::cartesian> double_point_type;
+
+ std::string const polygon_li = "POLYGON((1872000 528000,1872000 192000,1536119 192000,1536000 528000,1200000 528000,1200000 863880,1536000 863880,1872000 863880,1872000 528000))";
+ bg::model::polygon<int_point_type> int_poly;
+ bg::model::polygon<double_point_type> double_poly;
+ bg::read_wkt(polygon_li, int_poly);
+ bg::read_wkt(polygon_li, double_poly);
+
+ std::string const point_li = "POINT(1592000 583950)";
+ int_point_type int_point;
+ double_point_type double_point;
+ bg::read_wkt(point_li, int_point);
+ bg::read_wkt(point_li, double_point);
+
+ bool wi = bg::within(int_point, int_poly);
+ bool wd = bg::within(double_point, double_poly);
+
+ BOOST_CHECK_MESSAGE(wi == wd, "within<a double> different from within<an int>");
+}
+
+int test_main( int , char* [] )
+{
+ test_large_integers();
+
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+ test_spherical<bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+
+ test_mixed();
+ test_3d();
+ test_strategy();
+
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+ test_spherical<bg::model::point<ttmath_big, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/algorithms/within.vcproj b/libs/geometry/test/algorithms/within.vcproj
new file mode 100644
index 000000000..89d03ef72
--- /dev/null
+++ b/libs/geometry/test/algorithms/within.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="within"
+ ProjectGUID="{C7BCD670-543D-4B29-B2D6-F3169949F79D}"
+ RootNamespace="within"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\within"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\within"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\within.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/arithmetic/Jamfile.v2 b/libs/geometry/test/arithmetic/Jamfile.v2
new file mode 100644
index 000000000..a1a9db0f3
--- /dev/null
+++ b/libs/geometry/test/arithmetic/Jamfile.v2
@@ -0,0 +1,15 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-arithmetic
+ :
+ [ run arithmetic.cpp ]
+ [ run dot_product.cpp ]
+ ;
diff --git a/libs/geometry/test/arithmetic/arithmetic.cpp b/libs/geometry/test/arithmetic/arithmetic.cpp
new file mode 100644
index 000000000..f7d2e3427
--- /dev/null
+++ b/libs/geometry/test/arithmetic/arithmetic.cpp
@@ -0,0 +1,144 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/arithmetic/arithmetic.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P>
+void test_addition()
+{
+ P p1;
+ bg::assign_values(p1, 1, 2, 3);
+ bg::add_value(p1, 10);
+ BOOST_CHECK(bg::get<0>(p1) == 11);
+ BOOST_CHECK(bg::get<1>(p1) == 12);
+ BOOST_CHECK(bg::get<2>(p1) == 13);
+
+ P p2;
+ bg::assign_values(p2, 4, 5, 6);
+ bg::add_point(p1, p2);
+ BOOST_CHECK(bg::get<0>(p1) == 15);
+ BOOST_CHECK(bg::get<1>(p1) == 17);
+ BOOST_CHECK(bg::get<2>(p1) == 19);
+}
+
+template <typename P>
+void test_subtraction()
+{
+ P p1;
+ bg::assign_values(p1, 1, 2, 3);
+ bg::subtract_value(p1, 10);
+ BOOST_CHECK(bg::get<0>(p1) == -9);
+ BOOST_CHECK(bg::get<1>(p1) == -8);
+ BOOST_CHECK(bg::get<2>(p1) == -7);
+
+ P p2;
+ bg::assign_values(p2, 4, 6, 8);
+ bg::subtract_point(p1, p2);
+ BOOST_CHECK(bg::get<0>(p1) == -13);
+ BOOST_CHECK(bg::get<1>(p1) == -14);
+ BOOST_CHECK(bg::get<2>(p1) == -15);
+}
+
+template <typename P>
+void test_multiplication()
+{
+ P p1;
+ bg::assign_values(p1, 1, 2, 3);
+ bg::multiply_value(p1, 5);
+ BOOST_CHECK(bg::get<0>(p1) == 5);
+ BOOST_CHECK(bg::get<1>(p1) == 10);
+ BOOST_CHECK(bg::get<2>(p1) == 15);
+
+ P p2;
+ bg::assign_values(p2, 4, 5, 6);
+ bg::multiply_point(p1, p2);
+ BOOST_CHECK(bg::get<0>(p1) == 20);
+ BOOST_CHECK(bg::get<1>(p1) == 50);
+ BOOST_CHECK(bg::get<2>(p1) == 90);
+}
+
+template <typename P>
+void test_division()
+{
+ P p1;
+ bg::assign_values(p1, 50, 100, 150);
+ bg::divide_value(p1, 5);
+ BOOST_CHECK(bg::get<0>(p1) == 10);
+ BOOST_CHECK(bg::get<1>(p1) == 20);
+ BOOST_CHECK(bg::get<2>(p1) == 30);
+
+ P p2;
+ bg::assign_values(p2, 2, 4, 6);
+ bg::divide_point(p1, p2);
+ BOOST_CHECK(bg::get<0>(p1) == 5);
+ BOOST_CHECK(bg::get<1>(p1) == 5);
+ BOOST_CHECK(bg::get<2>(p1) == 5);
+}
+
+template <typename P>
+void test_assign()
+{
+ P p1;
+ P p2;
+ bg::assign_values(p1, 12, 34, 56);
+ bg::assign_point(p2, p1);
+ BOOST_CHECK(bg::get<0>(p2) == 12);
+ BOOST_CHECK(bg::get<1>(p2) == 34);
+ BOOST_CHECK(bg::get<2>(p2) == 56);
+
+ bg::assign_value(p2, 78);
+ BOOST_CHECK(bg::get<0>(p2) == 78);
+ BOOST_CHECK(bg::get<1>(p2) == 78);
+ BOOST_CHECK(bg::get<2>(p2) == 78);
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_addition<P>();
+ test_subtraction<P>();
+ test_multiplication<P>();
+ test_division<P>();
+ test_assign<P>();
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<int[3]>();
+ test_all<float[3]>();
+ test_all<double[3]>();
+ test_all<test::test_point>();
+ test_all<bg::model::point<int, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/arithmetic/arithmetic.vcproj b/libs/geometry/test/arithmetic/arithmetic.vcproj
new file mode 100644
index 000000000..f2d448a33
--- /dev/null
+++ b/libs/geometry/test/arithmetic/arithmetic.vcproj
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="arithmetic"
+ ProjectGUID="{4D447233-54DC-4C1B-B8DF-4689590ACF56}"
+ RootNamespace="arithmetic"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\arithmetic"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ RuntimeLibrary="1"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\arithmetic"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\arithmetic.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/arithmetic/arithmetic_tests.sln b/libs/geometry/test/arithmetic/arithmetic_tests.sln
new file mode 100644
index 000000000..37a636a0e
--- /dev/null
+++ b/libs/geometry/test/arithmetic/arithmetic_tests.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "arithmetic", "arithmetic.vcproj", "{4D447233-54DC-4C1B-B8DF-4689590ACF56}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dot_product", "dot_product.vcproj", "{C9CD2A98-3327-4560-A979-4BF506F777A8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4D447233-54DC-4C1B-B8DF-4689590ACF56}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4D447233-54DC-4C1B-B8DF-4689590ACF56}.Debug|Win32.Build.0 = Debug|Win32
+ {4D447233-54DC-4C1B-B8DF-4689590ACF56}.Release|Win32.ActiveCfg = Release|Win32
+ {4D447233-54DC-4C1B-B8DF-4689590ACF56}.Release|Win32.Build.0 = Release|Win32
+ {C9CD2A98-3327-4560-A979-4BF506F777A8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C9CD2A98-3327-4560-A979-4BF506F777A8}.Debug|Win32.Build.0 = Debug|Win32
+ {C9CD2A98-3327-4560-A979-4BF506F777A8}.Release|Win32.ActiveCfg = Release|Win32
+ {C9CD2A98-3327-4560-A979-4BF506F777A8}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/arithmetic/dot_product.cpp b/libs/geometry/test/arithmetic/dot_product.cpp
new file mode 100644
index 000000000..2242e3c30
--- /dev/null
+++ b/libs/geometry/test/arithmetic/dot_product.cpp
@@ -0,0 +1,53 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/arithmetic/dot_product.hpp>
+
+
+#include <boost/geometry/algorithms/assign.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P>
+void test_all()
+{
+ P p1;
+ bg::assign_values(p1, 1, 2, 3);
+ P p2;
+ bg::assign_values(p2, 4, 5, 6);
+ BOOST_CHECK(bg::dot_product(p1, p2) == 1*4 + 2*5 + 3*6);
+}
+
+int test_main(int, char* [])
+{
+ test_all<int[3]>();
+ test_all<float[3]>();
+ test_all<double[3]>();
+ test_all<test::test_point>();
+ test_all<bg::model::point<int, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/arithmetic/dot_product.vcproj b/libs/geometry/test/arithmetic/dot_product.vcproj
new file mode 100644
index 000000000..879b92154
--- /dev/null
+++ b/libs/geometry/test/arithmetic/dot_product.vcproj
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="dot_product"
+ ProjectGUID="{C9CD2A98-3327-4560-A979-4BF506F777A8}"
+ RootNamespace="dot_product"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\dot_product"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ RuntimeLibrary="1"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\dot_product"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\dot_product.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/boost.vsprops b/libs/geometry/test/boost.vsprops
new file mode 100644
index 000000000..c527810d4
--- /dev/null
+++ b/libs/geometry/test/boost.vsprops
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(BOOST_ROOT)&quot;;../../.."
+ PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories="$(BOOST_ROOT)\lib"
+ />
+ <UserMacro
+ Name="BOOST_ROOT"
+ Value="../../.."
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/test/concepts/Jamfile.v2 b/libs/geometry/test/concepts/Jamfile.v2
new file mode 100644
index 000000000..476e0be11
--- /dev/null
+++ b/libs/geometry/test/concepts/Jamfile.v2
@@ -0,0 +1,15 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-concepts
+ :
+ [ run linestring_concept.cpp ]
+ [ run polygon_concept.cpp ]
+ ;
diff --git a/libs/geometry/test/concepts/concepts_tests.sln b/libs/geometry/test/concepts/concepts_tests.sln
new file mode 100644
index 000000000..1430bdcc0
--- /dev/null
+++ b/libs/geometry/test/concepts/concepts_tests.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "linestring_concept", "linestring_concept.vcproj", "{CA8D5E44-7D8F-44A1-900C-35C28890299B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polygon_concept", "polygon_concept.vcproj", "{306B99D1-576A-4EB6-BF7E-B111CA3807FE}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Debug|Win32.Build.0 = Debug|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Release|Win32.ActiveCfg = Release|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Release|Win32.Build.0 = Release|Win32
+ {306B99D1-576A-4EB6-BF7E-B111CA3807FE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {306B99D1-576A-4EB6-BF7E-B111CA3807FE}.Debug|Win32.Build.0 = Debug|Win32
+ {306B99D1-576A-4EB6-BF7E-B111CA3807FE}.Release|Win32.ActiveCfg = Release|Win32
+ {306B99D1-576A-4EB6-BF7E-B111CA3807FE}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/concepts/linestring_concept.cpp b/libs/geometry/test/concepts/linestring_concept.cpp
new file mode 100644
index 000000000..befce07bb
--- /dev/null
+++ b/libs/geometry/test/concepts/linestring_concept.cpp
@@ -0,0 +1,77 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <deque>
+#include <vector>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/append.hpp>
+#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
+
+#include <boost/geometry/io/dsv/write.hpp>
+
+
+#include <test_common/test_point.hpp>
+#include <test_geometries/all_custom_linestring.hpp>
+#include <test_geometries/wrapped_boost_array.hpp>
+
+
+
+template <typename Geometry>
+void test_linestring()
+{
+ BOOST_CONCEPT_ASSERT( (bg::concept::Linestring<Geometry>) );
+ BOOST_CONCEPT_ASSERT( (bg::concept::ConstLinestring<Geometry>) );
+
+ Geometry geometry;
+ typedef typename bg::point_type<Geometry>::type P;
+
+ bg::clear(geometry);
+ BOOST_CHECK_EQUAL(boost::size(geometry), 0);
+
+ bg::append(geometry, bg::make<P>(1, 2));
+ BOOST_CHECK_EQUAL(boost::size(geometry), 1);
+
+ bg::append(geometry, bg::make<P>(3, 4));
+ BOOST_CHECK_EQUAL(boost::size(geometry), 2);
+
+ bg::traits::resize<Geometry>::apply(geometry, 1);
+ BOOST_CHECK_EQUAL(boost::size(geometry), 1);
+
+ //std::cout << bg::dsv(geometry) << std::endl;
+ P p = *boost::begin(geometry);
+ //std::cout << bg::dsv(p) << std::endl;
+ BOOST_CHECK_EQUAL(bg::get<0>(p), 1);
+ BOOST_CHECK_EQUAL(bg::get<1>(p), 2);
+
+ bg::clear(geometry);
+ BOOST_CHECK_EQUAL(boost::size(geometry), 0);
+}
+
+template <typename Point>
+void test_all()
+{
+ test_linestring<bg::model::linestring<Point> >();
+ test_linestring<test::wrapped_boost_array<Point, 10> >();
+ test_linestring<all_custom_linestring<Point> >();
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/concepts/linestring_concept.vcproj b/libs/geometry/test/concepts/linestring_concept.vcproj
new file mode 100644
index 000000000..c40b03bf1
--- /dev/null
+++ b/libs/geometry/test/concepts/linestring_concept.vcproj
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="linestring_concept"
+ ProjectGUID="{CA8D5E44-7D8F-44A1-900C-35C28890299B}"
+ RootNamespace="linestring_concept"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\linestring_concept"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\linestring_concept"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\linestring_concept.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/core/Jamfile.v2 b/libs/geometry/test/core/Jamfile.v2
new file mode 100644
index 000000000..398d1e025
--- /dev/null
+++ b/libs/geometry/test/core/Jamfile.v2
@@ -0,0 +1,26 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-core
+ :
+ [ run access.cpp ]
+ [ run coordinate_dimension.cpp ]
+ [ run coordinate_system.cpp ]
+ [ run coordinate_type.cpp ]
+ [ run geometry_id.cpp ]
+ [ run point_type.cpp ]
+ [ run radian_access.cpp ]
+# [ run reverse_dispatch.cpp ]
+ [ run ring.cpp ]
+ [ run tag.cpp ]
+ [ run topological_dimension.cpp ]
+ ;
+
+# The reverse_dispatch somehow asks for UAC-control on MinGW...
diff --git a/libs/geometry/test/core/access.cpp b/libs/geometry/test/core/access.cpp
new file mode 100644
index 000000000..451348bb4
--- /dev/null
+++ b/libs/geometry/test/core/access.cpp
@@ -0,0 +1,133 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/core/access.hpp>
+
+
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/algorithms/make.hpp>
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename G>
+void test_get_set()
+{
+ typedef typename bg::coordinate_type<G>::type coordinate_type;
+
+ G g;
+ bg::set<0>(g, coordinate_type(1));
+ bg::set<1>(g, coordinate_type(2));
+
+ coordinate_type x = bg::get<0>(g);
+ coordinate_type y = bg::get<1>(g);
+
+ BOOST_CHECK_CLOSE(double(x), 1.0, 0.0001);
+ BOOST_CHECK_CLOSE(double(y), 2.0, 0.0001);
+}
+
+template <typename G>
+void test_indexed_get_set(G& g)
+{
+ bg::set<0, 0>(g, 1);
+ bg::set<0, 1>(g, 2);
+ bg::set<1, 0>(g, 3);
+ bg::set<1, 1>(g, 4);
+
+ typedef typename bg::coordinate_type<G>::type coordinate_type;
+ coordinate_type x1 = bg::get<0, 0>(g);
+ coordinate_type y1 = bg::get<0, 1>(g);
+ coordinate_type x2 = bg::get<1, 0>(g);
+ coordinate_type y2 = bg::get<1, 1>(g);
+
+ BOOST_CHECK_CLOSE(double(x1), 1.0, 0.0001);
+ BOOST_CHECK_CLOSE(double(y1), 2.0, 0.0001);
+ BOOST_CHECK_CLOSE(double(x2), 3.0, 0.0001);
+ BOOST_CHECK_CLOSE(double(y2), 4.0, 0.0001);
+}
+
+template <typename G, typename T>
+void test_indexed_get(G const& g, T a, T b, T c, T d)
+{
+ T x1 = bg::get<0, 0>(g);
+ T y1 = bg::get<0, 1>(g);
+ T x2 = bg::get<1, 0>(g);
+ T y2 = bg::get<1, 1>(g);
+
+ BOOST_CHECK_CLOSE(double(x1), double(a), 0.0001);
+ BOOST_CHECK_CLOSE(double(y1), double(b), 0.0001);
+ BOOST_CHECK_CLOSE(double(x2), double(c), 0.0001);
+ BOOST_CHECK_CLOSE(double(y2), double(d), 0.0001);
+}
+
+template <typename P>
+void test_all()
+{
+ typedef typename bg::coordinate_type<P>::type coordinate_type;
+
+ // POINT, setting coordinate
+ test_get_set<P>();
+
+
+ // BOX, setting left/right/top/bottom
+ bg::model::box<P> b;
+ test_indexed_get_set(b);
+
+ // SEGMENT (in GGL not having default constructor; however that is not a requirement)
+ P p1 = bg::make_zero<P>();
+ P p2 = bg::make_zero<P>();
+ bg::model::referring_segment<P> s(p1, p2);
+ test_indexed_get_set(s);
+
+ // CONST SEGMENT
+ bg::set<0>(p1, 1); // we don't use assign because dim in {2,3}
+ bg::set<1>(p1, 2);
+ bg::set<0>(p2, 3);
+ bg::set<1>(p2, 4);
+ bg::model::referring_segment<P const> cs(p1, p2);
+ test_indexed_get(cs,
+ coordinate_type(1), coordinate_type(2),
+ coordinate_type(3), coordinate_type(4));
+}
+
+
+int test_main(int, char* [])
+{
+ test_get_set<int[2]>();
+ test_get_set<float[2]>();
+ test_get_set<double[2]>();
+ test_get_set<double[3]>();
+
+ test_get_set<boost::tuple<double, double> >();
+
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/core/access.vcproj b/libs/geometry/test/core/access.vcproj
new file mode 100644
index 000000000..845fa4efe
--- /dev/null
+++ b/libs/geometry/test/core/access.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="access"
+ ProjectGUID="{5542B963-D229-4393-968F-E62DDCE4B87B}"
+ RootNamespace="access"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\access"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\access"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\access.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/core/coordinate_dimension.cpp b/libs/geometry/test/core/coordinate_dimension.cpp
new file mode 100644
index 000000000..94a90bbfd
--- /dev/null
+++ b/libs/geometry/test/core/coordinate_dimension.cpp
@@ -0,0 +1,74 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/core/coordinate_dimension.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+
+template <typename G, int Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(bg::dimension<G>::type::value, Expected);
+}
+
+template <typename P, size_t D>
+void test_all()
+{
+ test_geometry<P, D>();
+ test_geometry<P const, D>();
+ test_geometry<bg::model::linestring<P> , D>();
+ test_geometry<bg::model::ring<P> , D>();
+ test_geometry<bg::model::polygon<P> , D>();
+ test_geometry<bg::model::box<P> , D>();
+ test_geometry<bg::model::segment<P> , D>();
+ test_geometry<bg::model::referring_segment<P const> , D>();
+
+ test_geometry<std::vector<P>, D>();
+ test_geometry<std::deque<P>, D>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], 2>();
+ test_geometry<float[2], 2>();
+ test_geometry<double[2], 2>();
+
+ test_geometry<int[3], 3>();
+ test_geometry<float[3], 3>();
+ test_geometry<double[3], 3>();
+
+ test_geometry<boost::tuple<double, double>, 2>();
+ test_geometry<boost::tuple<double, double, double>, 3>();
+
+ test_all<bg::model::point<int, 2, bg::cs::cartesian>, 2 >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian>, 2 >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian>, 2 >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/core/coordinate_system.cpp b/libs/geometry/test/core/coordinate_system.cpp
new file mode 100644
index 000000000..5a79f329e
--- /dev/null
+++ b/libs/geometry/test/core/coordinate_system.cpp
@@ -0,0 +1,101 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/core/coordinate_system.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+
+template <typename G, typename Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(typeid(typename bg::coordinate_system<G>::type).name(),
+ typeid(Expected).name());
+}
+
+template <typename P, typename Expected>
+void test_all()
+{
+ test_geometry<P, Expected>();
+ test_geometry<P const, Expected>();
+ test_geometry<bg::model::linestring<P> , Expected>();
+ test_geometry<bg::model::ring<P> , Expected>();
+ test_geometry<bg::model::polygon<P> , Expected>();
+ test_geometry<bg::model::box<P> , Expected>();
+ test_geometry<bg::model::segment<P> , Expected>();
+ test_geometry<bg::model::referring_segment<P const> , Expected>();
+
+ test_geometry<std::vector<P>, Expected>();
+ test_geometry<std::deque<P>, Expected>();
+}
+
+int test_main(int, char* [])
+{
+ // Because of the included headerfiles, there are always cartesian
+ test_geometry<int[2], bg::cs::cartesian>();
+ test_geometry<float[2], bg::cs::cartesian>();
+ test_geometry<double[2], bg::cs::cartesian>();
+
+ test_geometry<int[3], bg::cs::cartesian>();
+ test_geometry<float[3], bg::cs::cartesian>();
+ test_geometry<double[3], bg::cs::cartesian>();
+
+ // Because of the included headerfiles, there are always cartesian
+ test_geometry<boost::tuple<double, double>, bg::cs::cartesian>();
+ test_geometry<boost::tuple<double, double, double>, bg::cs::cartesian>();
+
+
+ // Test cartesian
+ test_all<bg::model::point<int, 2, bg::cs::cartesian>, bg::cs::cartesian>();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian>, bg::cs::cartesian>();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian>, bg::cs::cartesian>();
+
+ // Test spherical
+ test_all<bg::model::point<int, 2, bg::cs::spherical<bg::degree> >,
+ bg::cs::spherical<bg::degree> >();
+ test_all<bg::model::point<float, 2, bg::cs::spherical<bg::degree> >,
+ bg::cs::spherical<bg::degree> >();
+ test_all<bg::model::point<double, 2, bg::cs::spherical<bg::degree> >,
+ bg::cs::spherical<bg::degree> >();
+
+ test_all<bg::model::point<int, 2, bg::cs::spherical<bg::radian> >,
+ bg::cs::spherical<bg::radian> >();
+ test_all<bg::model::point<float, 2, bg::cs::spherical<bg::radian> >,
+ bg::cs::spherical<bg::radian> >();
+ test_all<bg::model::point<double, 2, bg::cs::spherical<bg::radian> >,
+ bg::cs::spherical<bg::radian> >();
+
+ // Test other
+ test_all<bg::model::point<double, 2, bg::cs::polar<bg::degree> >,
+ bg::cs::polar<bg::degree> >();
+
+ test_all<bg::model::point<double, 2, bg::cs::geographic<bg::degree> >,
+ bg::cs::geographic<bg::degree> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/core/coordinate_type.cpp b/libs/geometry/test/core/coordinate_type.cpp
new file mode 100644
index 000000000..e382a8908
--- /dev/null
+++ b/libs/geometry/test/core/coordinate_type.cpp
@@ -0,0 +1,78 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/core/coordinate_type.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+
+template <typename G, typename Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(typeid(typename bg::coordinate_type<G>::type).name(),
+ typeid(Expected).name());
+}
+
+template <typename P, typename Expected>
+void test_all()
+{
+ test_geometry<P, Expected>();
+ test_geometry<P const, Expected>();
+ test_geometry<bg::model::linestring<P> , Expected>();
+ test_geometry<bg::model::ring<P> , Expected>();
+ test_geometry<bg::model::polygon<P> , Expected>();
+ test_geometry<bg::model::box<P> , Expected>();
+ test_geometry<bg::model::segment<P> , Expected>();
+ test_geometry<bg::model::referring_segment<P const> , Expected>();
+
+ test_geometry<std::vector<P>, Expected>();
+ test_geometry<std::deque<P>, Expected>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], int>();
+ test_geometry<float[2], float>();
+ test_geometry<double[2], double>();
+
+ test_geometry<int[3], int>();
+ test_geometry<float[3], float>();
+ test_geometry<double[3], double>();
+
+ test_geometry<boost::tuple<float, float>, float>();
+ test_geometry<boost::tuple<double, double>, double>();
+ test_geometry<boost::tuple<long double, long double>, long double>();
+ test_geometry<boost::tuple<double, double, double>, double>();
+
+ test_all<bg::model::point<int, 2, bg::cs::cartesian>, int>();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian>, float>();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian>, double>();
+ test_all<bg::model::point<long double, 2, bg::cs::cartesian>, long double>();
+
+ return 0;
+}
diff --git a/libs/geometry/test/core/core.sln b/libs/geometry/test/core/core.sln
new file mode 100644
index 000000000..9f368dbc0
--- /dev/null
+++ b/libs/geometry/test/core/core.sln
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "access", "access.vcproj", "{5542B963-D229-4393-968F-E62DDCE4B87B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reverse_dispatch", "reverse_dispatch.vcproj", "{EA65AF97-67BC-49C8-9CAF-4136514A41EE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "radian_access", "radian_access.vcproj", "{DE2968B5-DCA6-4D85-A620-7DA111FC0E06}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ring", "ring.vcproj", "{1EE3F112-638F-4447-8F9D-4C5BB3304C3B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5542B963-D229-4393-968F-E62DDCE4B87B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5542B963-D229-4393-968F-E62DDCE4B87B}.Debug|Win32.Build.0 = Debug|Win32
+ {5542B963-D229-4393-968F-E62DDCE4B87B}.Release|Win32.ActiveCfg = Release|Win32
+ {5542B963-D229-4393-968F-E62DDCE4B87B}.Release|Win32.Build.0 = Release|Win32
+ {EA65AF97-67BC-49C8-9CAF-4136514A41EE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EA65AF97-67BC-49C8-9CAF-4136514A41EE}.Debug|Win32.Build.0 = Debug|Win32
+ {EA65AF97-67BC-49C8-9CAF-4136514A41EE}.Release|Win32.ActiveCfg = Release|Win32
+ {EA65AF97-67BC-49C8-9CAF-4136514A41EE}.Release|Win32.Build.0 = Release|Win32
+ {DE2968B5-DCA6-4D85-A620-7DA111FC0E06}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DE2968B5-DCA6-4D85-A620-7DA111FC0E06}.Debug|Win32.Build.0 = Debug|Win32
+ {DE2968B5-DCA6-4D85-A620-7DA111FC0E06}.Release|Win32.ActiveCfg = Release|Win32
+ {DE2968B5-DCA6-4D85-A620-7DA111FC0E06}.Release|Win32.Build.0 = Release|Win32
+ {1EE3F112-638F-4447-8F9D-4C5BB3304C3B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1EE3F112-638F-4447-8F9D-4C5BB3304C3B}.Debug|Win32.Build.0 = Debug|Win32
+ {1EE3F112-638F-4447-8F9D-4C5BB3304C3B}.Release|Win32.ActiveCfg = Release|Win32
+ {1EE3F112-638F-4447-8F9D-4C5BB3304C3B}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/core/geometry_id.cpp b/libs/geometry/test/core/geometry_id.cpp
new file mode 100644
index 000000000..3d7f89c95
--- /dev/null
+++ b/libs/geometry/test/core/geometry_id.cpp
@@ -0,0 +1,73 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/core/geometry_id.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+
+template <typename G, int Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(bg::geometry_id<G>::type::value, Expected);
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<P, 1>();
+ test_geometry<P const, 1>();
+ test_geometry<bg::model::linestring<P> , 2>();
+ test_geometry<bg::model::ring<P> , 93>();
+ test_geometry<bg::model::polygon<P> , 3>();
+ test_geometry<bg::model::box<P> , 94>();
+ test_geometry<bg::model::segment<P> , 92>();
+ test_geometry<bg::model::referring_segment<P const> , 92>();
+
+ test_geometry<std::vector<P>, 2>();
+ test_geometry<std::deque<P>, 2>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], 1>();
+ test_geometry<float[2], 1>();
+ test_geometry<double[2], 1>();
+
+ test_geometry<int[3], 1>();
+ test_geometry<float[3], 1>();
+ test_geometry<double[3], 1>();
+
+ test_geometry<boost::tuple<double, double>, 1>();
+ test_geometry<boost::tuple<double, double, double>, 1>();
+
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/core/point_type.cpp b/libs/geometry/test/core/point_type.cpp
new file mode 100644
index 000000000..3178bcb91
--- /dev/null
+++ b/libs/geometry/test/core/point_type.cpp
@@ -0,0 +1,82 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/core/tag.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/variant.hpp>
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+#include <boost/variant/variant.hpp>
+
+#include <vector>
+#include <deque>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+
+template <typename G, typename Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(typeid(typename bg::point_type<G>::type).name(),
+ typeid(Expected).name());
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<P, P>();
+ test_geometry<P const, P>();
+ test_geometry<bg::model::linestring<P> , P>();
+ test_geometry<bg::model::ring<P> , P>();
+ test_geometry<bg::model::polygon<P> , P>();
+ test_geometry<bg::model::box<P> , P>();
+ test_geometry<bg::model::segment<P> , P>();
+ test_geometry<bg::model::referring_segment<P const> , P>();
+
+ test_geometry<std::vector<P>, P>();
+ test_geometry<std::deque<P>, P>();
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], int[2]>();
+ test_geometry<float[2], float[2]>();
+ test_geometry<double[2], double[2]>();
+
+ test_geometry<int[3], int[3]>();
+ test_geometry<float[3], float[3]>();
+ test_geometry<double[3], double[3]>();
+
+ test_geometry<boost::tuple<double, double>,
+ boost::tuple<double, double> >();
+ test_geometry<boost::tuple<double, double, double>,
+ boost::tuple<double, double, double> >();
+
+ test_geometry<boost::variant<bg::model::box<boost::tuple<double, double> > >,
+ boost::tuple<double, double> >();
+
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/core/radian_access.cpp b/libs/geometry/test/core/radian_access.cpp
new file mode 100644
index 000000000..d0aa59ac3
--- /dev/null
+++ b/libs/geometry/test/core/radian_access.cpp
@@ -0,0 +1,110 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/radian_access.hpp>
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/geometries/point.hpp>
+
+
+template <std::size_t D, typename P, typename T>
+void test_get(T const& c, T const& e)
+{
+ //std::cout << "get_as_radian " << typeid(P).name() << std::endl;
+
+ typedef typename bg::coordinate_type<P>::type coordinate_type;
+
+ P p;
+ bg::set<D>(p, coordinate_type(c));
+
+ coordinate_type g = bg::get_as_radian<D>(p);
+
+ BOOST_CHECK_CLOSE(double(g), double(e), 0.0001);
+}
+
+
+template <std::size_t D, typename P, typename T>
+void test_set(T const& c, T const& e)
+{
+ //std::cout << "set_from_radian " << typeid(P).name() << std::endl;
+
+ typedef typename bg::coordinate_type<P>::type coordinate_type;
+
+ P p;
+ bg::set_from_radian<D>(p, coordinate_type(c));
+
+ coordinate_type g = bg::get<D>(p);
+
+ BOOST_CHECK_CLOSE(double(g), double(e), 0.0001);
+}
+
+
+template <typename T>
+void test()
+{
+ double d2r = 3.1415926535897932384626433832795 / 180.0;
+
+ // Degree
+ test_get<0, bg::model::point<T, 2, bg::cs::spherical<bg::degree> > >
+ (1.0, 1.0 * d2r);
+ test_get<1, bg::model::point<T, 2, bg::cs::spherical<bg::degree> > >
+ (2.0, 2.0 * d2r);
+
+ test_set<0, bg::model::point<T, 2, bg::cs::spherical<bg::degree> > >
+ (1.0, 1.0 / d2r);
+ test_set<1, bg::model::point<T, 2, bg::cs::spherical<bg::degree> > >
+ (2.0, 2.0 / d2r);
+
+
+ // Radian
+ test_get<0, bg::model::point<T, 2, bg::cs::spherical<bg::radian> > >
+ (1.0, 1.0);
+ test_get<1, bg::model::point<T, 2, bg::cs::spherical<bg::radian> > >
+ (1.0, 1.0);
+
+ test_set<0, bg::model::point<T, 2, bg::cs::spherical<bg::radian> > >
+ (1.0, 1.0);
+ test_set<1, bg::model::point<T, 2, bg::cs::spherical<bg::radian> > >
+ (1.0, 1.0);
+
+
+ // Cartesian (== untouched, no conversion)
+ test_get<0, bg::model::point<T, 2, bg::cs::cartesian> >
+ (1.0, 1.0);
+ test_get<1, bg::model::point<T, 2, bg::cs::cartesian> >
+ (1.0, 1.0);
+
+ // Dimension >=2, should always be untouched, even for degree
+ // (assuming lat/lon + height)
+ test_set<2, bg::model::point<T, 3, bg::cs::spherical<bg::radian> > >
+ (1.0, 1.0);
+ test_set<2, bg::model::point<T, 3, bg::cs::spherical<bg::degree> > >
+ (1.0, 1.0);
+
+}
+
+
+
+
+int test_main(int, char* [])
+{
+ //test<float>();
+ test<double>();
+
+ return 0;
+}
diff --git a/libs/geometry/test/core/radian_access.vcproj b/libs/geometry/test/core/radian_access.vcproj
new file mode 100644
index 000000000..5e5613ca0
--- /dev/null
+++ b/libs/geometry/test/core/radian_access.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="radian_access"
+ ProjectGUID="{DE2968B5-DCA6-4D85-A620-7DA111FC0E06}"
+ RootNamespace="radian_access"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\radian_access"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\radian_access"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\radian_access.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/core/reverse_dispatch.cpp b/libs/geometry/test/core/reverse_dispatch.cpp
new file mode 100644
index 000000000..cff472ec2
--- /dev/null
+++ b/libs/geometry/test/core/reverse_dispatch.cpp
@@ -0,0 +1,65 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/reverse_dispatch.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+
+
+template <typename Geometry1, typename Geometry2, bool Expected>
+void test_reversed()
+{
+ BOOST_CHECK_EQUAL((bg::reverse_dispatch<Geometry1, Geometry2>::type::value),
+ Expected);
+}
+
+
+template <typename P>
+void test_all()
+{
+
+ test_reversed<P, P, false>();
+ test_reversed<P, bg::model::linestring<P>, false>();
+ test_reversed<bg::model::linestring<P>, P, true>();
+ test_reversed<bg::model::ring<P>, P, true>();
+ test_reversed<bg::model::linestring<P>, bg::model::ring<P>, false>();
+ test_reversed<bg::model::ring<P>, bg::model::linestring<P>, true>();
+}
+
+template <typename P1, typename P2>
+void test_mixed()
+{
+ test_reversed<P1, P2, false>();
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_mixed
+ <
+ bg::model::point<int, 2, bg::cs::cartesian>,
+ bg::model::point<int, 2, bg::cs::spherical<bg::degree> >
+ >();
+ test_mixed
+ <
+ bg::model::point<int, 2, bg::cs::spherical<bg::degree> >,
+ bg::model::point<int, 2, bg::cs::spherical<bg::radian> >
+ >();
+ return 0;
+}
diff --git a/libs/geometry/test/core/reverse_dispatch.vcproj b/libs/geometry/test/core/reverse_dispatch.vcproj
new file mode 100644
index 000000000..2966d9db4
--- /dev/null
+++ b/libs/geometry/test/core/reverse_dispatch.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="reverse_dispatch"
+ ProjectGUID="{EA65AF97-67BC-49C8-9CAF-4136514A41EE}"
+ RootNamespace="reverse_dispatch"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\reverse_dispatch"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\reverse_dispatch"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\reverse_dispatch.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/core/ring.cpp b/libs/geometry/test/core/ring.cpp
new file mode 100644
index 000000000..f2c3ac4cb
--- /dev/null
+++ b/libs/geometry/test/core/ring.cpp
@@ -0,0 +1,74 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+// To be tested:
+#include <boost/geometry/core/ring_type.hpp>
+#include <boost/geometry/core/exterior_ring.hpp>
+#include <boost/geometry/core/interior_rings.hpp>
+
+// For geometries:
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+
+
+template <typename P>
+void test_ring(std::string const& wkt,
+ std::size_t expected_main_count,
+ std::size_t expected_interior_ring_count,
+ std::size_t expected_first_interior_count)
+{
+ typedef bg::model::polygon<P> the_polygon;
+ typedef typename bg::ring_type<the_polygon>::type the_ring;
+ typedef typename bg::interior_return_type<the_polygon const>::type the_interior;
+
+ the_polygon poly;
+ bg::read_wkt(wkt, poly);
+
+ the_ring ext = bg::exterior_ring(poly);
+ the_interior rings = bg::interior_rings(poly);
+
+ BOOST_CHECK_EQUAL(bg::num_interior_rings(poly), expected_interior_ring_count);
+ BOOST_CHECK_EQUAL(boost::size(rings), expected_interior_ring_count);
+ BOOST_CHECK_EQUAL(boost::size(ext), expected_main_count);
+ if (boost::size(rings))
+ {
+ BOOST_CHECK_EQUAL(boost::size(rings.front()), expected_first_interior_count);
+ }
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_ring<P>("POLYGON((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))", 5, 1, 5);
+ test_ring<P>("POLYGON((0 0,0 3,3 3,3 0,0 0),(1 1,2 2,2 1,1 1),(1 1,1 2,2 2,1 1))", 5, 2, 4);
+ test_ring<P>("POLYGON((0 0,0 3,3 3,3 0,0 0))", 5, 0, 0);
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+ return 0;
+}
diff --git a/libs/geometry/test/core/ring.vcproj b/libs/geometry/test/core/ring.vcproj
new file mode 100644
index 000000000..e5e1a90fb
--- /dev/null
+++ b/libs/geometry/test/core/ring.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="ring"
+ ProjectGUID="{1EE3F112-638F-4447-8F9D-4C5BB3304C3B}"
+ RootNamespace="ring"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ring"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ring"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\ring.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/core/tag.cpp b/libs/geometry/test/core/tag.cpp
new file mode 100644
index 000000000..d3bbc4bc3
--- /dev/null
+++ b/libs/geometry/test/core/tag.cpp
@@ -0,0 +1,74 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/tag.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/geometry/geometries/register/linestring.hpp>
+
+#include <vector>
+#include <deque>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+
+template <typename G, typename Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(typeid(typename bg::tag<G>::type).name(),
+ typeid(Expected).name());
+}
+
+template <typename P, size_t D>
+void test_all()
+{
+ test_geometry<P, bg::point_tag>();
+ test_geometry<P const, bg::point_tag>();
+ test_geometry<bg::model::linestring<P> , bg::linestring_tag>();
+ test_geometry<bg::model::ring<P> , bg::ring_tag>();
+ test_geometry<bg::model::polygon<P> , bg::polygon_tag>();
+ test_geometry<bg::model::box<P> , bg::box_tag>();
+ test_geometry<bg::model::segment<P> , bg::segment_tag>();
+ test_geometry<bg::model::referring_segment<P const> , bg::segment_tag>();
+
+ test_geometry<std::vector<P>, bg::linestring_tag>();
+ test_geometry<std::deque<P>, bg::linestring_tag>();
+
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], bg::point_tag>();
+ test_geometry<float[2], bg::point_tag>();
+ test_geometry<double[2], bg::point_tag>();
+
+ test_geometry<int[3], bg::point_tag>();
+ test_geometry<float[3], bg::point_tag>();
+ test_geometry<double[3], bg::point_tag>();
+
+ test_geometry<boost::tuple<double, double>, bg::point_tag>();
+ test_geometry<boost::tuple<double, double, double>, bg::point_tag>();
+
+ test_all<bg::model::point<int, 2, bg::cs::cartesian>, 2 >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian>, 2 >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian>, 2 >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/core/topological_dimension.cpp b/libs/geometry/test/core/topological_dimension.cpp
new file mode 100644
index 000000000..392e5f866
--- /dev/null
+++ b/libs/geometry/test/core/topological_dimension.cpp
@@ -0,0 +1,73 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/core/topological_dimension.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/geometries/register/linestring.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+
+#include <vector>
+#include <deque>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+
+template <typename G, int Expected>
+void test_geometry()
+{
+ BOOST_CHECK_EQUAL(bg::topological_dimension<G>::type::value, Expected);
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<P, 0>();
+ test_geometry<P const, 0>();
+ test_geometry<bg::model::linestring<P> , 1>();
+ test_geometry<bg::model::ring<P> , 2>(); // being discussed
+ test_geometry<bg::model::polygon<P> , 2>();
+ test_geometry<bg::model::box<P> , 2>();
+ test_geometry<bg::model::segment<P> , 1>();
+ test_geometry<bg::model::referring_segment<P const> , 1>();
+
+ test_geometry<std::vector<P>, 1>();
+ test_geometry<std::deque<P>, 1>();
+
+}
+
+int test_main(int, char* [])
+{
+ test_geometry<int[2], 0>();
+ test_geometry<float[2], 0>();
+ test_geometry<double[2], 0>();
+
+ test_geometry<int[3], 0>();
+ test_geometry<float[3], 0>();
+ test_geometry<double[3], 0>();
+
+ test_geometry<boost::tuple<double, double>, 0>();
+ test_geometry<boost::tuple<double, double, double>, 0>();
+
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/geometries/Jamfile.v2 b/libs/geometry/test/geometries/Jamfile.v2
new file mode 100644
index 000000000..5b809bb12
--- /dev/null
+++ b/libs/geometry/test/geometries/Jamfile.v2
@@ -0,0 +1,28 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+# 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)
+
+test-suite boost-geometry-geometries
+ :
+ [ run adapted.cpp ]
+ [ run boost_array_as_point.cpp ]
+ [ run boost_fusion.cpp ]
+ # [ run boost_polygon.cpp ]
+ [ run boost_range.cpp ]
+ [ run boost_tuple.cpp ]
+ [ run box.cpp ]
+ #[ compile-fail custom_linestring.cpp
+ # : # requirements
+ # <define>TEST_FAIL_CLEAR
+ # : # target name
+ # custom_linestring_test_fail_clear
+ #]
+ [ run custom_linestring.cpp ]
+ [ run segment.cpp ]
+ ;
diff --git a/libs/geometry/test/geometries/adapted.cpp b/libs/geometry/test/geometries/adapted.cpp
new file mode 100644
index 000000000..3ba47ef72
--- /dev/null
+++ b/libs/geometry/test/geometries/adapted.cpp
@@ -0,0 +1,112 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <deque>
+#include <vector>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/multi/multi.hpp>
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <test_common/test_point.hpp>
+
+#define BOOST_GEOMETRY_TEST_RING
+
+
+
+#if defined(BOOST_GEOMETRY_TEST_RING)
+
+ #include <boost/geometry/geometries/register/ring.hpp>
+ #include <boost/geometry/geometries/concepts/ring_concept.hpp>
+
+ BOOST_GEOMETRY_REGISTER_RING_TEMPLATED(std::vector)
+ BOOST_GEOMETRY_REGISTER_RING_TEMPLATED(std::deque)
+
+#elif defined(BOOST_GEOMETRY_TEST_MULTI_POINT)
+
+ #include <boost/geometry/multi/geometries/register/multi_point.hpp>
+ #include <boost/geometry/multi/geometries/concepts/multi_point_concept.hpp>
+
+ BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED(std::vector)
+ BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED(std::deque)
+
+#else
+
+ #include <boost/geometry/geometries/register/linestring.hpp>
+ #include <boost/geometry/geometries/concepts/linestring_concept.hpp>
+
+ BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+ BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+#endif
+
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+// ----------------------------------------------------------------------------
+
+template <typename G>
+void test_geometry(G const& geometry, std::size_t expected_size = 0)
+{
+#if defined(BOOST_GEOMETRY_TEST_RING)
+ BOOST_CONCEPT_ASSERT( (bg::concept::ConstRing<G>) );
+#elif defined(BOOST_GEOMETRY_TEST_MULTI_POINT)
+ BOOST_CONCEPT_ASSERT( (bg::concept::ConstMultiPoint<G>) );
+#else
+ BOOST_CONCEPT_ASSERT( (bg::concept::ConstLinestring<G>) );
+#endif
+
+ typedef typename bg::point_type<G>::type P;
+ typedef typename bg::coordinate_type<P>::type C;
+
+ // Check range-like behaviour
+ BOOST_CHECK_EQUAL(boost::size(geometry), expected_size);
+
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry(std::vector<P>());
+ test_geometry(std::deque<P>());
+ //test_geometry(std::list<P>());
+
+ /***
+ double vertices[][3] = {
+ {-1, -1, 1}, {1, -1, 1}, {1, 1, 1}, {-1, 1, 1},
+ {-1, -1, -1}, {1, -1, -1}, {1, 1, -1}, {-1, 1, -1}
+ };
+
+ test_geometry(vertices, 8);
+ ***/
+}
+
+int test_main(int, char* [])
+{
+ test_all<test::test_point>();
+ test_all<boost::tuple<float, float> >();
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<long double, 2, bg::cs::cartesian> >();
+
+ test_all<boost::tuple<float, float, float> >();
+ test_all<bg::model::point<double, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<long double, 3, bg::cs::cartesian> >();
+
+ test_all<boost::tuple<float, float, float, float, float> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/geometries/boost_array_as_point.cpp b/libs/geometry/test/geometries/boost_array_as_point.cpp
new file mode 100644
index 000000000..c1ffe0bf5
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_array_as_point.cpp
@@ -0,0 +1,36 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010 Alfredo Correa
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <geometry_test_common.hpp>
+
+
+#include<boost/geometry/geometry.hpp>
+#include<boost/geometry/geometries/adapted/boost_array.hpp>
+#include<boost/geometry/geometries/adapted/c_array.hpp>
+#include<boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include<iostream>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+int test_main(int, char* [])
+{
+ bg::model::point<double, 3, bg::cs::cartesian> p1(1,2,3);
+ double p2[3] = {4,5,6};
+ boost::tuple<double, double, double> p3(7,8,9);
+ boost::array<double, 3> p4 = {{10,11,12}};
+ std::clog << bg::distance(p1, p2) << std::endl;
+ std::clog << bg::distance(p2, p3) << std::endl;
+ std::clog << bg::distance(p3, p4) << std::endl;
+ return 0;
+}
+
diff --git a/libs/geometry/test/geometries/boost_array_as_point.vcproj b/libs/geometry/test/geometries/boost_array_as_point.vcproj
new file mode 100644
index 000000000..75008a582
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_array_as_point.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost_array_as_point"
+ ProjectGUID="{77F84000-D088-46AD-A023-08552101B1C5}"
+ RootNamespace="boost_array_as_point"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_array_as_point"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_array_as_point"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\boost_array_as_point.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/geometries/boost_fusion.cpp b/libs/geometry/test/geometries/boost_fusion.cpp
new file mode 100644
index 000000000..38a4a05ff
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_fusion.cpp
@@ -0,0 +1,71 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright Akira Takahashi 2011
+
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/fusion/include/adapt_struct_named.hpp>
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/adapted/boost_fusion.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <iostream>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_FUSION_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+struct for_fusion_2d
+{
+ float x,y;
+};
+struct for_fusion_3d
+{
+ double x,y,z;
+};
+
+BOOST_FUSION_ADAPT_STRUCT(for_fusion_2d, (float, x) (float, y))
+BOOST_FUSION_ADAPT_STRUCT(for_fusion_3d, (double, x) (double, y) (double, z))
+
+
+void test_2d()
+{
+ bg::model::point<double, 2, bg::cs::cartesian> p1(1, 2);
+ double p2[2] = {3, 4};
+ boost::tuple<double, double> p3(5,6);
+
+ for_fusion_2d pf = {7, 8};
+
+ BOOST_CHECK_CLOSE(bg::distance(p1, pf), 8.4852813742385695, 0.01);
+ BOOST_CHECK_CLOSE(bg::distance(p2, pf), 5.6568542494923806, 0.01);
+ BOOST_CHECK_CLOSE(bg::distance(p3, pf), 2.82843, 0.01);
+}
+
+void test_3d()
+{
+ bg::model::point<double, 3, bg::cs::cartesian> p1(1, 2, 3);
+ double p2[3] = {4, 5, 6};
+ boost::tuple<double, double, double> p3(7, 8, 9);
+
+ for_fusion_3d pf = {10, 11, 12};
+
+ BOOST_CHECK_CLOSE(bg::distance(p1, pf), 15.58845726811, 0.01);
+ BOOST_CHECK_CLOSE(bg::distance(p2, pf), 10.392304845413, 0.01);
+ BOOST_CHECK_CLOSE(bg::distance(p3, pf), 5.196152, 0.01);
+}
+
+int test_main(int, char* [])
+{
+ test_2d();
+ test_3d();
+ return 0;
+}
+
diff --git a/libs/geometry/test/geometries/boost_fusion.vcproj b/libs/geometry/test/geometries/boost_fusion.vcproj
new file mode 100644
index 000000000..95d2b6015
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_fusion.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost_fusion"
+ ProjectGUID="{C218C979-890F-4690-84E0-837DC661CE57}"
+ RootNamespace="boost_fusion"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_fusion"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_fusion"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\boost_fusion.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/geometries/boost_polygon.cpp b/libs/geometry/test/geometries/boost_polygon.cpp
new file mode 100644
index 000000000..42dc2c5a8
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_polygon.cpp
@@ -0,0 +1,174 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+// geometry::num_points does not accept the ring_proxy for adaptation, like
+// centroid and probably many more algorithms. TODO: fix that. Until then we
+// define it such that num_points is not called.
+#define BOOST_GEOMETRY_EMPTY_INPUT_NO_THROW
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/geometry.hpp>
+
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+
+#include <boost/geometry/geometries/adapted/boost_polygon/point.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon/box.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon/ring.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon/polygon.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <iostream>
+
+template <typename T>
+void fill_polygon_with_two_holes(boost::polygon::polygon_with_holes_data<T>& boost_polygon_polygon)
+{
+ std::vector<boost::polygon::point_data<T> > point_vector;
+ point_vector.push_back(boost::polygon::point_data<T>(0, 0));
+ point_vector.push_back(boost::polygon::point_data<T>(0, 10));
+ point_vector.push_back(boost::polygon::point_data<T>(10, 10));
+ point_vector.push_back(boost::polygon::point_data<T>(10, 0));
+ point_vector.push_back(boost::polygon::point_data<T>(0, 0));
+ boost_polygon_polygon.set(point_vector.begin(), point_vector.end());
+
+
+ std::vector<boost::polygon::polygon_data<T> > holes;
+ holes.resize(2);
+
+ {
+ std::vector<boost::polygon::point_data<T> > point_vector;
+ point_vector.push_back(boost::polygon::point_data<T>(1, 1));
+ point_vector.push_back(boost::polygon::point_data<T>(2, 1));
+ point_vector.push_back(boost::polygon::point_data<T>(2, 2));
+ point_vector.push_back(boost::polygon::point_data<T>(1, 2));
+ point_vector.push_back(boost::polygon::point_data<T>(1, 1));
+ holes[0].set(point_vector.begin(), point_vector.end());
+ }
+
+ {
+ std::vector<boost::polygon::point_data<T> > point_vector;
+ point_vector.push_back(boost::polygon::point_data<T>(3, 3));
+ point_vector.push_back(boost::polygon::point_data<T>(4, 3));
+ point_vector.push_back(boost::polygon::point_data<T>(4, 4));
+ point_vector.push_back(boost::polygon::point_data<T>(3, 4));
+ point_vector.push_back(boost::polygon::point_data<T>(3, 3));
+ holes[1].set(point_vector.begin(), point_vector.end());
+ }
+ boost_polygon_polygon.set_holes(holes.begin(), holes.end());
+}
+
+
+template <typename T>
+void test_coordinate_type()
+{
+ // 1a: Check if Boost.Polygon's point fulfills Boost.Geometry's point concept
+ bg::concept::check<boost::polygon::point_data<T> >();
+
+ // 1b: use a Boost.Polygon point in Boost.Geometry, calc. distance with two point types
+ boost::polygon::point_data<T> boost_polygon_point(1, 2);
+
+ typedef bg::model::point<T, 2, bg::cs::cartesian> bg_point_type;
+ bg_point_type boost_geometry_point(3, 4);
+ BOOST_CHECK_EQUAL(bg::distance(boost_polygon_point, boost_geometry_point),
+ 2 * std::sqrt(2.0));
+
+ // 2a: Check if Boost.Polygon's box fulfills Boost.Geometry's box concept
+ bg::concept::check<boost::polygon::rectangle_data<T> >();
+
+ // 2b: use a Boost.Polygon rectangle in Boost.Geometry, compare with boxes
+ boost::polygon::rectangle_data<T> boost_polygon_box;
+ bg::model::box<bg_point_type> boost_geometry_box;
+
+ bg::assign_values(boost_polygon_box, 0, 1, 5, 6);
+ bg::assign_values(boost_geometry_box, 0, 1, 5, 6);
+ T boost_polygon_area = bg::area(boost_polygon_box);
+ T boost_geometry_area = bg::area(boost_geometry_box);
+ T boost_polygon_area_by_boost_polygon = boost::polygon::area(boost_polygon_box);
+ BOOST_CHECK_EQUAL(boost_polygon_area, boost_geometry_area);
+ BOOST_CHECK_EQUAL(boost_polygon_area, boost_polygon_area_by_boost_polygon);
+
+ // 3a: Check if Boost.Polygon's polygon fulfills Boost.Geometry's ring concept
+ bg::concept::check<boost::polygon::polygon_data<T> >();
+
+ // 3b: use a Boost.Polygon polygon (ring)
+ boost::polygon::polygon_data<T> boost_polygon_ring;
+ {
+ // Filling it is a two-step process using Boost.Polygon
+ std::vector<boost::polygon::point_data<T> > point_vector;
+ point_vector.push_back(boost::polygon::point_data<T>(0, 0));
+ point_vector.push_back(boost::polygon::point_data<T>(0, 3));
+ point_vector.push_back(boost::polygon::point_data<T>(4, 0));
+ point_vector.push_back(boost::polygon::point_data<T>(0, 0));
+ boost_polygon_ring.set(point_vector.begin(), point_vector.end());
+ }
+
+ // Boost-geometry ring
+ bg::model::ring<bg_point_type> boost_geometry_ring;
+ {
+ boost_geometry_ring.push_back(bg_point_type(0, 0));
+ boost_geometry_ring.push_back(bg_point_type(0, 3));
+ boost_geometry_ring.push_back(bg_point_type(4, 0));
+ boost_geometry_ring.push_back(bg_point_type(0, 0));
+ }
+ boost_polygon_area = bg::area(boost_polygon_ring);
+ boost_geometry_area = bg::area(boost_geometry_ring);
+ boost_polygon_area_by_boost_polygon = boost::polygon::area(boost_polygon_ring);
+ BOOST_CHECK_EQUAL(boost_polygon_area, boost_geometry_area);
+ BOOST_CHECK_EQUAL(boost_polygon_area, boost_polygon_area_by_boost_polygon);
+
+ // Check mutable ring
+ std::string wkt = "POLYGON((0 0,0 10,10 10,10 0,0 0))";
+ bg::read_wkt(wkt, boost_polygon_ring);
+ bg::read_wkt(wkt, boost_geometry_ring);
+ boost_polygon_area = bg::area(boost_polygon_ring);
+ boost_geometry_area = bg::area(boost_geometry_ring);
+ boost_polygon_area_by_boost_polygon = boost::polygon::area(boost_polygon_ring);
+ BOOST_CHECK_EQUAL(boost_polygon_area, boost_geometry_area);
+ BOOST_CHECK_EQUAL(boost_polygon_area, boost_polygon_area_by_boost_polygon);
+
+ // 4a: Boost.Polygon's polygon with holes
+ boost::polygon::polygon_with_holes_data<T> boost_polygon_polygon;
+ fill_polygon_with_two_holes(boost_polygon_polygon);
+
+ // Using Boost.Polygon
+ boost_polygon_area = bg::area(boost_polygon_polygon);
+ boost_polygon_area_by_boost_polygon = boost::polygon::area(boost_polygon_polygon);
+ BOOST_CHECK_EQUAL(boost_polygon_area, boost_polygon_area_by_boost_polygon);
+
+ wkt = "POLYGON((0 0,0 10,10 10,10 0,0 0),(1 1,2 1,2 2,1 2,1 1),(3 3,4 3,4 4,3 4,3 3))";
+
+ bg::model::polygon<bg_point_type> boost_geometry_polygon;
+ bg::read_wkt(wkt, boost_geometry_polygon);
+
+ boost_geometry_area = bg::area(boost_geometry_polygon);
+ BOOST_CHECK_EQUAL(boost_polygon_area, boost_geometry_area);
+
+ bg::clear(boost_polygon_polygon);
+ bg::read_wkt(wkt, boost_polygon_polygon);
+ boost_geometry_area = bg::area(boost_polygon_polygon);
+ BOOST_CHECK_EQUAL(boost_polygon_area, boost_geometry_area);
+
+ std::ostringstream out;
+ out << bg::wkt(boost_polygon_polygon);
+ BOOST_CHECK_EQUAL(wkt, out.str());
+
+}
+
+int test_main(int, char* [])
+{
+ test_coordinate_type<int>();
+ //test_coordinate_type<float>(); // compiles, but "BOOST_CHECK_EQUAL" fails
+ test_coordinate_type<double>();
+ return 0;
+}
diff --git a/libs/geometry/test/geometries/boost_polygon.vcproj b/libs/geometry/test/geometries/boost_polygon.vcproj
new file mode 100644
index 000000000..f346bb667
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_polygon.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost_polygon"
+ ProjectGUID="{6809180F-1E31-42B0-8481-67AC8E9B180B}"
+ RootNamespace="boost_polygon"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_polygon"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_polygon"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\boost_polygon.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/geometries/boost_polygon_overlay.cpp b/libs/geometry/test/geometries/boost_polygon_overlay.cpp
new file mode 100644
index 000000000..f7db77353
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_polygon_overlay.cpp
@@ -0,0 +1,122 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon/point.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon/box.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon/ring.hpp>
+#include <boost/geometry/geometries/adapted/boost_polygon/polygon.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include<iostream>
+
+template <typename T>
+void test_overlay_using_boost_polygon(std::string const& case_id, std::string const& wkt_p, std::string const& wkt_q)
+{
+ typedef boost::polygon::polygon_set_data<T> polygon_set;
+
+ polygon_set p, q;
+ polygon_set out_i, out_u;
+
+ {
+ // Read polygons, conveniently using Boost.Geometry
+ typedef boost::geometry::model::multi_polygon
+ <
+ boost::polygon::polygon_with_holes_data<T>
+ > mp_type;
+ mp_type mp, mq;
+
+ bg::read_wkt(wkt_p, mp);
+ bg::read_wkt(wkt_q, mq);
+
+ p.insert(mp.begin(), mp.end());
+ q.insert(mq.begin(), mq.end());
+ }
+
+ {
+ using namespace boost::polygon::operators;
+ out_i = p & q;
+ out_u = p | q;
+ }
+
+ double area_p = boost::polygon::area(p);
+ double area_q = boost::polygon::area(q);
+ double area_i = boost::polygon::area(out_i);
+ double area_u = boost::polygon::area(out_u);
+
+ double sum = area_p + area_q - area_u - area_i;
+ BOOST_CHECK_MESSAGE(abs(sum) < 0.001,
+ "Overlay error\n"
+ << "Boost.Polygon " << case_id
+ << " area p: " << area_p
+ << " area q: " << area_q
+ << " area i: " << area_i
+ << " area u: " << area_u
+ << " sum: " << sum
+ );
+}
+
+
+template <typename T>
+void test_overlay_using_boost_geometry(std::string const& case_id, std::string const& wkt_p, std::string const& wkt_q)
+{
+ typedef boost::geometry::model::multi_polygon
+ <
+ boost::geometry::model::polygon
+ <
+ boost::geometry::model::d2::point_xy<T>
+ >
+ > mp_type;
+
+ // Read it using Boost.Geometry
+ mp_type p, q, out_i, out_u;
+
+ boost::geometry::read_wkt(wkt_p, p);
+ boost::geometry::read_wkt(wkt_q, q);
+
+ boost::geometry::intersection(p, q, out_i);
+ boost::geometry::union_(p, q, out_u);
+
+ double area_p = boost::geometry::area(p);
+ double area_q = boost::geometry::area(q);
+ double area_i = boost::geometry::area(out_i);
+ double area_u = boost::geometry::area(out_u);
+
+ double sum = area_p + area_q - area_u - area_i;
+ BOOST_CHECK_MESSAGE(abs(sum) < 0.001,
+ "Overlay error\n"
+ << "Boost.Geometry " << case_id
+ << " area p: " << area_p
+ << " area q: " << area_q
+ << " area i: " << area_i
+ << " area u: " << area_u
+ << " sum: " << sum
+ );
+}
+
+template <typename T>
+void test_overlay(std::string const& case_id, std::string const& wkt_p, std::string const& wkt_q)
+{
+ test_overlay_using_boost_polygon<T>(case_id, wkt_p, wkt_q);
+ test_overlay_using_boost_geometry<T>(case_id, wkt_p, wkt_q);
+}
+
+
+int test_main(int, char* [])
+{
+ test_overlay<int>("case 1", "MULTIPOLYGON(((100 900,0 800,100 800,100 900)),((200 700,100 800,100 700,200 700)),((500 400,400 400,400 300,500 400)),((600 300,500 200,600 200,600 300)),((600 700,500 800,500 700,600 700)),((700 500,600 500,600 400,700 500)),((900 300,800 400,800 300,900 300)))",
+ "MULTIPOLYGON(((200 900,100 1000,100 800,200 800,200 900)),((400 500,300 600,300 500,400 500)),((500 900,400 800,500 800,500 900)),((600 800,500 700,600 700,600 800)),((700 500,600 400,700 400,700 500)),((1000 1000,900 900,1000 900,1000 1000)))");
+ test_overlay<int>("case 2", "MULTIPOLYGON(((200 400,100 400,100 300,200 400)),((300 100,200 100,200 0,300 0,300 100)),((600 700,500 700,500 600,600 700)),((700 300,600 300,600 200,700 300)),((800 500,700 600,700 500,800 500)),((900 800,800 700,900 700,900 800)),((1000 200,900 100,1000 100,1000 200)),((1000 800,900 900,900 800,1000 800)))",
+ "MULTIPOLYGON(((200 800,100 800,100 700,200 700,200 800)),((400 200,300 100,400 100,400 200)),((400 800,300 700,400 700,400 800)),((700 100,600 0,700 0,700 100)),((700 200,600 200,600 100,700 200)),((900 200,800 200,800 0,900 0,900 200)),((1000 300,900 200,1000 200,1000 300)))");
+ return 0;
+}
diff --git a/libs/geometry/test/geometries/boost_polygon_overlay.vcproj b/libs/geometry/test/geometries/boost_polygon_overlay.vcproj
new file mode 100644
index 000000000..8f662b36e
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_polygon_overlay.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost_polygon_overlay"
+ ProjectGUID="{93C4EB19-8A0C-437E-9F82-A0DB4A4A5C32}"
+ RootNamespace="boost_polygon_overlay"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_polygon_overlay"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_polygon_overlay"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\boost_polygon_overlay.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/geometries/boost_range.cpp b/libs/geometry/test/geometries/boost_range.cpp
new file mode 100644
index 000000000..d80ca33c8
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_range.cpp
@@ -0,0 +1,116 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/filtered.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/reversed.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/strided.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/sliced.hpp>
+#include <boost/geometry/geometries/adapted/boost_range/uniqued.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+#include <sstream>
+
+struct not_two
+{
+ template <typename P>
+ bool operator()(P const& p) const
+ {
+ return boost::geometry::get<0>(p) != 2.0;
+ }
+};
+
+struct sum_not_five
+{
+ template <typename P>
+ bool operator()(P const& p1, P const& p2) const
+ {
+ return boost::geometry::get<0>(p1) + boost::geometry::get<0>(p2) != 5.0;
+ }
+};
+
+
+template <typename P>
+void test_range_adaptor()
+{
+ bg::model::linestring<P> ls;
+ bg::read_wkt("LINESTRING(1 1,2 2,3 3,4 4)", ls);
+
+ {
+ std::ostringstream out;
+ out << bg::wkt(ls);
+ BOOST_CHECK_EQUAL(out.str(), "LINESTRING(1 1,2 2,3 3,4 4)");
+ }
+
+ {
+ std::ostringstream out;
+ out << bg::wkt(ls | boost::adaptors::reversed);
+ BOOST_CHECK_EQUAL(out.str(), "LINESTRING(4 4,3 3,2 2,1 1)");
+ }
+
+ {
+ std::ostringstream out;
+ out << bg::wkt(ls | boost::adaptors::strided(2));
+ BOOST_CHECK_EQUAL(out.str(), "LINESTRING(1 1,3 3)");
+ }
+
+ {
+ std::ostringstream out;
+ out << bg::wkt(ls | boost::adaptors::sliced(1,3));
+ BOOST_CHECK_EQUAL(out.str(), "LINESTRING(2 2,3 3)");
+ }
+
+ {
+ std::ostringstream out;
+ out << bg::wkt(ls | boost::adaptors::filtered(not_two()));
+ BOOST_CHECK_EQUAL(out.str(), "LINESTRING(1 1,3 3,4 4)");
+ }
+
+ {
+ std::ostringstream out;
+ out << bg::wkt(ls | boost::adaptors::adjacent_filtered(sum_not_five()));
+ BOOST_CHECK_EQUAL(out.str(), "LINESTRING(1 1,3 3,4 4)");
+ }
+
+ {
+ bg::model::linestring<P> ls2;
+ bg::read_wkt("LINESTRING(1 1,1 1,2 2,3 3,3 3,4 4)", ls2);
+ std::ostringstream out;
+
+
+ // uniqued needs == operator, equals
+ //out << bg::wkt(ls | boost::adaptors::uniqued);
+ //BOOST_CHECK_EQUAL(out.str(), "LINESTRING(1 1,2 2,3 3,4 4)");
+ }
+}
+
+template <typename P>
+void test_all()
+{
+ test_range_adaptor<P>();
+}
+
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+
+ return 0;
+ }
+
diff --git a/libs/geometry/test/geometries/boost_range.vcproj b/libs/geometry/test/geometries/boost_range.vcproj
new file mode 100644
index 000000000..e6f7455e9
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_range.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost_range"
+ ProjectGUID="{8E719071-B525-4F58-832A-AB75FCA8BEA0}"
+ RootNamespace="boost_range"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_range"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\boost_range"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\boost_range.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/geometries/boost_tuple.cpp b/libs/geometry/test/geometries/boost_tuple.cpp
new file mode 100644
index 000000000..b6db1f02b
--- /dev/null
+++ b/libs/geometry/test/geometries/boost_tuple.cpp
@@ -0,0 +1,39 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <iostream>
+
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P>
+void test_all()
+{
+ P p1, p2;
+ bg::distance(p1, p2);
+}
+
+int test_main(int, char* [])
+{
+ test_all<boost::tuple<float> >();
+ test_all<boost::tuple<int, int> >();
+ test_all<boost::tuple<double, double, double> >();
+ test_all<boost::tuple<float, float, float, float> >();
+ test_all<boost::tuple<float, float, float, float, float> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/geometries/box.cpp b/libs/geometry/test/geometries/box.cpp
new file mode 100644
index 000000000..5e1fdaae5
--- /dev/null
+++ b/libs/geometry/test/geometries/box.cpp
@@ -0,0 +1,105 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/make.hpp>
+
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P>
+bg::model::box<P> create_box()
+{
+ P p1;
+ P p2;
+ bg::assign_values(p1, 1, 2, 5);
+ bg::assign_values(p2, 3, 4, 6);
+ return bg::model::box<P>(p1, p2);
+}
+
+template <typename B, typename T>
+void check_box(B& to_check,
+ T min_x, T min_y, T min_z,
+ T max_x, T max_y, T max_z)
+{
+ BOOST_CHECK_EQUAL(bg::get<0>(to_check.min_corner()), min_x);
+ BOOST_CHECK_EQUAL(bg::get<1>(to_check.min_corner()), min_y);
+ BOOST_CHECK_EQUAL(bg::get<2>(to_check.min_corner()), min_z);
+ BOOST_CHECK_EQUAL(bg::get<0>(to_check.max_corner()), max_x);
+ BOOST_CHECK_EQUAL(bg::get<1>(to_check.max_corner()), max_y);
+ BOOST_CHECK_EQUAL(bg::get<2>(to_check.max_corner()), max_z);
+}
+
+template <typename P>
+void test_construction()
+{
+ typedef typename bg::coordinate_type<P>::type T;
+
+ bg::model::box<P> b1 = bg::make_zero<bg::model::box<P> >();
+ check_box(b1, T(),T(),T(),T(),T(),T());
+
+ bg::model::box<P> b2(create_box<P>());
+ check_box(b2, 1,2,5,3,4,6);
+
+ bg::model::box<P> b3 = bg::make_inverse<bg::model::box<P> >();
+ check_box(b3, boost::numeric::bounds<T>::highest(),
+ boost::numeric::bounds<T>::highest(),
+ boost::numeric::bounds<T>::highest(),
+ boost::numeric::bounds<T>::lowest(),
+ boost::numeric::bounds<T>::lowest(),
+ boost::numeric::bounds<T>::lowest());
+}
+
+template <typename P>
+void test_assignment()
+{
+ bg::model::box<P> b(create_box<P>());
+ bg::set<0>(b.min_corner(), 10);
+ bg::set<1>(b.min_corner(), 20);
+ bg::set<2>(b.min_corner(), 30);
+ bg::set<0>(b.max_corner(), 40);
+ bg::set<1>(b.max_corner(), 50);
+ bg::set<2>(b.max_corner(), 60);
+ check_box(b, 10,20,30,40,50,60);
+}
+
+template <typename P>
+void test_all()
+{
+ test_construction<P>();
+ test_assignment<P>();
+}
+
+int test_main(int, char* [])
+{
+ test_all<int[3]>();
+ test_all<float[3]>();
+ test_all<double[3]>();
+ test_all<test::test_point>();
+ test_all<bg::model::point<int, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/geometries/box.vcproj b/libs/geometry/test/geometries/box.vcproj
new file mode 100644
index 000000000..08bf87585
--- /dev/null
+++ b/libs/geometry/test/geometries/box.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="box"
+ ProjectGUID="{EB7B69C6-2D62-43BC-BA18-D15BEB998665}"
+ RootNamespace="box"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\box"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\box"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\box.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/geometries/concepts/check.cpp b/libs/geometry/test/geometries/concepts/check.cpp
new file mode 100644
index 000000000..c4996a7a5
--- /dev/null
+++ b/libs/geometry/test/geometries/concepts/check.cpp
@@ -0,0 +1,76 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+struct ro_point
+{
+ float x, y;
+};
+
+
+struct rw_point
+{
+ float x, y;
+};
+
+
+namespace boost { namespace geometry { namespace traits {
+
+template <> struct tag<ro_point> { typedef point_tag type; };
+template <> struct coordinate_type<ro_point> { typedef float type; };
+template <> struct coordinate_system<ro_point> { typedef bg::cs::cartesian type; };
+template <> struct dimension<ro_point> { enum { value = 2 }; };
+
+template <> struct access<ro_point, 0>
+{
+ static float get(ro_point const& p) { return p.x; }
+};
+
+template <> struct access<ro_point, 1>
+{
+ static float get(ro_point const& p) { return p.y; }
+};
+
+
+
+
+template <> struct tag<rw_point> { typedef point_tag type; };
+template <> struct coordinate_type<rw_point> { typedef float type; };
+template <> struct coordinate_system<rw_point> { typedef bg::cs::cartesian type; };
+template <> struct dimension<rw_point> { enum { value = 2 }; };
+
+template <> struct access<rw_point, 0>
+{
+ static float get(rw_point const& p) { return p.x; }
+ static void set(rw_point& p, float value) { p.x = value; }
+};
+
+template <> struct access<rw_point, 1>
+{
+ static float get(rw_point const& p) { return p.y; }
+ static void set(rw_point& p, float value) { p.y = value; }
+};
+
+
+}}} // namespace bg::traits
+
+
+int main()
+{
+ bg::concept::check<const ro_point>();
+ bg::concept::check<rw_point>();
+}
diff --git a/libs/geometry/test/geometries/concepts/check.sln b/libs/geometry/test/geometries/concepts/check.sln
new file mode 100644
index 000000000..98293a669
--- /dev/null
+++ b/libs/geometry/test/geometries/concepts/check.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "check", "check.vcproj", "{6260214E-DB6F-4934-ADF7-DD2B1666171B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {6260214E-DB6F-4934-ADF7-DD2B1666171B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6260214E-DB6F-4934-ADF7-DD2B1666171B}.Debug|Win32.Build.0 = Debug|Win32
+ {6260214E-DB6F-4934-ADF7-DD2B1666171B}.Release|Win32.ActiveCfg = Release|Win32
+ {6260214E-DB6F-4934-ADF7-DD2B1666171B}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/geometries/concepts/check.vcproj b/libs/geometry/test/geometries/concepts/check.vcproj
new file mode 100644
index 000000000..480b4145b
--- /dev/null
+++ b/libs/geometry/test/geometries/concepts/check.vcproj
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="check"
+ ProjectGUID="{6260214E-DB6F-4934-ADF7-DD2B1666171B}"
+ RootNamespace="check"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\check"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../../../../boost;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\check"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../../../../boost;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\check.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/geometries/custom_linestring.cpp b/libs/geometry/test/geometries/custom_linestring.cpp
new file mode 100644
index 000000000..ef2bad43a
--- /dev/null
+++ b/libs/geometry/test/geometries/custom_linestring.cpp
@@ -0,0 +1,128 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <deque>
+#include <vector>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/append.hpp>
+#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/register/linestring.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
+BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::deque)
+
+//#define TEST_FAIL_CLEAR
+//#define TEST_FAIL_APPEND
+
+
+
+// ----------------------------------------------------------------------------
+// First custom linestring, requires ONLY one traits: to register itself as a linestring
+template <typename P>
+struct custom_linestring1 : std::vector<P> {};
+
+namespace boost { namespace geometry { namespace traits {
+ template <typename P>
+ struct tag< custom_linestring1<P> > { typedef linestring_tag type; };
+}}} // namespace bg::traits
+
+// ----------------------------------------------------------------------------
+// Second custom linestring, decides to implement all edit operations itself
+// by specializing the "use_std" traits to false.
+// It should therefore implement the traits:: clear / append_point
+template <typename P>
+struct custom_linestring2 : std::deque<P> // std::pair<typename std::vector<P>::const_iterator, typename std::vector<P>::const_iterator>
+{
+};
+
+namespace boost { namespace geometry { namespace traits {
+ template <typename P>
+ struct tag< custom_linestring2<P> > { typedef linestring_tag type; };
+
+#if ! defined(TEST_FAIL_CLEAR)
+ template <typename P>
+ struct clear< custom_linestring2<P> >
+ {
+ // does not use std::vector<P>.clear() but something else.
+ static inline void apply(custom_linestring2<P>& ls) { ls.resize(0); }
+ };
+#endif
+
+}}} // namespace bg::traits
+
+// ----------------------------------------------------------------------------
+
+template <typename G>
+void test_linestring()
+{
+ BOOST_CONCEPT_ASSERT( (bg::concept::Linestring<G>) );
+ BOOST_CONCEPT_ASSERT( (bg::concept::ConstLinestring<G>) );
+
+ G geometry;
+ typedef typename bg::point_type<G>::type P;
+
+ bg::clear(geometry);
+ BOOST_CHECK_EQUAL(boost::size(geometry), 0u);
+
+ bg::append(geometry, bg::make_zero<P>());
+ BOOST_CHECK_EQUAL(boost::size(geometry), 1u);
+
+ //std::cout << geometry << std::endl;
+
+ bg::clear(geometry);
+ BOOST_CHECK_EQUAL(boost::size(geometry), 0u);
+
+
+ //P p = boost::range::front(geometry);
+}
+
+template <typename P>
+void test_all()
+{
+ test_linestring<bg::model::linestring<P> >();
+ test_linestring<bg::model::linestring<P, std::vector> >();
+ test_linestring<bg::model::linestring<P, std::deque> >();
+
+ test_linestring<custom_linestring1<P> >();
+ test_linestring<custom_linestring2<P> >();
+
+ test_linestring<std::vector<P> >();
+ test_linestring<std::deque<P> >();
+ //test_linestring<std::list<P> >();
+}
+
+int test_main(int, char* [])
+{
+ test_all<test::test_point>();
+ test_all<boost::tuple<float, float> >();
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/geometries/custom_linestring.vcproj b/libs/geometry/test/geometries/custom_linestring.vcproj
new file mode 100644
index 000000000..8dfe0c7eb
--- /dev/null
+++ b/libs/geometry/test/geometries/custom_linestring.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="custom_linestring"
+ ProjectGUID="{CA8D5E44-7D8F-44A1-900C-35C28890299B}"
+ RootNamespace="custom_linestring"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\custom_linestring"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\custom_linestring"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\custom_linestring.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/geometries/geometries_tests.sln b/libs/geometry/test/geometries/geometries_tests.sln
new file mode 100644
index 000000000..56097d012
--- /dev/null
+++ b/libs/geometry/test/geometries/geometries_tests.sln
@@ -0,0 +1,61 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "box", "box.vcproj", "{EB7B69C6-2D62-43BC-BA18-D15BEB998665}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "custom_linestring", "custom_linestring.vcproj", "{CA8D5E44-7D8F-44A1-900C-35C28890299B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "segment", "segment.vcproj", "{F995B070-62A2-46FE-A676-79AADB71DBD8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost_array_as_point", "boost_array_as_point.vcproj", "{77F84000-D088-46AD-A023-08552101B1C5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost_polygon", "boost_polygon.vcproj", "{6809180F-1E31-42B0-8481-67AC8E9B180B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost_range", "boost_range.vcproj", "{8E719071-B525-4F58-832A-AB75FCA8BEA0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost_fusion", "boost_fusion.vcproj", "{C218C979-890F-4690-84E0-837DC661CE57}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost_polygon_overlay", "boost_polygon_overlay.vcproj", "{93C4EB19-8A0C-437E-9F82-A0DB4A4A5C32}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EB7B69C6-2D62-43BC-BA18-D15BEB998665}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EB7B69C6-2D62-43BC-BA18-D15BEB998665}.Debug|Win32.Build.0 = Debug|Win32
+ {EB7B69C6-2D62-43BC-BA18-D15BEB998665}.Release|Win32.ActiveCfg = Release|Win32
+ {EB7B69C6-2D62-43BC-BA18-D15BEB998665}.Release|Win32.Build.0 = Release|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Debug|Win32.Build.0 = Debug|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Release|Win32.ActiveCfg = Release|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Release|Win32.Build.0 = Release|Win32
+ {F995B070-62A2-46FE-A676-79AADB71DBD8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F995B070-62A2-46FE-A676-79AADB71DBD8}.Debug|Win32.Build.0 = Debug|Win32
+ {F995B070-62A2-46FE-A676-79AADB71DBD8}.Release|Win32.ActiveCfg = Release|Win32
+ {F995B070-62A2-46FE-A676-79AADB71DBD8}.Release|Win32.Build.0 = Release|Win32
+ {77F84000-D088-46AD-A023-08552101B1C5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {77F84000-D088-46AD-A023-08552101B1C5}.Debug|Win32.Build.0 = Debug|Win32
+ {77F84000-D088-46AD-A023-08552101B1C5}.Release|Win32.ActiveCfg = Release|Win32
+ {77F84000-D088-46AD-A023-08552101B1C5}.Release|Win32.Build.0 = Release|Win32
+ {6809180F-1E31-42B0-8481-67AC8E9B180B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6809180F-1E31-42B0-8481-67AC8E9B180B}.Debug|Win32.Build.0 = Debug|Win32
+ {6809180F-1E31-42B0-8481-67AC8E9B180B}.Release|Win32.ActiveCfg = Release|Win32
+ {6809180F-1E31-42B0-8481-67AC8E9B180B}.Release|Win32.Build.0 = Release|Win32
+ {8E719071-B525-4F58-832A-AB75FCA8BEA0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8E719071-B525-4F58-832A-AB75FCA8BEA0}.Debug|Win32.Build.0 = Debug|Win32
+ {8E719071-B525-4F58-832A-AB75FCA8BEA0}.Release|Win32.ActiveCfg = Release|Win32
+ {8E719071-B525-4F58-832A-AB75FCA8BEA0}.Release|Win32.Build.0 = Release|Win32
+ {C218C979-890F-4690-84E0-837DC661CE57}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C218C979-890F-4690-84E0-837DC661CE57}.Debug|Win32.Build.0 = Debug|Win32
+ {C218C979-890F-4690-84E0-837DC661CE57}.Release|Win32.ActiveCfg = Release|Win32
+ {C218C979-890F-4690-84E0-837DC661CE57}.Release|Win32.Build.0 = Release|Win32
+ {93C4EB19-8A0C-437E-9F82-A0DB4A4A5C32}.Debug|Win32.ActiveCfg = Debug|Win32
+ {93C4EB19-8A0C-437E-9F82-A0DB4A4A5C32}.Debug|Win32.Build.0 = Debug|Win32
+ {93C4EB19-8A0C-437E-9F82-A0DB4A4A5C32}.Release|Win32.ActiveCfg = Release|Win32
+ {93C4EB19-8A0C-437E-9F82-A0DB4A4A5C32}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/geometries/segment.cpp b/libs/geometry/test/geometries/segment.cpp
new file mode 100644
index 000000000..49d68d9f6
--- /dev/null
+++ b/libs/geometry/test/geometries/segment.cpp
@@ -0,0 +1,101 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometries/concepts/segment_concept.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <boost/geometry/io/dsv/write.hpp>
+
+
+#include <test_common/test_point.hpp>
+#include <test_geometries/custom_segment.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::referring_segment<P> S;
+
+ P p1;
+ P p2;
+ S s(p1, p2);
+ BOOST_CHECK_EQUAL(&s.first, &p1);
+ BOOST_CHECK_EQUAL(&s.second, &p2);
+
+ // Compilation tests, all things should compile.
+ BOOST_CONCEPT_ASSERT( (bg::concept::ConstSegment<S>) );
+ BOOST_CONCEPT_ASSERT( (bg::concept::Segment<S>) );
+
+ typedef typename bg::coordinate_type<S>::type T;
+ typedef typename bg::point_type<S>::type SP;
+
+
+ //std::cout << sizeof(typename coordinate_type<S>::type) << std::endl;
+
+ typedef bg::model::referring_segment<P const> CS;
+ //BOOST_CONCEPT_ASSERT( (concept::ConstSegment<CS>) );
+
+ CS cs(p1, p2);
+
+ typedef typename bg::coordinate_type<CS>::type CT;
+ typedef typename bg::point_type<CS>::type CSP;
+}
+
+
+
+template <typename S>
+void test_custom()
+{
+ S seg;
+ bg::set<0,0>(seg, 1);
+ bg::set<0,1>(seg, 2);
+ bg::set<1,0>(seg, 3);
+ bg::set<1,1>(seg, 4);
+ std::ostringstream out;
+ out << bg::dsv(seg);
+ BOOST_CHECK_EQUAL(out.str(), "((1, 2), (3, 4))");
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<int[3]>();
+ test_all<float[3]>();
+ test_all<double[3]>();
+ //test_all<test_point>();
+ test_all<bg::model::point<int, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ test_custom<test::custom_segment>();
+ test_custom<test::custom_segment_of<bg::model::point<double, 2, bg::cs::cartesian> > >();
+ test_custom<test::custom_segment_of<test::custom_point_for_segment> >();
+ test_custom<test::custom_segment_4>();
+
+ return 0;
+}
+
diff --git a/libs/geometry/test/geometries/segment.vcproj b/libs/geometry/test/geometries/segment.vcproj
new file mode 100644
index 000000000..a25abee4e
--- /dev/null
+++ b/libs/geometry/test/geometries/segment.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="segment"
+ ProjectGUID="{F995B070-62A2-46FE-A676-79AADB71DBD8}"
+ RootNamespace="segment"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\segment"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\segment"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\segment.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/geometry_test_common.hpp b/libs/geometry/test/geometry_test_common.hpp
new file mode 100644
index 000000000..689408c77
--- /dev/null
+++ b/libs/geometry/test/geometry_test_common.hpp
@@ -0,0 +1,165 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#ifndef GEOMETRY_TEST_GEOMETRY_TEST_COMMON_HPP
+#define GEOMETRY_TEST_GEOMETRY_TEST_COMMON_HPP
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's so turn off warnings
+#pragma warning( disable : 4244 )
+// For (new since Boost 1.40) warning in Boost.Test on putenv/posix
+#pragma warning( disable : 4996 )
+
+//#pragma warning( disable : 4305 )
+#endif // defined(_MSC_VER)
+
+#include <boost/config.hpp>
+
+
+#if defined(BOOST_INTEL_CXX_VERSION)
+#define BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE
+#endif
+
+
+#include <boost/foreach.hpp>
+
+
+// Include some always-included-for-testing files
+#if ! defined(BOOST_GEOMETRY_NO_BOOST_TEST)
+
+// Until Boost fixes it, silence warning issued by clang:
+// warning: unused variable 'check_is_close' [-Wunused-variable]
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wunused-variable"
+#endif
+
+# include <boost/test/floating_point_comparison.hpp>
+# include <boost/test/included/test_exec_monitor.hpp>
+//# include <boost/test/included/prg_exec_monitor.hpp>
+# include <boost/test/impl/execution_monitor.ipp>
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
+
+#endif
+
+
+#if defined(HAVE_TTMATH)
+# include <boost/geometry/extensions/contrib/ttmath_stub.hpp>
+#endif
+
+#if defined(HAVE_CLN) || defined(HAVE_GMP)
+# include <boost/numeric_adaptor/numeric_adaptor.hpp>
+#endif
+
+
+#if defined(HAVE_GMP)
+# include <boost/numeric_adaptor/gmp_value_type.hpp>
+#endif
+#if defined(HAVE_CLN)
+# include <boost/numeric_adaptor/cln_value_type.hpp>
+#endif
+
+
+template <typename T>
+struct string_from_type {};
+
+template <> struct string_from_type<void>
+{ static std::string name() { return "v"; } };
+
+template <> struct string_from_type<float>
+{ static std::string name() { return "f"; } };
+
+template <> struct string_from_type<double>
+{ static std::string name() { return "d"; } };
+
+template <> struct string_from_type<long double>
+{ static std::string name() { return "e"; } };
+
+template <> struct string_from_type<int>
+{ static std::string name() { return "i"; } };
+
+#if defined(HAVE_TTMATH)
+ template <> struct string_from_type<ttmath_big>
+ { static std::string name() { return "t"; } };
+#endif
+
+#if defined(BOOST_RATIONAL_HPP)
+template <typename T> struct string_from_type<boost::rational<T> >
+{ static std::string name() { return "r"; } };
+#endif
+
+
+#if defined(HAVE_GMP)
+ template <> struct string_from_type<boost::numeric_adaptor::gmp_value_type>
+ { static std::string name() { return "g"; } };
+#endif
+
+#if defined(HAVE_CLN)
+ template <> struct string_from_type<boost::numeric_adaptor::cln_value_type>
+ { static std::string name() { return "c"; } };
+#endif
+
+
+template <typename CoordinateType, typename T1, typename T2>
+inline T1 if_typed_tt(T1 value_tt, T2 value)
+{
+#if defined(HAVE_TTMATH)
+ return boost::is_same<CoordinateType, ttmath_big>::type::value ? value_tt : value;
+#else
+ return value;
+#endif
+}
+
+template <typename CoordinateType, typename Specified, typename T>
+inline T if_typed(T value_typed, T value)
+{
+ return boost::is_same<CoordinateType, Specified>::value ? value_typed : value;
+}
+
+
+
+
+struct geographic_policy
+{
+ template <typename CoordinateType>
+ static inline CoordinateType apply(CoordinateType const& value)
+ {
+ return value;
+ }
+};
+
+struct mathematical_policy
+{
+ template <typename CoordinateType>
+ static inline CoordinateType apply(CoordinateType const& value)
+ {
+ return 90 - value;
+ }
+
+};
+
+
+
+
+// For all tests:
+// - do NOT use "using namespace boost::geometry" to make clear what is Boost.Geometry
+// - use bg:: as short alias
+#include <boost/geometry/core/tag.hpp>
+namespace bg = boost::geometry;
+
+
+#endif // GEOMETRY_TEST_GEOMETRY_TEST_COMMON_HPP
diff --git a/libs/geometry/test/io/Jamfile.v2 b/libs/geometry/test/io/Jamfile.v2
new file mode 100644
index 000000000..cf1cf59c9
--- /dev/null
+++ b/libs/geometry/test/io/Jamfile.v2
@@ -0,0 +1,11 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+build-project wkt ; \ No newline at end of file
diff --git a/libs/geometry/test/io/wkt/Jamfile.v2 b/libs/geometry/test/io/wkt/Jamfile.v2
new file mode 100644
index 000000000..c93e26a8e
--- /dev/null
+++ b/libs/geometry/test/io/wkt/Jamfile.v2
@@ -0,0 +1,15 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-io-wkt
+ :
+ [ run wkt.cpp ]
+ ;
+
diff --git a/libs/geometry/test/io/wkt/io_wkt_tests.sln b/libs/geometry/test/io/wkt/io_wkt_tests.sln
new file mode 100644
index 000000000..626c327bc
--- /dev/null
+++ b/libs/geometry/test/io/wkt/io_wkt_tests.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wkt", "wkt.vcproj", "{1FA2ADE2-F649-4245-951E-A8F5935E7127}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1FA2ADE2-F649-4245-951E-A8F5935E7127}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1FA2ADE2-F649-4245-951E-A8F5935E7127}.Debug|Win32.Build.0 = Debug|Win32
+ {1FA2ADE2-F649-4245-951E-A8F5935E7127}.Release|Win32.ActiveCfg = Release|Win32
+ {1FA2ADE2-F649-4245-951E-A8F5935E7127}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/io/wkt/wkt.cpp b/libs/geometry/test/io/wkt/wkt.cpp
new file mode 100644
index 000000000..72badd383
--- /dev/null
+++ b/libs/geometry/test/io/wkt/wkt.cpp
@@ -0,0 +1,248 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <sstream>
+#include <string>
+
+#include <boost/algorithm/string.hpp>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/algorithms/area.hpp>
+#include <boost/geometry/algorithms/length.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/algorithms/perimeter.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/core/point_type.hpp>
+#include <boost/geometry/core/topological_dimension.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/wkt/write.hpp>
+#include <boost/variant/variant.hpp>
+
+template <typename G>
+void check_wkt(G const& geometry, std::string const& expected)
+{
+ std::ostringstream out;
+ out << bg::wkt(geometry);
+ BOOST_CHECK_EQUAL(boost::to_upper_copy(out.str()),
+ boost::to_upper_copy(expected));
+}
+
+template <typename G>
+void test_wkt(std::string const& wkt, std::size_t n, double len = 0,
+ double ar = 0, double peri = 0)
+{
+ G geometry;
+
+ bg::read_wkt(wkt, geometry);
+
+ /*
+ std::cout << "n=" << bg::num_points(geometry)
+ << " dim=" << bg::topological_dimension<G>::value
+ << " length=" << bg::length(geometry)
+ << " area=" << bg::area(geometry)
+ << " perimeter=" << bg::perimeter(geometry)
+ << std::endl << "\t\tgeometry=" << dsv(geometry)
+ << std::endl;
+ */
+
+ BOOST_CHECK_EQUAL(bg::num_points(geometry), n);
+ if (n > 0)
+ {
+ BOOST_CHECK_CLOSE(double(bg::length(geometry)), len, 0.0001);
+ BOOST_CHECK_CLOSE(double(bg::area(geometry)), ar, 0.0001);
+ BOOST_CHECK_CLOSE(double(bg::perimeter(geometry)), peri, 0.0001);
+ }
+
+ check_wkt(geometry, wkt);
+ check_wkt(boost::variant<G>(geometry), wkt);
+}
+
+template <typename G>
+void test_relaxed_wkt(std::string const& wkt, std::string const& expected)
+{
+ std::string e;
+ G geometry;
+ bg::read_wkt(wkt, geometry);
+ std::ostringstream out;
+ out << bg::wkt(geometry);
+
+ BOOST_CHECK_EQUAL(boost::to_upper_copy(out.str()), boost::to_upper_copy(expected));
+}
+
+
+
+
+template <typename G>
+void test_wrong_wkt(std::string const& wkt, std::string const& start)
+{
+ std::string e("no exception");
+ G geometry;
+ try
+ {
+ bg::read_wkt(wkt, geometry);
+ }
+ catch(bg::read_wkt_exception const& ex)
+ {
+ e = ex.what();
+ boost::to_lower(e);
+ }
+ catch(...)
+ {
+ e = "other exception";
+ }
+
+ bool check = true;
+
+#if defined(HAVE_TTMATH)
+ // For ttmath we skip bad lexical casts
+ typedef typename bg::coordinate_type<G>::type ct;
+
+ if (boost::is_same<ct, ttmath_big>::type::value
+ && boost::starts_with(start, "bad lexical cast"))
+ {
+ check = false;
+ }
+#endif
+
+ if (check)
+ {
+ BOOST_CHECK_MESSAGE(boost::starts_with(e, start), " Expected:"
+ << start << " Got:" << e << " with WKT: " << wkt);
+ }
+}
+
+template <typename G>
+void test_wkt_output_iterator(std::string const& wkt)
+{
+ G geometry;
+ bg::read_wkt<G>(wkt, std::back_inserter(geometry));
+}
+
+
+
+#ifndef GEOMETRY_TEST_MULTI
+template <typename T>
+void test_all()
+{
+ using namespace boost::geometry;
+ typedef bg::model::point<T, 2, bg::cs::cartesian> P;
+
+ test_wkt<P>("POINT(1 2)", 1);
+ test_wkt<bg::model::linestring<P> >("LINESTRING(1 1,2 2,3 3)", 3, 2 * sqrt(2.0));
+ test_wkt<bg::model::polygon<P> >("POLYGON((0 0,0 4,4 4,4 0,0 0)"
+ ",(1 1,1 2,2 2,2 1,1 1),(1 1,1 2,2 2,2 1,1 1))", 15, 0, 18, 24);
+
+ // Non OGC: a box defined by a polygon
+ //test_wkt<box<P> >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 4, 0, 1, 4);
+ test_wkt<bg::model::ring<P> >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 5, 0, 1, 4);
+
+ // We accept empty sequences as well (much better than EMPTY)...
+ // ...or even POINT() (see below)
+ test_wkt<bg::model::linestring<P> >("LINESTRING()", 0, 0);
+ test_wkt<bg::model::polygon<P> >("POLYGON(())", 0);
+ // ... or even with empty holes
+ test_wkt<bg::model::polygon<P> >("POLYGON((),(),())", 0);
+ // which all make no valid geometries, but they can exist.
+
+ // These WKT's are incomplete or abnormal but they are considered OK
+ test_relaxed_wkt<P>("POINT(1)", "POINT(1 0)");
+ test_relaxed_wkt<P>("POINT()", "POINT(0 0)");
+ test_relaxed_wkt<bg::model::linestring<P> >("LINESTRING(1,2,3)",
+ "LINESTRING(1 0,2 0,3 0)");
+ test_relaxed_wkt<P>("POINT ( 1 2) ", "POINT(1 2)");
+ test_relaxed_wkt<P>("POINT M ( 1 2)", "POINT(1 2)");
+ test_relaxed_wkt<bg::model::box<P> >("BOX(1 1,2 2)", "POLYGON((1 1,1 2,2 2,2 1,1 1))");
+
+ test_relaxed_wkt<bg::model::linestring<P> >("LINESTRING EMPTY", "LINESTRING()");
+
+ test_relaxed_wkt<bg::model::polygon<P> >("POLYGON( ( ) , ( ) , ( ) )",
+ "POLYGON((),(),())");
+
+ // Wrong WKT's
+ test_wrong_wkt<P>("POINT(1 2", "expected ')'");
+ test_wrong_wkt<P>("POINT 1 2)", "expected '('");
+ test_wrong_wkt<P>("POINT(1 2,)", "expected ')'");
+ test_wrong_wkt<P>("POINT(1 2)foo", "too much tokens at 'foo'");
+ test_wrong_wkt<P>("POINT(1 2 3)", "expected ')'");
+ test_wrong_wkt<P>("POINT(a 2 3)", "bad lexical cast");
+ test_wrong_wkt<P>("POINT 2 3", "expected '('");
+ test_wrong_wkt<P>("POINT Z (1 2 3)", "z only allowed");
+
+ test_wrong_wkt<P>("PIONT (1 2)", "should start with 'point'");
+
+ test_wrong_wkt<bg::model::linestring<P> >("LINESTRING())", "too much tokens");
+
+ test_wrong_wkt<bg::model::polygon<P> >("POLYGON((1 1,1 4,4 4,4 1,1 1)"
+ ",((2 2,2 3,3 3,3 2,2 2))", "bad lexical cast");
+
+ test_wrong_wkt<bg::model::box<P> >("BOX(1 1,2 2,3 3)", "box should have 2");
+ test_wrong_wkt<bg::model::box<P> >("BOX(1 1,2 2) )", "too much tokens");
+
+ if (boost::is_floating_point<T>::type::value
+ || ! boost::is_fundamental<T>::type::value)
+ {
+ test_wkt<P>("POINT(1.1 2.1)", 1);
+ }
+
+ // Deprecated:
+ // test_wkt_output_iterator<bg::model::linestring<P> >("LINESTRING(1 1,2 2,3 3)");
+ // test_wkt_output_iterator<bg::model::ring<P> >("POLYGON((1 1,2 2,3 3))");
+}
+#endif
+
+
+int test_main(int, char* [])
+{
+ test_all<double>();
+ test_all<int>();
+
+#if defined(HAVE_TTMATH)
+ test_all<ttmath_big>();
+#endif
+
+ return 0;
+}
+
+/*
+
+Results can be checked in PostGIS by query below,
+or by MySQL (but replace length by glength and remove the perimeter)
+
+Note:
+- PostGIS gives "3" for a numpoints of a multi-linestring of 6 points in total (!)
+ --> "npoints" should be taken for all geometries
+- SQL Server 2008 gives "6"
+ select geometry::STGeomFromText('MULTILINESTRING((1 1,2 2,3 3),(4 4,5 5,6 6))',0).STNumPoints()
+- MySQL gives "NULL"
+
+select 1 as code,'np p' as header,npoints(geomfromtext('POINT(1 2)')) as contents
+union select 2,'length point', length(geomfromtext('POINT(1 2)'))
+union select 3,'peri point', perimeter(geomfromtext('POINT(1 2)'))
+union select 4,'area point',area(geomfromtext('POINT(1 2)'))
+
+
+union select 5,'# ls',npoints(geomfromtext('LINESTRING(1 1,2 2,3 3)'))
+union select 6,'length ls',length(geomfromtext('LINESTRING(1 1,2 2,3 3)'))
+union select 7,'peri ls',perimeter(geomfromtext('LINESTRING(1 1,2 2,3 3)'))
+union select 8,'aera ls',area(geomfromtext('LINESTRING(1 1,2 2,3 3)'))
+
+union select 9,'# poly',npoints(geomfromtext('POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 2,2 2,2 1,1 1),(1 1,1 2,2 2,2 1,1 1))'))
+union select 10,'length poly',length(geomfromtext('POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 2,2 2,2 1,1 1),(1 1,1 2,2 2,2 1,1 1))'))
+union select 11,'peri poly',perimeter(geomfromtext('POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 2,2 2,2 1,1 1),(1 1,1 2,2 2,2 1,1 1))'))
+union select 12,'area poly',area(geomfromtext('POLYGON((0 0,0 4,4 4,4 0,0 0),(1 1,1 2,2 2,2 1,1 1),(1 1,1 2,2 2,2 1,1 1))'))
+
+*/
diff --git a/libs/geometry/test/io/wkt/wkt.vcproj b/libs/geometry/test/io/wkt/wkt.vcproj
new file mode 100644
index 000000000..988ee6af7
--- /dev/null
+++ b/libs/geometry/test/io/wkt/wkt.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="wkt"
+ ProjectGUID="{1FA2ADE2-F649-4245-951E-A8F5935E7127}"
+ RootNamespace="wkt"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\wkt"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\wkt"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\wkt.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/iterators/Jamfile.v2 b/libs/geometry/test/iterators/Jamfile.v2
new file mode 100644
index 000000000..72091f21f
--- /dev/null
+++ b/libs/geometry/test/iterators/Jamfile.v2
@@ -0,0 +1,15 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-iterators
+ :
+ [ run closing_iterator.cpp ]
+ [ run ever_circling_iterator.cpp ]
+ ;
diff --git a/libs/geometry/test/iterators/closing_iterator.cpp b/libs/geometry/test/iterators/closing_iterator.cpp
new file mode 100644
index 000000000..1638f639e
--- /dev/null
+++ b/libs/geometry/test/iterators/closing_iterator.cpp
@@ -0,0 +1,119 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <algorithm>
+#include <iterator>
+#include <sstream>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/iterators/closing_iterator.hpp>
+
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+
+// The closing iterator should also work on normal std:: containers
+void test_non_geometry()
+{
+ std::vector<int> v;
+ v.push_back(1);
+ v.push_back(2);
+ v.push_back(3);
+
+ typedef bg::closing_iterator
+ <
+ std::vector<int> const
+ > closing_iterator;
+
+
+ closing_iterator it(v);
+ closing_iterator end(v, true);
+
+ std::ostringstream out;
+ for (; it != end; ++it)
+ {
+ out << *it;
+ }
+ BOOST_CHECK_EQUAL(out.str(), "1231");
+}
+
+
+
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ typedef bg::closing_iterator<Geometry const> closing_iterator;
+
+
+ // 1. Test normal behaviour
+ {
+ closing_iterator it(geometry);
+ closing_iterator end(geometry, true);
+
+ std::ostringstream out;
+ for (; it != end; ++it)
+ {
+ out << " " << bg::get<0>(*it) << bg::get<1>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), " 11 14 44 41 11");
+
+ // Check compilations, it is (since Oct 2010) random access
+ it--;
+ --it;
+ it += 2;
+ it -= 2;
+ }
+
+ // 2: check copy behaviour
+ {
+ typedef typename boost::range_iterator<Geometry const>::type normal_iterator;
+ Geometry copy;
+
+ std::copy<closing_iterator>(
+ closing_iterator(geometry),
+ closing_iterator(geometry, true),
+ std::back_inserter(copy));
+
+ std::ostringstream out;
+ for (normal_iterator cit = boost::begin(copy); cit != boost::end(copy); ++cit)
+ {
+ out << " " << bg::get<0>(*cit) << bg::get<1>(*cit);
+ }
+ BOOST_CHECK_EQUAL(out.str(), " 11 14 44 41 11");
+ }
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_non_geometry();
+ test_geometry<bg::model::ring<P> >("POLYGON((1 1,1 4,4 4,4 1))");
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/iterators/closing_iterator.vcproj b/libs/geometry/test/iterators/closing_iterator.vcproj
new file mode 100644
index 000000000..e11dc14ef
--- /dev/null
+++ b/libs/geometry/test/iterators/closing_iterator.vcproj
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="closing_iterator"
+ ProjectGUID="{04C31A2D-BE88-4FDB-AFFE-EFDFFA9D9C39}"
+ RootNamespace="closing_iterator"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\closing_iterator"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="false"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\closing_iterator"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="false"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\closing_iterator.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/iterators/ever_circling_iterator.cpp b/libs/geometry/test/iterators/ever_circling_iterator.cpp
new file mode 100644
index 000000000..90142e13d
--- /dev/null
+++ b/libs/geometry/test/iterators/ever_circling_iterator.cpp
@@ -0,0 +1,97 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <sstream>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/iterators/ever_circling_iterator.hpp>
+
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+template <typename G>
+void test_geometry(std::string const& wkt)
+{
+ G geo;
+ bg::read_wkt(wkt, geo);
+ typedef typename boost::range_iterator<G const>::type iterator_type;
+
+
+ // Run 3 times through the geometry
+ int n = boost::size(geo) * 3;
+
+ {
+ std::ostringstream out;
+ bg::ever_circling_iterator<iterator_type> it(boost::begin(geo), boost::end(geo));
+ for (int i = 0; i < n; ++i, ++it)
+ {
+ out << bg::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "123451234512345");
+ }
+
+ {
+ std::ostringstream out;
+ // Start somewhere
+ bg::ever_circling_iterator<iterator_type> it(
+ boost::begin(geo), boost::end(geo), boost::begin(geo) + 1);
+ for (int i = 0; i < n; ++i, ++it)
+ {
+ out << bg::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "234512345123451");
+ }
+
+ {
+ std::ostringstream out;
+
+ // Navigate to somewhere
+ bg::ever_circling_iterator<iterator_type> it(boost::begin(geo), boost::end(geo));
+ for (int i = 0; i < n; ++i, ++it)
+ {
+ const int m = boost::size(geo);
+ it.moveto(boost::begin(geo) + m - (i % m) - 1);
+ out << bg::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "543215432154321");
+ }
+
+ // Check the range_iterator-one
+ {
+ std::ostringstream out;
+ bg::ever_circling_range_iterator<G> it(geo);
+ for (int i = 0; i < n; ++i, ++it)
+ {
+ out << bg::get<0>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), "123451234512345");
+ }
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::linestring<P> >("linestring(1 1,2 2,3 3,4 4,5 5)");
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/iterators/ever_circling_iterator.vcproj b/libs/geometry/test/iterators/ever_circling_iterator.vcproj
new file mode 100644
index 000000000..ebeddee29
--- /dev/null
+++ b/libs/geometry/test/iterators/ever_circling_iterator.vcproj
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="ever_circling_iterator"
+ ProjectGUID="{73F8C969-FA1E-4D9D-81F9-35B1206F0C14}"
+ RootNamespace="ever_circling_iterator"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ever_circling_iterator"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="false"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\ever_circling_iterator"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="false"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\ever_circling_iterator.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/iterators/iterators.sln b/libs/geometry/test/iterators/iterators.sln
new file mode 100644
index 000000000..8b1e55c7e
--- /dev/null
+++ b/libs/geometry/test/iterators/iterators.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ever_circling_iterator", "ever_circling_iterator.vcproj", "{73F8C969-FA1E-4D9D-81F9-35B1206F0C14}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "closing_iterator", "closing_iterator.vcproj", "{04C31A2D-BE88-4FDB-AFFE-EFDFFA9D9C39}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {73F8C969-FA1E-4D9D-81F9-35B1206F0C14}.Debug|Win32.ActiveCfg = Debug|Win32
+ {73F8C969-FA1E-4D9D-81F9-35B1206F0C14}.Debug|Win32.Build.0 = Debug|Win32
+ {73F8C969-FA1E-4D9D-81F9-35B1206F0C14}.Release|Win32.ActiveCfg = Release|Win32
+ {73F8C969-FA1E-4D9D-81F9-35B1206F0C14}.Release|Win32.Build.0 = Release|Win32
+ {04C31A2D-BE88-4FDB-AFFE-EFDFFA9D9C39}.Debug|Win32.ActiveCfg = Debug|Win32
+ {04C31A2D-BE88-4FDB-AFFE-EFDFFA9D9C39}.Debug|Win32.Build.0 = Debug|Win32
+ {04C31A2D-BE88-4FDB-AFFE-EFDFFA9D9C39}.Release|Win32.ActiveCfg = Release|Win32
+ {04C31A2D-BE88-4FDB-AFFE-EFDFFA9D9C39}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/multi/Jamfile.v2 b/libs/geometry/test/multi/Jamfile.v2
new file mode 100644
index 000000000..b38d8c5ad
--- /dev/null
+++ b/libs/geometry/test/multi/Jamfile.v2
@@ -0,0 +1,12 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+build-project algorithms ;
+build-project io ; \ No newline at end of file
diff --git a/libs/geometry/test/multi/algorithms/Jamfile.v2 b/libs/geometry/test/multi/algorithms/Jamfile.v2
new file mode 100644
index 000000000..624193c21
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/Jamfile.v2
@@ -0,0 +1,42 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-multi-algorithms
+ :
+ [ run multi_area.cpp ]
+ [ run multi_centroid.cpp ]
+ [ run multi_convert.cpp ]
+ [ run multi_convex_hull.cpp ]
+ [ run multi_correct.cpp ]
+ [ run multi_covered_by.cpp ]
+ [ run multi_difference.cpp ]
+ [ run multi_disjoint.cpp ]
+ [ run multi_distance.cpp ]
+ [ run multi_envelope.cpp ]
+ [ run multi_equals.cpp ]
+ [ run multi_for_each.cpp ]
+ [ run multi_intersection.cpp ]
+ [ run multi_intersects.cpp ]
+ [ run multi_length.cpp ]
+ [ run multi_num_geometries.cpp ]
+ [ run multi_num_interior_rings.cpp ]
+ [ run multi_num_points.cpp ]
+ [ run multi_perimeter.cpp ]
+ [ run multi_reverse.cpp ]
+ [ run multi_simplify.cpp ]
+ [ run multi_touches.cpp ]
+ [ run multi_transform.cpp ]
+ [ run multi_union.cpp ]
+ [ run multi_unique.cpp ]
+ [ run multi_within.cpp ]
+ ;
+
+build-project overlay
+ ;
diff --git a/libs/geometry/test/multi/algorithms/multi_area.cpp b/libs/geometry/test/multi/algorithms/multi_area.cpp
new file mode 100644
index 000000000..3dbc658e1
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_area.cpp
@@ -0,0 +1,39 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+
+#include <algorithms/test_area.hpp>
+
+#include <boost/geometry/multi/multi.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > mp;
+ test_geometry<mp>("MULTIPOLYGON(((0 0,0 7,4 2,2 0,0 0)))", 16.0);
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_area.vcproj b/libs/geometry/test/multi/algorithms/multi_area.vcproj
new file mode 100644
index 000000000..7adb7a058
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_area.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_area"
+ ProjectGUID="{691082ED-2778-4300-9860-42DFBBABE535}"
+ RootNamespace="multi_area"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_area"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_area"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_area.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_centroid.cpp b/libs/geometry/test/multi/algorithms/multi_centroid.cpp
new file mode 100644
index 000000000..25c66c085
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_centroid.cpp
@@ -0,0 +1,122 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <algorithms/test_centroid.hpp>
+
+#include <boost/geometry/multi/core/point_order.hpp>
+#include <boost/geometry/multi/algorithms/centroid.hpp>
+#include <boost/geometry/multi/strategies/cartesian/centroid_average.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+
+// #define REPORT_RESULTS
+
+
+template <typename P>
+void test_2d(bool is_integer = false)
+{
+ typedef typename bg::coordinate_type<P>::type ct;
+#ifdef REPORT_RESULTS
+ std::cout << std::endl << "type: " << typeid(ct).name() << " size: " << sizeof(ct) << std::endl;
+#endif
+
+ if (! is_integer)
+ {
+ // Only working for floating point:
+
+ test_centroid<bg::model::multi_point<P> >(
+ "MULTIPOINT((1 1),(2 3),(5 0))",
+ 2.666666666666667, 1.33333);
+
+ test_centroid<bg::model::multi_linestring<bg::model::linestring<P> > >(
+ "MULTILINESTRING((0 0,0 2),(1 0,1 2))",
+ 0.5, 1.0);
+
+
+ test_centroid<bg::model::multi_polygon<bg::model::polygon<P> > >(
+ "MULTIPOLYGON(((1 1,1 3,3 3,3 1,1 1)),((4 1,4 3,8 3,8 1,4 1)))",
+ 4.666666666666667, 2.0);
+
+ test_centroid<bg::model::multi_polygon<bg::model::polygon<P> > >(
+ "MULTIPOLYGON(((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2"
+ ",3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)),"
+ "((10 10,10 12,12 12,12 10,10 10)))",
+ 7.338463104108615, 6.0606722055552407);
+ }
+
+
+
+ // Test using real-world polygon with large (Y) coordinates
+ // (coordinates can be used for integer and floating point point-types)
+ // Note that this will fail (overflow) if centroid calculation uses float
+ test_centroid<bg::model::multi_polygon<bg::model::polygon<P> > >(
+ "MULTIPOLYGON(((426062 4527794,426123 4527731"
+ ",426113 4527700,426113 4527693,426115 4527671"
+ ",426133 4527584,426135 4527569,426124 4527558"
+ ",426103 4527547,426072 4527538,426003 4527535"
+ ",425972 4527532,425950 4527531,425918 4527528"
+ ",425894 4527517,425876 4527504,425870 4527484"
+ ",425858 4527442,425842 4527414,425816 4527397"
+ ",425752 4527384,425692 4527369,425658 4527349"
+ ",425624 4527307,425605 4527260,425598 4527213"
+ ",425595 4527167,425582 4527125,425548 4527064"
+ ",425535 4527027,425537 4526990,425534 4526943"
+ ",425525 4526904,425500 4526856,425461 4526811"
+ ",425450 4526798,425381 4526823,425362 4526830"
+ ",425329 4526848,425298 4526883,425291 4526897"
+ ",425268 4526923,425243 4526945,425209 4526971"
+ ",425172 4526990,425118 4527028,425104 4527044"
+ ",425042 4527090,424980 4527126,424925 4527147"
+ ",424881 4527148,424821 4527147,424698 4527125"
+ ",424610 4527121,424566 4527126,424468 4527139"
+ ",424426 4527141,424410 4527142,424333 4527130"
+ ",424261 4527110,424179 4527073,424024 4527012"
+ ",423947 4526987,423902 4526973,423858 4526961"
+ ",423842 4526951,423816 4526935,423799 4526910"
+ ",423776 4526905,423765 4526911,423739 4526927"
+ ",423692 4526946,423636 4526976,423608 4527008"
+ ",423570 4527016,423537 4527011,423505 4526996"
+ ",423480 4526994,423457 4527012,423434 4527021"
+ ",423367 4527008,423263 4526998,423210 4526993"
+ ",423157 4526996,423110 4526994,423071 4526984"
+ ",423048 4526984,423032 4526994,423254 4527613"
+ ",423889 4528156,424585 4528050,425479 4527974"
+ ",425795 4527867,426062 4527794)))",
+ 424530.6059719588, 4527519.619367547);
+}
+
+
+
+int test_main(int, char* [])
+{
+ test_2d<bg::model::d2::point_xy<float> >();
+ test_2d<bg::model::d2::point_xy<double> >();
+ test_2d<bg::model::d2::point_xy<long int> >(true);
+ //test_2d<bg::model::d2::point_xy<long long> >(true);
+ //test_2d<bg::model::d2::point_xy<long double> >();
+
+#ifdef HAVE_TTMATH
+ test_2d<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_centroid.vcproj b/libs/geometry/test/multi/algorithms/multi_centroid.vcproj
new file mode 100644
index 000000000..b713a4452
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_centroid.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_centroid"
+ ProjectGUID="{7EE302E1-7FCF-4E9E-8DB3-36EA4D88B6CA}"
+ RootNamespace="multi_centroid"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_centroid"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_centroid"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_centroid.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_clear.cpp b/libs/geometry/test/multi/algorithms/multi_clear.cpp
new file mode 100644
index 000000000..39d777930
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_clear.cpp
@@ -0,0 +1,69 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/clear.hpp>
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/multi/algorithms/clear.hpp>
+#include <boost/geometry/multi/algorithms/num_points.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/variant/variant.hpp>
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, unsigned int expected)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ boost::variant<Geometry> variant_geometry(geometry);
+
+ bg::clear(geometry);
+ BOOST_CHECK_EQUAL(bg::num_points(geometry), expected);
+
+ bg::clear(variant_geometry);
+ BOOST_CHECK_EQUAL(bg::num_points(variant_geometry), expected);
+}
+
+
+template <typename Point>
+void test_all()
+{
+ typedef bg::model::polygon<Point> poly;
+ typedef bg::model::linestring<Point> ls;
+ typedef bg::model::multi_point<Point> mpoint;
+ typedef bg::model::multi_linestring<ls> mls;
+ typedef bg::model::multi_polygon<poly> mpoly;
+
+ test_geometry<Point>("POINT(0 0)", 1);
+ test_geometry<ls>("LINESTRING(0 0,0 1)", 0);
+ test_geometry<poly>("POLYGON((0 0,0 1,1 0,0 0))", 0);
+ test_geometry<mpoint>("MULTIPOINT((0 0),(0 1),(1 0),(0 0))", 0);
+ test_geometry<mls>("MULTILINESTRING((0 0,0 1),(1 0,0 0))", 0);
+ test_geometry<mpoly>("MULTIPOLYGON(((0 0,0 1,1 0,0 0)),((10 0,10 1,11 0,10 0)))", 0);
+}
+
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_convert.cpp b/libs/geometry/test/multi/algorithms/multi_convert.cpp
new file mode 100644
index 000000000..840fa2e26
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_convert.cpp
@@ -0,0 +1,102 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <algorithms/test_convert.hpp>
+
+#include <boost/geometry/multi/algorithms/convert.hpp>
+
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+
+template <typename Point1, typename Point2>
+void test_mixed_point_types()
+{
+ test_mixed_identical_result
+ <
+ bg::model::multi_point<Point1>,
+ bg::model::multi_point<Point2>
+ >
+ ("MULTIPOINT((1 1),(2 2),(3 3))");
+
+ test_mixed_identical_result
+ <
+ bg::model::multi_linestring<bg::model::linestring<Point1> >,
+ bg::model::multi_linestring<bg::model::linestring<Point2> >
+ >
+ ("MULTILINESTRING((1 1,2 2),(3 3,4 4))");
+
+ // Single -> multi (always possible)
+ test_mixed
+ <
+ Point1, bg::model::multi_point<Point2>
+ >
+ (
+ "POINT(1 1)",
+ "MULTIPOINT((1 1))"
+ );
+ test_mixed
+ <
+ bg::model::linestring<Point1>,
+ bg::model::multi_linestring<bg::model::linestring<Point2> >
+ >
+ (
+ "LINESTRING(1 1,2 2)",
+ "MULTILINESTRING((1 1,2 2))"
+ );
+ test_mixed
+ <
+ bg::model::segment<Point1>,
+ bg::model::multi_linestring<bg::model::linestring<Point2> >
+ >
+ (
+ "LINESTRING(1 1,2 2)",
+ "MULTILINESTRING((1 1,2 2))"
+ );
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::multi_polygon<bg::model::polygon<Point2> >
+ >
+ (
+ "BOX(0 0,1 1)",
+ "MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)))"
+ );
+ test_mixed
+ <
+ bg::model::ring<Point1, true>,
+ bg::model::multi_polygon<bg::model::polygon<Point2, false> >
+ >
+ (
+ "POLYGON((0 0,0 1,1 1,1 0,0 0))",
+ "MULTIPOLYGON(((0 0,1 0,1 1,0 1,0 0)))"
+ );
+
+ // Multi -> single: should not compile (because multi often have 0 or >1 elements)
+}
+
+template <typename Point1, typename Point2>
+void test_mixed_types()
+{
+ test_mixed_point_types<Point1, Point2>();
+ test_mixed_point_types<Point2, Point1>();
+}
+
+int test_main( int , char* [] )
+{
+ test_mixed_types
+ <
+ bg::model::point<int, 2, bg::cs::cartesian>,
+ bg::model::point<double, 2, bg::cs::cartesian>
+ >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_convert.vcproj b/libs/geometry/test/multi/algorithms/multi_convert.vcproj
new file mode 100644
index 000000000..4829412be
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_convert.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_convert"
+ ProjectGUID="{21B7EF55-23C3-4FD2-9F2F-FD8F0F3FE167}"
+ RootNamespace="multi_convert"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_convert"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_convert"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_convert.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_convex_hull.cpp b/libs/geometry/test/multi/algorithms/multi_convex_hull.cpp
new file mode 100644
index 000000000..0da8d0ecf
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_convex_hull.cpp
@@ -0,0 +1,92 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <cstddef>
+#include <iterator>
+#include <string>
+
+#include <algorithms/test_convex_hull.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+#include <boost/geometry/multi/core/point_order.hpp>
+#include <boost/geometry/multi/core/point_type.hpp>
+
+#include <boost/geometry/multi/views/detail/range_type.hpp>
+
+#include <boost/geometry/multi/algorithms/num_points.hpp>
+#include <boost/geometry/multi/algorithms/detail/for_each_range.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::multi_point<P> mp;
+ typedef bg::model::multi_linestring<bg::model::linestring<P> > ml;
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > mpoly;
+
+ // All points below in upper-points and lower-points
+ test_geometry<mp>("MULTIPOINT((0 0),(5 0),(1 1),(4 1))", -1, 5, 4.0);
+ test_geometry<mp>("MULTIPOINT((0 1),(5 1),(1 0),(4 0))", -1, 5, 4.0);
+
+ // All points in vertical line (this delivers an empty polygon with 2 points and a closing point)
+ test_geometry<mp>("MULTIPOINT((1 0),(5 0),(3 0),(4 0),(2 0))", -1, 3, 0.0);
+
+ // One point only
+ test_geometry<mp>("MULTIPOINT((1 0))", -1, 3, 0.0);
+
+ // Problem of 6019, reproduced by the convex hull robustness test:
+ test_geometry<mp>("MULTIPOINT((2 9),(1 3),(9 4),(1 1),(1 0),(7 9),(2 5),(3 7),(3 6),(2 4))",
+ -1, 6, 48.0);
+
+ // Ticket 6019:
+ test_geometry<mp>("MULTIPOINT((0 53),(0 103),(0 53),(0 3),(0 3),(0 0),(1 0),(1 1),(2 1),(2 0),(2 0),(2 0),(3 0),(3 1),(4 1),(4 0),(5 0),(0 3),(10 3),(10 2),(10 2),(10 2),(5 2),(5 0),(5 0),(55 0),(105 0))",
+ -1, 4, 5407.5);
+ // Ticket 6021:
+ test_geometry<mp>("multipoint((0 53), (0 103), (1 53))", 3, 4, 25);
+
+ test_geometry<mp>("multipoint((1.1 1.1), (2.5 2.1), (3.1 3.1), (4.9 1.1), (3.1 1.9))", 5, 4, 3.8);
+ test_geometry<ml>("multilinestring((2 4, 3 4, 3 5), (4 3,4 4,5 4))", 6, 5, 3.0);
+ test_geometry<mpoly>("multipolygon(((1 4,1 6,2 5,3 5,4 6,4 4,1 4)), ((4 2,4 3,6 3,6 2,4 2)))", 12, 7, 14.0);
+
+ test_empty_input<mp>();
+ test_empty_input<ml>();
+ test_empty_input<mpoly>();
+}
+
+
+int test_main(int, char* [])
+{
+ //test_all<bg::model::d2::point_xy<int> >();
+ //test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_convex_hull.vcproj b/libs/geometry/test/multi/algorithms/multi_convex_hull.vcproj
new file mode 100644
index 000000000..839e71c7c
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_convex_hull.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_convex_hull"
+ ProjectGUID="{B810C404-C4D9-4A6A-96B0-1DCED269D65D}"
+ RootNamespace="multi_convex_hull"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_convex_hull"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_convex_hull"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_convex_hull.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_correct.cpp b/libs/geometry/test/multi/algorithms/multi_correct.cpp
new file mode 100644
index 000000000..7359d3f76
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_correct.cpp
@@ -0,0 +1,63 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/correct.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/multi/algorithms/correct.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, std::string const& expected)
+{
+ Geometry geometry;
+
+ bg::read_wkt(wkt, geometry);
+ bg::correct(geometry);
+
+ std::ostringstream out;
+ out << bg::wkt(geometry);
+
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > cw_type;
+ std::string cw_mp =
+ "MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)))";
+ test_geometry<cw_type>(cw_mp, cw_mp);
+
+ test_geometry<cw_type>("MULTIPOLYGON(((0 0,1 0,1 1,0 1,0 0)))",
+ cw_mp);
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_correct.vcproj b/libs/geometry/test/multi/algorithms/multi_correct.vcproj
new file mode 100644
index 000000000..cc280ffd7
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_correct.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_correct"
+ ProjectGUID="{DFB00B88-2ED8-49CA-B739-7C8A8602D681}"
+ RootNamespace="multi_correct"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_correct"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_correct"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_correct.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_covered_by.cpp b/libs/geometry/test/multi/algorithms/multi_covered_by.cpp
new file mode 100644
index 000000000..df40109e5
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_covered_by.cpp
@@ -0,0 +1,59 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/covered_by.hpp>
+
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/multi/core/point_order.hpp>
+#include <boost/geometry/multi/algorithms/covered_by.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <algorithms/test_covered_by.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > mp;
+
+ // test multi-with-one-polygon (trivial case)
+ test_geometry<P, mp>("POINT(1 1)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", true);
+ test_geometry<P, mp>("POINT(3 3)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", false);
+ test_geometry<P, mp>("POINT(0 1)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", true);
+ test_geometry<P, mp>("POINT(4 4)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", false);
+
+ // test if it is in one of them
+ std::string multi("MULTIPOLYGON("
+ "((0 0,0 2,2 2,2 0,0 0))"
+ "((3 3,3 6,6 6,6 3,3 3))"
+ ")");
+ test_geometry<P, mp>("POINT(4 4)", multi, true);
+ test_geometry<P, mp>("POINT(1 1)", multi, true);
+ test_geometry<P, mp>("POINT(0 1)", multi, true);
+}
+
+int test_main( int , char* [] )
+{
+ //test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_covered_by.vcproj b/libs/geometry/test/multi/algorithms/multi_covered_by.vcproj
new file mode 100644
index 000000000..87a62a938
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_covered_by.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_covered_by"
+ ProjectGUID="{680E56F0-229C-4377-BDC0-80EB9B59314B}"
+ RootNamespace="multi_covered_by"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_covered_by"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_covered_by"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_covered_by.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_difference.cpp b/libs/geometry/test/multi/algorithms/multi_difference.cpp
new file mode 100644
index 000000000..893d3009b
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_difference.cpp
@@ -0,0 +1,216 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+//#define HAVE_TTMATH
+//#define BOOST_GEOMETRY_DEBUG_ASSEMBLE
+//#define BOOST_GEOMETRY_CHECK_WITH_SQLSERVER
+
+//#define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
+//#define BOOST_GEOMETRY_DEBUG_FOLLOW
+//#define BOOST_GEOMETRY_DEBUG_TRAVERSE
+
+
+#include <algorithms/test_difference.hpp>
+#include <algorithms/test_overlay.hpp>
+#include <multi/algorithms/overlay/multi_overlay_cases.hpp>
+
+#include <boost/geometry/multi/algorithms/correct.hpp>
+#include <boost/geometry/multi/algorithms/intersection.hpp>
+#include <boost/geometry/multi/algorithms/within.hpp> // only for testing #77
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+template <typename Ring, typename Polygon, typename MultiPolygon>
+void test_areal()
+{
+ test_one<Polygon, MultiPolygon, MultiPolygon>("simplex_multi",
+ case_multi_simplex[0], case_multi_simplex[1],
+ 5, 21, 5.58, 4, 17, 2.58);
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_multi_no_ip",
+ case_multi_no_ip[0], case_multi_no_ip[1],
+ 2, 12, 24.0, 2, 12, 34.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_multi_2",
+ case_multi_2[0], case_multi_2[1],
+ 2, 15, 19.6, 2, 13, 33.6);
+
+ test_one<Polygon, MultiPolygon, Polygon>("simplex_multi_mp_p",
+ case_multi_simplex[0], case_single_simplex,
+ 5, 21, 5.58, 4, 17, 2.58);
+ test_one<Polygon, Ring, MultiPolygon>("simplex_multi_r_mp",
+ case_single_simplex, case_multi_simplex[0],
+ 4, 17, 2.58, 5, 21, 5.58);
+ test_one<Ring, MultiPolygon, Polygon>("simplex_multi_mp_r",
+ case_multi_simplex[0], case_single_simplex,
+ 5, 21, 5.58, 4, 17, 2.58);
+
+ // Constructed cases for multi/touch/equal/etc
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_61_multi",
+ case_61_multi[0], case_61_multi[1],
+ 2, 10, 2, 2, 10, 2);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_62_multi",
+ case_62_multi[0], case_62_multi[1],
+ 0, 0, 0, 1, 5, 1);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_63_multi",
+ case_63_multi[0], case_63_multi[1],
+ 0, 0, 0, 1, 5, 1);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_64_multi",
+ case_64_multi[0], case_64_multi[1],
+ 1, 5, 1, 1, 5, 1);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_65_multi",
+ case_65_multi[0], case_65_multi[1],
+ 0, 0, 0, 2, 10, 3);
+ /* TODO: fix
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_72_multi",
+ case_72_multi[0], case_72_multi[1],
+ 3, 13, 1.65, 3, 17, 6.15);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_77_multi",
+ case_77_multi[0], case_77_multi[1],
+ 6, 31, 7, 6, 36, 13);
+ */
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_78_multi",
+ case_78_multi[0], case_78_multi[1],
+ 1, 5, 1.0, 1, 5, 1.0);
+
+ // Ticket on GGL list 2011/10/25
+ // to mix polygon/multipolygon in call to difference
+ test_one<Polygon, Polygon, Polygon>("ggl_list_20111025_vd_pp",
+ ggl_list_20111025_vd[0], ggl_list_20111025_vd[1],
+ 1, 4, 8.0, 1, 4, 12.5);
+ test_one<Polygon, Polygon, MultiPolygon>("ggl_list_20111025_vd_pm",
+ ggl_list_20111025_vd[0], ggl_list_20111025_vd[3],
+ 1, 4, 8.0, 1, 4, 12.5);
+ test_one<Polygon, MultiPolygon, Polygon>("ggl_list_20111025_vd_mp",
+ ggl_list_20111025_vd[2], ggl_list_20111025_vd[1],
+ 1, 4, 8.0, 1, 4, 12.5);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20111025_vd_mm",
+ ggl_list_20111025_vd[2], ggl_list_20111025_vd[3],
+ 1, 4, 8.0, 1, 4, 12.5);
+
+ // Second case
+ // This can be tested with this SQL for SQL-Server
+ /*
+ with viewy as (select geometry::STGeomFromText(
+ 'POLYGON((5 0,5 4,8 4,8 0,5 0))',0) as p,
+ geometry::STGeomFromText(
+ 'MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)),((4 0,4 2,6 2,6 0,4 0)))',0) as q)
+ select
+ p.STDifference(q).STArea(),p.STDifference(q).STNumGeometries(),p.STDifference(q) as p_min_q,
+ q.STDifference(p).STArea(),q.STDifference(p).STNumGeometries(),q.STDifference(p) as q_min_p,
+ p.STSymDifference(q).STArea(),q.STSymDifference(p) as p_xor_q
+ from viewy
+
+ Outputting:
+ 10, 1, <WKB>, 6, 2, <WKB>, 16, <WKB>
+ */
+
+ test_one<Polygon, Polygon, MultiPolygon>("ggl_list_20111025_vd_2",
+ ggl_list_20111025_vd_2[0], ggl_list_20111025_vd_2[1],
+ 1, 7, 10.0, 2, 10, 6.0);
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120915_h2_a",
+ ggl_list_20120915_h2[0], ggl_list_20120915_h2[1],
+ 2, 13, 17.0, 0, 0, 0.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120915_h2_b",
+ ggl_list_20120915_h2[0], ggl_list_20120915_h2[2],
+ 2, 13, 17.0, 0, 0, 0.0);
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120221_volker",
+ ggl_list_20120221_volker[0], ggl_list_20120221_volker[1],
+ 2, 12, 7962.66, 1, 18, 2775258.93,
+ 0.001);
+
+
+ /* TODO: fix
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_101_multi",
+ case_101_multi[0], case_101_multi[1],
+ 5, 23, 4.75, 5, 40, 12.75);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_102_multi",
+ case_102_multi[0], case_102_multi[1],
+ 2, 8, 0.75, 6, 25, 3.75);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_107_multi",
+ case_107_multi[0], case_107_multi[1],
+ 2, 11, 2.25, 3, 14, 3.0);
+ */
+ /*
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_1",
+ case_recursive_boxes_1[0], case_recursive_boxes_1[1],
+ 1, 1, 1, 1, 1, 1);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_2",
+ case_recursive_boxes_2[0], case_recursive_boxes_2[1],
+ 1, 1, 1, 1, 1, 1);
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_3",
+ case_recursive_boxes_3[0], case_recursive_boxes_3[1],
+ 1, 1, 1, 1, 1, 1);
+*/
+}
+
+template <typename MultiPolygon, typename MultiLineString>
+void test_areal_linear()
+{
+ typedef typename boost::range_value<MultiPolygon>::type Polygon;
+ typedef typename boost::range_value<MultiLineString>::type LineString;
+ typedef typename bg::point_type<Polygon>::type Point;
+ typedef bg::model::ring<Point> Ring;
+
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_1", "LINESTRING(2 0,2 5)", case_multi_simplex[0], 2, 4, 1.30);
+ test_one_lp<LineString, MultiLineString, Polygon>("case_p_mls_1", "MULTILINESTRING((2 0,2 5),(3 0,3 5))", case_single_simplex, 3, 6, 2.5);
+ test_one_lp<LineString, MultiLineString, MultiPolygon>("case_mp_mls_1", "MULTILINESTRING((2 0,2 5),(3 0,3 5))", case_multi_simplex[0], 5, 10, 3.1666667);
+ test_one_lp<LineString, MultiLineString, Ring>("case_r_mls_1", "MULTILINESTRING((2 0,2 5),(3 0,3 5))", case_single_simplex, 3, 6, 2.5);
+
+ // Collinear cases, with multiple turn points at the same location
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_2a", "LINESTRING(1 0,1 1,2 1,2 0)", "MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)),((1 1,1 2,2 2,2 1,1 1)))", 1, 2, 1.0);
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_2b", "LINESTRING(1 0,1 1,2 1,2 0)", "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((0 0,0 1,1 1,1 0,0 0)))", 1, 2, 1.0);
+
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_3",
+ "LINESTRING(6 6,6 7,7 7,7 6,8 6,8 7,9 7,9 6)",
+ "MULTIPOLYGON(((5 7,5 8,6 8,6 7,5 7)),((6 6,6 7,7 7,7 6,6 6)),((8 8,9 8,9 7,8 7,7 7,7 8,8 8)))", 2, 5, 3.0);
+
+ return;
+
+ // TODO: this case contains collinearities and should still be solved
+ test_one_lp<LineString, LineString, MultiPolygon>("case_mp_ls_4",
+ "LINESTRING(0 5,0 6,1 6,1 5,2 5,2 6,3 6,3 5,3 4,3 3,2 3,2 4,1 4,1 3,0 3,0 4)",
+ "MULTIPOLYGON(((0 2,0 3,1 2,0 2)),((2 5,3 6,3 5,2 5)),((1 5,1 6,2 6,2 5,1 5)),((2 3,2 4,3 4,2 3)),((0 3,1 4,1 3,0 3)),((4 3,3 3,3 5,4 5,4 4,4 3)))", 5, 11, 6.0);
+}
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::box<P> box;
+ typedef bg::model::ring<P> ring;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::multi_polygon<polygon> multi_polygon;
+ test_areal<ring, polygon, multi_polygon>();
+ test_areal_linear<multi_polygon, bg::model::multi_linestring<bg::model::linestring<P> > >();
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ std::cout << "Testing TTMATH" << std::endl;
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_difference.vcproj b/libs/geometry/test/multi/algorithms/multi_difference.vcproj
new file mode 100644
index 000000000..825789743
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_difference.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_difference"
+ ProjectGUID="{7F85B87A-48A6-47BD-A08C-AB12AEA56582}"
+ RootNamespace="multi_difference"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_difference"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_difference"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_difference.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_disjoint.cpp b/libs/geometry/test/multi/algorithms/multi_disjoint.cpp
new file mode 100644
index 000000000..9d374f7c7
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_disjoint.cpp
@@ -0,0 +1,157 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/disjoint.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/multi/io/wkt/read.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp>
+#include <boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp>
+#include <boost/geometry/multi/algorithms/detail/point_on_border.hpp>
+#include <boost/geometry/multi/algorithms/detail/for_each_range.hpp>
+#include <boost/geometry/multi/algorithms/disjoint.hpp>
+#include <boost/geometry/multi/algorithms/within.hpp>
+#include <boost/geometry/multi/core/closure.hpp>
+#include <boost/geometry/multi/core/geometry_id.hpp>
+#include <boost/geometry/multi/core/ring_type.hpp>
+#include <boost/geometry/multi/views/detail/range_type.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <test_common/test_point.hpp>
+
+#include <algorithms/test_relate.hpp>
+
+
+template <typename G1, typename G2>
+void test_disjoint(std::string const& id,
+ std::string const& wkt1,
+ std::string const& wkt2, bool expected)
+{
+ G1 g1;
+ bg::read_wkt(wkt1, g1);
+
+ G2 g2;
+ bg::read_wkt(wkt2, g2);
+
+ bool detected = bg::disjoint(g1, g2);
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "disjoint: " << id
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::multi_polygon<polygon> mp;
+
+ test_disjoint<mp, mp>("",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
+ false);
+
+ // True disjoint
+ test_disjoint<mp, mp>("",
+ "MULTIPOLYGON(((0 0,0 4,4 4,4 0,0 0)))",
+ "MULTIPOLYGON(((6 6,6 10,10 10,10 6,6 6)))",
+ true);
+
+ // Touch -> not disjoint
+ test_disjoint<mp, mp>("",
+ "MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))",
+ "MULTIPOLYGON(((5 5,5 10,10 10,10 5,5 5)))",
+ false);
+
+ // Not disjoint but no IP's
+ test_disjoint<mp, mp>("no_ips",
+ "MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2)),((20 0,20 10,30 10,30 0,20 0)))",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((22 2,28 2,28 8,22 8,22 2)))",
+ false);
+
+ // Not disjoint and not inside each other (in first ring) but wrapped (in second rings)
+ test_disjoint<mp, mp>("no_ips2",
+ "MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2)),((20 0,20 10,30 10,30 0,20 0)))",
+ "MULTIPOLYGON(((2 12,2 18,8 18,8 12,2 12)),((22 2,28 2,28 8,22 8,22 2)))",
+ false);
+
+ test_disjoint<mp, mp>("no_ips2_rev",
+ "MULTIPOLYGON(((2 12,2 18,8 18,8 12,2 12)),((22 2,28 2,28 8,22 8,22 2)))",
+ "MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2)),((20 0,20 10,30 10,30 0,20 0)))",
+ false);
+
+
+ test_disjoint<P, mp>("point_mp1",
+ "POINT(0 0)",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
+ false);
+
+ test_disjoint<P, mp>("point_mp2",
+ "POINT(5 5)",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
+ false);
+
+ test_disjoint<P, mp>("point_mp1",
+ "POINT(11 11)",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
+ true);
+
+ std::string polygon_inside_hole("MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0), (2 2,8 2,8 8,2 8,2 2)),((4 4,4 6,6 6,6 4,4 4)))");
+ test_disjoint<P, mp>("point_mp_pih1",
+ "POINT(5 5)",
+ polygon_inside_hole,
+ false);
+
+ test_disjoint<P, mp>("point_mp_pih2",
+ "POINT(3 3)",
+ polygon_inside_hole,
+ true);
+
+ test_disjoint<mp, P>("point_mp1rev",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
+ "POINT(0 0)",
+ false);
+
+}
+
+int test_main(int, char* [])
+{
+ //test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
+
+
+/*
+with viewy as
+(
+select geometry::STGeomFromText('MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2)),((20 0,20 10,30 10,30 0,20 0)))',0) as p
+ , geometry::STGeomFromText('MULTIPOLYGON(((2 12,2 18,8 18,8 12,2 12)),((22 2,28 2,28 8,22 8,22 2)))',0) as q
+)
+ select p from viewy union all select q from viewy
+-- select p.STDisjoint(q) from viewy
+*/ \ No newline at end of file
diff --git a/libs/geometry/test/multi/algorithms/multi_disjoint.vcproj b/libs/geometry/test/multi/algorithms/multi_disjoint.vcproj
new file mode 100644
index 000000000..fb55ab325
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_disjoint.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="multi_disjoint"
+ ProjectGUID="{5DEA6558-9DF7-42D4-AF10-4D6D8BB7EAD1}"
+ RootNamespace="multi_disjoint"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_disjoint"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_disjoint"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_disjoint.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_distance.cpp b/libs/geometry/test/multi/algorithms/multi_distance.cpp
new file mode 100644
index 000000000..249598c91
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_distance.cpp
@@ -0,0 +1,171 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <algorithms/test_distance.hpp>
+
+#include <boost/geometry/algorithms/distance.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+
+#include <boost/geometry/multi/algorithms/distance.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename Geometry1, typename Geometry2>
+void test_distance(std::string const& wkt1, std::string const& wkt2, double expected)
+{
+ Geometry1 g1;
+ Geometry2 g2;
+ bg::read_wkt(wkt1, g1);
+ bg::read_wkt(wkt2, g2);
+ typename bg::default_distance_result<Geometry1, Geometry2>::type d = bg::distance(g1, g2);
+
+ BOOST_CHECK_CLOSE(d, expected, 0.0001);
+}
+
+template <typename Geometry1, typename Geometry2, typename Strategy>
+void test_distance(Strategy const& strategy, std::string const& wkt1,
+ std::string const& wkt2, double expected)
+{
+ Geometry1 g1;
+ Geometry2 g2;
+ bg::read_wkt(wkt1, g1);
+ bg::read_wkt(wkt2, g2);
+ typename bg::default_distance_result<Geometry1, Geometry2>::type d = bg::distance(g1, g2, strategy);
+
+ BOOST_CHECK_CLOSE(d, expected, 0.0001);
+}
+
+
+template <typename P>
+void test_2d()
+{
+ typedef bg::model::multi_point<P> mp;
+ typedef bg::model::multi_linestring<bg::model::linestring<P> > ml;
+ test_distance<P, P>("POINT(0 0)", "POINT(1 1)", sqrt(2.0));
+ test_distance<P, mp>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<mp, P>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp, mp>("MULTIPOINT((1 1),(1 0),(0 2))", "MULTIPOINT((2 2),(2 3))", sqrt(2.0));
+ test_distance<P, ml>("POINT(0 0)", "MULTILINESTRING((1 1,2 2),(1 0,2 0),(0 2,0 3))", 1.0);
+ test_distance<ml, P>("MULTILINESTRING((1 1,2 2),(1 0,2 0),(0 2,0 3))", "POINT(0 0)", 1.0);
+ test_distance<ml, mp>("MULTILINESTRING((1 1,2 2),(1 0,2 0),(0 2,0 3))", "MULTIPOINT((0 0),(1 1))", 0.0);
+
+ // Test with a strategy
+ bg::strategy::distance::pythagoras<P, P> pyth;
+ test_distance<P, P>(pyth, "POINT(0 0)", "POINT(1 1)", sqrt(2.0));
+ test_distance<P, mp>(pyth, "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<mp, P>(pyth, "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+}
+
+
+template <typename P>
+void test_3d()
+{
+ typedef bg::model::multi_point<P> mp;
+ test_distance<P, P>("POINT(0 0 0)", "POINT(1 1 1)", sqrt(3.0));
+ test_distance<P, mp>("POINT(0 0 0)", "MULTIPOINT((1 1 1),(1 0 0),(0 1 2))", 1.0);
+ test_distance<mp, mp>("MULTIPOINT((1 1 1),(1 0 0),(0 0 2))", "MULTIPOINT((2 2 2),(2 3 4))", sqrt(3.0));
+}
+
+
+template <typename P1, typename P2>
+void test_mixed()
+{
+ typedef bg::model::multi_point<P1> mp1;
+ typedef bg::model::multi_point<P2> mp2;
+
+ test_distance<P1, P2>("POINT(0 0)", "POINT(1 1)", sqrt(2.0));
+
+ test_distance<P1, mp1>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P1, mp2>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P2, mp1>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P2, mp2>("POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+
+ // Test automatic reversal
+ test_distance<mp1, P1>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp1, P2>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp2, P1>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp2, P2>("MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+
+ // Test multi-multi using different point types for each
+ test_distance<mp1, mp2>("MULTIPOINT((1 1),(1 0),(0 2))", "MULTIPOINT((2 2),(2 3))", sqrt(2.0));
+
+ // Test with a strategy
+ using namespace bg::strategy::distance;
+
+ test_distance<P1, P2>(pythagoras<P1, P2>(), "POINT(0 0)", "POINT(1 1)", sqrt(2.0));
+
+ test_distance<P1, mp1>(pythagoras<P1, P1>(), "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P1, mp2>(pythagoras<P1, P2>(), "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P2, mp1>(pythagoras<P2, P1>(), "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+ test_distance<P2, mp2>(pythagoras<P2, P2>(), "POINT(0 0)", "MULTIPOINT((1 1),(1 0),(0 2))", 1.0);
+
+ // Most interesting: reversal AND a strategy (note that the stategy must be reversed automatically
+ test_distance<mp1, P1>(pythagoras<P1, P1>(), "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp1, P2>(pythagoras<P1, P2>(), "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp2, P1>(pythagoras<P2, P1>(), "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+ test_distance<mp2, P2>(pythagoras<P2, P2>(), "MULTIPOINT((1 1),(1 0),(0 2))", "POINT(0 0)", 1.0);
+}
+
+template <typename P>
+void test_empty_input()
+{
+ P p;
+ bg::model::multi_point<P> mp_empty;
+ bg::model::multi_linestring<bg::model::linestring<P> > ml_empty;
+
+ test_empty_input(p, mp_empty);
+ test_empty_input(p, ml_empty);
+ test_empty_input(mp_empty, mp_empty);
+
+ // Test behaviour if one of the inputs is empty
+ bg::model::multi_point<P> mp;
+ mp.push_back(p);
+ test_empty_input(mp_empty, mp);
+ test_empty_input(mp, mp_empty);
+}
+
+
+int test_main( int , char* [] )
+{
+ test_2d<boost::tuple<float, float> >();
+ test_2d<bg::model::d2::point_xy<float> >();
+ test_2d<bg::model::d2::point_xy<double> >();
+
+ test_3d<boost::tuple<float, float, float> >();
+ test_3d<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ test_mixed<bg::model::d2::point_xy<float>, bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_2d<bg::model::d2::point_xy<ttmath_big> >();
+ test_mixed<bg::model::d2::point_xy<ttmath_big>, bg::model::d2::point_xy<double> >();
+#endif
+
+ test_empty_input<bg::model::d2::point_xy<int> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_distance.vcproj b/libs/geometry/test/multi/algorithms/multi_distance.vcproj
new file mode 100644
index 000000000..7b3e77d28
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_distance.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_distance"
+ ProjectGUID="{D770F3E8-0567-4EDD-91FC-20BA402A3F74}"
+ RootNamespace="multi_distance"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_distance"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_distance"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_distance.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_envelope.cpp b/libs/geometry/test/multi/algorithms/multi_envelope.cpp
new file mode 100644
index 000000000..dad5d0bc2
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_envelope.cpp
@@ -0,0 +1,71 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <algorithms/test_envelope.hpp>
+
+
+#include <boost/geometry/multi/algorithms/envelope.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P>
+void test_2d()
+{
+ /*test_envelope<bg::model::multi_point<P> >(
+ "MULTIPOINT((1 1),(1 0),(1 2))", 1, 1, 0, 2);
+ test_envelope<bg::model::multi_linestring<bg::model::linestring<P> > >(
+ "MULTILINESTRING((0 0,1 1),(1 1,2 2),(2 2,3 3))", 0, 3, 0, 3);
+*/
+ test_envelope<bg::model::multi_polygon<bg::model::polygon<P> > >(
+ "MULTIPOLYGON(((1 1,1 3,3 3,3 1,1 1)),((4 4,4 6,6 6,6 4,4 4)))", 1, 6, 1, 6);
+}
+
+
+template <typename P>
+void test_3d()
+{
+ typedef bg::model::multi_point<P> mp;
+}
+
+
+int test_main( int , char* [] )
+{
+ test_2d<boost::tuple<float, float> >();
+ test_2d<bg::model::d2::point_xy<float> >();
+ test_2d<bg::model::d2::point_xy<double> >();
+
+ test_3d<boost::tuple<float, float, float> >();
+ test_3d<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+#ifdef HAVE_TTMATH
+ test_2d<bg::model::d2::point_xy<ttmath_big> >();
+ test_2d<bg::model::point<ttmath_big, 3, bg::cs::cartesian> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_envelope.vcproj b/libs/geometry/test/multi/algorithms/multi_envelope.vcproj
new file mode 100644
index 000000000..9d4db61af
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_envelope.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_envelope"
+ ProjectGUID="{85385CF0-240C-4900-B5EA-E34D2415A18F}"
+ RootNamespace="multi_envelope"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_envelope"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_envelope"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_envelope.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_equals.cpp b/libs/geometry/test/multi/algorithms/multi_equals.cpp
new file mode 100644
index 000000000..64bc0d470
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_equals.cpp
@@ -0,0 +1,57 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+
+#include <algorithms/test_equals.hpp>
+
+#include <boost/geometry/multi/algorithms/area.hpp>
+#include <boost/geometry/multi/algorithms/equals.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+
+
+template <typename P>
+void test_all()
+{
+ std::string case1 = "MULTIPOLYGON(((0 0,0 7,4 2,2 0,0 0)))";
+ std::string case1_p = "POLYGON((0 0,0 7,4 2,2 0,0 0))";
+
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::multi_polygon<polygon> mp;
+ test_geometry<mp, mp>("c1", case1, case1, true);
+
+ test_geometry<mp, mp>("c2",
+ "MULTIPOLYGON(((0 0,0 7.01,4 2,2 0,0 0)))",
+ case1, false);
+
+ // Different order == equal
+ test_geometry<mp, mp>("c3",
+ "MULTIPOLYGON(((0 0,0 7,4 2,2 0,0 0)),((10 10,10 12,12 10,10 10)))",
+ "MULTIPOLYGON(((10 10,10 12,12 10,10 10)),((0 0,0 7,4 2,2 0,0 0)))",
+ true);
+
+ // check different types
+ test_geometry<polygon, mp>("c1_p_mp", case1_p, case1, true);
+ test_geometry<mp, polygon>("c1_mp_p", case1, case1_p, true);
+
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_equals.vcproj b/libs/geometry/test/multi/algorithms/multi_equals.vcproj
new file mode 100644
index 000000000..c35636018
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_equals.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_equals"
+ ProjectGUID="{AA0EFD64-E034-421A-BD4A-E5A336D95C30}"
+ RootNamespace="multi_equals"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_equals"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_equals"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_equals.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_for_each.cpp b/libs/geometry/test/multi/algorithms/multi_for_each.cpp
new file mode 100644
index 000000000..846abdda5
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_for_each.cpp
@@ -0,0 +1,84 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/for_each.hpp>
+#include <boost/geometry/multi/algorithms/for_each.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_for_each.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::multi_point<P> >
+ (
+ "MULTIPOINT((1 1))"
+
+ // per point
+ , 1
+ , "MULTIPOINT((101 1))"
+ , "MULTIPOINT((101 100))"
+ // per segment
+ , ""
+ , 0
+ , "MULTIPOINT((1 1))"
+ );
+
+ test_geometry<bg::model::multi_linestring<bg::model::linestring<P> > >
+ (
+ "MULTILINESTRING((1 1,2 2))"
+
+ , 3
+ , "MULTILINESTRING((101 1,102 2))"
+ , "MULTILINESTRING((101 100,102 200))"
+
+ , "((1, 1), (2, 2))"
+ , std::sqrt(2.0)
+ , "MULTILINESTRING((10 1,2 2))"
+ );
+
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > mp;
+ test_geometry<mp>
+ (
+ "MULTIPOLYGON(((1 1,1 4,4 4,4 1,1 1)))"
+
+ , 11
+ , "MULTIPOLYGON(((101 1,101 4,104 4,104 1,101 1)))"
+ , "MULTIPOLYGON(((101 100,101 400,104 400,104 100,101 100)))"
+
+ , "((1, 1), (1, 4)) ((1, 4), (4, 4)) ((4, 4), (4, 1)) ((4, 1), (1, 1))"
+ , 4 * 3.0
+ , "MULTIPOLYGON(((10 1,10 4,4 4,4 1,1 1)))"
+ );
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_for_each.vcproj b/libs/geometry/test/multi/algorithms/multi_for_each.vcproj
new file mode 100644
index 000000000..51c5b9667
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_for_each.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_for_each"
+ ProjectGUID="{B016FE33-D587-45C6-8444-607839BB2C2D}"
+ RootNamespace="multi_for_each"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_for_each"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_for_each"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_for_each.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_intersection.cpp b/libs/geometry/test/multi/algorithms/multi_intersection.cpp
new file mode 100644
index 000000000..fc94811f8
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_intersection.cpp
@@ -0,0 +1,227 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+// #define BOOST_GEOMETRY_DEBUG_ASSEMBLE
+
+#include <algorithms/test_intersection.hpp>
+#include <algorithms/test_overlay.hpp>
+#include <multi/algorithms/overlay/multi_overlay_cases.hpp>
+
+#include <boost/geometry/multi/algorithms/correct.hpp>
+#include <boost/geometry/multi/algorithms/intersection.hpp>
+#include <boost/geometry/multi/algorithms/within.hpp> // only for testing #77
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+template <typename Ring, typename Polygon, typename MultiPolygon>
+void test_areal()
+{
+ test_one<Polygon, MultiPolygon, MultiPolygon>("simplex_multi",
+ case_multi_simplex[0], case_multi_simplex[1],
+ 2, 12, 6.42);
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_multi_no_ip",
+ case_multi_no_ip[0], case_multi_no_ip[1],
+ 2, 8, 8.5);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_multi_2",
+ case_multi_2[0], case_multi_2[1],
+ 3, 12, 5.9);
+
+ test_one<Polygon, MultiPolygon, Polygon>("simplex_multi_mp_p",
+ case_multi_simplex[0], case_single_simplex,
+ 2, 12, 6.42);
+
+ test_one<Polygon, Ring, MultiPolygon>("simplex_multi_r_mp",
+ case_single_simplex, case_multi_simplex[0],
+ 2, 12, 6.42);
+ test_one<Ring, MultiPolygon, Polygon>("simplex_multi_mp_r",
+ case_multi_simplex[0], case_single_simplex,
+ 2, 12, 6.42);
+
+ // Constructed cases for multi/touch/equal/etc
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_61_multi",
+ case_61_multi[0], case_61_multi[1],
+ 0, 0, 0.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_62_multi",
+ case_62_multi[0], case_62_multi[1],
+ 1, 5, 1.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_63_multi",
+ case_63_multi[0], case_63_multi[1],
+ 1, 5, 1.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_64_multi",
+ case_64_multi[0], case_64_multi[1],
+ 1, 5, 1.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_65_multi",
+ case_65_multi[0], case_65_multi[1],
+ 1, 5, 1.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_72_multi",
+ case_72_multi[0], case_72_multi[1],
+ 3, 14, 2.85);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_77_multi",
+ case_77_multi[0], case_77_multi[1],
+ 5, 33, 9);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_78_multi",
+ case_78_multi[0], case_78_multi[1],
+ 1, 0, 22); // In "get_turns" using partitioning, #points went from 17 to 16
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_101_multi",
+ case_101_multi[0], case_101_multi[1],
+ 4, 22, 4.75);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_102_multi",
+ case_102_multi[0], case_102_multi[1],
+ 3, 26, 19.75);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_107_multi",
+ case_107_multi[0], case_107_multi[1],
+ 2, 10, 1.5);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_1",
+ case_recursive_boxes_1[0], case_recursive_boxes_1[1],
+ 10, 97, 47.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_2",
+ case_recursive_boxes_2[0], case_recursive_boxes_2[1],
+ 1, 47, 90.0); // Area from SQL Server
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_3",
+ case_recursive_boxes_3[0], case_recursive_boxes_3[1],
+ 19, 87, 12.5); // Area from SQL Server
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_4",
+ case_recursive_boxes_4[0], case_recursive_boxes_4[1],
+ 13, 157, 67.0); // Area from SQL Server
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120915_h2_a",
+ ggl_list_20120915_h2[0], ggl_list_20120915_h2[1],
+ 2, 10, 6.0); // Area from SQL Server
+ test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120915_h2_b",
+ ggl_list_20120915_h2[0], ggl_list_20120915_h2[2],
+ 2, 10, 6.0); // Area from SQL Server
+}
+
+template <typename Polygon, typename MultiPolygon, typename Box>
+void test_areal_clip()
+{
+ static std::string const clip = "POLYGON((1 1,4 4))";
+ test_one<Polygon, Box, MultiPolygon>("simplex_multi_mp_b", clip, case_multi_simplex[0],
+ 2, 11, 6.791666);
+ test_one<Polygon, MultiPolygon, Box>("simplex_multi_b_mp", case_multi_simplex[0], clip,
+ 2, 11, 6.791666);
+}
+
+template <typename LineString, typename MultiLineString, typename Box>
+void test_linear()
+{
+ typedef typename bg::point_type<MultiLineString>::type point;
+ test_one<point, MultiLineString, MultiLineString>("case_multi_ml_ml_1",
+ "MULTILINESTRING((0 0,1 1))", "MULTILINESTRING((0 1,1 0))",
+ 1, 1, 0);
+ test_one<point, MultiLineString, MultiLineString>("case_multi_ml_ml_2",
+ "MULTILINESTRING((0 0,1 1),(0.5 0,1.5 1))", "MULTILINESTRING((0 1,1 0),(0.5 1,1.5 0))",
+ 4, 4, 0);
+
+ test_one<point, LineString, MultiLineString>("case_multi_l_ml",
+ "LINESTRING(0 0,1 1)", "MULTILINESTRING((0 1,1 0),(0.5 1,1.5 0))",
+ 2, 2, 0);
+ test_one<point, MultiLineString, LineString>("case_multi_ml_l",
+ "MULTILINESTRING((0 1,1 0),(0.5 1,1.5 0))", "LINESTRING(0 0,1 1)",
+ 2, 2, 0);
+
+ test_one<LineString, MultiLineString, Box>("case_multi_ml_b",
+ "MULTILINESTRING((0 0,3 3)(1 0,4 3))", "POLYGON((1 1,3 2))",
+ 2, 4, 2 * std::sqrt(2.0));
+ test_one<LineString, Box, MultiLineString>("case_multi_b_ml",
+ "POLYGON((1 1,3 2))", "MULTILINESTRING((0 0,3 3)(1 0,4 3))",
+ 2, 4, 2 * std::sqrt(2.0));
+}
+
+template <typename P>
+void test_point_output()
+{
+ typedef bg::model::box<P> box;
+ typedef bg::model::linestring<P> linestring;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::multi_polygon<polygon> multi_polygon;
+
+ test_point_output<multi_polygon, multi_polygon>(case_multi_simplex[0], case_multi_simplex[1], 10);
+ test_point_output<linestring, multi_polygon>("linestring(4 0,0 4)", case_multi_simplex[0], 4);
+ test_point_output<box, multi_polygon>("box(3 0,4 6)", case_multi_simplex[0], 8);
+}
+
+template <typename MultiPolygon, typename MultiLineString>
+void test_areal_linear()
+{
+ typedef typename boost::range_value<MultiPolygon>::type Polygon;
+ typedef typename boost::range_value<MultiLineString>::type LineString;
+ typedef typename bg::point_type<Polygon>::type Point;
+ typedef bg::model::ring<Point> Ring;
+
+ test_one_lp<LineString, MultiPolygon, LineString>("case_mp_ls_1", case_multi_simplex[0], "LINESTRING(2 0,2 5)", 2, 4, 3.70);
+ test_one_lp<LineString, Polygon, MultiLineString>("case_p_mls_1", case_single_simplex, "MULTILINESTRING((2 0,2 5),(3 0,3 5))", 2, 4, 7.5);
+ test_one_lp<LineString, MultiPolygon, MultiLineString>("case_mp_mls_1", case_multi_simplex[0], "MULTILINESTRING((2 0,2 5),(3 0,3 5))", 4, 8, 6.8333333);
+ test_one_lp<LineString, Ring, MultiLineString>("case_r_mls_1", case_single_simplex, "MULTILINESTRING((2 0,2 5),(3 0,3 5))", 2, 4, 7.5);
+}
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::box<P> box;
+ typedef bg::model::ring<P> ring;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::multi_polygon<polygon> multi_polygon;
+ test_areal<ring, polygon, multi_polygon>();
+
+#if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
+
+ typedef bg::model::ring<P, false> ring_ccw;
+ typedef bg::model::polygon<P, false> polygon_ccw;
+ typedef bg::model::multi_polygon<polygon_ccw> multi_polygon_ccw;
+ test_areal<ring_ccw, polygon_ccw, multi_polygon_ccw>();
+
+ typedef bg::model::ring<P, true, false> ring_open;
+ typedef bg::model::polygon<P, true, false> polygon_open;
+ typedef bg::model::multi_polygon<polygon_open> multi_polygon_open;
+ test_areal<ring_open, polygon_open, multi_polygon_open>();
+
+ typedef bg::model::ring<P, false, false> ring_open_ccw;
+ typedef bg::model::polygon<P, false, false> polygon_open_ccw;
+ typedef bg::model::multi_polygon<polygon_open_ccw> multi_polygon_open_ccw;
+ test_areal<ring_open_ccw, polygon_open_ccw, multi_polygon_open_ccw>();
+
+ test_areal_clip<polygon, multi_polygon, box>();
+ test_areal_clip<polygon_ccw, multi_polygon_ccw, box>();
+
+ typedef bg::model::linestring<P> linestring;
+ typedef bg::model::multi_linestring<linestring> multi_linestring;
+
+ test_linear<linestring, multi_linestring, box>();
+ test_areal_linear<multi_polygon, multi_linestring>();
+#endif
+
+ test_point_output<P>();
+ // linear
+
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ std::cout << "Testing TTMATH" << std::endl;
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_intersection.vcproj b/libs/geometry/test/multi/algorithms/multi_intersection.vcproj
new file mode 100644
index 000000000..a286b038c
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_intersection.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_intersection"
+ ProjectGUID="{FFB78F24-7999-4416-BDED-9C35A3DDF32D}"
+ RootNamespace="multi_intersection"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_intersection"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_intersection"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_intersection.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_intersects.cpp b/libs/geometry/test/multi/algorithms/multi_intersects.cpp
new file mode 100644
index 000000000..d07b8b6cf
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_intersects.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+
+#include <geometry_test_common.hpp>
+
+#include <algorithms/test_intersects.hpp>
+
+#include <boost/geometry.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::multi_polygon<polygon> mp;
+
+ test_geometry<mp, mp>("MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
+ true);
+
+ test_geometry<P, mp>("POINT(0 0)",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))",
+ true);
+
+}
+
+int test_main(int, char* [])
+{
+ //test_all<bg::model::d2::point_xy<float> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
+
diff --git a/libs/geometry/test/multi/algorithms/multi_length.cpp b/libs/geometry/test/multi/algorithms/multi_length.cpp
new file mode 100644
index 000000000..5d94be158
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_length.cpp
@@ -0,0 +1,38 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+
+#include <algorithms/test_length.hpp>
+
+#include <boost/geometry/multi/multi.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::multi_linestring<bg::model::linestring<P> > >
+ ("MULTILINESTRING((0 0,3 4,4 3))", 5 + sqrt(2.0));
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_length.vcproj b/libs/geometry/test/multi/algorithms/multi_length.vcproj
new file mode 100644
index 000000000..43967af1a
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_length.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_length"
+ ProjectGUID="{9087BA6C-7563-41E6-90AD-F60BC58DDC17}"
+ RootNamespace="multi_length"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_length"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_length"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_length.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_num_geometries.cpp b/libs/geometry/test/multi/algorithms/multi_num_geometries.cpp
new file mode 100644
index 000000000..bf7a3cee4
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_num_geometries.cpp
@@ -0,0 +1,62 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/num_geometries.hpp>
+#include <boost/geometry/multi/algorithms/num_geometries.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, int expected)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ int detected = bg::num_geometries(geometry);
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "num_geometries: " << wkt
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+template <typename Point>
+void test_all()
+{
+ typedef bg::model::polygon<Point> poly;
+ typedef bg::model::linestring<Point> ls;
+ typedef bg::model::multi_point<Point> mpoint;
+ typedef bg::model::multi_linestring<ls> mls;
+ typedef bg::model::multi_polygon<poly> mpoly;
+
+ test_geometry<Point>("POINT(0 0)", 1);
+ test_geometry<ls>("LINESTRING(0 0,0 1)", 1);
+ test_geometry<poly>("POLYGON((0 0,0 1,1 0,0 0))", 1);
+ test_geometry<mpoint>("MULTIPOINT((0 0),(0 1),(1 0),(0 0))", 4);
+ test_geometry<mls>("MULTILINESTRING((0 0,0 1),(1 0,0 0))", 2);
+ test_geometry<mpoly>("MULTIPOLYGON(((0 0,0 1,1 0,0 0)),((10 0,10 1,11 0,10 0)))", 2);
+}
+
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_num_geometries.vcproj b/libs/geometry/test/multi/algorithms/multi_num_geometries.vcproj
new file mode 100644
index 000000000..c1beefad1
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_num_geometries.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_num_geometries"
+ ProjectGUID="{8DB68EB9-07CA-4705-859E-B1A7098B5CF3}"
+ RootNamespace="multi_num_geometries"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_num_geometries"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_num_geometries"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_num_geometries.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_num_interior_rings.cpp b/libs/geometry/test/multi/algorithms/multi_num_interior_rings.cpp
new file mode 100644
index 000000000..73fcdc114
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_num_interior_rings.cpp
@@ -0,0 +1,55 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/num_interior_rings.hpp>
+#include <boost/geometry/multi/algorithms/num_interior_rings.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, int expected)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ int detected = bg::num_interior_rings(geometry);
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "num_interior_rings: " << wkt
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+
+template <typename Point>
+void test_all()
+{
+ typedef bg::model::polygon<Point> poly;
+ typedef bg::model::multi_polygon<poly> mpoly;
+
+ test_geometry<poly>("POLYGON((0 0,0 10,10 0,0 0),(1 1,1 9,9 1,1 1))", 1);
+ test_geometry<mpoly>("MULTIPOLYGON(((0 0,0 10,10 0,0 0),(1 1,1 9,9 1,1 1)),((0 0,0 10,10 0,0 0),(1 1,1 4,4 1,1 1),(5 1,5 4,9 1,5 1)))", 3);
+}
+
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_num_interior_rings.vcproj b/libs/geometry/test/multi/algorithms/multi_num_interior_rings.vcproj
new file mode 100644
index 000000000..68c6ebf62
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_num_interior_rings.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_num_interior_rings"
+ ProjectGUID="{3F8E4B3A-43D5-49ED-89F6-C6D1CF609B02}"
+ RootNamespace="multi_num_interior_rings"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_num_interior_rings"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_num_interior_rings"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_num_interior_rings.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_num_points.cpp b/libs/geometry/test/multi/algorithms/multi_num_points.cpp
new file mode 100644
index 000000000..d43b71d47
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_num_points.cpp
@@ -0,0 +1,72 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/num_points.hpp>
+#include <boost/geometry/multi/algorithms/num_points.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/variant/variant.hpp>
+
+
+template <typename Geometry>
+void check_geometry(Geometry const& geometry, std::string const& wkt, int expected)
+{
+ int detected = bg::num_points(geometry);
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "num_points: " << wkt
+ << " -> Expected: " << expected
+ << " detected: " << detected);
+}
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt, int expected)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ check_geometry(geometry, wkt, expected);
+ check_geometry(boost::variant<Geometry>(geometry), wkt, expected);
+}
+
+
+template <typename Point>
+void test_all()
+{
+ typedef bg::model::polygon<Point> poly;
+ typedef bg::model::linestring<Point> ls;
+ typedef bg::model::multi_point<Point> mpoint;
+ typedef bg::model::multi_linestring<ls> mls;
+ typedef bg::model::multi_polygon<poly> mpoly;
+
+ test_geometry<Point>("POINT(0 0)", 1);
+ test_geometry<ls>("LINESTRING(0 0,0 1)", 2);
+ test_geometry<poly>("POLYGON((0 0,0 1,1 0,0 0))", 4);
+ test_geometry<mpoint>("MULTIPOINT((0 0),(0 1),(1 0),(0 0))", 4);
+ test_geometry<mls>("MULTILINESTRING((0 0,0 1),(1 0,0 0))", 4);
+ test_geometry<mpoly>("MULTIPOLYGON(((0 0,0 1,1 0,0 0)),((10 0,10 1,11 0,10 0)))", 8);
+}
+
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_num_points.vcproj b/libs/geometry/test/multi/algorithms/multi_num_points.vcproj
new file mode 100644
index 000000000..590d220c3
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_num_points.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_num_points"
+ ProjectGUID="{EA4B2EB3-1FBA-42BE-B7D7-5A517BC74E2B}"
+ RootNamespace="multi_num_points"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_num_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_num_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_num_points.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_perimeter.cpp b/libs/geometry/test/multi/algorithms/multi_perimeter.cpp
new file mode 100644
index 000000000..8268fed62
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_perimeter.cpp
@@ -0,0 +1,39 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/perimeter.hpp>
+#include <boost/geometry/multi/algorithms/perimeter.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_perimeter.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::multi_polygon<bg::model::polygon<P> > >(
+ "MULTIPOLYGON(((0 0,0 1,1 0,0 0)))", 1.0 + 1.0 + sqrt(2.0));
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_perimeter.vcproj b/libs/geometry/test/multi/algorithms/multi_perimeter.vcproj
new file mode 100644
index 000000000..4059e83bb
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_perimeter.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_perimeter"
+ ProjectGUID="{D91C3F39-B8A5-4EB9-A7A8-D72B297DCFBF}"
+ RootNamespace="multi_perimeter"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_perimeter"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_perimeter"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_perimeter.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_reverse.cpp b/libs/geometry/test/multi/algorithms/multi_reverse.cpp
new file mode 100644
index 000000000..78334928d
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_reverse.cpp
@@ -0,0 +1,57 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/reverse.hpp>
+#include <boost/geometry/multi/algorithms/reverse.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_reverse.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ // Multi point, should happen nothing.
+ test_geometry<bg::model::multi_point<P> >(
+ "MULTIPOINT((0 0),(1 1))",
+ "MULTIPOINT((0 0),(1 1))");
+
+ test_geometry<bg::model::multi_linestring<bg::model::linestring<P> > >(
+ "MULTILINESTRING((0 0,1 1),(3 3,4 4))",
+ "MULTILINESTRING((1 1,0 0),(4 4,3 3))");
+
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > mp;
+ test_geometry<mp>(
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0)))",
+ "MULTIPOLYGON(((4 0,2 1,0 2,0 7,4 9,8 7,8 2,4 0)))");
+ test_geometry<mp>(
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0),(7 3,7 6,1 6,1 3,4 3,7 3)))",
+ "MULTIPOLYGON(((4 0,2 1,0 2,0 7,4 9,8 7,8 2,4 0),(7 3,4 3,1 3,1 6,7 6,7 3)))");
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_reverse.vcproj b/libs/geometry/test/multi/algorithms/multi_reverse.vcproj
new file mode 100644
index 000000000..6afcee18e
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_reverse.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_reverse"
+ ProjectGUID="{698BE05D-43E2-4BF5-B7FD-48BE3EE7BC21}"
+ RootNamespace="multi_reverse"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_reverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_reverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_reverse.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_simplify.cpp b/libs/geometry/test/multi/algorithms/multi_simplify.cpp
new file mode 100644
index 000000000..8b9d92265
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_simplify.cpp
@@ -0,0 +1,68 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/multi/algorithms/simplify.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/ring.hpp>
+#include <boost/geometry/geometries/linestring.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_simplify.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::multi_point<P> >(
+ "MULTIPOINT((0 0),(1 1))",
+ "MULTIPOINT((0 0),(1 1))", 1.0);
+
+ test_geometry<bg::model::multi_linestring<bg::model::linestring<P> > >(
+ "MULTILINESTRING((0 0,5 5,10 10))",
+ "MULTILINESTRING((0 0,10 10))", 1.0);
+
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > mp;
+ test_geometry<mp>(
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0)))",
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,4 0)))", 1.0);
+ test_geometry<mp>(
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,2 1,4 0),(7 3,7 6,1 6,1 3,4 3,7 3)))",
+ "MULTIPOLYGON(((4 0,8 2,8 7,4 9,0 7,0 2,4 0),(7 3,7 6,1 6,1 3,7 3)))", 1.0);
+
+ // Ticket 5954 https://svn.boost.org/trac/boost/ticket/5954
+ test_geometry<mp>(
+ "MULTIPOLYGON(((0.561648 1,1 1,1 0,0.468083 0,0.52758 0.00800554,0.599683 0.0280924,0.601611 0.265374,0.622693 0.316765,0.69507 0.357497,0.695623 0.429711,0.655111 0.502298,0.696467 0.543147,0.840712 0.593546,0.882583 0.66546,0.852357 0.748213,0.84264 0.789567,0.832667 0.841202,0.832667 0.841202,0.740538 0.873004,0.617349 0.905045,0.566576 0.977697,0.561648 1)),((0 0.801979,0.0308575 0.786234,0.0705513 0.631135,0.141616 0.527248,0.233985 0.505872,0.264777 0.526263,0.336631 0.505009,0.356603 0.422321,0.355803 0.350038,0.375252 0.205364,0.415206 0.0709182,0.45479 0,0 0,0 0,0 0.801979)))",
+ "MULTIPOLYGON(((0.561648 1,1 1,1 0,0.468083 0,0.52758 0.00800554,0.599683 0.0280924,0.601611 0.265374,0.622693 0.316765,0.69507 0.357497,0.695623 0.429711,0.655111 0.502298,0.696467 0.543147,0.840712 0.593546,0.882583 0.66546,0.852357 0.748213,0.84264 0.789567,0.832667 0.841202,0.740538 0.873004,0.617349 0.905045,0.566576 0.977697,0.561648 1)),((0 0.801979,0.0308575 0.786234,0.0705513 0.631135,0.141616 0.527248,0.233985 0.505872,0.264777 0.526263,0.336631 0.505009,0.356603 0.422321,0.355803 0.350038,0.375252 0.205364,0.415206 0.0709182,0.45479 0,0 0,0 0.801979)))", 1.0 / 2048.0);
+ test_geometry<mp>(
+ "MULTIPOLYGON(((1149.69 2047,2047 2047,2047 0,958.166 0,1079.96 16.3873,1227.55 57.5051,1231.5 543.221,1274.65 648.418,1422.81 731.796,1423.94 879.618,1341.01 1028.2,1425.67 1111.82,1720.94 1214.99,1806.65 1362.2,1744.77 1531.59,1724.88 1616.24,1704.47 1721.94,1704.47 1721.94,1515.88 1787.04,1263.71 1852.63,1159.78 2001.35,1149.69 2047)),((0 1641.65,63.1653 1609.42,144.419 1291.93,289.888 1079.28,478.967 1035.52,541.999 1077.26,689.084 1033.75,729.966 864.491,728.329 716.528,768.141 420.38,849.927 145.17,930.955 0,0 0,0 0,0 1641.65)))",
+ "MULTIPOLYGON(((1149.69 2047,2047 2047,2047 0,958.166 0,1079.96 16.3873,1227.55 57.5051,1231.5 543.221,1274.65 648.418,1422.81 731.796,1423.94 879.618,1341.01 1028.2,1425.67 1111.82,1720.94 1214.99,1806.65 1362.2,1744.77 1531.59,1724.88 1616.24,1704.47 1721.94,1515.88 1787.04,1263.71 1852.63,1159.78 2001.35,1149.69 2047)),((0 1641.65,63.1653 1609.42,144.419 1291.93,289.888 1079.28,478.967 1035.52,541.999 1077.26,689.084 1033.75,729.966 864.491,728.329 716.528,768.141 420.38,849.927 145.17,930.955 0,0 0,0 1641.65)))", 1.0);
+ // End ticket 5954
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_simplify.vcproj b/libs/geometry/test/multi/algorithms/multi_simplify.vcproj
new file mode 100644
index 000000000..e4d11963a
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_simplify.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_simplify"
+ ProjectGUID="{76A74CE4-EBF8-4F8A-98B7-1AF607B2B68C}"
+ RootNamespace="multi_simplify"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_simplify"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_simplify"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_simplify.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_touches.cpp b/libs/geometry/test/multi/algorithms/multi_touches.cpp
new file mode 100644
index 000000000..0186c62e3
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_touches.cpp
@@ -0,0 +1,80 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+
+#include <algorithms/test_touches.hpp>
+
+#include <boost/geometry/multi/algorithms/area.hpp>
+#include <boost/geometry/multi/algorithms/num_geometries.hpp>
+#include <boost/geometry/multi/algorithms/within.hpp>
+#include <boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp>
+#include <boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp>
+#include <boost/geometry/multi/algorithms/detail/for_each_range.hpp>
+#include <boost/geometry/multi/core/closure.hpp>
+#include <boost/geometry/multi/core/geometry_id.hpp>
+#include <boost/geometry/multi/core/ring_type.hpp>
+#include <boost/geometry/multi/views/detail/range_type.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::multi_polygon<polygon> mp;
+
+ test_self_touches<mp>("MULTIPOLYGON(((0 0,0 100,100 100,100 0,0 0)))",
+ false);
+
+ // Exactly equal
+ test_touches<mp, mp>("MULTIPOLYGON(((0 0,0 100,100 100,100 0,0 0)))",
+ "MULTIPOLYGON(((0 0,0 100,100 100,100 0,0 0)))",
+ false);
+
+ // Spatially equal
+ test_touches<mp, mp>("MULTIPOLYGON(((0 0,0 100,100 100,100 0,0 0)))",
+ "MULTIPOLYGON(((0 0,0 100,100 100,100 80,100 20,100 0,0 0)))",
+ false);
+
+ // One exactly equal, another pair touching
+ test_touches<mp, mp>("MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((20 0,20 10,30 10,30 0,20 0)))",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((30 10,30 20,40 20,40 10,30 10)))",
+ false);
+
+ // One spatially equal (without equal segments), another pair touching
+ test_touches<mp, mp>("MULTIPOLYGON(((0 0,0 5,0 10,5 10,10 10,10 5,10 0,5 0,0 0)),((20 0,20 10,30 10,30 0,20 0)))",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((30 10,30 20,40 20,40 10,30 10)))",
+ false);
+
+ // Alternate touches
+ test_touches<mp, mp>("MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((20 0,20 10,30 10,30 0,20 0)))",
+ "MULTIPOLYGON(((10 10,10 20,20 20,20 10,10 10)),((30 10,30 20,40 20,40 10,30 10)))",
+ true);
+
+ // Touch plus inside
+ // TODO fix this
+ test_touches<mp, mp>("MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((20 0,20 10,30 10,30 0,20 0)))",
+ "MULTIPOLYGON(((10 10,10 20,20 20,20 10,10 10)),((22 2,28 2,28 8,22 8,22 2)))",
+ false);
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_touches.vcproj b/libs/geometry/test/multi/algorithms/multi_touches.vcproj
new file mode 100644
index 000000000..05468f6cd
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_touches.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="multi_touches"
+ ProjectGUID="{108173B8-B6F4-4366-8018-2BF282ED4881}"
+ RootNamespace="multi_touches"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_touches"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_touches"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_touches.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_transform.cpp b/libs/geometry/test/multi/algorithms/multi_transform.cpp
new file mode 100644
index 000000000..dddb01c45
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_transform.cpp
@@ -0,0 +1,97 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <sstream>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/transform.hpp>
+#include <boost/geometry/strategies/strategies.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/multi/algorithms/transform.hpp>
+
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+
+// This test is a little different from transform.cpp test.
+// This test explicitly tests all geometries, including multi*
+// while the transform.cpp tests various strategies.
+
+template <typename Geometry>
+void test_transform(std::string const& wkt, std::string const& expected)
+{
+ typedef typename bg::point_type<Geometry>::type point_type;
+
+ Geometry geometry_in, geometry_out;
+ bg::read_wkt(wkt, geometry_in);
+ bg::transform(geometry_in, geometry_out,
+ bg::strategy::transform::scale_transformer<point_type>(2, 2));
+ std::ostringstream detected;
+ detected << bg::wkt(geometry_out);
+ BOOST_CHECK_EQUAL(detected.str(), expected);
+}
+
+
+template <typename T>
+void test_all()
+{
+ typedef bg::model::d2::point_xy<T> P;
+
+ test_transform<P>(
+ "POINT(1 1)",
+ "POINT(2 2)");
+ test_transform<bg::model::linestring<P> >(
+ "LINESTRING(1 1,2 2)",
+ "LINESTRING(2 2,4 4)");
+ test_transform<bg::model::segment<P> >(
+ "LINESTRING(1 1,2 2)",
+ "LINESTRING(2 2,4 4)");
+ test_transform<bg::model::ring<P> >(
+ "POLYGON((0 0,0 1,1 0,0 0))",
+ "POLYGON((0 0,0 2,2 0,0 0))");
+ test_transform<bg::model::polygon<P> >(
+ "POLYGON((0 0,0 1,1 0,0 0))",
+ "POLYGON((0 0,0 2,2 0,0 0))");
+ test_transform<bg::model::box<P> >(
+ "POLYGON((0 0,0 1,1 1,1 0,0 0))",
+ "POLYGON((0 0,0 2,2 2,2 0,0 0))");
+ test_transform<bg::model::multi_point<P> >(
+ "MULTIPOINT((1 1),(2 2))",
+ "MULTIPOINT((2 2),(4 4))");
+ test_transform<bg::model::multi_linestring<bg::model::linestring<P> > >(
+ "MULTILINESTRING((1 1,2 2))",
+ "MULTILINESTRING((2 2,4 4))");
+ test_transform<bg::model::multi_polygon<bg::model::polygon<P> > >(
+ "MULTIPOLYGON(((0 0,0 1,1 0,0 0)))",
+ "MULTIPOLYGON(((0 0,0 2,2 0,0 0)))");
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<double>();
+
+#ifdef HAVE_TTMATH
+ test_all<ttmath_big>();
+#endif
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_transform.vcproj b/libs/geometry/test/multi/algorithms/multi_transform.vcproj
new file mode 100644
index 000000000..543890ffb
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_transform.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_transform"
+ ProjectGUID="{64985954-0A74-46F5-908F-865E905C3414}"
+ RootNamespace="multi_transform"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_transform"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_transform"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_transform.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_union.cpp b/libs/geometry/test/multi/algorithms/multi_union.cpp
new file mode 100644
index 000000000..5cbe1e7a7
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_union.cpp
@@ -0,0 +1,149 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <iostream>
+#include <string>
+
+
+#include <algorithms/test_union.hpp>
+#include <algorithms/test_overlay.hpp>
+#include <multi/algorithms/overlay/multi_overlay_cases.hpp>
+
+#include <boost/geometry/multi/algorithms/correct.hpp>
+#include <boost/geometry/multi/algorithms/intersection.hpp>
+#include <boost/geometry/multi/algorithms/within.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+
+template <typename Ring, typename Polygon, typename MultiPolygon>
+void test_areal()
+{
+ test_one<Polygon, MultiPolygon, MultiPolygon>("simplex_multi",
+ case_multi_simplex[0], case_multi_simplex[1],
+ 1, 0, 20, 14.58);
+
+ test_one<Polygon, Polygon, MultiPolygon>("simplex_multi_p_mp",
+ case_single_simplex, case_multi_simplex[0],
+ 1, 0, 20, 14.58);
+ test_one<Polygon, MultiPolygon, Polygon>("simplex_multi_mp_p",
+ case_multi_simplex[0], case_single_simplex,
+ 1, 0, 20, 14.58);
+
+ test_one<Polygon, Ring, MultiPolygon>("simplex_multi_r_mp",
+ case_single_simplex, case_multi_simplex[0],
+ 1, 0, 20, 14.58);
+ test_one<Ring, MultiPolygon, Polygon>("simplex_multi_mp_r",
+ case_multi_simplex[0], case_single_simplex,
+ 1, 0, 20, 14.58);
+
+
+ // Normal test cases
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_multi_no_ip",
+ case_multi_no_ip[0], case_multi_no_ip[1],
+ 4, 0, 16, 66.5);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_multi_2",
+ case_multi_2[0], case_multi_2[1],
+ 3, 0, 16, 59.1);
+
+ // Constructed cases for multi/touch/equal/etc
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_61_multi",
+ case_61_multi[0], case_61_multi[1],
+ 1, 0, 11, 4.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_62_multi",
+ case_62_multi[0], case_62_multi[1],
+ 2, 0, 10, 2.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_63_multi",
+ case_63_multi[0], case_63_multi[1],
+ 2, 0, 10, 2.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_64_multi",
+ case_64_multi[0], case_64_multi[1],
+ 1, 0, 9, 3.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_65_multi",
+ case_65_multi[0], case_65_multi[1],
+ 3, 0, 15, 4.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_66_multi",
+ case_66_multi[0], case_66_multi[1],
+ 3, 0, 23, 7.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_75_multi",
+ case_75_multi[0], case_75_multi[1],
+ 5, 0, 25, 5.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_76_multi",
+ case_76_multi[0], case_76_multi[1],
+ 5, 0, 31, 8.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_89_multi",
+ case_89_multi[0], case_89_multi[1],
+ 1, 0, 13, 6);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_101_multi",
+ case_101_multi[0], case_101_multi[1],
+ 1, 0, 32, 22.25);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_103_multi",
+ case_103_multi[0], case_103_multi[1],
+ 1, 0, 7, 25);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_104_multi",
+ case_104_multi[0], case_104_multi[1],
+ 1, 0, 8, 25);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_105_multi",
+ case_105_multi[0], case_105_multi[1],
+ 1, 0, 5, 25);
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_1",
+ case_recursive_boxes_1[0], case_recursive_boxes_1[1],
+ 1, 1, 36, 97.0);
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_2",
+ case_recursive_boxes_2[0], case_recursive_boxes_2[1],
+ 1, 0, 14, 100.0); // Area from SQL Server
+ test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_3",
+ case_recursive_boxes_3[0], case_recursive_boxes_3[1],
+ 17, 0, 159, 56.5); // Area from SQL Server
+
+ test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120915_h2_a",
+ ggl_list_20120915_h2[0], ggl_list_20120915_h2[1],
+ 1, 0, 12, 23.0); // Area from SQL Server
+ test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120915_h2_b",
+ ggl_list_20120915_h2[0], ggl_list_20120915_h2[2],
+ 1, 0, 12, 23.0); // Area from SQL Server
+}
+
+template <typename P>
+void test_all()
+{
+
+ {
+ typedef bg::model::ring<P> ring;
+ typedef bg::model::polygon<P> polygon;
+ typedef bg::model::multi_polygon<polygon> multi_polygon;
+ test_areal<ring, polygon, multi_polygon>();
+ }
+
+ {
+ typedef bg::model::ring<P, false> ring_ccw;
+ typedef bg::model::polygon<P, false> polygon_ccw;
+ typedef bg::model::multi_polygon<polygon_ccw> multi_polygon_ccw;
+ test_areal<ring_ccw, polygon_ccw, multi_polygon_ccw>();
+ }
+
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ std::cout << "Testing TTMATH" << std::endl;
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_union.vcproj b/libs/geometry/test/multi/algorithms/multi_union.vcproj
new file mode 100644
index 000000000..9adb10145
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_union.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_union"
+ ProjectGUID="{1A8443BE-2666-4D6B-B4BC-6A7B7DD224B0}"
+ RootNamespace="multi_union"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_union"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_union"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_union.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_unique.cpp b/libs/geometry/test/multi/algorithms/multi_unique.cpp
new file mode 100644
index 000000000..397e46265
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_unique.cpp
@@ -0,0 +1,60 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/unique.hpp>
+#include <boost/geometry/multi/algorithms/unique.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_unique.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ // Multi point, should happen nothing, even if there are duplicate points
+ test_geometry<bg::model::multi_point<P> >(
+ "MULTIPOINT((0 0),(0 0),(1 1))",
+ "MULTIPOINT((0 0),(0 0),(1 1))");
+
+ test_geometry<bg::model::multi_linestring<bg::model::linestring<P> > >(
+ "MULTILINESTRING((0 0,1 1,1 1),(3 3,3 3,4 4))",
+ "MULTILINESTRING((0 0,1 1),(3 3,4 4))");
+
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > mp;
+ test_geometry<mp>(
+ "MULTIPOLYGON(((0 0,0 1,1 1,1 1,1 1,1 0,0 0,0 0)))",
+ "MULTIPOLYGON(((0 0,0 1,1 1,1 0,0 0)))");
+
+ // With holes
+ test_geometry<mp>(
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 10,10 10,10 0,0 0,0 0)))",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))");
+
+}
+
+int test_main( int , char* [] )
+{
+ test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#ifdef HAVE_TTMATH
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_unique.vcproj b/libs/geometry/test/multi/algorithms/multi_unique.vcproj
new file mode 100644
index 000000000..d6a662b10
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_unique.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_unique"
+ ProjectGUID="{71879D37-84A8-4949-8CDB-212982F81D80}"
+ RootNamespace="multi_unique"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_unique"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_unique"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_unique.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/multi_within.cpp b/libs/geometry/test/multi/algorithms/multi_within.cpp
new file mode 100644
index 000000000..59db2dbc6
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_within.cpp
@@ -0,0 +1,59 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+//
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/multi/io/wkt/wkt.hpp>
+
+#include <boost/geometry/algorithms/correct.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/multi/core/point_order.hpp>
+#include <boost/geometry/multi/algorithms/within.hpp>
+
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <algorithms/test_within.hpp>
+
+
+template <typename P>
+void test_all()
+{
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > mp;
+
+ // test multi-with-one-polygon (trivial case)
+ test_geometry<P, mp>("POINT(1 1)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", true);
+ test_geometry<P, mp>("POINT(3 3)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", false);
+ test_geometry<P, mp>("POINT(0 1)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", false);
+ test_geometry<P, mp>("POINT(4 4)", "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)))", false);
+
+ // test if it is in one of them
+ std::string multi("MULTIPOLYGON("
+ "((0 0,0 2,2 2,2 0,0 0))"
+ "((3 3,3 6,6 6,6 3,3 3))"
+ ")");
+ test_geometry<P, mp>("POINT(4 4)", multi, true);
+ test_geometry<P, mp>("POINT(1 1)", multi, true);
+ test_geometry<P, mp>("POINT(0 1)", multi, false);
+}
+
+int test_main( int , char* [] )
+{
+ //test_all<bg::model::d2::point_xy<int> >();
+ test_all<bg::model::d2::point_xy<double> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::d2::point_xy<ttmath_big> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/multi_within.vcproj b/libs/geometry/test/multi/algorithms/multi_within.vcproj
new file mode 100644
index 000000000..f5d6ad350
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/multi_within.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_within"
+ ProjectGUID="{CA8D5E44-7D8F-44A1-901C-35C28890299B}"
+ RootNamespace="multi_within"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_within"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_within"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops;..\..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_within.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/algorithms/overlay/Jamfile.v2 b/libs/geometry/test/multi/algorithms/overlay/Jamfile.v2
new file mode 100644
index 000000000..a2e9a0ce5
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/overlay/Jamfile.v2
@@ -0,0 +1,14 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-multi-algorithms-overlay
+ :
+ [ run multi_traverse.cpp ]
+ ;
diff --git a/libs/geometry/test/multi/algorithms/overlay/multi_overlay.sln b/libs/geometry/test/multi/algorithms/overlay/multi_overlay.sln
new file mode 100644
index 000000000..ecb94cc33
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/overlay/multi_overlay.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_traverse", "multi_traverse.vcproj", "{DB00BBA3-4959-4F9E-A235-E487FF766207}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {DB00BBA3-4959-4F9E-A235-E487FF766207}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DB00BBA3-4959-4F9E-A235-E487FF766207}.Debug|Win32.Build.0 = Debug|Win32
+ {DB00BBA3-4959-4F9E-A235-E487FF766207}.Release|Win32.ActiveCfg = Release|Win32
+ {DB00BBA3-4959-4F9E-A235-E487FF766207}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/multi/algorithms/overlay/multi_overlay_cases.hpp b/libs/geometry/test/multi/algorithms/overlay/multi_overlay_cases.hpp
new file mode 100644
index 000000000..0ddd3a0a7
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/overlay/multi_overlay_cases.hpp
@@ -0,0 +1,446 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_MULTI_OVERLAY_CASES_HPP
+#define BOOST_GEOMETRY_TEST_MULTI_OVERLAY_CASES_HPP
+
+
+#include <string>
+
+
+static std::string case_multi_simplex[2] = {
+ "MULTIPOLYGON(((0 1,2 5,5 3,0 1)),((1 1,5 2,5 0,1 1)))",
+ "MULTIPOLYGON(((3 0,0 3,4 5,3 0)))" };
+
+// To mix multi/single
+static std::string case_single_simplex = "POLYGON((3 0,0 3,4 5,3 0))";
+
+static std::string case_multi_no_ip[2] =
+{
+ "MULTIPOLYGON(((4 1,0 7,7 9,4 1)),((8 1,6 3,10 4,8 1)),((12 6,10 7,13 8,12 6)))",
+ "MULTIPOLYGON(((14 4,8 8,15 10,14 4)),((15 3,18 9,20 2,15 3)),((3 4,1 7,5 7,3 4)))"
+};
+
+static std::string case_multi_2[2] =
+{
+ "MULTIPOLYGON(((4 3,2 7,10 9,4 3)),((8 1,6 3,10 4,8 1)),((12 6,10 7,13 8,12 6)))",
+ "MULTIPOLYGON(((14 4,8 8,15 10,14 4)),((15 3,18 9,20 2,15 3)),((5 5,4 7,7 7,5 5)))"
+};
+
+static std::string case_61_multi[2] =
+{
+ // extracted from recursive boxes
+ "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((2 2,2 3,3 3,3 2,2 2)))",
+ "MULTIPOLYGON(((1 2,1 3,2 3,2 2,1 2)),((2 3,2 4,3 4,3 3,2 3)))"
+};
+
+static std::string case_62_multi[2] =
+{
+ // extracted from recursive boxes
+ "MULTIPOLYGON(((1 2,1 3,2 3,2 2,1 2)))",
+ "MULTIPOLYGON(((1 2,1 3,2 3,2 2,1 2)),((2 3,2 4,3 4,3 3,2 3)))"
+};
+
+static std::string case_63_multi[2] =
+{
+ // extracted from recursive boxes
+ "MULTIPOLYGON(((1 2,1 3,2 3,2 2,1 2)))",
+ "MULTIPOLYGON(((1 2,1 3,2 3,2 2,1 2)),((2 1,2 2,3 2,3 1,2 1)))"
+};
+
+static std::string case_64_multi[3] =
+{
+ // extracted from recursive boxes
+ "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((2 2,2 3,3 3,3 2,2 2)))",
+ "MULTIPOLYGON(((1 1,1 2,2 2,3 2,3 1,2 1,1 1)))" ,
+ // same but omitting not-necessary form-points at x=2 (==simplified)
+ "MULTIPOLYGON(((1 1,1 2,3 2,3 1,1 1)))"
+};
+
+static std::string case_65_multi[2] =
+{
+ "MULTIPOLYGON(((2 2,2 3,3 3,3 2,2 2)))",
+ "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((2 2,2 3,3 3,3 2,2 2)),((3 1,3 2,5 2,5 1,3 1)))"
+};
+
+static std::string case_66_multi[2] =
+{
+ "MULTIPOLYGON(((3 5,2 5,2 6,3 6,4 6,4 5,3 5)),((1 6,0 6,0 7,1 7,2 7,2 6,1 6)))",
+ "MULTIPOLYGON(((1 4,1 5,2 5,2 4,1 4)),((1 7,2 7,2 6,1 6,1 7)),((0 8,0 9,1 9,1 8,1 7,0 7,0 8)))"
+};
+
+static std::string case_67_multi[2] =
+{
+ "MULTIPOLYGON(((1 2,1 3,2 3,2 2,1 2)),((2 1,2 2,3 2,3 1,2 1)))",
+ "MULTIPOLYGON(((1 1,1 2,3 2,3 1,1 1)))"
+};
+
+static std::string case_68_multi[2] =
+{
+ "MULTIPOLYGON(((2 1,2 2,4 2,4 1,2 1)),((4 2,4 3,5 3,5 2,4 2)))",
+ "MULTIPOLYGON(((1 2,1 3,2 3,2 2,1 2)),((2 1,2 2,3 2,3 1,2 1)),((3 2,3 3,5 3,5 2,3 2)))"
+};
+
+static std::string case_69_multi[2] =
+{
+ "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((3 2,3 3,4 3,4 2,3 2)))",
+ "MULTIPOLYGON(((2 0,2 1,3 1,3 0,2 0)),((1 1,1 3,2 3,2 1,1 1)),((2 3,2 4,3 4,3 3,2 3)))"
+};
+
+static std::string case_71_multi[2] =
+{
+ "MULTIPOLYGON(((0 0,0 3,1 3,1 1,3 1,3 2,4 2,4 0,0 0)),((2 2,2 3,3 3,3 2,2 2)))",
+ "MULTIPOLYGON(((0 2,0 3,3 3,3 2,0 2)))"
+};
+
+static std::string case_72_multi[2] =
+{
+ // cluster with ii, done by both traverse and assemble
+ "MULTIPOLYGON(((0 3,4 4,3 0,3 3,0 3)),((3 3,2 1,1 2,3 3)))",
+ "MULTIPOLYGON(((0 0,1 4,3 3,4 1,0 0)))"
+};
+
+static std::string case_73_multi[2] =
+{
+ "MULTIPOLYGON(((2 2,2 3,3 3,3 2,2 2)),((1 1,1 2,2 2,2 1,1 1)))",
+ "MULTIPOLYGON(((1 1,1 2,2 2,2 3,3 3,3 1,1 1)))"
+};
+
+static std::string case_74_multi[2] =
+{
+ "MULTIPOLYGON(((3 0,2 0,2 1,3 1,3 3,1 3,1 2,2 2,2 1,0 1,0 5,4 5,4 0,3 0)))",
+ "MULTIPOLYGON(((0 2,0 3,1 3,1 1,2 1,2 0,0 0,0 2)),((2 3,1 3,1 4,2 4,2 3)))"
+};
+
+static std::string case_75_multi[2] =
+{
+ // cc/uu turns on all corners of second box
+ "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((1 3,1 4,2 4,2 3,1 3)),((2 2,2 3,3 3,3 2,2 2)),((3 1,3 2,4 2,4 1,3 1)),((3 3,3 4,4 4,4 3,3 3)))",
+ "MULTIPOLYGON(((2 2,2 3,3 3,3 2,2 2)))"
+};
+
+static std::string case_76_multi[2] =
+{
+ // cc/uu turns on all corners of second box, might generate TWO OVERLAPPING union polygons!
+ // therefore, don't follow uu.
+ "MULTIPOLYGON(((1 0,1 1,2 1,2 0,1 0)),((3 2,4 2,4 1,3 1,3 2)),((2 2,2 3,3 3,3 2,2 2)),((2 3,1 3,1 4,2 4,2 3)),((3 3,3 4,4 4,4 3,3 3)))",
+ "MULTIPOLYGON(((0 2,0 3,1 3,1 2,2 2,2 0,1 0,1 1,0 1,0 2)),((2 2,2 3,3 3,3 2,2 2)))"
+};
+
+static std::string case_77_multi[2] =
+{
+ // with a point on interior-ring-border of enclosing
+ // -> went wrong in the assemble phase for intersection (traversal is OK)
+ // -> fixed
+ "MULTIPOLYGON(((3 3,3 4,4 4,4 3,3 3)),((5 3,5 4,4 4,4 5,3 5,3 6,5 6,5 5,7 5,7 6,8 6,8 5,9 5,9 2,8 2,8 1,7 1,7 2,5 2,5 3),(6 3,8 3,8 4,6 4,6 3)))",
+ "MULTIPOLYGON(((6 3,6 4,7 4,7 3,6 3)),((2 3,1 3,1 4,3 4,3 5,4 5,4 6,5 6,5 7,9 7,9 4,7 4,7 5,8 5,8 6,7 6,7 5,6 5,6 4,4 4,4 3,3 3,3 2,2 2,2 3)),((5 2,4 2,4 3,6 3,6 2,5 2)),((7 2,7 3,8 3,8 2,8 1,7 1,7 2)))"
+};
+
+static std::string case_78_multi[2] =
+{
+ "MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0),(2 2,4 2,4 3,2 3,2 2)))",
+ "MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0),(3 2,4 2,4 3,3 3,3 2),(1 1,2 1,2 2,1 2,1 1)))"
+
+};
+
+static std::string case_80_multi[2] =
+{
+ // Many ux-clusters -> needs correct cluster-sorting
+ // Fixed now
+ "MULTIPOLYGON(((3 1,3 2,4 2,3 1)),((1 5,0 4,0 5,1 6,1 5)),((3 3,4 3,3 2,2 2,2 3,3 3)),((4 5,5 6,5 5,4 5)),((4 2,4 3,5 3,4 2)),((2.5 5.5,3 5,2 5,2 7,3 6,2.5 5.5)),((1 6,0 6,0 7,1 7,2 6,1 6)))",
+ "MULTIPOLYGON(((3 5,3 6,4 6,4 5,3 5)),((4 4,5 5,5 4,4 4)),((3 3,4 4,4 3,3 3)),((1 5,1 6,2 6,2 5,1 5)),((0 6,1 7,1 6,0 6)),((1 4,1 3,0 3,0 4,1 4)),((3 5,4 4,3 4,3 3,2 3,2 5,3 5)))"
+};
+
+static std::string case_81_multi[2] =
+{
+ "MULTIPOLYGON(((1 1,2 2,2 1,1 1)),((2 2,2 3,3 2,2 2)),((3 1,4 2,4 1,3 1)))",
+ "MULTIPOLYGON(((2 1,2 2,3 3,3 2,4 2,3 1,2 1)))"
+};
+
+static std::string case_82_multi[2] =
+{
+ "MULTIPOLYGON(((4 0,5 1,5 0,4 0)),((2 1,3 2,3 1,2 1)),((3 0,4 1,4 0,3 0)),((1 0,1 1,2 1,2 0,1 0)))",
+ "MULTIPOLYGON(((3 2,4 3,4 2,3 2)),((3 1,3 2,4 1,3 1)),((0 0,1 1,1 0,0 0)),((5 1,5 0,4 0,4 1,5 1)))"
+};
+
+static std::string case_83_multi[2] =
+{
+ // iu/iu
+ "MULTIPOLYGON(((1 0,1 1,2 1,1 0)),((0 1,0 4,1 4,1 1,0 1)),((2 1,2 2,3 2,3 1,2 1)),((2 3,3 4,3 3,2 3)))",
+ "MULTIPOLYGON(((1 0,2 1,2 0,1 0)),((0 3,1 4,1 3,0 3)),((2 3,2 4,3 3,2 3)),((1 3,2 3,2 2,0 2,1 3)))"
+};
+
+static std::string case_84_multi[2] =
+{
+ // iu/ux
+ "MULTIPOLYGON(((2 2,3 3,3 2,2 2)),((2 1,2 2,3 1,2 1)),((2 3,3 4,3 3,2 3)),((1 3,2 4,2 2,1 2,1 3)))",
+ "MULTIPOLYGON(((2 3,3 3,3 1,2 1,2 2,1 2,1 3,2 3)))"
+};
+
+static std::string case_85_multi[2] =
+{
+ // iu/ux (and ux/ux)
+ "MULTIPOLYGON(((0 1,0 2,1 2,0 1)),((1 1,1 2,2 1,1 1)),((0 3,1 3,0 2,0 3)))",
+ "MULTIPOLYGON(((1 3,2 3,2 1,1 1,1 2,0 2,1 3)))"
+};
+
+static std::string case_86_multi[2] =
+{
+ // iu/ux
+ "MULTIPOLYGON(((4 2,4 3,5 3,4 2)),((5 2,6 3,6 2,5 2)),((5 1,4 1,4 2,5 2,6 1,5 1)))",
+ "MULTIPOLYGON(((5 1,5 2,6 2,6 1,5 1)),((4 2,5 3,5 2,4 2)),((3 2,4 3,4 2,3 2)))"
+};
+
+static std::string case_87_multi[2] =
+{
+ // iu/ux where iu crosses, no touch
+ "MULTIPOLYGON(((5 0,5 1,6 0,5 0)),((6 2,7 3,7 2,6 2)),((5 1,5 3,6 3,6 1,5 1)))",
+ "MULTIPOLYGON(((5 1,5 2,7 2,7 1,6 1,6 0,5 0,5 1)),((4 3,5 3,5 2,3 2,4 3)))"
+};
+
+
+static std::string case_88_multi[2] =
+{
+ "MULTIPOLYGON(((0 0,0 1,1 0,0 0)),((1 1,1 2,2 1,1 1)),((0 2,0 3,1 3,2 3,2 2,1 2,0 1,0 2)))",
+ "MULTIPOLYGON(((0 0,0 1,1 0,0 0)),((0 1,1 2,1 1,0 1)),((0 2,0 3,1 3,1 2,0 2)))"
+};
+
+static std::string case_89_multi[2] =
+{
+ // Extract from rec.boxes_3
+ "MULTIPOLYGON(((8 1,7 1,8 2,8 3,9 4,9 2,8.5 1.5,9 1,8 0,8 1)),((9 1,9 2,10 2,10 1,9 0,9 1)))",
+ "MULTIPOLYGON(((8 3,9 4,9 3,8 3)),((7 0,7 1,8 1,8 0,7 0)),((9 2,9 1,8 1,8 3,8.5 2.5,9 3,9 2)))"
+};
+
+static std::string case_90_multi[2] =
+{
+ // iu/iu for Union; see ppt
+ "MULTIPOLYGON(((1 8,0 8,0 10,1 10,1 9,2 8,2 7,1 7,1 8)),((2 9,2 10,4 10,4 9,3 9,3 8,2 8,2 9)))",
+ "MULTIPOLYGON(((2 8,1 8,1 9,2 9,2 10,3 10,3 8,2 8)),((0 10,2 10,0 8,0 10)))"
+};
+
+static std::string case_91_multi[2] =
+{
+ // iu/xi for Intersection
+ "MULTIPOLYGON(((3 3,3 4,4 4,3 3)),((2 2,1 2,1 4,2 4,2 3,3 3,2 2)))",
+ "MULTIPOLYGON(((2 2,2 3,3 2,2 2)),((2 3,1 3,1 4,1.5 3.5,2 4,2.5 3.5,3 4,3 3,2 3)))"
+};
+
+static std::string case_92_multi[2] =
+{
+ // iu/iu all aligned (for union)
+ "MULTIPOLYGON(((7 2,7 3,8 2,7 2)),((8 4,9 5,9 4,8 4)),((8 2,8 3,9 2,8 2)),((7 3,7 4,8 4,8 3,7 3)),((9 3,9 4,10 4,10 3,9 3)))",
+ "MULTIPOLYGON(((9 2,8 2,8 3,9 3,10 2,9 2)),((7 5,8 5,9 6,9 4,8 4,7 3,6 3,6 4,6.5 3.5,7 4,6 4,7 5)))"
+};
+
+static std::string case_93_multi[2] =
+{
+ // iu/xi for intersection
+ "MULTIPOLYGON(((6 2,7 2,7 1,5 1,6 2)),((7 3,8 3,7.5 2.5,8 2,7 2,7 3)))",
+ "MULTIPOLYGON(((7 1,6 0,6 2,7 3,7 2,8 3,8 2,7 1)))"
+};
+
+
+static std::string case_94_multi[2] =
+{
+ // iu/iu for union
+ "MULTIPOLYGON(((9 2,9 3,10 3,10 2,9 2)),((7 3,8 4,9 3,8 3,9 2,7 2,7 3)),((8 6,9 5,9 4,8 4,8 6)))",
+ "MULTIPOLYGON(((6 2,6 3,7 3,8 2,6 2)),((9 3,10 3,9 2,9 1,8 0,7 0,8 1,8 3,8.5 2.5,9 3)),((7 4,7 5,8 5,9 6,9 4,8 4,8 3,7 3,7 4)))"
+};
+
+static std::string case_95_multi[2] =
+{
+ // iu/iu for union
+ "MULTIPOLYGON(((0 8,1 8,1 7,0 7,0 8)),((2 8,2 9,2.5 8.5,3 9,3 7,2 7,2 8)),((1 9,1 10,2 9,1 8,1 9)))",
+ "MULTIPOLYGON(((1 7,0 7,0 8,1 8,2 7,1 7)),((2 9,1 9,1 10,2 10,3 9,4 9,4 8,2 8,2 9)))"
+};
+
+static std::string case_96_multi[2] =
+{
+ // iu/iu all collinear, for intersection/union
+ "MULTIPOLYGON(((8 2,9 3,9 2,8 2)),((8 1,9 2,9 1,10 1,10 0,8 0,8 1)))",
+ "MULTIPOLYGON(((9 0,9 1,10 0,9 0)),((8 1,8 2,9 2,9 1,8 1)))"
+};
+
+static std::string case_97_multi[2] =
+{
+ // ux/ux for union
+ "MULTIPOLYGON(((4 4,4 5,4.5 4.5,5 5,6 5,5 4,5 3,4 3,4 4)))",
+ "MULTIPOLYGON(((5 3,5 4,6 3,5 3)),((6 5,7 5,6 4,5 4,6 5)))"
+};
+
+
+static std::string case_98_multi[2] =
+{
+ // ii/iu for intersection, solved by discarding iu (ordering not possible)
+ "MULTIPOLYGON(((2 0,3 1,3 0,2 0)),((2 2,2 3,1 3,1 4,2 4,3 3,3 4,5 2,4 2,4 1,3 1,3 2,2.5 1.5,3 1,2 1,2 2)))",
+ "MULTIPOLYGON(((4 2,4 3,5 2,4 2)),((1 0,0 0,0 2,4 2,4 1,2 1,2 0,1 0)),((3 3,4 4,4 3,3 2,3 3)))"
+};
+
+static std::string case_99_multi[2] =
+{
+ // iu/iu for intersection
+ "MULTIPOLYGON(((1 0,2 1,2 0,1 0)),((1 2,2 2,1.5 1.5,2 1,1 1,1 0,0 0,0 1,1 2)))",
+ "MULTIPOLYGON(((1 1,2 0,0 0,1 1)),((1 1,0 1,0 2,1 2,2 3,2 2,1 1)))"
+};
+
+static std::string case_100_multi[2] =
+{
+ // for intersection
+ "MULTIPOLYGON(((0 0,0 1,1 0,0 0)),((2 2,2 1,0 1,0 2,1 2,2 3,2 2)))",
+ "MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((1 2,0 1,0 3,1 4,1 2)))"
+};
+
+static std::string case_101_multi[2] =
+{
+ // interior ring / union
+ "MULTIPOLYGON(((7 2,7 3,8 2,7 2)),((9 3,9 4,10 3,9 3)),((10 1,10 0,8 0,8 1,9 2,10 2,10 1)),((9 3,9 2,8 2,8 3,7 3,7 4,8 4,9 3)),((8 4,8 7,9 6,9 4,8 4)))",
+ "MULTIPOLYGON(((6 1,5 1,5 2,6 3,6 4,7 5,6 5,7 6,8 6,8 5,9 5,8 4,9 4,9 5,10 5,10 1,8 1,8 3,7 3,7 2,6 2,7 1,8 1,7 0,5 0,5 1,5.5 0.5,6 1),(8.5 2.5,9 2,9 3,8.5 2.5)))"
+};
+
+static std::string case_102_multi[2] =
+{
+ // interior ring 'fit' / union
+ "MULTIPOLYGON(((0 2,0 7,5 7,5 2,0 2),(4 3,4 6,1 6,2 5,1 5,1 4,3 4,4 3)),((3 4,3 5,4 5,3 4)),((2 5,3 6,3 5,2 4,2 5)))",
+ "MULTIPOLYGON(((0 2,0 7,5 7,5 2,0 2),(2 4,3 5,2 5,2 4),(4 4,3 4,3 3,4 4),(4 5,4 6,3 6,4 5)))"
+};
+
+static std::string case_103_multi[2] =
+{
+ // interior ring 'fit' (ix) / union / assemble
+ "MULTIPOLYGON(((0 0,0 5,5 5,5 0,2 0,2 1,3 1,3 2,2 2,2 3,1 2,2 2,2 1,1 0,0 0)))",
+ "MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0),(2 1,2 2,1 1,2 1)))"
+};
+
+static std::string case_104_multi[2] =
+{
+ // interior ring 'fit' (ii) / union / assemble
+ "MULTIPOLYGON(((1 0,1 1,0 1,0 5,5 5,5 0,2 0,2 1,1 0),(2 2,3 3,2 3,2 2)))",
+ "MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0),(1 1,3 1,3 2,1 2,1 1)))"
+};
+
+static std::string case_105_multi[2] =
+{
+ // interior ring 'fit' () / union / assemble
+ "MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0),(2 2,3 2,3 3,1 3,2 2)))",
+ "MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0),(1 1,2 1,2 2,1 1),(2 1,3 1,3 2,2 1),(1 3,3 3,3 4,2 3,2 4,1 4,1 3)))"
+};
+
+static std::string case_106_multi[2] =
+{
+ // interior ring 'fit' () / union / assemble
+ "MULTIPOLYGON(((0 0,0 3,1 2,1 3,2 3,2 1,3 2,2 2,3 3,2 3,3 4,1 4,1 3,0 3,0 5,5 5,5 0,0 0)))",
+ "MULTIPOLYGON(((0 0,0 5,1 5,1 4,2 4,2 5,3 5,3 3,4 4,5 4,5 0,2 0,3 1,2 1,2 3,1 3,2 2,1.5 1.5,2 1,1 1,0 0)),((1 0,2 1,2 0,1 0)))"
+};
+
+static std::string case_107_multi[2] =
+{
+ // For CCW polygon reports a iu/iu problem.
+ "MULTIPOLYGON(((6 8,7 9,7 7,8 7,7 6,6 6,6 8)),((6.5 9.5,7 10,7 9,6 9,6 10,6.5 9.5)))",
+ "MULTIPOLYGON(((5 7,6 8,6 10,7 9,8 10,8 8,7 8,6 7,6 6,5 7)))"
+};
+
+
+static std::string case_recursive_boxes_1[2] =
+{
+ // == 70
+ // Used in blog. KEEP
+ "MULTIPOLYGON(((1 0,0 0,0 1,1 1,1 2,0 2,0 4,2 4,2 5,3 5,3 6,1 6,1 5,0 5,0 10,9 10,9 9,7 9,7 8,6 8,6 7,8 7,8 6,9 6,9 4,8 4,8 5,7 5,7 6,6 6,6 5,5 5,5 4,4 4,4 3,5 3,5 2,7 2,7 3,6 3,6 4,8 4,8 3,10 3,10 0,6 0,6 1,5 1,5 0,1 0),(4 7,4 9,3 9,3 7,4 7),(8 1,9 1,9 2,8 2,8 1)),((10 7,10 6,9 6,9 7,8 7,8 8,9 8,9 9,10 9,10 7)))",
+ "MULTIPOLYGON(((1 0,0 0,0 7,2 7,2 6,5 6,5 5,4 5,4 4,5 4,5 3,7 3,7 2,6 2,6 0,1 0),(2 1,2 2,3 2,3 3,1 3,1 1,2 1)),((7 0,7 2,10 2,10 0,9 0,9 1,8 1,8 0,7 0)),((6 4,6 6,5 6,5 7,6 7,6 8,5 8,5 7,3 7,3 9,2 9,2 8,1 8,1 10,4 10,4 9,6 9,6 10,10 10,10 9,9 9,9 8,10 8,10 6,9 6,9 5,10 5,10 3,7 3,7 4,6 4),(7 7,7 6,8 6,8 7,7 7)))"
+};
+
+static std::string case_recursive_boxes_2[2] =
+{
+ // Traversal problem; Many ii-cases -> formerly caused "Endless loop"
+ // So it appears that there might be more decisions than intersection points
+ "MULTIPOLYGON(((1 0,0 0,0 4,1 4,1 5,0 5,0 10,3 10,3 9,4 9,4 10,6 10,6 9,5 9,5 8,6 8,6 9,7 9,7 10,10 10,10 0,1 0),(7 6,8 6,8 7,9 7,9 8,8 8,8 7,7 7,7 6),(9 1,9 2,8 2,8 1,9 1)))",
+ "MULTIPOLYGON(((0 0,0 10,10 10,10 0,8 0,8 1,7 1,7 0,0 0),(7 3,6 3,6 2,7 2,7 3),(6 7,7 7,7 8,6 8,6 7)))"
+};
+
+
+static std::string case_recursive_boxes_3[2] =
+{
+ // Previously a iu/ux problem causing union to fail.
+ // For CCW polygon it also reports a iu/iu problem.
+ // KEEP
+ "MULTIPOLYGON(((8 3,9 4,9 3,8 3)),((5 9,5 10,6 10,5 9)),((2 0,2 1,3 0,2 0)),((2 5,2 6,3 6,3 5,2 5)),((2 2,1 2,1 3,2 3,3 2,3 1,2 1,2 2)),((6 8,7 9,7 7,8 7,7 6,6 6,6 8)),((4 6,5 7,5 6,4 6)),((4 8,4 9,5 9,5 8,4 8)),((0 3,1 4,1 3,0 3)),((8 7,9 8,9 7,8 7)),((9 6,9 7,10 7,9 6)),((7 0,8 1,8 0,7 0)),((0 4,0 5,1 5,1 4,0 4)),((4 2,5 3,5 2,4 1,4 2)),((4 10,4 9,2 9,3 10,4 10)),((5 2,6 3,7 3,7 2,6 2,6 1,5 0,5 2)),((5 3,4 3,4 4,2 4,4 6,4 5,4.5 4.5,6 6,6 5,7 4,5 4,5 3)),((10 2,9 1,9 3,10 2)),((8 4,7 4,8 5,7 5,7 6,9 6,9 5,10 5,10 4,8 4)),((1 7,0 7,0 8,1 8,1 7)),((1 10,2 10,1 9,0 9,0 10,1 10)),((6.5 9.5,7 10,7 9,6 9,6 10,6.5 9.5)),((8 8,8 9,10 9,9 8,8 8)))",
+ "MULTIPOLYGON(((0 7,0 8,1 8,1 7,0 7)),((5 3,4 3,4 4,6 4,6 3,7 3,6 2,5 2,5 3)),((8 2,8 3,9 2,8 2)),((1 1,2 2,2 1,1 1)),((2 1,3 1,2 0,1 0,2 1)),((2 3,3 4,3 3,2 3)),((1 9,2 8,1 8,1 9)),((2 10,2 9,1 9,1 10,2 10)),((9 7,9 8,10 8,10 7,9 7)),((6 0,6 1,7 1,7 0,6 0)),((8 0,9 1,9 0,8 0)),((1 6,1 5,0 5,1 6)),((0 2,1 1,0 1,0 2)),((1 3,2 3,2 2,1 2,1 3)),((5 1,5 0,4 0,4 1,3 1,4 2,5 2,6 1,5 1)),((1 3,0 3,0 4,1 4,1 3)),((3 6,4 5,2 5,3 6)),((9 2,10 2,10 1,9 1,9 2)),((7 5,6 4,6 5,7 6,8 6,8 5,7 5)),((7 4,8 5,8.5 4.5,9 5,9 4,8 4,8.5 3.5,9 4,10 3,7 3,7 4)),((1 6,1 7,3 7,3 8,4 7,5 7,6 8,6 10,7 9,8 10,9 10,9 9,8 9,8 8,7 8,6 7,6 6,1 6)))"
+};
+
+
+static std::string case_recursive_boxes_4[2] =
+{
+ // Occurred after refactoring assemble
+ "MULTIPOLYGON(((9 3,10 4,10 3,9 3)),((9 9,10 10,10 9,9 9)),((0 1,0 3,1 4,0 4,0 5,1 6,0 6,0 8,1 9,1 8,2 9,2 7,1.5 6.5,2.5 5.5,3 6,3 5,4 6,2 6,2 7,3 8,2 8,3 9,0 9,0 10,6 10,5.5 9.5,6 9,6 10,7 10,7.5 9.5,8 10,8 9,7 9,7 8,6 8,6.5 7.5,7 8,8 8,8 9,9 9,9.5 8.5,10 9,10 8,9.5 7.5,10 7,10 5,8 5,8 4,7 3,7 2,8 3,8 4,9 5,9 3,10 2,10 1,8 1,8.5 0.5,9 1,10 0,4 0,4 1,3 1,3 0,1 0,1 1,0 0,0 1),(4 2,4.5 1.5,5 2,5 4,4.5 3.5,5 3,4 3,4 2),(3 3,4 4,2 4,2.5 3.5,3 4,3 3),(6 4,6.5 3.5,7 4,6 4),(5 7,5 9,4 9,4 8,5 7)))",
+ "MULTIPOLYGON(((1 0,2 1,2 0,1 0)),((7 9,7 10,8 10,7 9)),((1 0,0 0,0 3,1 3,2 2,2 3,1 3,1 4,2 4,2 5,1 4,0 4,0 8,1 7,1 6,2 7,1 7,1 9,0 9,0 10,7 10,6 9,6.5 8.5,7 9,8 9,9 8,8 8,9 7,9 6,10 7,10 5,9 5,9 4,10 5,10 0,7 0,8 1,7 1,6 0,3 0,3 1,1 1,1 0),(5 1,5.5 0.5,6 1,6 2,6.5 1.5,7 2,8 2,8 4,7 3,6 3,6 2,5 2,6 1,5 1),(4 4,5 4,5 5,4 4),(4 6,4 7,3 7,2 6,3 6,3 7,4 6),(6 5,6.5 4.5,7 5,6 5,7 6,7 7,6 7,6 5),(3.5 7.5,4 8,4 9,3 8,3.5 7.5)),((9 8,9 9,8 9,9 10,10 10,10 8,9 8)))"
+};
+
+static std::string pie_21_7_21_0_3[2] =
+{
+ "MULTIPOLYGON(((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,3828 2144,3690 1812,3472 1527,3187 1309,2855 1171,2499 1125,2144 1171,1812 1309,1527 1527,1309 1812,1171 2144,1125 2499,1171 2855,1309 3187,2500 2500)))",
+ "MULTIPOLYGON(((2500 2500,1704 3295,1937 3474,2208 3586,2499 3625,2791 3586,3062 3474,3295 3295,2500 2500)),((2500 2500,3586 2791,3625 2500,3586 2208,2500 2500)))"
+};
+
+static std::string pie_23_19_5_0_2[2] =
+{
+ "MULTIPOLYGON(((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,3828 2144,3690 1812,3472 1527,3187 1309,2855 1171,2499 1125,2144 1171,1812 1309,1527 1527,1309 1812,1171 2144,1125 2499,1171 2855,1309 3187,1527 3472,1812 3690,2500 2500)))",
+ "MULTIPOLYGON(((2500 2500,3586 2791,3625 2500,3586 2208,3474 1937,3295 1704,3062 1525,2791 1413,2499 1375,2208 1413,1937 1525,1704 1704,1525 1937,1413 2208,1375 2500,1413 2791,1525 3062,1704 3295,1937 3474,2208 3586,2500 2500)),((2500 2500,2791 3586,3062 3474,2500 2500)))"
+};
+
+static std::string pie_7_14_5_0_7[2] =
+{
+ "MULTIPOLYGON(((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,2500 2500)))",
+ "MULTIPOLYGON(((2500 2500,3586 2791,3625 2500,3586 2208,3474 1937,3295 1704,3062 1525,2791 1413,2499 1375,2208 1413,1937 1525,1704 1704,1525 1937,1413 2208,1375 2500,2500 2500)),((2500 2500,1525 3062,1704 3295,1937 3474,2208 3586,2499 3625,2791 3586,3062 3474,2500 2500)))"
+};
+
+static std::string pie_16_16_9_0_2[2] =
+{
+ "MULTIPOLYGON(((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,3828 2144,3690 1812,3472 1527,3187 1309,2855 1171,2499 1125,2144 1171,1812 1309,1527 1527,2500 2500)))",
+ "MULTIPOLYGON(((2500 2500,3295 1704,3062 1525,2791 1413,2499 1375,2208 1413,1937 1525,1704 1704,1525 1937,1413 2208,1375 2500,1413 2791,1525 3062,1704 3295,1937 3474,2208 3586,2499 3625,2500 2500)),((2500 2500,3062 3474,3295 3295,2500 2500)))"
+};
+
+static std::string pie_7_2_1_0_15[2] =
+{
+ "MULTIPOLYGON(((2500 2500,2500 3875,2855 3828,3187 3690,3472 3472,3690 3187,3828 2855,3875 2500,2500 2500)))",
+ "MULTIPOLYGON(((2500 2500,2791 3586,3062 3474,2500 2500)),((2500 2500,3474 3062,3586 2791,3625 2500,3586 2208,3474 1937,3295 1704,3062 1525,2791 1413,2499 1375,2208 1413,1937 1525,1704 1704,1525 1937,1413 2208,1375 2500,2500 2500)))"
+};
+
+// Case, not literally on this list but derived, to mix polygon/multipolygon in call to difference
+static std::string ggl_list_20111025_vd[4] =
+ {
+ "POLYGON((0 0,0 4,4 0,0 0))",
+ "POLYGON((10 0,10 5,15 0,10 0))",
+ "MULTIPOLYGON(((0 0,0 4,4 0,0 0)))",
+ "MULTIPOLYGON(((10 0,10 5,15 0,10 0)))"
+ };
+
+// Same, mail with other case with text "Say the MP is the 2 squares below and P is the blue-ish rectangle."
+static std::string ggl_list_20111025_vd_2[2] =
+ {
+ "POLYGON((5 0,5 4,8 4,8 0,5 0))",
+ "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)),((4 0,4 2,6 2,6 0,4 0)))"
+ };
+
+// Mail of h2 indicating that reversed order (in second polygon) has ix/ix problems
+static std::string ggl_list_20120915_h2[3] =
+ {
+ "MULTIPOLYGON(((-2 5, -1 5, 0 5, 2 5, 2 -2, 1 -2, 1 -1, 0 -1,0 0, -1 0, -2 0, -2 5)))",
+ "MULTIPOLYGON(((0 0, 1 0, 1 -1, 0 -1, 0 0)), ((-1 5, 0 5, 0 0, -1 0, -1 5)))",
+ "MULTIPOLYGON(((-1 5, 0 5, 0 0, -1 0, -1 5)), ((0 0, 1 0, 1 -1, 0 -1, 0 0)))"
+ };
+
+// Mail of volker, about another problem, but this specific example is causing two-point inner rings polygons which should be discarded
+// (condition of num_points in detail/overlay/convert_ring.hpp)
+static std::string ggl_list_20120221_volker[2] =
+ {
+ "MULTIPOLYGON(((1032 2130,1032 1764,2052 2712,1032 2130)),((3234 2580,2558 2690,3234 2532,3234 2580)),((2558 2690,2136 2790,2052 2712,2136 2760,2558 2690)))",
+ "MULTIPOLYGON(((3232 2532.469945355191,2136 2790,1032 1764,1032 1458,1032 1212,2136 2328,3232 2220.196721311475,3232 1056,1031 1056,1031 2856,3232 2856,3232 2532.469945355191),(3232 2412.426229508197,2136 2646,3232 2412.426229508197)))"
+ };
+
+
+#endif // BOOST_GEOMETRY_TEST_MULTI_OVERLAY_CASES_HPP
diff --git a/libs/geometry/test/multi/algorithms/overlay/multi_overlay_common.hpp b/libs/geometry/test/multi/algorithms/overlay/multi_overlay_common.hpp
new file mode 100644
index 000000000..5f24f3e82
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/overlay/multi_overlay_common.hpp
@@ -0,0 +1,40 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+
+
+#ifndef GEOMETRY_TEST_MULTI_OVERLAY_COMMON_HPP
+#define GEOMETRY_TEST_MULTI_OVERLAY_COMMON_HPP
+
+
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/multi/io/wkt/read.hpp>
+//#include <boost/geometry/multi/io/svg/write_svg.hpp>
+
+
+
+template <typename P, typename Functor, typename T>
+void test_all(std::vector<T> const& expected, double precision = 0.01)
+{
+ typename boost::range_const_iterator<std::vector<T> >::type iterator
+ = boost::begin(expected);
+
+ typedef bg::model::multi_polygon<bg::model::polygon<P> > mp;
+ typedef bg::model::box<P> box;
+
+ BOOST_ASSERT(iterator != boost::end(expected));
+ test_overlay<mp, mp, Functor>("1", *iterator,
+ "MULTIPOLYGON(((0 1,2 5,5 3,0 1)),((1 1,5 2,5 0,1 1)))",
+ "MULTIPOLYGON(((3 0,0 3,4 5,3 0)))", precision);
+ iterator++;
+}
+
+
+#endif // GEOMETRY_TEST_MULTI_OVERLAY_COMMON_HPP
diff --git a/libs/geometry/test/multi/algorithms/overlay/multi_traverse.cpp b/libs/geometry/test/multi/algorithms/overlay/multi_traverse.cpp
new file mode 100644
index 000000000..faacd3615
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/overlay/multi_traverse.cpp
@@ -0,0 +1,447 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+//#define BOOST_GEOMETRY_DEBUG_ENRICH
+//#define BOOST_GEOMETRY_DEBUG_RELATIVE_ORDER
+
+// Include the single-geometry version
+#define BOOST_GEOMETRY_TEST_MULTI
+#include <algorithms/overlay/traverse.cpp>
+
+
+
+#include <boost/geometry/multi/core/closure.hpp>
+#include <boost/geometry/multi/core/geometry_id.hpp>
+#include <boost/geometry/multi/core/point_order.hpp>
+#include <boost/geometry/multi/core/ring_type.hpp>
+
+#include <boost/geometry/multi/algorithms/correct.hpp>
+#include <boost/geometry/multi/algorithms/num_points.hpp>
+#include <boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp>
+#include <boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp>
+#include <boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp>
+#include <boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp>
+
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/multi/views/detail/range_type.hpp>
+
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+
+#include "multi_overlay_cases.hpp"
+
+
+
+template <typename MultiPolygon, bool Reverse>
+void test_geometries()
+{
+ namespace ov = bg::detail::overlay;
+
+ typedef test_traverse
+ <
+ MultiPolygon, MultiPolygon,
+ ov::operation_intersection, Reverse, Reverse
+ > test_traverse_intersection;
+ typedef test_traverse
+ <
+ MultiPolygon, MultiPolygon,
+ ov::operation_union, Reverse, Reverse
+ > test_traverse_union;
+
+ // Intersections:
+ test_traverse_intersection::apply
+ (
+ "simplex", 2, 6.42,
+ case_multi_simplex[0], case_multi_simplex[1]
+ );
+
+ test_traverse_intersection::apply
+ (
+ "case_65_multi", 1, 1,
+ case_65_multi[0], case_65_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_66_multi", 1, 1,
+ case_66_multi[0], case_66_multi[1]
+ );
+
+ test_traverse_intersection::apply
+ (
+ "case_67_multi", 1, 1,
+ case_67_multi[0], case_67_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_69_multi", 1, 1,
+ case_69_multi[0], case_69_multi[1]
+ );
+
+ test_traverse_intersection::apply
+ (
+ "case_71_multi", 2, 2,
+ case_71_multi[0], case_71_multi[1]
+ );
+
+ // #72, note that it intersects into 2 shapes,
+ // the third one is done by assemble (see intersection #72)
+ test_traverse_intersection::apply
+ (
+ "case_72_multi", 2, 1.35,
+ case_72_multi[0], case_72_multi[1]
+ );
+
+ test_traverse_intersection::apply
+ (
+ "case_73_multi", 2, 2,
+ case_73_multi[0], case_73_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_74_multi", 2, 3,
+ case_74_multi[0], case_74_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_75_multi", 1, 1,
+ case_75_multi[0], case_75_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_77_multi", 5, 9,
+ case_77_multi[0], case_77_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_78_multi", 2, 22, // Went from 3 to 2 by get_turns / partition
+ case_78_multi[0], case_78_multi[1]
+ );
+
+ test_traverse_intersection::apply
+ (
+ "case_80_multi", 1, 0.5,
+ case_80_multi[0], case_80_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_81_multi", 1, 0.25,
+ case_81_multi[0], case_81_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_83_multi", 3, 1.25,
+ case_83_multi[0], case_83_multi[1]
+ );
+
+ test_traverse_intersection::apply
+ (
+ "case_91_multi", 2, 1.0,
+ case_91_multi[0], case_91_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_92_multi", 3, 1.5,
+ case_92_multi[0], case_92_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_93_multi", 2, 1.25,
+ case_93_multi[0], case_93_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_96_multi", 2, 1.0,
+ case_96_multi[0], case_96_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_98_multi", 4, 3.0,
+ case_98_multi[0], case_98_multi[1]
+ );
+
+ test_traverse_intersection::apply
+ (
+ "case_99_multi", 3, 1.75,
+ case_99_multi[0], case_99_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_100_multi", 2, 1.5,
+ case_100_multi[0], case_100_multi[1]
+ );
+
+
+ test_traverse_intersection::apply
+ (
+ "case_recursive_boxes_2", 1, 91,
+ case_recursive_boxes_2[0], case_recursive_boxes_2[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_107_multi", 2, 1.5,
+ case_107_multi[0], case_107_multi[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "case_recursive_boxes_3", 19, 12.5,
+ case_recursive_boxes_3[0], case_recursive_boxes_3[1]
+ );
+
+ // Unions
+
+
+ test_traverse_union::apply
+ (
+ "simplex", 1, 14.58,
+ case_multi_simplex[0], case_multi_simplex[1]
+ );
+
+ test_traverse_union::apply
+ (
+ "case_61_multi", 1, 4,
+ case_61_multi[0], case_61_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_62_multi", 1, 1 /*UU 2, 2 */,
+ case_62_multi[0], case_62_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_63_multi", 1, 1 /*UU 2, 2 */,
+ case_63_multi[0], case_63_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_64_multi", 1, 3,
+ case_64_multi[0], case_64_multi[1]
+ );
+
+ test_traverse_union::apply
+ (
+ "case_66_multi", 1, 4 /*UU 3, 7 */,
+ case_66_multi[0], case_66_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_68_multi", 1, 4 /*UU 2, 5 */,
+ case_68_multi[0], case_68_multi[1]
+ );
+ // 71: single-polygon generates 2 shapes, multi-polygon
+ // generates 1 shape, both are self-tangent and OK
+ test_traverse_union::apply
+ (
+ "case_71_multi", 1, 9,
+ case_71_multi[0], case_71_multi[1]
+ );
+
+ test_traverse_union::apply
+ (
+ "case_72_multi", 1, 10.65,
+ case_72_multi[0], case_72_multi[1]
+ );
+
+ test_traverse_union::apply
+ (
+ "case_73_multi", 1, 3,
+ case_73_multi[0], case_73_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_74_multi", 2, 17,
+ case_74_multi[0], case_74_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_75_multi", 1, 1 /*UU 5, 5 */,
+ case_75_multi[0], case_75_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_76_multi", 2, 5 /*UU 6, 6 */,
+ case_76_multi[0], case_76_multi[1]
+ );
+
+ test_traverse_union::apply
+ (
+ "case_80_multi", 1, 9.25,
+ case_80_multi[0], case_80_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_81_multi", 1, 3.25,
+ case_81_multi[0], case_81_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_82_multi", 3, 4,
+ case_82_multi[0], case_82_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_84_multi", 1, 4,
+ case_84_multi[0], case_84_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_85_multi", 1, 3.5,
+ case_85_multi[0], case_85_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_86_multi", 1, 4,
+ case_86_multi[0], case_86_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_87_multi", 1, 6,
+ case_87_multi[0], case_87_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_88_multi", 2, 4,
+ case_88_multi[0], case_88_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_89_multi", 1, 6,
+ case_89_multi[0], case_89_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_90_multi", 1, 7.5,
+ case_90_multi[0], case_90_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_92_multi", 2, 6.25,
+ case_92_multi[0], case_92_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_94_multi", 1, 10.0,
+ case_94_multi[0], case_94_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_95_multi", 2, 6.5,
+ case_95_multi[0], case_95_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_96_multi", 1, 3.5,
+ case_96_multi[0], case_96_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_97_multi", 1, 3.75,
+ case_97_multi[0], case_97_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_101_multi", 1, 22.25,
+ case_101_multi[0], case_101_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_102_multi", 3, 24.25,
+ case_102_multi[0], case_102_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_103_multi", 1, 25,
+ case_103_multi[0], case_103_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_104_multi", 1, 25,
+ case_104_multi[0], case_104_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_105_multi", 1, 25,
+ case_105_multi[0], case_105_multi[1]
+ );
+ test_traverse_union::apply
+ (
+ "case_106_multi", 1, 25,
+ case_106_multi[0], case_106_multi[1]
+ );
+
+
+ test_traverse_union::apply
+ (
+ "case_recursive_boxes_1", 2, 97,
+ case_recursive_boxes_1[0], case_recursive_boxes_1[1]
+ );
+
+ test_traverse_union::apply
+ (
+ "case_recursive_boxes_3", 7, 49.5,
+ case_recursive_boxes_3[0], case_recursive_boxes_3[1]
+ );
+
+ test_traverse_intersection::apply
+ (
+ "pie_21_7_21_0_3", 2, 818824.56678,
+ pie_21_7_21_0_3[0], pie_21_7_21_0_3[1]
+ );
+
+ test_traverse_intersection::apply
+ (
+ "pie_23_19_5_0_2", 2, 2948602.3911823,
+ pie_23_19_5_0_2[0], pie_23_19_5_0_2[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "pie_7_14_5_0_7", 2, 490804.56678,
+ pie_7_14_5_0_7[0], pie_7_14_5_0_7[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "pie_16_16_9_0_2", 2, 1146795,
+ pie_16_16_9_0_2[0], pie_16_16_9_0_2[1]
+ );
+ test_traverse_intersection::apply
+ (
+ "pie_7_2_1_0_15", 2, 490585.5,
+ pie_7_2_1_0_15[0], pie_7_2_1_0_15[1]
+ );
+
+}
+
+template <typename T>
+void test_all()
+{
+ typedef bg::model::point<T, 2, bg::cs::cartesian> point_type;
+
+ typedef bg::model::multi_polygon
+ <
+ bg::model::polygon<point_type>
+ > multi_polygon;
+
+ typedef bg::model::multi_polygon
+ <
+ bg::model::polygon<point_type, false>
+ > multi_polygon_ccw;
+
+ test_geometries<multi_polygon, false>();
+ test_geometries<multi_polygon_ccw, true>();
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<double>();
+
+ return 0;
+}
diff --git a/libs/geometry/test/multi/algorithms/overlay/multi_traverse.vcproj b/libs/geometry/test/multi/algorithms/overlay/multi_traverse.vcproj
new file mode 100644
index 000000000..c4cb7b8e0
--- /dev/null
+++ b/libs/geometry/test/multi/algorithms/overlay/multi_traverse.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multi_traverse"
+ ProjectGUID="{DB00BBA3-4959-4F9E-A235-E487FF766207}"
+ RootNamespace="multi_traverse"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_traverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;../../..;../../../../../..;../../../../../../boost/geometry/extensions/contrib/ttmath;../../../algorithms/overlay"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\multi_traverse"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;../../..;../../../../../..;../../../../../../boost/geometry/extensions/contrib/ttmath;../../../algorithms/overlay"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\multi_traverse.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/io/Jamfile.v2 b/libs/geometry/test/multi/io/Jamfile.v2
new file mode 100644
index 000000000..6985a7ab9
--- /dev/null
+++ b/libs/geometry/test/multi/io/Jamfile.v2
@@ -0,0 +1,12 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+build-project wkt ;
+build-project dsv ;
diff --git a/libs/geometry/test/multi/io/dsv/Jamfile.v2 b/libs/geometry/test/multi/io/dsv/Jamfile.v2
new file mode 100644
index 000000000..1434d754e
--- /dev/null
+++ b/libs/geometry/test/multi/io/dsv/Jamfile.v2
@@ -0,0 +1,15 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-multi-io-dsv
+ :
+ [ run dsv.cpp ]
+ ;
+
diff --git a/libs/geometry/test/multi/io/dsv/dsv.cpp b/libs/geometry/test/multi/io/dsv/dsv.cpp
new file mode 100644
index 000000000..7f565906f
--- /dev/null
+++ b/libs/geometry/test/multi/io/dsv/dsv.cpp
@@ -0,0 +1,100 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// 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)
+
+
+#include <sstream>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/multi/io/dsv/write.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
+#include <boost/geometry/multi/io/wkt/read.hpp>
+
+template <typename Geometry>
+void test_dsv(std::string const& wkt, std::string const& expected, bool json = false)
+{
+ Geometry geometry;
+ bg::read_wkt(wkt, geometry);
+ std::ostringstream out;
+ if (json)
+ {
+ out << bg::dsv(geometry, ", ", "[", "]", ", ", "[ ", " ]", ", ");
+ }
+ else
+ {
+ out << bg::dsv(geometry);
+ }
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+
+template <typename T>
+void test_all()
+{
+ using namespace boost::geometry;
+ typedef model::point<T, 2, cs::cartesian> point_type;
+ typedef model::multi_point<point_type> mpoint;
+ typedef model::multi_linestring<model::linestring<point_type> > mline;
+ typedef model::multi_polygon<model::polygon<point_type> > mpoly;
+
+ test_dsv<mpoint>
+ (
+ "multipoint((1 2),(3 4))",
+ "((1, 2), (3, 4))"
+ );
+ test_dsv<mline>
+ (
+ "multilinestring((1 1,2 2,3 3),(4 4,5 5,6 6))",
+ "(((1, 1), (2, 2), (3, 3)), ((4, 4), (5, 5), (6, 6)))"
+ );
+ test_dsv<mpoly>
+ (
+ // Multi with 2 poly's, first has hole, second is triangle
+ "multipolygon(((0 0,0 4,4 4,4 0,0 0),(1 1,1 2,2 2,2 1,1 1)),((5 5,6 5,5 6,5 5)))",
+ "((((0, 0), (0, 4), (4, 4), (4, 0), (0, 0)), ((1, 1), (1, 2), (2, 2), (2, 1), (1, 1))), (((5, 5), (6, 5), (5, 6), (5, 5))))"
+ );
+
+ // http://geojson.org/geojson-spec.html#id5
+ test_dsv<mpoint>
+ (
+ "multipoint((1 2),(3 4))",
+ "[ [1, 2], [3, 4] ]",
+ true
+ );
+
+ // http://geojson.org/geojson-spec.html#id6
+ test_dsv<mline>
+ (
+ "multilinestring((1 1,2 2,3 3),(4 4,5 5,6 6))",
+ "[ [ [1, 1], [2, 2], [3, 3] ], [ [4, 4], [5, 5], [6, 6] ] ]",
+ true
+ );
+
+ // http://geojson.org/geojson-spec.html#id7
+ test_dsv<mpoly>
+ (
+ "multipolygon(((0 0,0 4,4 4,4 0,0 0),(1 1,1 2,2 2,2 1,1 1)),((5 5,6 5,5 6,5 5)))",
+ "[ [ [ [0, 0], [0, 4], [4, 4], [4, 0], [0, 0] ], [ [1, 1], [1, 2], [2, 2], [2, 1], [1, 1] ] ], [ [ [5, 5], [6, 5], [5, 6], [5, 5] ] ] ]",
+ true
+ );
+
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<double>();
+ test_all<int>();
+
+ return 0;
+}
+
diff --git a/libs/geometry/test/multi/io/dsv/dsv.sln b/libs/geometry/test/multi/io/dsv/dsv.sln
new file mode 100644
index 000000000..ecea59719
--- /dev/null
+++ b/libs/geometry/test/multi/io/dsv/dsv.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{6CD4A68C-3EA1-11E1-B9E4-BF144924019B}") = "dsv", "dsv.vcproj", "{7463ED40-3EA1-11E1-9FC7-D0144924019B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7463ED40-3EA1-11E1-9FC7-D0144924019B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7463ED40-3EA1-11E1-9FC7-D0144924019B}.Debug|Win32.Build.0 = Debug|Win32
+ {7463ED40-3EA1-11E1-9FC7-D0144924019B}.Release|Win32.ActiveCfg = Release|Win32
+ {7463ED40-3EA1-11E1-9FC7-D0144924019B}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/multi/io/dsv/dsv.vcproj b/libs/geometry/test/multi/io/dsv/dsv.vcproj
new file mode 100644
index 000000000..494551daa
--- /dev/null
+++ b/libs/geometry/test/multi/io/dsv/dsv.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="dsv"
+ ProjectGUID="{7463ED40-3EA1-11E1-9FC7-D0144924019B}"
+ RootNamespace="dsv"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\dsv"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\dsv"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\dsv.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/io/wkt/Jamfile.v2 b/libs/geometry/test/multi/io/wkt/Jamfile.v2
new file mode 100644
index 000000000..2f0fea2ed
--- /dev/null
+++ b/libs/geometry/test/multi/io/wkt/Jamfile.v2
@@ -0,0 +1,15 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-multi-io-wkt
+ :
+ [ run wkt.cpp ]
+ ;
+
diff --git a/libs/geometry/test/multi/io/wkt/io_wkt_tests.sln b/libs/geometry/test/multi/io/wkt/io_wkt_tests.sln
new file mode 100644
index 000000000..a804d533a
--- /dev/null
+++ b/libs/geometry/test/multi/io/wkt/io_wkt_tests.sln
@@ -0,0 +1,27 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wkt", "wkt.vcproj", "{CA8D5E44-7D8F-44A1-900C-35C28890299B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1FA2ADE2-F649-4245-951E-A8F5935E7127}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1FA2ADE2-F649-4245-951E-A8F5935E7127}.Debug|Win32.Build.0 = Debug|Win32
+ {1FA2ADE2-F649-4245-951E-A8F5935E7127}.Release|Win32.ActiveCfg = Release|Win32
+ {1FA2ADE2-F649-4245-951E-A8F5935E7127}.Release|Win32.Build.0 = Release|Win32
+ {F2A680B0-F6FC-479E-9988-24CF6851C13C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F2A680B0-F6FC-479E-9988-24CF6851C13C}.Debug|Win32.Build.0 = Debug|Win32
+ {F2A680B0-F6FC-479E-9988-24CF6851C13C}.Release|Win32.ActiveCfg = Release|Win32
+ {F2A680B0-F6FC-479E-9988-24CF6851C13C}.Release|Win32.Build.0 = Release|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Debug|Win32.Build.0 = Debug|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Release|Win32.ActiveCfg = Release|Win32
+ {CA8D5E44-7D8F-44A1-900C-35C28890299B}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/multi/io/wkt/wkt.cpp b/libs/geometry/test/multi/io/wkt/wkt.cpp
new file mode 100644
index 000000000..a149946cf
--- /dev/null
+++ b/libs/geometry/test/multi/io/wkt/wkt.cpp
@@ -0,0 +1,103 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+//#include <iostream>
+#include <sstream>
+#include <string>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/concept/requires.hpp>
+
+#include <boost/test/floating_point_comparison.hpp>
+#include <boost/test/included/test_exec_monitor.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/multi/algorithms/area.hpp>
+#include <boost/geometry/multi/algorithms/length.hpp>
+#include <boost/geometry/multi/algorithms/num_points.hpp>
+#include <boost/geometry/multi/algorithms/perimeter.hpp>
+#include <boost/geometry/multi/core/point_type.hpp>
+#include <boost/geometry/multi/core/topological_dimension.hpp>
+#include <boost/geometry/multi/geometries/multi_point.hpp>
+#include <boost/geometry/multi/geometries/multi_linestring.hpp>
+#include <boost/geometry/multi/geometries/multi_polygon.hpp>
+
+#include <boost/geometry/multi/io/wkt/read.hpp>
+#include <boost/geometry/multi/io/wkt/write.hpp>
+
+template <typename T>
+void test_all();
+
+
+// Include the single test
+#define GEOMETRY_TEST_MULTI
+#include "io/wkt/wkt.cpp"
+
+template <typename T>
+void test_all()
+{
+ using namespace boost::geometry;
+ typedef bg::model::point<T, 2, bg::cs::cartesian> P;
+
+ test_wkt<bg::model::multi_point<P> >("multipoint((1 2),(3 4))", 2);
+ test_wkt<bg::model::multi_linestring<bg::model::linestring<P> > >("multilinestring((1 1,2 2,3 3),(4 4,5 5,6 6))", 6, 4 * sqrt(2.0));
+ test_wkt<bg::model::multi_polygon<bg::model::polygon<P> > >("multipolygon(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),((0 0,0 4,4 4,4 0,0 0)))", 15, 0, 21, 28);
+
+ // Support for the official alternative syntax for multipoint
+ // (provided by Aleksey Tulinov):
+ test_relaxed_wkt<bg::model::multi_point<P> >("multipoint(1 2,3 4)", "multipoint((1 2),(3 4))");
+
+ test_wrong_wkt<bg::model::multi_polygon<bg::model::polygon<P> > >(
+ "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),(0 0,0 4,4 4,4 0,0 0)))",
+ "expected '('");
+
+ test_wrong_wkt<bg::model::multi_linestring<bg::model::linestring<P> > >(
+ "MULTILINESTRING ((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10)), (0 0, 1 1)",
+ "too much tokens at ','");
+
+ test_wrong_wkt<bg::model::multi_point<P> >(
+ "MULTIPOINT((8 9), 10 11)",
+ "expected '(' at '10'");
+ test_wrong_wkt<bg::model::multi_point<P> >(
+ "MULTIPOINT(12 13, (14 15))",
+ "bad lexical cast: source type value could not be interpreted as target at '(' in 'multipoint(12 13, (14 15))'");
+ test_wrong_wkt<bg::model::multi_point<P> >(
+ "MULTIPOINT((16 17), (18 19)",
+ "expected ')' in 'multipoint((16 17), (18 19)'");
+ test_wrong_wkt<bg::model::multi_point<P> >(
+ "MULTIPOINT(16 17), (18 19)",
+ "too much tokens at ',' in 'multipoint(16 17), (18 19)'");
+}
+
+/*
+
+... see comments in "wkt.cpp"
+
+union select 13,'# mpoint',npoints(geomfromtext('MULTIPOINT((1 2),(3 4))'))
+union select 14,'length mpoint',length(geomfromtext('MULTIPOINT((1 2),(3 4))'))
+union select 15,'peri mpoint',perimeter(geomfromtext('MULTIPOINT((1 2),(3 4))'))
+union select 16,'area mpoint',area(geomfromtext('MULTIPOINT((1 2),(3 4))'))
+
+union select 17,'# mls',npoints(geomfromtext('MULTILINESTRING((1 1,2 2,3 3),(4 4,5 5,6 6))'))
+union select 18,'length mls',length(geomfromtext('MULTILINESTRING((1 1,2 2,3 3),(4 4,5 5,6 6))'))
+union select 19,'peri mls',perimeter(geomfromtext('MULTILINESTRING((1 1,2 2,3 3),(4 4,5 5,6 6))'))
+union select 20,'area mls',area(geomfromtext('MULTILINESTRING((1 1,2 2,3 3),(4 4,5 5,6 6))'))
+
+union select 21,'# mpoly',npoints(geomfromtext('MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),((0 0,0 4,4 4,4 0,0 0)))'))
+union select 22,'length mpoly',length(geomfromtext('MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),((0 0,0 4,4 4,4 0,0 0)))'))
+union select 23,'peri mpoly',perimeter(geomfromtext('MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),((0 0,0 4,4 4,4 0,0 0)))'))
+union select 24,'area mpoly',area(geomfromtext('MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),((0 0,0 4,4 4,4 0,0 0)))'))
+
+*/
diff --git a/libs/geometry/test/multi/io/wkt/wkt.vcproj b/libs/geometry/test/multi/io/wkt/wkt.vcproj
new file mode 100644
index 000000000..c8150e853
--- /dev/null
+++ b/libs/geometry/test/multi/io/wkt/wkt.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="wkt"
+ ProjectGUID="{CA8D5E44-7D8F-44A1-900C-35C28890299B}"
+ RootNamespace="wkt"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\wkt"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;../../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\wkt"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;../../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\wkt.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/multi/multi_tests.sln b/libs/geometry/test/multi/multi_tests.sln
new file mode 100644
index 000000000..abfef0161
--- /dev/null
+++ b/libs/geometry/test/multi/multi_tests.sln
@@ -0,0 +1,163 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_within", "algorithms\multi_within.vcproj", "{CA8D5E44-7D8F-44A1-901C-35C28890299B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_distance", "algorithms\multi_distance.vcproj", "{D770F3E8-0567-4EDD-91FC-20BA402A3F74}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_convex_hull", "algorithms\multi_convex_hull.vcproj", "{B810C404-C4D9-4A6A-96B0-1DCED269D65D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_envelope", "algorithms\multi_envelope.vcproj", "{85385CF0-240C-4900-B5EA-E34D2415A18F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_centroid", "algorithms\multi_centroid.vcproj", "{7EE302E1-7FCF-4E9E-8DB3-36EA4D88B6CA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_correct", "algorithms\multi_correct.vcproj", "{DFB00B88-2ED8-49CA-B739-7C8A8602D681}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_simplify", "algorithms\multi_simplify.vcproj", "{76A74CE4-EBF8-4F8A-98B7-1AF607B2B68C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_for_each", "algorithms\multi_for_each.vcproj", "{B016FE33-D587-45C6-8444-607839BB2C2D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_area", "algorithms\multi_area.vcproj", "{691082ED-2778-4300-9860-42DFBBABE535}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_length", "algorithms\multi_length.vcproj", "{9087BA6C-7563-41E6-90AD-F60BC58DDC17}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_perimeter", "algorithms\multi_perimeter.vcproj", "{D91C3F39-B8A5-4EB9-A7A8-D72B297DCFBF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_intersection", "algorithms\multi_intersection.vcproj", "{FFB78F24-7999-4416-BDED-9C35A3DDF32D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_union", "algorithms\multi_union.vcproj", "{1A8443BE-2666-4D6B-B4BC-6A7B7DD224B0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_equals", "algorithms\multi_equals.vcproj", "{AA0EFD64-E034-421A-BD4A-E5A336D95C30}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_reverse", "algorithms\multi_reverse.vcproj", "{698BE05D-43E2-4BF5-B7FD-48BE3EE7BC21}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_unique", "algorithms\multi_unique.vcproj", "{71879D37-84A8-4949-8CDB-212982F81D80}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_num_geometries", "algorithms\multi_num_geometries.vcproj", "{8DB68EB9-07CA-4705-859E-B1A7098B5CF3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_num_points", "algorithms\multi_num_points.vcproj", "{EA4B2EB3-1FBA-42BE-B7D7-5A517BC74E2B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_num_interior_rings", "algorithms\multi_num_interior_rings.vcproj", "{3F8E4B3A-43D5-49ED-89F6-C6D1CF609B02}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_difference", "algorithms\multi_difference.vcproj", "{7F85B87A-48A6-47BD-A08C-AB12AEA56582}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_transform", "algorithms\multi_transform.vcproj", "{64985954-0A74-46F5-908F-865E905C3414}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_covered_by", "algorithms\multi_covered_by.vcproj", "{680E56F0-229C-4377-BDC0-80EB9B59314B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_convert", "algorithms\multi_convert.vcproj", "{21B7EF55-23C3-4FD2-9F2F-FD8F0F3FE167}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_disjoint", "algorithms\multi_disjoint.vcproj", "{5DEA6558-9DF7-42D4-AF10-4D6D8BB7EAD1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multi_touches", "algorithms\multi_touches.vcproj", "{108173B8-B6F4-4366-8018-2BF282ED4881}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CA8D5E44-7D8F-44A1-901C-35C28890299B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CA8D5E44-7D8F-44A1-901C-35C28890299B}.Debug|Win32.Build.0 = Debug|Win32
+ {CA8D5E44-7D8F-44A1-901C-35C28890299B}.Release|Win32.ActiveCfg = Release|Win32
+ {CA8D5E44-7D8F-44A1-901C-35C28890299B}.Release|Win32.Build.0 = Release|Win32
+ {D770F3E8-0567-4EDD-91FC-20BA402A3F74}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D770F3E8-0567-4EDD-91FC-20BA402A3F74}.Debug|Win32.Build.0 = Debug|Win32
+ {D770F3E8-0567-4EDD-91FC-20BA402A3F74}.Release|Win32.ActiveCfg = Release|Win32
+ {D770F3E8-0567-4EDD-91FC-20BA402A3F74}.Release|Win32.Build.0 = Release|Win32
+ {B810C404-C4D9-4A6A-96B0-1DCED269D65D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B810C404-C4D9-4A6A-96B0-1DCED269D65D}.Debug|Win32.Build.0 = Debug|Win32
+ {B810C404-C4D9-4A6A-96B0-1DCED269D65D}.Release|Win32.ActiveCfg = Release|Win32
+ {B810C404-C4D9-4A6A-96B0-1DCED269D65D}.Release|Win32.Build.0 = Release|Win32
+ {85385CF0-240C-4900-B5EA-E34D2415A18F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {85385CF0-240C-4900-B5EA-E34D2415A18F}.Debug|Win32.Build.0 = Debug|Win32
+ {85385CF0-240C-4900-B5EA-E34D2415A18F}.Release|Win32.ActiveCfg = Release|Win32
+ {85385CF0-240C-4900-B5EA-E34D2415A18F}.Release|Win32.Build.0 = Release|Win32
+ {7EE302E1-7FCF-4E9E-8DB3-36EA4D88B6CA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7EE302E1-7FCF-4E9E-8DB3-36EA4D88B6CA}.Debug|Win32.Build.0 = Debug|Win32
+ {7EE302E1-7FCF-4E9E-8DB3-36EA4D88B6CA}.Release|Win32.ActiveCfg = Release|Win32
+ {7EE302E1-7FCF-4E9E-8DB3-36EA4D88B6CA}.Release|Win32.Build.0 = Release|Win32
+ {DFB00B88-2ED8-49CA-B739-7C8A8602D681}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DFB00B88-2ED8-49CA-B739-7C8A8602D681}.Debug|Win32.Build.0 = Debug|Win32
+ {DFB00B88-2ED8-49CA-B739-7C8A8602D681}.Release|Win32.ActiveCfg = Release|Win32
+ {DFB00B88-2ED8-49CA-B739-7C8A8602D681}.Release|Win32.Build.0 = Release|Win32
+ {76A74CE4-EBF8-4F8A-98B7-1AF607B2B68C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {76A74CE4-EBF8-4F8A-98B7-1AF607B2B68C}.Debug|Win32.Build.0 = Debug|Win32
+ {76A74CE4-EBF8-4F8A-98B7-1AF607B2B68C}.Release|Win32.ActiveCfg = Release|Win32
+ {76A74CE4-EBF8-4F8A-98B7-1AF607B2B68C}.Release|Win32.Build.0 = Release|Win32
+ {B016FE33-D587-45C6-8444-607839BB2C2D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B016FE33-D587-45C6-8444-607839BB2C2D}.Debug|Win32.Build.0 = Debug|Win32
+ {B016FE33-D587-45C6-8444-607839BB2C2D}.Release|Win32.ActiveCfg = Release|Win32
+ {B016FE33-D587-45C6-8444-607839BB2C2D}.Release|Win32.Build.0 = Release|Win32
+ {691082ED-2778-4300-9860-42DFBBABE535}.Debug|Win32.ActiveCfg = Debug|Win32
+ {691082ED-2778-4300-9860-42DFBBABE535}.Debug|Win32.Build.0 = Debug|Win32
+ {691082ED-2778-4300-9860-42DFBBABE535}.Release|Win32.ActiveCfg = Release|Win32
+ {691082ED-2778-4300-9860-42DFBBABE535}.Release|Win32.Build.0 = Release|Win32
+ {9087BA6C-7563-41E6-90AD-F60BC58DDC17}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9087BA6C-7563-41E6-90AD-F60BC58DDC17}.Debug|Win32.Build.0 = Debug|Win32
+ {9087BA6C-7563-41E6-90AD-F60BC58DDC17}.Release|Win32.ActiveCfg = Release|Win32
+ {9087BA6C-7563-41E6-90AD-F60BC58DDC17}.Release|Win32.Build.0 = Release|Win32
+ {D91C3F39-B8A5-4EB9-A7A8-D72B297DCFBF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D91C3F39-B8A5-4EB9-A7A8-D72B297DCFBF}.Debug|Win32.Build.0 = Debug|Win32
+ {D91C3F39-B8A5-4EB9-A7A8-D72B297DCFBF}.Release|Win32.ActiveCfg = Release|Win32
+ {D91C3F39-B8A5-4EB9-A7A8-D72B297DCFBF}.Release|Win32.Build.0 = Release|Win32
+ {FFB78F24-7999-4416-BDED-9C35A3DDF32D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FFB78F24-7999-4416-BDED-9C35A3DDF32D}.Debug|Win32.Build.0 = Debug|Win32
+ {FFB78F24-7999-4416-BDED-9C35A3DDF32D}.Release|Win32.ActiveCfg = Release|Win32
+ {FFB78F24-7999-4416-BDED-9C35A3DDF32D}.Release|Win32.Build.0 = Release|Win32
+ {1A8443BE-2666-4D6B-B4BC-6A7B7DD224B0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1A8443BE-2666-4D6B-B4BC-6A7B7DD224B0}.Debug|Win32.Build.0 = Debug|Win32
+ {1A8443BE-2666-4D6B-B4BC-6A7B7DD224B0}.Release|Win32.ActiveCfg = Release|Win32
+ {1A8443BE-2666-4D6B-B4BC-6A7B7DD224B0}.Release|Win32.Build.0 = Release|Win32
+ {AA0EFD64-E034-421A-BD4A-E5A336D95C30}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA0EFD64-E034-421A-BD4A-E5A336D95C30}.Debug|Win32.Build.0 = Debug|Win32
+ {AA0EFD64-E034-421A-BD4A-E5A336D95C30}.Release|Win32.ActiveCfg = Release|Win32
+ {AA0EFD64-E034-421A-BD4A-E5A336D95C30}.Release|Win32.Build.0 = Release|Win32
+ {698BE05D-43E2-4BF5-B7FD-48BE3EE7BC21}.Debug|Win32.ActiveCfg = Debug|Win32
+ {698BE05D-43E2-4BF5-B7FD-48BE3EE7BC21}.Debug|Win32.Build.0 = Debug|Win32
+ {698BE05D-43E2-4BF5-B7FD-48BE3EE7BC21}.Release|Win32.ActiveCfg = Release|Win32
+ {698BE05D-43E2-4BF5-B7FD-48BE3EE7BC21}.Release|Win32.Build.0 = Release|Win32
+ {71879D37-84A8-4949-8CDB-212982F81D80}.Debug|Win32.ActiveCfg = Debug|Win32
+ {71879D37-84A8-4949-8CDB-212982F81D80}.Debug|Win32.Build.0 = Debug|Win32
+ {71879D37-84A8-4949-8CDB-212982F81D80}.Release|Win32.ActiveCfg = Release|Win32
+ {71879D37-84A8-4949-8CDB-212982F81D80}.Release|Win32.Build.0 = Release|Win32
+ {8DB68EB9-07CA-4705-859E-B1A7098B5CF3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8DB68EB9-07CA-4705-859E-B1A7098B5CF3}.Debug|Win32.Build.0 = Debug|Win32
+ {8DB68EB9-07CA-4705-859E-B1A7098B5CF3}.Release|Win32.ActiveCfg = Release|Win32
+ {8DB68EB9-07CA-4705-859E-B1A7098B5CF3}.Release|Win32.Build.0 = Release|Win32
+ {EA4B2EB3-1FBA-42BE-B7D7-5A517BC74E2B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EA4B2EB3-1FBA-42BE-B7D7-5A517BC74E2B}.Debug|Win32.Build.0 = Debug|Win32
+ {EA4B2EB3-1FBA-42BE-B7D7-5A517BC74E2B}.Release|Win32.ActiveCfg = Release|Win32
+ {EA4B2EB3-1FBA-42BE-B7D7-5A517BC74E2B}.Release|Win32.Build.0 = Release|Win32
+ {3F8E4B3A-43D5-49ED-89F6-C6D1CF609B02}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3F8E4B3A-43D5-49ED-89F6-C6D1CF609B02}.Debug|Win32.Build.0 = Debug|Win32
+ {3F8E4B3A-43D5-49ED-89F6-C6D1CF609B02}.Release|Win32.ActiveCfg = Release|Win32
+ {3F8E4B3A-43D5-49ED-89F6-C6D1CF609B02}.Release|Win32.Build.0 = Release|Win32
+ {7F85B87A-48A6-47BD-A08C-AB12AEA56582}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7F85B87A-48A6-47BD-A08C-AB12AEA56582}.Debug|Win32.Build.0 = Debug|Win32
+ {7F85B87A-48A6-47BD-A08C-AB12AEA56582}.Release|Win32.ActiveCfg = Release|Win32
+ {7F85B87A-48A6-47BD-A08C-AB12AEA56582}.Release|Win32.Build.0 = Release|Win32
+ {64985954-0A74-46F5-908F-865E905C3414}.Debug|Win32.ActiveCfg = Debug|Win32
+ {64985954-0A74-46F5-908F-865E905C3414}.Debug|Win32.Build.0 = Debug|Win32
+ {64985954-0A74-46F5-908F-865E905C3414}.Release|Win32.ActiveCfg = Release|Win32
+ {64985954-0A74-46F5-908F-865E905C3414}.Release|Win32.Build.0 = Release|Win32
+ {680E56F0-229C-4377-BDC0-80EB9B59314B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {680E56F0-229C-4377-BDC0-80EB9B59314B}.Debug|Win32.Build.0 = Debug|Win32
+ {680E56F0-229C-4377-BDC0-80EB9B59314B}.Release|Win32.ActiveCfg = Release|Win32
+ {680E56F0-229C-4377-BDC0-80EB9B59314B}.Release|Win32.Build.0 = Release|Win32
+ {21B7EF55-23C3-4FD2-9F2F-FD8F0F3FE167}.Debug|Win32.ActiveCfg = Debug|Win32
+ {21B7EF55-23C3-4FD2-9F2F-FD8F0F3FE167}.Debug|Win32.Build.0 = Debug|Win32
+ {21B7EF55-23C3-4FD2-9F2F-FD8F0F3FE167}.Release|Win32.ActiveCfg = Release|Win32
+ {21B7EF55-23C3-4FD2-9F2F-FD8F0F3FE167}.Release|Win32.Build.0 = Release|Win32
+ {5DEA6558-9DF7-42D4-AF10-4D6D8BB7EAD1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5DEA6558-9DF7-42D4-AF10-4D6D8BB7EAD1}.Debug|Win32.Build.0 = Debug|Win32
+ {5DEA6558-9DF7-42D4-AF10-4D6D8BB7EAD1}.Release|Win32.ActiveCfg = Release|Win32
+ {5DEA6558-9DF7-42D4-AF10-4D6D8BB7EAD1}.Release|Win32.Build.0 = Release|Win32
+ {108173B8-B6F4-4366-8018-2BF282ED4881}.Debug|Win32.ActiveCfg = Debug|Win32
+ {108173B8-B6F4-4366-8018-2BF282ED4881}.Debug|Win32.Build.0 = Debug|Win32
+ {108173B8-B6F4-4366-8018-2BF282ED4881}.Release|Win32.ActiveCfg = Release|Win32
+ {108173B8-B6F4-4366-8018-2BF282ED4881}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/point_concept/Jamfile.v2 b/libs/geometry/test/point_concept/Jamfile.v2
new file mode 100644
index 000000000..7c4b8aed6
--- /dev/null
+++ b/libs/geometry/test/point_concept/Jamfile.v2
@@ -0,0 +1,22 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-point-concept
+ :
+ [ compile concept_checker.cpp ]
+ [ compile well_formed_point.cpp ]
+ [ compile well_formed_point_traits.cpp ]
+ [ compile array_point.cpp ]
+ [ compile-fail point_without_coordinate_type.cpp ]
+ [ compile-fail point_without_dimension.cpp ]
+ [ compile-fail point_without_getter.cpp ]
+ [ compile-fail point_without_setter.cpp ]
+ [ compile-fail point_with_incorrect_dimension.cpp ]
+ ;
diff --git a/libs/geometry/test/point_concept/array_point.cpp b/libs/geometry/test/point_concept/array_point.cpp
new file mode 100644
index 000000000..000deadc0
--- /dev/null
+++ b/libs/geometry/test/point_concept/array_point.cpp
@@ -0,0 +1,29 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <test_common/test_point.hpp>
+
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include "function_requiring_a_point.hpp"
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+
+
+int main()
+{
+ float p1[3] = { 0, 0, 0 };
+ const float p2[3] = { 0, 0, 0 };
+ test::function_requiring_a_point(p1, p2);
+ return 0;
+}
diff --git a/libs/geometry/test/point_concept/concept_checker.cpp b/libs/geometry/test/point_concept/concept_checker.cpp
new file mode 100644
index 000000000..0750972f4
--- /dev/null
+++ b/libs/geometry/test/point_concept/concept_checker.cpp
@@ -0,0 +1,76 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/geometries/concepts/check.hpp>
+
+struct ro_point
+{
+ float x, y;
+};
+
+
+struct rw_point
+{
+ float x, y;
+};
+
+
+namespace boost { namespace geometry { namespace traits {
+
+template <> struct tag<ro_point> { typedef point_tag type; };
+template <> struct coordinate_type<ro_point> { typedef float type; };
+template <> struct coordinate_system<ro_point> { typedef cs::cartesian type; };
+template <> struct dimension<ro_point> { enum { value = 2 }; };
+
+template <> struct access<ro_point, 0>
+{
+ static float get(ro_point const& p) { return p.x; }
+};
+
+template <> struct access<ro_point, 1>
+{
+ static float get(ro_point const& p) { return p.y; }
+};
+
+
+
+
+template <> struct tag<rw_point> { typedef point_tag type; };
+template <> struct coordinate_type<rw_point> { typedef float type; };
+template <> struct coordinate_system<rw_point> { typedef cs::cartesian type; };
+template <> struct dimension<rw_point> { enum { value = 2 }; };
+
+template <> struct access<rw_point, 0>
+{
+ static float get(rw_point const& p) { return p.x; }
+ static void set(rw_point& p, float value) { p.x = value; }
+};
+
+template <> struct access<rw_point, 1>
+{
+ static float get(rw_point const& p) { return p.y; }
+ static void set(rw_point& p, float value) { p.y = value; }
+};
+
+
+}}} // namespace bg::traits
+
+
+int main()
+{
+ boost::geometry::concept::check<const ro_point>();
+ boost::geometry::concept::check<rw_point>();
+}
diff --git a/libs/geometry/test/point_concept/function_asserting_a_point.hpp b/libs/geometry/test/point_concept/function_asserting_a_point.hpp
new file mode 100644
index 000000000..8ff84d449
--- /dev/null
+++ b/libs/geometry/test/point_concept/function_asserting_a_point.hpp
@@ -0,0 +1,30 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library) Point concept unit tests
+//
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef GEOMETRY_TEST_POINT_CONCEPT_FUNCTION_ASSERTING_A_POINT_HPP
+#define GEOMETRY_TEST_POINT_CONCEPT_FUNCTION_ASSERTING_A_POINT_HPP
+
+#include <boost/concept/requires.hpp>
+
+#include <boost/geometry/geometries/concepts/point_concept.hpp>
+
+namespace bg = boost::geometry;
+
+namespace test
+{
+ template <typename P, typename CP>
+ void function_asserting_a_point(P& p1, const CP& p2)
+ {
+ BOOST_CONCEPT_ASSERT((bg::concept::Point<P>));
+ BOOST_CONCEPT_ASSERT((bg::concept::ConstPoint<P>));
+
+ bg::get<0>(p1) = bg::get<0>(p2);
+ }
+}
+
+#endif // GEOMETRY_TEST_POINT_CONCEPT_FUNCTION_ASSERTING_A_POINT_HPP
diff --git a/libs/geometry/test/point_concept/function_requiring_a_point.hpp b/libs/geometry/test/point_concept/function_requiring_a_point.hpp
new file mode 100644
index 000000000..39dc38294
--- /dev/null
+++ b/libs/geometry/test/point_concept/function_requiring_a_point.hpp
@@ -0,0 +1,32 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library) Point concept unit tests
+//
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef GEOMETRY_TEST_POINT_CONCEPT_FUNCTION_REQUIRING_A_POINT_HPP
+#define GEOMETRY_TEST_POINT_CONCEPT_FUNCTION_REQUIRING_A_POINT_HPP
+
+#include <boost/concept/requires.hpp>
+
+#include <boost/geometry/geometries/concepts/point_concept.hpp>
+
+namespace bg = boost::geometry;
+
+namespace test
+{
+ template <typename P, typename C>
+
+ inline BOOST_CONCEPT_REQUIRES(
+ ((bg::concept::Point<P>))
+ ((bg::concept::ConstPoint<C>)),
+ (void))
+ function_requiring_a_point(P& p1, const C& p2)
+ {
+ bg::set<0>(p1, bg::get<0>(p2));
+ }
+}
+
+#endif // GEOMETRY_TEST_POINT_CONCEPT_FUNCTION_REQUIRING_A_POINT_HPP
diff --git a/libs/geometry/test/point_concept/point_with_incorrect_dimension.cpp b/libs/geometry/test/point_concept/point_with_incorrect_dimension.cpp
new file mode 100644
index 000000000..baf653a0f
--- /dev/null
+++ b/libs/geometry/test/point_concept/point_with_incorrect_dimension.cpp
@@ -0,0 +1,58 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <test_common/test_point.hpp>
+
+#include "function_asserting_a_point.hpp"
+#include "function_requiring_a_point.hpp"
+
+#include <boost/geometry/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+namespace boost { namespace geometry { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef bg::cs::cartesian type; };
+template <> struct dimension<point> { enum { value = 3 }; };
+
+template <> struct access<point, 0>
+{
+ static float get(point const& p) { return p.x; }
+ static void set(point& p, float value) { p.x = value; }
+};
+
+template <> struct access<point, 1>
+{
+ static float get(point const& p) { return p.y; }
+ static void set(point& p, float value) { p.y = value; }
+};
+
+
+}}} // namespace bg::traits
+
+
+int main()
+{
+ point p1;
+ const point p2;
+ test::function_requiring_a_point(p1, p2);
+ test::function_asserting_a_point(p1, p2);
+ return 0;
+}
diff --git a/libs/geometry/test/point_concept/point_without_coordinate_type.cpp b/libs/geometry/test/point_concept/point_without_coordinate_type.cpp
new file mode 100644
index 000000000..a9cb2b9b1
--- /dev/null
+++ b/libs/geometry/test/point_concept/point_without_coordinate_type.cpp
@@ -0,0 +1,53 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include "function_requiring_a_point.hpp"
+
+#include <boost/geometry/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+namespace boost { namespace geometry { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+//template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef bg::cs::cartesian type; };
+template <> struct dimension<point> { enum { value = 2 }; };
+
+template <> struct access<point, 0>
+{
+ static float get(point const& p) { return p.x; }
+ static void set(point& p, float value) { p.x = value; }
+};
+
+template <> struct access<point, 1>
+{
+ static float get(point const& p) { return p.y; }
+ static void set(point& p, float value) { p.y = value; }
+};
+
+
+}}} // namespace bg::traits
+
+int main()
+{
+ point p1;
+ const point p2;
+ test::function_requiring_a_point(p1, p2);
+ return 0;
+}
diff --git a/libs/geometry/test/point_concept/point_without_dimension.cpp b/libs/geometry/test/point_concept/point_without_dimension.cpp
new file mode 100644
index 000000000..61b7769cf
--- /dev/null
+++ b/libs/geometry/test/point_concept/point_without_dimension.cpp
@@ -0,0 +1,55 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include "function_requiring_a_point.hpp"
+
+#include <boost/geometry/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+
+namespace boost { namespace geometry { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef bg::cs::cartesian type; };
+//template <> struct dimension<point> { enum { value = 2 }; };
+
+template <> struct access<point, 0>
+{
+ static float get(point const& p) { return p.x; }
+ static void set(point& p, float value) { p.x = value; }
+};
+
+template <> struct access<point, 1>
+{
+ static float get(point const& p) { return p.y; }
+ static void set(point& p, float value) { p.y = value; }
+};
+
+
+}}} // namespace bg::traits
+
+
+int main()
+{
+ point p1;
+ const point p2;
+ test::function_requiring_a_point(p1, p2);
+ return 0;
+}
diff --git a/libs/geometry/test/point_concept/point_without_getter.cpp b/libs/geometry/test/point_concept/point_without_getter.cpp
new file mode 100644
index 000000000..c7650dd39
--- /dev/null
+++ b/libs/geometry/test/point_concept/point_without_getter.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include "function_requiring_a_point.hpp"
+
+#include <boost/geometry/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+namespace boost { namespace geometry { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef bg::cs::cartesian type; };
+template <> struct dimension<point> { enum { value = 2 }; };
+
+template <> struct access<point, 0>
+{
+ static void set(point& p, float value) { p.x = value; }
+};
+
+template <> struct access<point, 1>
+{
+ static void set(point& p, float value) { p.y = value; }
+};
+
+
+}}} // namespace bg::traits
+
+int main()
+{
+ point p1;
+ const point p2;
+ test::function_requiring_a_point(p1, p2);
+ return 0;
+}
diff --git a/libs/geometry/test/point_concept/point_without_setter.cpp b/libs/geometry/test/point_concept/point_without_setter.cpp
new file mode 100644
index 000000000..882111889
--- /dev/null
+++ b/libs/geometry/test/point_concept/point_without_setter.cpp
@@ -0,0 +1,51 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include "function_requiring_a_point.hpp"
+
+#include <boost/geometry/core/cs.hpp>
+
+struct point
+{
+ float x, y;
+};
+
+namespace boost { namespace geometry { namespace traits {
+
+template <> struct tag<point> { typedef point_tag type; };
+template <> struct coordinate_type<point> { typedef float type; };
+template <> struct coordinate_system<point> { typedef bg::cs::cartesian type; };
+template <> struct dimension<point> { enum { value = 2 }; };
+
+template <> struct access<point, 0>
+{
+ static float get(point const& p) { return p.x; }
+};
+
+template <> struct access<point, 1>
+{
+ static float get(point const& p) { return p.y; }
+};
+
+
+}}} // namespace bg::traits
+
+int main()
+{
+ point p1;
+ const point p2;
+ test::function_requiring_a_point(p1, p2);
+ return 0;
+}
diff --git a/libs/geometry/test/point_concept/well_formed_point.cpp b/libs/geometry/test/point_concept/well_formed_point.cpp
new file mode 100644
index 000000000..20ae39c62
--- /dev/null
+++ b/libs/geometry/test/point_concept/well_formed_point.cpp
@@ -0,0 +1,34 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <boost/tuple/tuple.hpp>
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/geometries/register/point.hpp>
+
+#include "function_requiring_a_point.hpp"
+
+struct point: public boost::tuple<float, float>
+{
+};
+
+BOOST_GEOMETRY_REGISTER_POINT_2D(point, float, cs::cartesian, get<0>(), get<1>())
+
+int main()
+{
+ point p1;
+ point const p2 = point();
+ test::function_requiring_a_point(p1, p2);
+ return 0;
+}
diff --git a/libs/geometry/test/point_concept/well_formed_point_traits.cpp b/libs/geometry/test/point_concept/well_formed_point_traits.cpp
new file mode 100644
index 000000000..fc4ab82f2
--- /dev/null
+++ b/libs/geometry/test/point_concept/well_formed_point_traits.cpp
@@ -0,0 +1,88 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <boost/geometry/core/cs.hpp>
+
+#include "function_requiring_a_point.hpp"
+
+struct point
+{
+ point(): x(), y() {}
+ float x, y;
+};
+
+namespace boost { namespace geometry { namespace traits {
+
+template <>
+struct tag<point>
+{
+ typedef point_tag type;
+};
+
+template <>
+struct coordinate_type<point>
+{
+ typedef float type;
+};
+
+template <>
+struct coordinate_system<point>
+{
+ typedef bg::cs::cartesian type;
+};
+
+template <>
+struct dimension<point>
+{
+ enum { value = 2 };
+};
+
+template <>
+struct access<point, 0>
+{
+ static float get(point const& p)
+ {
+ return p.x;
+ }
+
+ static void set(point& p, float value)
+ {
+ p.x = value;
+ }
+};
+
+template <>
+struct access<point, 1>
+{
+ static float get(point const& p)
+ {
+ return p.y;
+ }
+
+ static void set(point& p, float value)
+ {
+ p.y = value;
+ }
+};
+
+
+}}} // namespace bg::traits
+
+int main()
+{
+ point p1;
+ const point p2;
+ test::function_requiring_a_point(p1, p2);
+ return 0;
+}
diff --git a/libs/geometry/test/policies/Jamfile.v2 b/libs/geometry/test/policies/Jamfile.v2
new file mode 100644
index 000000000..741c4d1bc
--- /dev/null
+++ b/libs/geometry/test/policies/Jamfile.v2
@@ -0,0 +1,14 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-policies
+ :
+ [ run compare.cpp ]
+ ;
diff --git a/libs/geometry/test/policies/compare.cpp b/libs/geometry/test/policies/compare.cpp
new file mode 100644
index 000000000..adb9f0309
--- /dev/null
+++ b/libs/geometry/test/policies/compare.cpp
@@ -0,0 +1,245 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <geometry_test_common.hpp>
+
+#include <algorithm>
+
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+
+#include <boost/geometry/policies/compare.hpp>
+
+#include <boost/geometry/strategies/strategies.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename Container>
+inline std::string coordinates(Container const& points)
+{
+ std::ostringstream out;
+ typedef typename boost::range_value<Container>::type point_type;
+ for (typename boost::range_const_iterator<Container>::type it = boost::begin(points);
+ it != boost::end(points);
+ ++it)
+ {
+ out << bg::dsv(*it);
+ }
+ return out.str();
+}
+
+template <typename P>
+void test_2d_compare()
+{
+ P p1 = bg::make<P>(3, 1);
+ P p2 = bg::make<P>(3, 1);
+ P p3 = bg::make<P>(1, 3);
+ P p4 = bg::make<P>(5, 2);
+ P p5 = bg::make<P>(3, 2);
+
+ // Test in all dimensions
+ {
+ bg::equal_to<P> et;
+ bg::less<P> lt;
+ bg::greater<P> gt;
+
+ BOOST_CHECK_EQUAL(et(p1, p2), true);
+ BOOST_CHECK_EQUAL(et(p1, p3), false);
+ BOOST_CHECK_EQUAL(et(p1, p4), false);
+ BOOST_CHECK_EQUAL(et(p1, p5), false);
+ BOOST_CHECK_EQUAL(et(p3, p4), false);
+
+ BOOST_CHECK_EQUAL(lt(p1, p2), false);
+ BOOST_CHECK_EQUAL(lt(p1, p3), false);
+ BOOST_CHECK_EQUAL(lt(p1, p4), true);
+ BOOST_CHECK_EQUAL(lt(p1, p5), true);
+ BOOST_CHECK_EQUAL(lt(p3, p4), true);
+
+ BOOST_CHECK_EQUAL(gt(p1, p2), false);
+ BOOST_CHECK_EQUAL(gt(p1, p3), true);
+ BOOST_CHECK_EQUAL(gt(p1, p4), false);
+ BOOST_CHECK_EQUAL(gt(p1, p5), false);
+ BOOST_CHECK_EQUAL(gt(p3, p4), false);
+ }
+
+
+ // Test in dimension 0, X
+ {
+ bg::equal_to<P, 0> et;
+ bg::less<P, 0> lt;
+ bg::greater<P, 0> gt;
+
+ BOOST_CHECK_EQUAL(et(p1, p2), true);
+ BOOST_CHECK_EQUAL(et(p1, p3), false);
+ BOOST_CHECK_EQUAL(et(p1, p4), false);
+ BOOST_CHECK_EQUAL(et(p1, p5), true);
+ BOOST_CHECK_EQUAL(et(p3, p4), false);
+
+ BOOST_CHECK_EQUAL(lt(p1, p2), false);
+ BOOST_CHECK_EQUAL(lt(p1, p3), false);
+ BOOST_CHECK_EQUAL(lt(p1, p4), true);
+ BOOST_CHECK_EQUAL(lt(p1, p5), false);
+ BOOST_CHECK_EQUAL(lt(p3, p4), true);
+
+ BOOST_CHECK_EQUAL(gt(p1, p2), false);
+ BOOST_CHECK_EQUAL(gt(p1, p3), true);
+ BOOST_CHECK_EQUAL(gt(p1, p4), false);
+ BOOST_CHECK_EQUAL(gt(p1, p5), false);
+ BOOST_CHECK_EQUAL(gt(p3, p4), false);
+ }
+
+ // Test in dimension 1, Y
+ {
+ bg::equal_to<P, 1> et;
+ bg::less<P, 1> lt;
+ bg::greater<P, 1> gt;
+
+ BOOST_CHECK_EQUAL(et(p1, p2), true);
+ BOOST_CHECK_EQUAL(et(p1, p3), false);
+ BOOST_CHECK_EQUAL(et(p1, p4), false);
+ BOOST_CHECK_EQUAL(et(p1, p5), false);
+ BOOST_CHECK_EQUAL(et(p3, p4), false);
+
+ BOOST_CHECK_EQUAL(lt(p1, p2), false);
+ BOOST_CHECK_EQUAL(lt(p1, p3), true);
+ BOOST_CHECK_EQUAL(lt(p1, p4), true);
+ BOOST_CHECK_EQUAL(lt(p1, p5), true);
+ BOOST_CHECK_EQUAL(lt(p3, p4), false);
+
+ BOOST_CHECK_EQUAL(gt(p1, p2), false);
+ BOOST_CHECK_EQUAL(gt(p1, p3), false);
+ BOOST_CHECK_EQUAL(gt(p1, p4), false);
+ BOOST_CHECK_EQUAL(gt(p1, p5), false);
+ BOOST_CHECK_EQUAL(gt(p3, p4), true);
+ }
+}
+
+
+template <typename P>
+void test_2d_sort()
+{
+ typedef typename bg::coordinate_type<P>::type ct;
+
+ std::vector<P> v;
+ v.push_back(bg::make<P>(3, 1));
+ v.push_back(bg::make<P>(2, 3));
+ v.push_back(bg::make<P>(2, 2));
+ v.push_back(bg::make<P>(1, 3));
+
+ // Sort on coordinates in order x,y,z
+ std::sort(v.begin(), v.end(), bg::less<P>());
+ std::string s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(1, 3)(2, 2)(2, 3)(3, 1)");
+
+ // Reverse sort
+ std::sort(v.begin(), v.end(), bg::greater<P>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(3, 1)(2, 3)(2, 2)(1, 3)");
+
+ // Sort backwards on coordinates in order x,y,z
+ //std::sort(v.begin(), v.end(), bg::greater<P>());
+ //std::string s = coordinates(v);
+ //BOOST_CHECK_EQUAL(s, "(1, 3)(2, 2)(2, 3)(3, 1)");
+
+ // Refill to remove duplicate coordinates
+ v.clear();
+ v.push_back(bg::make<P>(4, 1));
+ v.push_back(bg::make<P>(3, 2));
+ v.push_back(bg::make<P>(2, 3));
+ v.push_back(bg::make<P>(1, 4));
+
+ // Sort ascending on only x-coordinate
+ std::sort(v.begin(), v.end(), bg::less<P, 0>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(1, 4)(2, 3)(3, 2)(4, 1)");
+
+ // Sort ascending on only y-coordinate
+ std::sort(v.begin(), v.end(), bg::less<P, 1>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(4, 1)(3, 2)(2, 3)(1, 4)");
+
+ // Sort descending on only x-coordinate
+ std::sort(v.begin(), v.end(), bg::greater<P, 0>());
+ s = coordinates(v);
+ //BOOST_CHECK_EQUAL(s, "(4, 1)(3, 2)(2, 3)(1, 4)");
+
+ // Sort descending on only y-coordinate
+ std::sort(v.begin(), v.end(), bg::greater<P, 1>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(1, 4)(2, 3)(3, 2)(4, 1)");
+
+ // Make non-unique vector
+ v.push_back(bg::make<P>(4, 1));
+ v.push_back(bg::make<P>(3, 2));
+ v.push_back(bg::make<P>(2, 3));
+ v.push_back(bg::make<P>(1, 4));
+ v.push_back(bg::make<P>(1, 5));
+ std::sort(v.begin(), v.end(), bg::less<P>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(1, 4)(1, 4)(1, 5)(2, 3)(2, 3)(3, 2)(3, 2)(4, 1)(4, 1)");
+
+
+ std::vector<P> v2;
+ std::unique_copy(v.begin(), v.end(), std::back_inserter(v2), bg::equal_to<P>());
+ s = coordinates(v2);
+ BOOST_CHECK_EQUAL(s, "(1, 4)(1, 5)(2, 3)(3, 2)(4, 1)");
+}
+
+
+template <typename P>
+void test_spherical()
+{
+ typedef typename bg::coordinate_type<P>::type ct;
+
+ std::vector<P> v;
+ v.push_back(bg::make<P>( 179.73, 71.56)); // east
+ v.push_back(bg::make<P>( 177.47, 71.23)); // less east
+ v.push_back(bg::make<P>(-178.78, 70.78)); // further east, = west, this is the most right point
+
+ // Sort on coordinates in order x,y,z
+ std::sort(v.begin(), v.end(), bg::less<P>());
+ std::string s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(177.47, 71.23)(179.73, 71.56)(-178.78, 70.78)");
+
+ // Sort ascending on only x-coordinate
+ std::sort(v.begin(), v.end(), bg::less<P, 0>());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(177.47, 71.23)(179.73, 71.56)(-178.78, 70.78)");
+
+ // Sort ascending on only x-coordinate, but override with std-comparison,
+ // (so this is the normal sorting behaviour that would have been used
+ // if it would not have been spherical)
+ std::sort(v.begin(), v.end(), bg::less<P, 0, std::less<ct> >());
+ s = coordinates(v);
+ BOOST_CHECK_EQUAL(s, "(-178.78, 70.78)(177.47, 71.23)(179.73, 71.56)");
+}
+
+
+int test_main(int, char* [])
+{
+ test_2d_compare<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_2d_compare<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ test_2d_sort<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_2d_sort<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_2d_sort<boost::tuple<double, double> >();
+ test_2d_sort<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ test_spherical<bg::model::point<double, 2, bg::cs::spherical<bg::degree> > >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/policies/compare.vcproj b/libs/geometry/test/policies/compare.vcproj
new file mode 100644
index 000000000..916e6d72b
--- /dev/null
+++ b/libs/geometry/test/policies/compare.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="compare"
+ ProjectGUID="{71AFA3C2-6873-4368-81D9-CA305A43B458}"
+ RootNamespace="compare"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\compare"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\compare"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\compare.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/policies/policy_tests.sln b/libs/geometry/test/policies/policy_tests.sln
new file mode 100644
index 000000000..16917fd38
--- /dev/null
+++ b/libs/geometry/test/policies/policy_tests.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compare", "compare.vcproj", "{71AFA3C2-6873-4368-81D9-CA305A43B458}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {71AFA3C2-6873-4368-81D9-CA305A43B458}.Debug|Win32.ActiveCfg = Debug|Win32
+ {71AFA3C2-6873-4368-81D9-CA305A43B458}.Debug|Win32.Build.0 = Debug|Win32
+ {71AFA3C2-6873-4368-81D9-CA305A43B458}.Release|Win32.ActiveCfg = Release|Win32
+ {71AFA3C2-6873-4368-81D9-CA305A43B458}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/robustness/common/common_settings.hpp b/libs/geometry/test/robustness/common/common_settings.hpp
new file mode 100644
index 000000000..050f5367f
--- /dev/null
+++ b/libs/geometry/test/robustness/common/common_settings.hpp
@@ -0,0 +1,32 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Robustness Test
+//
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_COMMON_SETTINGS_HPP
+#define BOOST_GEOMETRY_COMMON_SETTINGS_HPP
+
+struct common_settings
+{
+ bool svg;
+ bool wkt;
+ bool also_difference;
+ double tolerance;
+
+ int field_size;
+ bool triangular;
+
+ common_settings()
+ : svg(false)
+ , wkt(false)
+ , also_difference(false)
+ , tolerance(1.0e-6)
+ , field_size(10)
+ , triangular(false)
+ {}
+};
+
+#endif // BOOST_GEOMETRY_COMMON_SETTINGS_HPP
diff --git a/libs/geometry/test/robustness/common/make_square_polygon.hpp b/libs/geometry/test/robustness/common/make_square_polygon.hpp
new file mode 100644
index 000000000..764fc4bb8
--- /dev/null
+++ b/libs/geometry/test/robustness/common/make_square_polygon.hpp
@@ -0,0 +1,46 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Robustness Test
+//
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef BOOST_GEOMETRY_TEST_ROBUSTNESS_MAKE_SQUARE_POLYGON_HPP
+#define BOOST_GEOMETRY_TEST_ROBUSTNESS_MAKE_SQUARE_POLYGON_HPP
+
+#include <boost/geometry.hpp>
+
+template <typename Polygon, typename Generator, typename Settings>
+inline void make_square_polygon(Polygon& polygon, Generator& generator, Settings const& settings)
+{
+ using namespace boost::geometry;
+
+ typedef typename point_type<Polygon>::type point_type;
+ typedef typename coordinate_type<Polygon>::type coordinate_type;
+
+ coordinate_type x, y;
+ x = generator();
+ y = generator();
+
+ typename ring_type<Polygon>::type& ring = exterior_ring(polygon);
+
+ point_type p;
+ set<0>(p, x); set<1>(p, y); append(ring, p);
+ set<0>(p, x); set<1>(p, y + 1); append(ring, p);
+ set<0>(p, x + 1); set<1>(p, y + 1); append(ring, p);
+ set<0>(p, x + 1); set<1>(p, y); append(ring, p);
+ set<0>(p, x); set<1>(p, y); append(ring, p);
+
+ if (settings.triangular)
+ {
+ // Remove a point, generator says which
+ int c = generator() % 4;
+ if (c >= 1 && c <= 3)
+ {
+ ring.erase(ring.begin() + c);
+ }
+ }
+}
+
+#endif // BOOST_GEOMETRY_TEST_ROBUSTNESS_MAKE_SQUARE_POLYGON_HPP
diff --git a/libs/geometry/test/robustness/convex_hull/Jamfile.v2 b/libs/geometry/test/robustness/convex_hull/Jamfile.v2
new file mode 100644
index 000000000..20521d548
--- /dev/null
+++ b/libs/geometry/test/robustness/convex_hull/Jamfile.v2
@@ -0,0 +1,18 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+# Robustness Test - convex_hull
+#
+# Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+# 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)
+
+
+project random_multi_points
+ : requirements
+ <include>.
+ <library>../../../../program_options/build//boost_program_options
+ <link>static
+ ;
+
+exe random_multi_points : random_multi_points.cpp ;
diff --git a/libs/geometry/test/robustness/convex_hull/random_multi_points.cpp b/libs/geometry/test/robustness/convex_hull/random_multi_points.cpp
new file mode 100644
index 000000000..a0d3efb54
--- /dev/null
+++ b/libs/geometry/test/robustness/convex_hull/random_multi_points.cpp
@@ -0,0 +1,225 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Robustness Test - convex_hull
+
+// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#define BOOST_GEOMETRY_REPORT_OVERLAY_ERROR
+#define BOOST_GEOMETRY_NO_BOOST_TEST
+
+#include <sstream>
+#include <fstream>
+
+#include <boost/program_options.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
+#include <boost/timer.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
+#include <boost/geometry/io/svg/svg_mapper.hpp>
+
+struct settings_type
+{
+ bool svg;
+ bool wkt;
+
+ settings_type()
+ : svg(false)
+ , wkt(false)
+ {}
+};
+
+namespace bg = boost::geometry;
+
+template <typename Geometry1, typename Geometry2>
+void create_svg(std::string const& filename, Geometry1 const& points, Geometry2 const& hull)
+{
+ typedef typename boost::geometry::point_type<Geometry1>::type point_type;
+
+ boost::geometry::model::box<point_type> box;
+ bg::envelope(hull, box);
+ bg::buffer(box, box, 1.0);
+
+ std::ofstream svg(filename.c_str());
+ boost::geometry::svg_mapper<point_type> mapper(svg, 800, 800);
+ mapper.add(box);
+
+ mapper.map(hull, "opacity:0.8;fill:none;stroke:rgb(255,0,255);stroke-width:4;stroke-dasharray:1,7;stroke-linecap:round");
+ mapper.map(points, "fill-opacity:0.5;fill:rgb(0,0,255);", 5);
+}
+
+
+template <typename MultiPoint, typename Generator>
+inline void make_multi_point(MultiPoint& mp, Generator& generator, int pcount)
+{
+ typedef typename bg::point_type<MultiPoint>::type point_type;
+ typedef typename bg::coordinate_type<MultiPoint>::type coordinate_type;
+
+ for(int i = 0; i < pcount; i++)
+ {
+ coordinate_type x, y;
+ x = generator();
+ y = generator();
+
+ point_type p;
+ bg::set<0>(p, x);
+ bg::set<1>(p, y);
+
+ mp.push_back(p);
+ }
+}
+
+template <typename MultiPoint, typename Polygon>
+bool check_hull(MultiPoint const& mp, Polygon const& poly)
+{
+ for(typename boost::range_iterator<MultiPoint const>::type it = boost::begin(mp);
+ it != boost::end(mp);
+ ++it)
+ {
+ if (! bg::covered_by(*it, poly))
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+template <typename MultiPoint, typename Generator>
+void test_random_multi_points(MultiPoint& result, int& index,
+ Generator& generator,
+ int pcount, settings_type const& settings)
+{
+ typedef typename bg::point_type<MultiPoint>::type point_type;
+
+ MultiPoint mp;
+ bg::model::polygon<point_type> hull;
+
+ make_multi_point(mp, generator, pcount);
+ bg::convex_hull(mp, hull);
+ // Check if each point lies in the hull
+ bool correct = check_hull(mp, hull);
+ if (! correct)
+ {
+ std::cout << "ERROR! " << std::endl
+ << bg::wkt(mp) << std::endl
+ << bg::wkt(hull) << std::endl
+ << std::endl;
+ ;
+ }
+
+ if (settings.svg || ! correct)
+ {
+ std::ostringstream out;
+ out << "random_mp_" << index++ << "_" << pcount << ".svg";
+ create_svg(out.str(), mp, hull);
+ }
+ if (settings.wkt)
+ {
+ std::cout
+ << "input: " << bg::wkt(mp) << std::endl
+ << "output: " << bg::wkt(hull) << std::endl
+ << std::endl;
+ ;
+ }
+}
+
+
+template <typename T>
+void test_all(int seed, int count, int field_size, int pcount, settings_type const& settings)
+{
+ boost::timer t;
+
+ typedef boost::minstd_rand base_generator_type;
+
+ base_generator_type generator(seed);
+
+ boost::uniform_int<> random_coordinate(0, field_size - 1);
+ boost::variate_generator<base_generator_type&, boost::uniform_int<> >
+ coordinate_generator(generator, random_coordinate);
+
+ typedef bg::model::multi_point
+ <
+ bg::model::d2::point_xy<T>
+ > mp;
+
+ int index = 0;
+ for(int i = 0; i < count; i++)
+ {
+ mp p;
+ test_random_multi_points<mp>(p, index, coordinate_generator, pcount, settings);
+ }
+ std::cout
+ << "points: " << index
+ << " type: " << typeid(T).name()
+ << " time: " << t.elapsed() << std::endl;
+}
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== random_multi_points ===\nAllowed options");
+
+ std::string type = "double";
+ int count = 1;
+ int seed = static_cast<unsigned int>(std::time(0));
+ int pcount = 3;
+ int field_size = 10;
+ settings_type settings;
+
+ description.add_options()
+ ("help", "Help message")
+ ("seed", po::value<int>(&seed), "Initialization seed for random generator")
+ ("count", po::value<int>(&count)->default_value(1), "Number of tests")
+ ("number", po::value<int>(&pcount)->default_value(30), "Number of points")
+ ("size", po::value<int>(&field_size)->default_value(10), "Size of the field")
+ ("type", po::value<std::string>(&type)->default_value("double"), "Type (int,float,double)")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help"))
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ if (type == "float")
+ {
+ test_all<float>(seed, count, field_size, pcount, settings);
+ }
+ else if (type == "double")
+ {
+ test_all<double>(seed, count, field_size, pcount, settings);
+ }
+ else if (type == "int")
+ {
+ test_all<int>(seed, count, field_size, pcount, settings);
+ }
+
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/robustness/convex_hull/random_multi_points.sln b/libs/geometry/test/robustness/convex_hull/random_multi_points.sln
new file mode 100644
index 000000000..1261464c0
--- /dev/null
+++ b/libs/geometry/test/robustness/convex_hull/random_multi_points.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "random_multi_points", "random_multi_points.vcproj", "{334B6950-6F92-4FA3-9A82-ED6E3B19BB2C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {334B6950-6F92-4FA3-9A82-ED6E3B19BB2C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {334B6950-6F92-4FA3-9A82-ED6E3B19BB2C}.Debug|Win32.Build.0 = Debug|Win32
+ {334B6950-6F92-4FA3-9A82-ED6E3B19BB2C}.Release|Win32.ActiveCfg = Release|Win32
+ {334B6950-6F92-4FA3-9A82-ED6E3B19BB2C}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/robustness/convex_hull/random_multi_points.vcproj b/libs/geometry/test/robustness/convex_hull/random_multi_points.vcproj
new file mode 100644
index 000000000..3db9cd3be
--- /dev/null
+++ b/libs/geometry/test/robustness/convex_hull/random_multi_points.vcproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="random_multi_points"
+ ProjectGUID="{334B6950-6F92-4FA3-9A82-ED6E3B19BB2C}"
+ RootNamespace="random_multi_points"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\random_multi_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../..;."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\random_multi_points"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../..;."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\random_multi_points.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/robustness/overlay/buffer/Jamfile.v2 b/libs/geometry/test/robustness/overlay/buffer/Jamfile.v2
new file mode 100644
index 000000000..f724fcf8c
--- /dev/null
+++ b/libs/geometry/test/robustness/overlay/buffer/Jamfile.v2
@@ -0,0 +1,19 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+# Robustness Test - overlay - buffer
+#
+# Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+# 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)
+
+
+project recursive_polygons_buffer
+ : requirements
+ <include>.
+ <include>../..
+ <library>../../../../../program_options/build//boost_program_options
+ <link>static
+ ;
+
+exe recursive_polygons_buffer : recursive_polygons_buffer.cpp ;
diff --git a/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.cpp b/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.cpp
new file mode 100644
index 000000000..5dc2be518
--- /dev/null
+++ b/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.cpp
@@ -0,0 +1,352 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Robustness Test
+
+// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#if defined(_MSC_VER)
+# pragma warning( disable : 4244 )
+# pragma warning( disable : 4267 )
+#endif
+
+#include <fstream>
+#include <sstream>
+
+#include <boost/foreach.hpp>
+#include <boost/program_options.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
+#include <boost/timer.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
+
+#include <boost/geometry/io/svg/svg_mapper.hpp>
+#include <boost/geometry/extensions/algorithms/midpoints.hpp>
+
+#include <boost/geometry/extensions/algorithms/buffer/buffer_inserter.hpp>
+
+#include <boost/geometry/multi/multi.hpp> // TODO: more specific
+#include <boost/geometry/extensions/algorithms/buffer/multi_buffer_inserter.hpp>
+
+#include <boost/geometry/extensions/strategies/buffer.hpp>
+
+
+#include <common/common_settings.hpp>
+#include <common/make_square_polygon.hpp>
+
+
+struct buffer_settings : public common_settings
+{
+ int join_code;
+ double distance;
+};
+
+namespace bg = boost::geometry;
+
+template <typename Geometry1, typename Geometry2>
+void create_svg(std::string const& filename
+ , Geometry1 const& mp
+ , Geometry2 const& buffer
+ )
+{
+ typedef typename boost::geometry::point_type<Geometry1>::type point_type;
+
+
+ std::ofstream svg(filename.c_str());
+ boost::geometry::svg_mapper<point_type> mapper(svg, 800, 800);
+
+ boost::geometry::model::box<point_type> box;
+ bg::envelope(mp, box);
+ bg::buffer(box, box, 1.0);
+ mapper.add(box);
+
+ if (bg::num_points(buffer) > 0)
+ {
+ bg::envelope(buffer, box);
+ bg::buffer(box, box, 1.0);
+ mapper.add(box);
+ }
+
+ mapper.map(mp, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:3");
+ mapper.map(buffer, "stroke-opacity:0.9;stroke:rgb(0,0,0);fill:none;stroke-width:1");
+
+ //mapper.map(intersection,"opacity:0.6;stroke:rgb(0,128,0);stroke-width:5");
+}
+
+
+
+
+template <typename MultiPolygon, typename Settings>
+bool verify(std::string const& caseid, MultiPolygon const& mp, MultiPolygon const& buffer, Settings const& settings)
+{
+ bool result = true;
+
+ // Area of buffer must be larger than of original polygon
+ BOOST_AUTO(area_mp, bg::area(mp));
+ BOOST_AUTO(area_buf, bg::area(buffer));
+
+ if (area_buf < area_mp)
+ {
+ result = false;
+ }
+
+ if (result)
+ {
+ typedef boost::range_value<MultiPolygon const>::type polygon_type;
+ BOOST_FOREACH(polygon_type const& polygon, mp)
+ {
+ typename bg::point_type<polygon_type>::type point;
+ bg::point_on_border(point, polygon);
+ if (! bg::within(point, buffer))
+ {
+ result = false;
+ }
+ }
+ }
+
+ bool svg = settings.svg;
+ bool wkt = settings.wkt;
+ if (! result)
+ {
+ std::cout << "ERROR " << caseid << std::endl;
+ //std::cout << bg::wkt(mp) << std::endl;
+ //std::cout << bg::wkt(buffer) << std::endl;
+ svg = true;
+ wkt = true;
+ }
+
+ if (svg || wkt)
+ {
+ //std::cout << caseid << std::endl;
+ }
+
+ if (svg)
+ {
+ std::ostringstream filename;
+ filename << caseid << "_"
+ << typeid(typename bg::coordinate_type<MultiPolygon>::type).name()
+ << ".svg";
+ create_svg(filename.str(), mp, buffer);
+ }
+
+ if (wkt)
+ {
+ std::ostringstream filename;
+ filename << caseid << "_"
+ << typeid(typename bg::coordinate_type<MultiPolygon>::type).name()
+ << ".wkt";
+ std::ofstream stream(filename.str().c_str());
+ stream << bg::wkt(mp) << std::endl;
+ stream << bg::wkt(buffer) << std::endl;
+ }
+
+ return result;
+}
+
+template <typename MultiPolygon, typename Generator, typename Settings>
+bool test_buffer(MultiPolygon& result, int& index,
+ Generator& generator,
+ int level, Settings const& settings)
+{
+ MultiPolygon p, q;
+
+ // Generate two boxes
+ if (level == 0)
+ {
+ p.resize(1);
+ q.resize(1);
+ make_square_polygon(p.front(), generator, settings);
+ make_square_polygon(q.front(), generator, settings);
+ bg::correct(p);
+ bg::correct(q);
+ }
+ else
+ {
+ bg::correct(p);
+ bg::correct(q);
+ if (! test_buffer(p, index, generator, level - 1, settings)
+ || ! test_buffer(q, index, generator, level - 1, settings))
+ {
+ return false;
+ }
+ }
+
+ typedef typename boost::range_value<MultiPolygon>::type polygon;
+
+ MultiPolygon mp;
+ bg::detail::union_::union_insert
+ <
+ polygon
+ >(p, q, std::back_inserter(mp));
+
+ bg::unique(mp);
+ bg::unique(mp);
+ bg::correct(mp);
+ result = mp;
+
+
+ typedef typename bg::coordinate_type<MultiPolygon>::type coordinate_type;
+ typedef typename bg::point_type<MultiPolygon>::type point_type;
+ typedef bg::strategy::buffer::distance_assymetric<coordinate_type> distance_strategy_type;
+ distance_strategy_type distance_strategy(settings.distance, settings.distance);
+
+ typedef bg::strategy::buffer::join_round<point_type, point_type> join_strategy_type;
+ join_strategy_type join_strategy;
+
+ typedef typename boost::range_value<MultiPolygon>::type polygon_type;
+ MultiPolygon buffered;
+
+ std::ostringstream out;
+ out << "recursive_polygons_buffer_" << index++ << "_" << level;
+
+ try
+ {
+ switch(settings.join_code)
+ {
+ case 1 :
+ bg::buffer_inserter<polygon_type>(mp, std::back_inserter(buffered),
+ distance_strategy,
+ bg::strategy::buffer::join_round<point_type, point_type>());
+ break;
+ case 2 :
+ bg::buffer_inserter<polygon_type>(mp, std::back_inserter(buffered),
+ distance_strategy,
+ bg::strategy::buffer::join_miter<point_type, point_type>());
+ break;
+ default :
+ return false;
+ }
+ }
+ catch(std::exception const& e)
+ {
+ MultiPolygon empty;
+ std::cout << out.str() << std::endl;
+ std::cout << "Exception " << e.what() << std::endl;
+ verify(out.str(), mp, empty, settings);
+ return false;
+ }
+
+
+ return verify(out.str(), mp, buffered, settings);
+}
+
+
+template <typename T, bool Clockwise, bool Closed, typename Settings>
+void test_all(int seed, int count, int level, Settings const& settings)
+{
+ boost::timer t;
+
+ typedef boost::minstd_rand base_generator_type;
+
+ base_generator_type generator(seed);
+
+ boost::uniform_int<> random_coordinate(0, settings.field_size - 1);
+ boost::variate_generator<base_generator_type&, boost::uniform_int<> >
+ coordinate_generator(generator, random_coordinate);
+
+ typedef bg::model::polygon
+ <
+ bg::model::d2::point_xy<T>, Clockwise, Closed
+ > polygon;
+ typedef bg::model::multi_polygon<polygon> mp;
+
+
+ int index = 0;
+ for(int i = 0; i < count; i++)
+ {
+ mp p;
+ test_buffer<mp>(p, index, coordinate_generator, level, settings);
+ }
+ std::cout
+ << "geometries: " << index
+ << " type: " << typeid(T).name()
+ << " time: " << t.elapsed() << std::endl;
+}
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== recursive_polygons_linear_areal ===\nAllowed options");
+
+ int count = 1;
+ int seed = static_cast<unsigned int>(std::time(0));
+ int level = 3;
+ bool ccw = false;
+ bool open = false;
+ buffer_settings settings;
+ std::string form = "box";
+ std::string join = "round";
+
+ description.add_options()
+ ("help", "Help message")
+ ("seed", po::value<int>(&seed), "Initialization seed for random generator")
+ ("count", po::value<int>(&count)->default_value(1), "Number of tests")
+ ("level", po::value<int>(&level)->default_value(3), "Level to reach (higher->slower)")
+ ("distance", po::value<double>(&settings.distance)->default_value(1.0), "Distance (1.0)")
+ ("form", po::value<std::string>(&form)->default_value("box"), "Form of the polygons (box, triangle)")
+ ("join", po::value<std::string>(&join)->default_value("round"), "Form of the joins (round, miter)")
+ ("ccw", po::value<bool>(&ccw)->default_value(false), "Counter clockwise polygons")
+ ("open", po::value<bool>(&open)->default_value(false), "Open polygons")
+ ("size", po::value<int>(&settings.field_size)->default_value(10), "Size of the field")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help")
+ || (form != "box" && form != "triangle")
+ || (join != "round" && join != "miter")
+ )
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ settings.triangular = form != "box";
+ settings.join_code = join == "round" ? 1 : 2;
+
+ if (ccw && open)
+ {
+ test_all<double, false, false>(seed, count, level, settings);
+ }
+ else if (ccw)
+ {
+ test_all<double, false, true>(seed, count, level, settings);
+ }
+ else if (open)
+ {
+ test_all<double, true, false>(seed, count, level, settings);
+ }
+ else
+ {
+ test_all<double, true, true>(seed, count, level, settings);
+ }
+
+#if defined(HAVE_TTMATH)
+ // test_all<ttmath_big, true, true>(seed, count, max, svg, level);
+#endif
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.sln b/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.sln
new file mode 100644
index 000000000..6e8c2574f
--- /dev/null
+++ b/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recursive_polygons_buffer", "recursive_polygons_buffer.vcxproj", "{02C9CFA4-C625-55CA-1C8E-2B96EBB09FE8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {02C9CFA4-C625-55CA-1C8E-2B96EBB09FE8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {02C9CFA4-C625-55CA-1C8E-2B96EBB09FE8}.Debug|Win32.Build.0 = Debug|Win32
+ {02C9CFA4-C625-55CA-1C8E-2B96EBB09FE8}.Release|Win32.ActiveCfg = Release|Win32
+ {02C9CFA4-C625-55CA-1C8E-2B96EBB09FE8}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.vcproj b/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.vcproj
new file mode 100644
index 000000000..3cc4a384f
--- /dev/null
+++ b/libs/geometry/test/robustness/overlay/buffer/recursive_polygons_buffer.vcproj
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="recursive_polygons_buffer"
+ RootNamespace="recursive_polygons_buffer"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\recursive_polygons_buffer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;.;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\recursive_polygons_buffer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;.;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\recursive_polygons_buffer.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/robustness/overlay/linear_areal/Jamfile.v2 b/libs/geometry/test/robustness/overlay/linear_areal/Jamfile.v2
new file mode 100644
index 000000000..a31dadf15
--- /dev/null
+++ b/libs/geometry/test/robustness/overlay/linear_areal/Jamfile.v2
@@ -0,0 +1,19 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+# Robustness Test - overlay - linear/areal
+#
+# Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+# 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)
+
+
+project recursive_polygons_linear_areal
+ : requirements
+ <include>.
+ <include>../..
+ <library>../../../../../program_options/build//boost_program_options
+ <link>static
+ ;
+
+exe recursive_polygons_linear_areal : recursive_polygons_linear_areal.cpp ;
diff --git a/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.cpp b/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.cpp
new file mode 100644
index 000000000..6585a227e
--- /dev/null
+++ b/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.cpp
@@ -0,0 +1,501 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Robustness Test
+
+// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#if defined(_MSC_VER)
+# pragma warning( disable : 4244 )
+# pragma warning( disable : 4267 )
+#endif
+
+#include <fstream>
+#include <sstream>
+
+#include <boost/foreach.hpp>
+#include <boost/program_options.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
+#include <boost/timer.hpp>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/multi/geometries/multi_geometries.hpp>
+
+#include <boost/geometry/io/svg/svg_mapper.hpp>
+#include <boost/geometry/extensions/algorithms/midpoints.hpp>
+
+#include <common/common_settings.hpp>
+#include <common/make_square_polygon.hpp>
+
+
+namespace bg = boost::geometry;
+
+template <typename Geometry1, typename Geometry2, typename Geometry3>
+void create_svg(std::string const& filename
+ , Geometry1 const& mp
+ , Geometry2 const& ls
+ , Geometry3 const& difference
+ , Geometry3 const& intersection
+ )
+{
+ typedef typename boost::geometry::point_type<Geometry1>::type point_type;
+
+
+ std::ofstream svg(filename.c_str());
+ boost::geometry::svg_mapper<point_type> mapper(svg, 800, 800);
+
+ boost::geometry::model::box<point_type> box;
+ bg::envelope(mp, box);
+ bg::buffer(box, box, 1.0);
+ mapper.add(box);
+ bg::envelope(ls, box);
+ bg::buffer(box, box, 1.0);
+ mapper.add(box);
+
+ mapper.map(mp, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:3");
+ mapper.map(ls, "stroke-opacity:0.9;stroke:rgb(0,0,0);stroke-width:1");
+
+ mapper.map(intersection,"opacity:0.6;stroke:rgb(0,128,0);stroke-width:5");
+ mapper.map(difference, "opacity:0.6;stroke:rgb(255,0,255);stroke-width:5"); //;stroke-dasharray:1,7;stroke-linecap:round
+}
+
+
+template <typename Linestring, typename Generator, typename Settings>
+inline void make_random_linestring(Linestring& line, Generator& generator, Settings const& settings)
+{
+ using namespace boost::geometry;
+
+ typedef typename point_type<Linestring>::type point_type;
+ typedef typename coordinate_type<Linestring>::type coordinate_type;
+
+ coordinate_type x, y;
+ x = generator();
+ y = generator();
+
+ int count = 3 + generator() % 6;
+ int d = 0; // direction
+
+ for (int i = 0; i <= count && x <= settings.field_size; i++, x++, d = 1 - d)
+ {
+ append(line, make<point_type>(x, y + d));
+ append(line, make<point_type>(x, y + 1 - d));
+ }
+
+ if (d == 0 && generator() % 4 < 3 && y >= 2)
+ {
+ d = 1 - d;
+ x--;
+ y -= 2;
+ count = 3 + generator() % 6;
+ for (int i = 0; i <= count && x >= 0; i++, x--, d = 1 - d)
+ {
+ append(line, make<point_type>(x, y + d));
+ append(line, make<point_type>(x, y + 1 - d));
+ }
+ }
+
+ //if (settings.triangular)
+ //{
+ // // Remove a point, generator says which
+ // int c = generator() % 4;
+ // if (c >= 1 && c <= 3)
+ // {
+ // ring.erase(ring.begin() + c);
+ // }
+ //}
+}
+
+template<typename Geometry>
+class inside_check
+{
+ Geometry const& m_geo;
+ bool& m_result;
+public :
+
+ inside_check(Geometry const& geo, bool& result)
+ : m_geo(geo)
+ , m_result(result)
+ {}
+
+ inline inside_check<Geometry> operator=(inside_check<Geometry> const& input)
+ {
+ return inside_check<Geometry>(input.m_geo, input.m_result);
+ }
+
+ template <typename Point>
+ inline void operator()(Point const& p)
+ {
+ if (! bg::covered_by(p, m_geo))
+ {
+ if (m_result)
+ {
+ std::cout << "Does not fulfill inside check" << std::endl;
+ }
+ m_result = false;
+ }
+ }
+};
+
+
+template<typename Geometry>
+class outside_check
+{
+ Geometry const& m_geo;
+ bool& m_result;
+public :
+ outside_check(Geometry const& geo, bool& result)
+ : m_geo(geo)
+ , m_result(result)
+ {}
+
+ inline outside_check<Geometry> operator=(outside_check<Geometry> const& input)
+ {
+ return outside_check<Geometry>(input.m_geo, input.m_result);
+ }
+
+ template <typename Point>
+ inline void operator()(Point const& p)
+ {
+ if (bg::within(p, m_geo))
+ {
+ if (m_result)
+ {
+ std::cout << "Does not fulfill outside check" << std::endl;
+ }
+ m_result = false;
+ }
+ }
+};
+
+template<typename Segment>
+class border2_check
+{
+ Segment const& m_segment;
+ bool& m_result;
+
+public :
+ border2_check(Segment const& seg, bool& result)
+ : m_segment(seg)
+ , m_result(result)
+ {}
+
+ inline border2_check<Segment> operator=(border2_check<Segment> const& input)
+ {
+ return border2_check<Segment>(input.m_segment, input.m_result);
+ }
+
+ template <typename Segment2>
+ inline void operator()(Segment2 const& segment)
+ {
+ // Create copies (TODO: find out why referring_segment does not compile)
+ typedef typename bg::point_type<Segment2>::type pt;
+ typedef bg::model::segment<pt> segment_type;
+
+ typedef bg::strategy::intersection::relate_cartesian_segments
+ <
+ bg::policies::relate::segments_intersection_points
+ <
+ segment_type,
+ segment_type,
+ bg::segment_intersection_points<pt>
+ >
+ > policy;
+
+ segment_type seg1, seg2;
+ bg::convert(m_segment, seg1);
+ bg::convert(segment, seg2);
+ bg::segment_intersection_points<pt> is = policy::apply(seg1, seg2);
+
+ if (is.count == 2)
+ {
+ if (m_result)
+ {
+ std::cout << "Does not fulfill border2 check" << std::endl;
+ }
+ m_result = true;
+ }
+ }
+};
+
+template<typename Geometry>
+class border_check
+{
+ Geometry const& m_geo;
+ bool& m_result;
+public :
+ border_check(Geometry const& geo, bool& result)
+ : m_geo(geo)
+ , m_result(result)
+ {}
+
+ inline border_check<Geometry> operator=(border_check<Geometry> const& input)
+ {
+ return border_check<Geometry>(input.m_geo, input.m_result);
+ }
+
+ template <typename Segment>
+ inline void operator()(Segment const& s)
+ {
+ bool on_border = false;
+ border2_check<Segment> checker(s, on_border);
+ bg::for_each_segment(m_geo, checker);
+
+ if (on_border)
+ {
+ if (m_result)
+ {
+ std::cout << "Does not fulfill border check" << std::endl;
+ }
+ m_result = false;
+ }
+ }
+};
+
+
+template <typename MultiPolygon, typename Linestring, typename Settings>
+bool verify(std::string const& caseid, MultiPolygon const& mp, Linestring const& ls, Settings const& settings)
+{
+ bg::model::multi_linestring<Linestring> difference, intersection;
+ bg::difference(ls, mp, difference);
+ bg::intersection(ls, mp, intersection);
+
+ //typedef typename bg::length_result_type<point_type>::type length_type;
+
+ bool result = true;
+
+ // 1) Check by length
+ typedef double length_type;
+ length_type len_input = bg::length(ls);
+ length_type len_difference = bg::length(difference);
+ length_type len_intersection = bg::length(intersection);
+ if (! bg::math::equals(len_input, len_difference + len_intersection))
+ {
+ std::cout << "Input: " << len_input
+ << " difference: " << len_difference
+ << " intersection: " << len_intersection
+ << std::endl;
+
+ std::cout << "Does not fulfill length check" << std::endl;
+
+ result = false;
+ }
+
+ // 2) Check by within and covered by
+ inside_check<MultiPolygon> ic(mp, result);
+ bg::for_each_point(intersection, ic);
+
+ outside_check<MultiPolygon> oc(mp, result);
+ bg::for_each_point(difference, oc);
+
+ border_check<MultiPolygon> bc(mp, result);
+ bg::for_each_segment(difference, bc);
+
+ // 3) check also the mid-points from the difference to remove false positives
+ BOOST_FOREACH(Linestring const& d, difference)
+ {
+ Linestring difference_midpoints;
+ bg::midpoints(d, false, std::back_inserter(difference_midpoints));
+ outside_check<MultiPolygon> ocm(mp, result);
+ bg::for_each_point(difference_midpoints, ocm);
+ }
+
+
+ bool svg = settings.svg;
+ bool wkt = settings.wkt;
+ if (! result)
+ {
+ std::cout << "ERROR " << caseid << std::endl;
+ std::cout << bg::wkt(mp) << std::endl;
+ std::cout << bg::wkt(ls) << std::endl;
+ svg = true;
+ wkt = true;
+ }
+
+ if (svg)
+ {
+ std::ostringstream filename;
+ filename << caseid << "_"
+ << typeid(typename bg::coordinate_type<Linestring>::type).name()
+ << ".svg";
+ create_svg(filename.str(), mp, ls, difference, intersection);
+ }
+
+ if (wkt)
+ {
+ std::ostringstream filename;
+ filename << caseid << "_"
+ << typeid(typename bg::coordinate_type<Linestring>::type).name()
+ << ".wkt";
+ std::ofstream stream(filename.str().c_str());
+ stream << bg::wkt(mp) << std::endl;
+ stream << bg::wkt(ls) << std::endl;
+ }
+
+ return result;
+}
+
+template <typename MultiPolygon, typename Generator>
+bool test_linear_areal(MultiPolygon& result, int& index,
+ Generator& generator,
+ int level, common_settings const& settings)
+{
+ MultiPolygon p, q;
+
+ // Generate two boxes
+ if (level == 0)
+ {
+ p.resize(1);
+ q.resize(1);
+ make_square_polygon(p.front(), generator, settings);
+ make_square_polygon(q.front(), generator, settings);
+ bg::correct(p);
+ bg::correct(q);
+ }
+ else
+ {
+ bg::correct(p);
+ bg::correct(q);
+ if (! test_linear_areal(p, index, generator, level - 1, settings)
+ || ! test_linear_areal(q, index, generator, level - 1, settings))
+ {
+ return false;
+ }
+ }
+
+ typedef typename boost::range_value<MultiPolygon>::type polygon;
+
+ MultiPolygon mp;
+ bg::detail::union_::union_insert
+ <
+ polygon
+ >(p, q, std::back_inserter(mp));
+
+ bg::unique(mp);
+ bg::simplify(mp, result, 0.01);
+ bg::correct(mp);
+
+ // Generate a linestring
+ typedef typename bg::point_type<MultiPolygon>::type point_type;
+ typedef bg::model::linestring<point_type> linestring_type;
+ linestring_type ls;
+ make_random_linestring(ls, generator, settings);
+
+ std::ostringstream out;
+ out << "recursive_la_" << index++ << "_" << level;
+ return verify(out.str(), mp, ls, settings);
+}
+
+
+template <typename T, bool Clockwise, bool Closed>
+void test_all(int seed, int count, int level, common_settings const& settings)
+{
+ boost::timer t;
+
+ typedef boost::minstd_rand base_generator_type;
+
+ base_generator_type generator(seed);
+
+ boost::uniform_int<> random_coordinate(0, settings.field_size - 1);
+ boost::variate_generator<base_generator_type&, boost::uniform_int<> >
+ coordinate_generator(generator, random_coordinate);
+
+ typedef bg::model::polygon
+ <
+ bg::model::d2::point_xy<T>, Clockwise, Closed
+ > polygon;
+ typedef bg::model::multi_polygon<polygon> mp;
+
+
+ int index = 0;
+ for(int i = 0; i < count; i++)
+ {
+ mp p;
+ test_linear_areal<mp>(p, index, coordinate_generator, level, settings);
+ }
+ std::cout
+ << "geometries: " << index
+ << " type: " << typeid(T).name()
+ << " time: " << t.elapsed() << std::endl;
+}
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ namespace po = boost::program_options;
+ po::options_description description("=== recursive_polygons_linear_areal ===\nAllowed options");
+
+ int count = 1;
+ int seed = static_cast<unsigned int>(std::time(0));
+ int level = 3;
+ bool ccw = false;
+ bool open = false;
+ common_settings settings;
+ std::string form = "box";
+
+ description.add_options()
+ ("help", "Help message")
+ ("seed", po::value<int>(&seed), "Initialization seed for random generator")
+ ("count", po::value<int>(&count)->default_value(1), "Number of tests")
+ ("diff", po::value<bool>(&settings.also_difference)->default_value(false), "Include testing on difference")
+ ("level", po::value<int>(&level)->default_value(3), "Level to reach (higher->slower)")
+ ("form", po::value<std::string>(&form)->default_value("box"), "Form of the polygons (box, triangle)")
+ ("ccw", po::value<bool>(&ccw)->default_value(false), "Counter clockwise polygons")
+ ("open", po::value<bool>(&open)->default_value(false), "Open polygons")
+ ("size", po::value<int>(&settings.field_size)->default_value(10), "Size of the field")
+ ("wkt", po::value<bool>(&settings.wkt)->default_value(false), "Create a WKT of the inputs, for all tests")
+ ("svg", po::value<bool>(&settings.svg)->default_value(false), "Create a SVG for all tests")
+ ;
+
+ po::variables_map varmap;
+ po::store(po::parse_command_line(argc, argv, description), varmap);
+ po::notify(varmap);
+
+ if (varmap.count("help")
+ || (form != "box" && form != "triangle"))
+ {
+ std::cout << description << std::endl;
+ return 1;
+ }
+
+ settings.triangular = form != "box";
+
+ if (ccw && open)
+ {
+ test_all<double, false, false>(seed, count, level, settings);
+ }
+ else if (ccw)
+ {
+ test_all<double, false, true>(seed, count, level, settings);
+ }
+ else if (open)
+ {
+ test_all<double, true, false>(seed, count, level, settings);
+ }
+ else
+ {
+ test_all<double, true, true>(seed, count, level, settings);
+ }
+
+#if defined(HAVE_TTMATH)
+ // test_all<ttmath_big, true, true>(seed, count, max, svg, level);
+#endif
+ }
+ catch(std::exception const& e)
+ {
+ std::cout << "Exception " << e.what() << std::endl;
+ }
+ catch(...)
+ {
+ std::cout << "Other exception" << std::endl;
+ }
+
+ return 0;
+}
diff --git a/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.sln b/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.sln
new file mode 100644
index 000000000..5865e1c36
--- /dev/null
+++ b/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recursive_polygons_linear_areal", "recursive_polygons_linear_areal.vcproj", "{1E269699-9450-4DD6-ACC3-C6A9AD2FC6E0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1E269699-9450-4DD6-ACC3-C6A9AD2FC6E0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1E269699-9450-4DD6-ACC3-C6A9AD2FC6E0}.Debug|Win32.Build.0 = Debug|Win32
+ {1E269699-9450-4DD6-ACC3-C6A9AD2FC6E0}.Release|Win32.ActiveCfg = Release|Win32
+ {1E269699-9450-4DD6-ACC3-C6A9AD2FC6E0}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.vcproj b/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.vcproj
new file mode 100644
index 000000000..14e8dd6fd
--- /dev/null
+++ b/libs/geometry/test/robustness/overlay/linear_areal/recursive_polygons_linear_areal.vcproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="recursive_polygons_linear_areal"
+ ProjectGUID="{1E269699-9450-4DD6-ACC3-C6A9AD2FC6E0}"
+ RootNamespace="recursive_polygons_linear_areal"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\recursive_polygons_linear_areal"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../../..;.;../.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\recursive_polygons_linear_areal"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\..\..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../../..;.;../.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;BOOST_ALL_NO_LIB"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="program options"
+ >
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\cmdline.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\config_file.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\convert.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\options_description.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\parsers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\positional_options.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\split.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\utf8_codecvt_facet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\value_semantic.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\program_options\src\variables_map.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\recursive_polygons_linear_areal.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/Jamfile.v2 b/libs/geometry/test/strategies/Jamfile.v2
new file mode 100644
index 000000000..889ce66a9
--- /dev/null
+++ b/libs/geometry/test/strategies/Jamfile.v2
@@ -0,0 +1,21 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-strategies
+ :
+ [ run cross_track.cpp ]
+ [ run haversine.cpp ]
+ [ run projected_point.cpp ]
+ [ run pythagoras.cpp ]
+ [ run spherical_side.cpp ]
+ [ run transform_cs.cpp ]
+ [ run transformer.cpp ]
+ [ run within.cpp ]
+ ;
diff --git a/libs/geometry/test/strategies/cross_track.cpp b/libs/geometry/test/strategies/cross_track.cpp
new file mode 100644
index 000000000..38840dc72
--- /dev/null
+++ b/libs/geometry/test/strategies/cross_track.cpp
@@ -0,0 +1,151 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/algorithms/distance.hpp>
+
+#include <boost/geometry/strategies/spherical/distance_haversine.hpp>
+#include <boost/geometry/strategies/spherical/distance_cross_track.hpp>
+
+#include <boost/geometry/strategies/concepts/distance_concept.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+
+
+// This test is GIS oriented.
+
+
+template <typename Point, typename LatitudePolicy>
+void test_distance(
+ typename bg::coordinate_type<Point>::type const& lon1,
+ typename bg::coordinate_type<Point>::type const& lat1,
+ typename bg::coordinate_type<Point>::type const& lon2,
+ typename bg::coordinate_type<Point>::type const& lat2,
+ typename bg::coordinate_type<Point>::type const& lon3,
+ typename bg::coordinate_type<Point>::type const& lat3,
+ typename bg::coordinate_type<Point>::type const& radius,
+ typename bg::coordinate_type<Point>::type const& expected,
+ typename bg::coordinate_type<Point>::type const& tolerance)
+{
+ typedef bg::strategy::distance::cross_track
+ <
+ Point,
+ Point
+ > strategy_type;
+ typedef typename bg::strategy::distance::services::return_type
+ <
+ strategy_type
+ >::type return_type;
+
+
+ BOOST_CONCEPT_ASSERT
+ (
+ (bg::concept::PointSegmentDistanceStrategy<strategy_type>)
+ );
+
+
+ Point p1, p2, p3;
+ bg::assign_values(p1, lon1, LatitudePolicy::apply(lat1));
+ bg::assign_values(p2, lon2, LatitudePolicy::apply(lat2));
+ bg::assign_values(p3, lon3, LatitudePolicy::apply(lat3));
+
+
+ strategy_type strategy;
+ return_type d = strategy.apply(p1, p2, p3);
+
+ BOOST_CHECK_CLOSE(radius * d, expected, tolerance);
+
+ // Test specifying radius explicitly
+ strategy_type strategy_radius(radius);
+ d = strategy_radius.apply(p1, p2, p3);
+ BOOST_CHECK_CLOSE(d, expected, tolerance);
+
+
+ // Test the "default strategy" registration
+ bg::model::referring_segment<Point const> segment(p2, p3);
+ d = bg::distance(p1, segment);
+ BOOST_CHECK_CLOSE(radius * d, expected, tolerance);
+}
+
+
+template <typename Point>
+void test_case_boost_geometry_list_20120625()
+{
+ // This function tests the bug submitted by Karsten Ahnert
+ // on Boost.Geometry list at 2012-06-25, and wherefore he
+ // submitted a patch a few days later.
+
+ Point p1, p2;
+ bg::model::segment<Point> s1, s2;
+
+ bg::read_wkt("POINT(1 1)", p1);
+ bg::read_wkt("POINT(5 1)", p2);
+ bg::read_wkt("LINESTRING(0 2,2 2)", s1);
+ bg::read_wkt("LINESTRING(2 2,4 2)", s2);
+
+ BOOST_CHECK_CLOSE(boost::geometry::distance(p1, s1), 0.0174586, 0.0001);
+ BOOST_CHECK_CLOSE(boost::geometry::distance(p1, s2), 0.0246783, 0.0001);
+ BOOST_CHECK_CLOSE(boost::geometry::distance(p2, s1), 0.0551745, 0.0001);
+ BOOST_CHECK_CLOSE(boost::geometry::distance(p2, s2), 0.0246783, 0.0001);
+
+ // Check degenerated segments
+ bg::model::segment<Point> s3;
+ bg::read_wkt("LINESTRING(2 2,2 2)", s3);
+ BOOST_CHECK_CLOSE(boost::geometry::distance(p1, s3), 0.0246783, 0.0001);
+ BOOST_CHECK_CLOSE(boost::geometry::distance(p2, s3), 0.0551745, 0.0001);
+
+ // Point/Point distance should be identical:
+ Point p3;
+ bg::read_wkt("POINT(2 2)", p3);
+ BOOST_CHECK_CLOSE(boost::geometry::distance(p1, p3), 0.0246783, 0.0001);
+ BOOST_CHECK_CLOSE(boost::geometry::distance(p2, p3), 0.0551745, 0.0001);
+}
+
+
+template <typename Point, typename LatitudePolicy>
+void test_all()
+{
+ typename bg::coordinate_type<Point>::type const average_earth_radius = 6372795.0;
+
+ // distance (Paris <-> Amsterdam/Barcelona),
+ // with coordinates rounded as below ~87 km
+ // is equal to distance (Paris <-> Barcelona/Amsterdam)
+ typename bg::coordinate_type<Point>::type const p_to_ab = 86.798321 * 1000.0;
+ test_distance<Point, LatitudePolicy>(2, 48, 4, 52, 2, 41, average_earth_radius, p_to_ab, 0.1);
+ test_distance<Point, LatitudePolicy>(2, 48, 2, 41, 4, 52, average_earth_radius, p_to_ab, 0.1);
+
+ test_case_boost_geometry_list_20120625<Point>();
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> >, geographic_policy >();
+
+ // NYI: haversine for mathematical spherical coordinate systems
+ // test_all<bg::model::point<double, 2, bg::cs::spherical<bg::degree> >, mathematical_policya >();
+
+#if defined(HAVE_TTMATH)
+ typedef ttmath::Big<1,4> tt;
+ //test_all<bg::model::point<tt, 2, bg::cs::geographic<bg::degree> >, geographic_policy>();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/cross_track.vcproj b/libs/geometry/test/strategies/cross_track.vcproj
new file mode 100644
index 000000000..e51666fca
--- /dev/null
+++ b/libs/geometry/test/strategies/cross_track.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="cross_track"
+ ProjectGUID="{4CE6F112-9EA1-4D7E-9AC6-907E77895263}"
+ RootNamespace="cross_track"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\cross_track"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\cross_track"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\cross_track.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/haversine.cpp b/libs/geometry/test/strategies/haversine.cpp
new file mode 100644
index 000000000..9468810b8
--- /dev/null
+++ b/libs/geometry/test/strategies/haversine.cpp
@@ -0,0 +1,274 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/concept/requires.hpp>
+#include <boost/concept_check.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/strategies/spherical/distance_haversine.hpp>
+#include <boost/geometry/strategies/concepts/distance_concept.hpp>
+
+
+#include <boost/geometry/geometries/point.hpp>
+
+#ifdef HAVE_TTMATH
+# include <boost/geometry/extensions/contrib/ttmath_stub.hpp>
+#endif
+
+
+
+double const average_earth_radius = 6372795.0;
+
+
+template <typename Point, typename LatitudePolicy>
+struct test_distance
+{
+ typedef bg::strategy::distance::haversine
+ <
+ Point,
+ Point
+ > haversine_type;
+
+ BOOST_CONCEPT_ASSERT( (bg::concept::PointDistanceStrategy<haversine_type>) );
+
+
+ typedef typename bg::strategy::distance::services::return_type<haversine_type>::type return_type;
+
+ BOOST_CONCEPT_ASSERT
+ (
+ (bg::concept::PointDistanceStrategy<haversine_type>)
+ );
+
+
+ static void test(double lon1, double lat1, double lon2, double lat2,
+ double radius, return_type expected, double tolerance)
+ {
+ haversine_type strategy(radius);
+
+ Point p1, p2;
+ bg::assign_values(p1, lon1, LatitudePolicy::apply(lat1));
+ bg::assign_values(p2, lon2, LatitudePolicy::apply(lat2));
+ return_type d = strategy.apply(p1, p2);
+
+ BOOST_CHECK_CLOSE(d, expected, tolerance);
+ }
+};
+
+template <typename Point, typename LatitudePolicy>
+void test_all()
+{
+ // earth to unit-sphere -> divide by earth circumference, then it is from 0-1,
+ // then multiply with 2 PI, so effectively just divide by earth radius
+ double e2u = 1.0 / average_earth_radius;
+
+ // ~ Amsterdam/Paris, 467 kilometers
+ double const a_p = 467.2704 * 1000.0;
+ test_distance<Point, LatitudePolicy>::test(4, 52, 2, 48, average_earth_radius, a_p, 1.0);
+ test_distance<Point, LatitudePolicy>::test(2, 48, 4, 52, average_earth_radius, a_p, 1.0);
+ test_distance<Point, LatitudePolicy>::test(4, 52, 2, 48, 1.0, a_p * e2u, 0.001);
+
+ // ~ Amsterdam/Barcelona
+ double const a_b = 1232.9065 * 1000.0;
+ test_distance<Point, LatitudePolicy>::test(4, 52, 2, 41, average_earth_radius, a_b, 1.0);
+ test_distance<Point, LatitudePolicy>::test(2, 41, 4, 52, average_earth_radius, a_b, 1.0);
+ test_distance<Point, LatitudePolicy>::test(4, 52, 2, 41, 1.0, a_b * e2u, 0.001);
+}
+
+
+template <typename P1, typename P2, typename CalculationType, typename LatitudePolicy>
+void test_services()
+{
+ namespace bgsd = bg::strategy::distance;
+ namespace services = bg::strategy::distance::services;
+
+ {
+
+ // Compile-check if there is a strategy for this type
+ typedef typename services::default_strategy<bg::point_tag, P1, P2>::type haversine_strategy_type;
+ }
+
+ P1 p1;
+ bg::assign_values(p1, 4, 52);
+
+ P2 p2;
+ bg::assign_values(p2, 2, 48);
+
+ // ~ Amsterdam/Paris, 467 kilometers
+ double const km = 1000.0;
+ double const a_p = 467.2704 * km;
+ double const expected = a_p;
+
+ double const expected_lower = 460.0 * km;
+ double const expected_higher = 470.0 * km;
+
+ // 1: normal, calculate distance:
+
+ typedef bgsd::haversine<P1, P2, CalculationType> strategy_type;
+ typedef typename bgsd::services::return_type<strategy_type>::type return_type;
+
+ strategy_type strategy(average_earth_radius);
+ return_type result = strategy.apply(p1, p2);
+ BOOST_CHECK_CLOSE(result, return_type(expected), 0.001);
+
+ // 2: "similar" to construct a similar strategy (similar but with other template-parameters) for, e.g., the reverse P2/P1
+ // 2a: similar_type:
+ typedef typename services::similar_type<strategy_type, P2, P1>::type similar_type;
+ // 2b: get_similar
+ similar_type similar = services::get_similar<strategy_type, P2, P1>::apply(strategy);
+
+ //result = similar.apply(p1, p2); // should NOT compile because p1/p2 should also be reversed here
+ result = similar.apply(p2, p1);
+ BOOST_CHECK_CLOSE(result, return_type(expected), 0.001);
+
+
+ // 3: "comparable" to construct a "comparable strategy" for P1/P2
+ // a "comparable strategy" is a strategy which does not calculate the exact distance, but
+ // which returns results which can be mutually compared (e.g. avoid sqrt)
+
+ // 3a: "comparable_type"
+ typedef typename services::comparable_type<strategy_type>::type comparable_type;
+
+ // 3b: "get_comparable"
+ comparable_type comparable = bgsd::services::get_comparable<strategy_type>::apply(strategy);
+
+ // Check vice versa:
+ // First the result of the comparable strategy
+ return_type c_result = comparable.apply(p1, p2);
+ // Second the comparable result of the expected distance
+ return_type c_expected = services::result_from_distance<comparable_type>::apply(comparable, expected);
+ // And that one should be equa.
+ BOOST_CHECK_CLOSE(c_result, return_type(c_expected), 0.001);
+
+ // 4: the comparable_type should have a distance_strategy_constructor as well,
+ // knowing how to compare something with a fixed distance
+ return_type c_dist_lower = services::result_from_distance<comparable_type>::apply(comparable, expected_lower);
+ return_type c_dist_higher = services::result_from_distance<comparable_type>::apply(comparable, expected_higher);
+
+ // If this is the case:
+ BOOST_CHECK(c_dist_lower < c_result && c_result < c_dist_higher);
+
+ // Calculate the Haversine by hand here:
+ return_type c_check = return_type(2.0) * asin(sqrt(c_result)) * average_earth_radius;
+ BOOST_CHECK_CLOSE(c_check, expected, 0.001);
+
+ // This should also be the case
+ return_type dist_lower = services::result_from_distance<strategy_type>::apply(strategy, expected_lower);
+ return_type dist_higher = services::result_from_distance<strategy_type>::apply(strategy, expected_higher);
+ BOOST_CHECK(dist_lower < result && result < dist_higher);
+}
+
+/****
+template <typename P, typename Strategy>
+void time_compare_s(int const n)
+{
+ boost::timer t;
+ P p1, p2;
+ bg::assign_values(p1, 1, 1);
+ bg::assign_values(p2, 2, 2);
+ Strategy strategy;
+ typename Strategy::return_type s = 0;
+ for (int i = 0; i < n; i++)
+ {
+ for (int j = 0; j < n; j++)
+ {
+ s += strategy.apply(p1, p2);
+ }
+ }
+ std::cout << "s: " << s << " t: " << t.elapsed() << std::endl;
+}
+
+template <typename P>
+void time_compare(int const n)
+{
+ time_compare_s<P, bg::strategy::distance::haversine<P> >(n);
+ time_compare_s<P, bg::strategy::distance::comparable::haversine<P> >(n);
+}
+
+#include <time.h>
+double time_sqrt(int n)
+{
+ clock_t start = clock();
+
+ double v = 2.0;
+ double s = 0.0;
+ for (int i = 0; i < n; i++)
+ {
+ for (int j = 0; j < n; j++)
+ {
+ s += sqrt(v);
+ v += 1.0e-10;
+ }
+ }
+ clock_t end = clock();
+ double diff = double(end - start) / CLOCKS_PER_SEC;
+
+ std::cout << "Check: " << s << " Time: " << diff << std::endl;
+ return diff;
+}
+
+double time_normal(int n)
+{
+ clock_t start = clock();
+
+ double v = 2.0;
+ double s = 0.0;
+ for (int i = 0; i < n; i++)
+ {
+ for (int j = 0; j < n; j++)
+ {
+ s += v;
+ v += 1.0e-10;
+ }
+ }
+ clock_t end = clock();
+ double diff = double(end - start) / CLOCKS_PER_SEC;
+
+ std::cout << "Check: " << s << " Time: " << diff << std::endl;
+ return diff;
+}
+***/
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<int, 2, bg::cs::spherical_equatorial<bg::degree> >, geographic_policy>();
+ test_all<bg::model::point<float, 2, bg::cs::spherical_equatorial<bg::degree> >, geographic_policy>();
+ test_all<bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> >, geographic_policy>();
+
+ // NYI: haversine for mathematical spherical coordinate systems
+ // test_all<bg::model::point<double, 2, bg::cs::spherical<bg::degree> >, mathematical_policy>();
+
+ //double t1 = time_sqrt(20000);
+ //double t2 = time_normal(20000);
+ //std::cout << "Factor: " << (t1 / t2) << std::endl;
+ //time_compare<bg::model::point<double, 2, bg::cs::spherical<bg::radian> > >(10000);
+
+#if defined(HAVE_TTMATH)
+ typedef ttmath::Big<1,4> tt;
+ test_all<bg::model::point<tt, 2, bg::cs::spherical_equatorial<bg::degree> >, geographic_policy>();
+#endif
+
+
+ test_services
+ <
+ bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> >,
+ bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> >,
+ double,
+ geographic_policy
+ >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/haversine.vcproj b/libs/geometry/test/strategies/haversine.vcproj
new file mode 100644
index 000000000..31ac6291d
--- /dev/null
+++ b/libs/geometry/test/strategies/haversine.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="haversine"
+ ProjectGUID="{AA654B76-E384-4E10-B367-4F51B5D3E96F}"
+ RootNamespace="haversine"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\haversine"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\haversine"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\haversine.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/projected_point.cpp b/libs/geometry/test/strategies/projected_point.cpp
new file mode 100644
index 000000000..11ea749a1
--- /dev/null
+++ b/libs/geometry/test/strategies/projected_point.cpp
@@ -0,0 +1,188 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/strategies/cartesian/distance_projected_point.hpp>
+#include <boost/geometry/strategies/concepts/distance_concept.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+#ifdef HAVE_TTMATH
+# include <boost/geometry/extensions/contrib/ttmath_stub.hpp>
+#endif
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P, typename PS, typename CalculationType>
+void test_services()
+{
+ PS p1, p2;
+ bg::assign_values(p1, 0, 0);
+ bg::assign_values(p2, 0, 4);
+
+ P p;
+ bg::assign_values(p, 2, 0);
+
+ CalculationType const sqr_expected = 4;
+ CalculationType const expected = 2;
+
+
+ namespace bgsd = bg::strategy::distance;
+ namespace services = bg::strategy::distance::services;
+ // 1: normal, calculate distance:
+
+ typedef bgsd::projected_point<P, PS, CalculationType> strategy_type;
+
+ BOOST_CONCEPT_ASSERT( (bg::concept::PointSegmentDistanceStrategy<strategy_type>) );
+
+ typedef typename services::return_type<strategy_type>::type return_type;
+
+ strategy_type strategy;
+ return_type result = strategy.apply(p, p1, p2);
+ BOOST_CHECK_CLOSE(result, return_type(expected), 0.001);
+
+ // 2: "similar" to construct a similar strategy (similar but with other template-parameters) for, e.g., the reverse P2/P1
+ // 2a: similar_type:
+ typedef typename services::similar_type<strategy_type, P, PS>::type similar_type;
+ // 2b: get_similar
+ similar_type similar = services::get_similar<strategy_type, P, PS>::apply(strategy);
+
+ result = similar.apply(p, p1, p2);
+ BOOST_CHECK_CLOSE(result, return_type(expected), 0.001);
+
+
+ // 3: "comparable" to construct a "comparable strategy" for P1/P2
+ // a "comparable strategy" is a strategy which does not calculate the exact distance, but
+ // which returns results which can be mutually compared (e.g. avoid sqrt)
+
+ // 3a: "comparable_type"
+ typedef typename services::comparable_type<strategy_type>::type comparable_type;
+
+ // 3b: "get_comparable"
+ comparable_type comparable = bgsd::services::get_comparable<strategy_type>::apply(strategy);
+
+ return_type c_result = comparable.apply(p, p1, p2);
+ BOOST_CHECK_CLOSE(c_result, return_type(sqr_expected), 0.001);
+}
+
+
+template <typename P1, typename P2, typename T>
+void test_all_2d(std::string const& wkt_p,
+ std::string const& wkt_sp1,
+ std::string const& wkt_sp2,
+ T expected_distance)
+{
+ P1 p;
+ P2 sp1, sp2;
+ bg::read_wkt(wkt_p, p);
+ bg::read_wkt(wkt_sp1, sp1);
+ bg::read_wkt(wkt_sp2, sp2);
+
+ {
+ typedef bg::strategy::distance::projected_point
+ <
+ P1,
+ P2
+ > strategy_type;
+
+ BOOST_CONCEPT_ASSERT
+ (
+ (bg::concept::PointSegmentDistanceStrategy<strategy_type>)
+ );
+
+ strategy_type strategy;
+ typedef typename bg::strategy::distance::services::return_type<strategy_type>::type return_type;
+ return_type d = strategy.apply(p, sp1, sp2);
+ BOOST_CHECK_CLOSE(d, expected_distance, 0.001);
+ }
+
+ // Test combination with the comparable strategy
+ {
+ typedef bg::strategy::distance::projected_point
+ <
+ P1,
+ P2,
+ void,
+ bg::strategy::distance::comparable::pythagoras<P1, P2>
+ > strategy_type;
+ strategy_type strategy;
+ typedef typename bg::strategy::distance::services::return_type<strategy_type>::type return_type;
+ return_type d = strategy.apply(p, sp1, sp2);
+ T expected_squared_distance = expected_distance * expected_distance;
+ BOOST_CHECK_CLOSE(d, expected_squared_distance, 0.01);
+ }
+
+}
+
+template <typename P1, typename P2>
+void test_all_2d()
+{
+ test_all_2d<P1, P2>("POINT(1 1)", "POINT(0 0)", "POINT(2 3)", 0.27735203958327);
+ test_all_2d<P1, P2>("POINT(2 2)", "POINT(1 4)", "POINT(4 1)", 0.5 * sqrt(2.0));
+ test_all_2d<P1, P2>("POINT(6 1)", "POINT(1 4)", "POINT(4 1)", 2.0);
+ test_all_2d<P1, P2>("POINT(1 6)", "POINT(1 4)", "POINT(4 1)", 2.0);
+}
+
+template <typename P>
+void test_all_2d()
+{
+ //test_all_2d<P, int[2]>();
+ //test_all_2d<P, float[2]>();
+ //test_all_2d<P, double[2]>();
+ //test_all_2d<P, test::test_point>();
+ test_all_2d<P, bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all_2d<P, bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all_2d<P, bg::model::point<double, 2, bg::cs::cartesian> >();
+ test_all_2d<P, bg::model::point<long double, 2, bg::cs::cartesian> >();
+}
+
+int test_main(int, char* [])
+{
+ test_all_2d<int[2]>();
+ test_all_2d<float[2]>();
+ test_all_2d<double[2]>();
+ //test_all_2d<test::test_point>();
+
+ test_all_2d<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all_2d<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all_2d<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ test_services
+ <
+ bg::model::point<double, 2, bg::cs::cartesian>,
+ bg::model::point<float, 2, bg::cs::cartesian>,
+ long double
+ >();
+
+
+#if defined(HAVE_TTMATH)
+ test_all_2d
+ <
+ bg::model::point<ttmath_big, 2, bg::cs::cartesian>,
+ bg::model::point<ttmath_big, 2, bg::cs::cartesian>
+ >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/projected_point.vcproj b/libs/geometry/test/strategies/projected_point.vcproj
new file mode 100644
index 000000000..0964383bf
--- /dev/null
+++ b/libs/geometry/test/strategies/projected_point.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="projected_point"
+ ProjectGUID="{A27A46D2-AAD2-47F9-86E2-21FF849EF2D4}"
+ RootNamespace="projected_point"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\projected_point"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\projected_point"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\projected_point.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/pythagoras.cpp b/libs/geometry/test/strategies/pythagoras.cpp
new file mode 100644
index 000000000..2b1f42886
--- /dev/null
+++ b/libs/geometry/test/strategies/pythagoras.cpp
@@ -0,0 +1,362 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#if defined(_MSC_VER)
+# pragma warning( disable : 4101 )
+#endif
+
+#include <boost/timer.hpp>
+
+#include <boost/concept/requires.hpp>
+#include <boost/concept_check.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+#include <boost/geometry/strategies/cartesian/distance_pythagoras.hpp>
+#include <boost/geometry/strategies/concepts/distance_concept.hpp>
+
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+#include <test_common/test_point.hpp>
+
+#ifdef HAVE_TTMATH
+# include <boost/geometry/extensions/contrib/ttmath_stub.hpp>
+#endif
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P1, typename P2>
+void test_null_distance_3d()
+{
+ P1 p1;
+ bg::assign_values(p1, 1, 2, 3);
+ P2 p2;
+ bg::assign_values(p2, 1, 2, 3);
+
+ typedef bg::strategy::distance::pythagoras<P1, P2> pythagoras_type;
+ typedef typename bg::strategy::distance::services::return_type<pythagoras_type>::type return_type;
+
+ pythagoras_type pythagoras;
+ return_type result = pythagoras.apply(p1, p2);
+
+ BOOST_CHECK_EQUAL(result, return_type(0));
+}
+
+template <typename P1, typename P2>
+void test_axis_3d()
+{
+ P1 p1;
+ bg::assign_values(p1, 0, 0, 0);
+ P2 p2;
+ bg::assign_values(p2, 1, 0, 0);
+
+ typedef bg::strategy::distance::pythagoras<P1, P2> pythagoras_type;
+ typedef typename bg::strategy::distance::services::return_type<pythagoras_type>::type return_type;
+
+ pythagoras_type pythagoras;
+
+ return_type result = pythagoras.apply(p1, p2);
+ BOOST_CHECK_EQUAL(result, return_type(1));
+
+ bg::assign_values(p2, 0, 1, 0);
+ result = pythagoras.apply(p1, p2);
+ BOOST_CHECK_EQUAL(result, return_type(1));
+
+ bg::assign_values(p2, 0, 0, 1);
+ result = pythagoras.apply(p1, p2);
+ BOOST_CHECK_CLOSE(result, return_type(1), 0.001);
+}
+
+template <typename P1, typename P2>
+void test_arbitrary_3d()
+{
+ P1 p1;
+ bg::assign_values(p1, 1, 2, 3);
+ P2 p2;
+ bg::assign_values(p2, 9, 8, 7);
+
+ {
+ typedef bg::strategy::distance::pythagoras<P1, P2> strategy_type;
+ typedef typename bg::strategy::distance::services::return_type<strategy_type>::type return_type;
+
+ strategy_type strategy;
+ return_type result = strategy.apply(p1, p2);
+ BOOST_CHECK_CLOSE(result, return_type(10.77032961427), 0.001);
+ }
+
+ {
+ // Check comparable distance
+ typedef bg::strategy::distance::comparable::pythagoras<P1, P2> strategy_type;
+ typedef typename bg::strategy::distance::services::return_type<strategy_type>::type return_type;
+
+ strategy_type strategy;
+ return_type result = strategy.apply(p1, p2);
+ BOOST_CHECK_EQUAL(result, return_type(116));
+ }
+}
+
+template <typename P1, typename P2, typename CalculationType>
+void test_services()
+{
+ namespace bgsd = bg::strategy::distance;
+ namespace services = bg::strategy::distance::services;
+
+ {
+
+ // Compile-check if there is a strategy for this type
+ typedef typename services::default_strategy<bg::point_tag, P1, P2>::type pythagoras_strategy_type;
+ }
+
+
+ P1 p1;
+ bg::assign_values(p1, 1, 2, 3);
+
+ P2 p2;
+ bg::assign_values(p2, 4, 5, 6);
+
+ double const sqr_expected = 3*3 + 3*3 + 3*3; // 27
+ double const expected = sqrt(sqr_expected); // sqrt(27)=5.1961524227
+
+ // 1: normal, calculate distance:
+
+ typedef bgsd::pythagoras<P1, P2, CalculationType> strategy_type;
+
+ BOOST_CONCEPT_ASSERT( (bg::concept::PointDistanceStrategy<strategy_type>) );
+
+ typedef typename bgsd::services::return_type<strategy_type>::type return_type;
+
+ strategy_type strategy;
+ return_type result = strategy.apply(p1, p2);
+ BOOST_CHECK_CLOSE(result, return_type(expected), 0.001);
+
+ // 2: "similar" to construct a similar strategy (similar but with other template-parameters) for, e.g., the reverse P2/P1
+ // 2a: similar_type:
+ typedef typename services::similar_type<strategy_type, P2, P1>::type similar_type;
+ // 2b: get_similar
+ similar_type similar = services::get_similar<strategy_type, P2, P1>::apply(strategy);
+
+ //result = similar.apply(p1, p2); // should NOT compile because p1/p2 should also be reversed here
+ result = similar.apply(p2, p1);
+ BOOST_CHECK_CLOSE(result, return_type(expected), 0.001);
+
+
+ // 3: "comparable" to construct a "comparable strategy" for P1/P2
+ // a "comparable strategy" is a strategy which does not calculate the exact distance, but
+ // which returns results which can be mutually compared (e.g. avoid sqrt)
+
+ // 3a: "comparable_type"
+ typedef typename services::comparable_type<strategy_type>::type comparable_type;
+
+ // 3b: "get_comparable"
+ comparable_type comparable = bgsd::services::get_comparable<strategy_type>::apply(strategy);
+
+ return_type c_result = comparable.apply(p1, p2);
+ BOOST_CHECK_CLOSE(c_result, return_type(sqr_expected), 0.001);
+
+ // 4: the comparable_type should have a distance_strategy_constructor as well,
+ // knowing how to compare something with a fixed distance
+ return_type c_dist5 = services::result_from_distance<comparable_type>::apply(comparable, 5.0);
+ return_type c_dist6 = services::result_from_distance<comparable_type>::apply(comparable, 6.0);
+
+ // If this is the case:
+ BOOST_CHECK(c_dist5 < c_result && c_result < c_dist6);
+
+ // This should also be the case
+ return_type dist5 = services::result_from_distance<strategy_type>::apply(strategy, 5.0);
+ return_type dist6 = services::result_from_distance<strategy_type>::apply(strategy, 6.0);
+ BOOST_CHECK(dist5 < result && result < dist6);
+}
+
+
+template <typename CoordinateType, typename CalculationType, typename AssignType>
+void test_big_2d_with(AssignType const& x1, AssignType const& y1,
+ AssignType const& x2, AssignType const& y2)
+{
+ typedef bg::model::point<CoordinateType, 2, bg::cs::cartesian> point_type;
+ typedef bg::strategy::distance::pythagoras
+ <
+ point_type,
+ point_type,
+ CalculationType
+ > pythagoras_type;
+
+ pythagoras_type pythagoras;
+ typedef typename bg::strategy::distance::services::return_type<pythagoras_type>::type return_type;
+
+
+ point_type p1, p2;
+ bg::assign_values(p1, x1, y1);
+ bg::assign_values(p2, x2, y2);
+ return_type d = pythagoras.apply(p1, p2);
+
+ /***
+ std::cout << typeid(CalculationType).name()
+ << " " << std::fixed << std::setprecision(20) << d
+ << std::endl << std::endl;
+ ***/
+
+
+ BOOST_CHECK_CLOSE(d, return_type(1076554.5485833955678294387789057), 0.001);
+}
+
+template <typename CoordinateType, typename CalculationType>
+void test_big_2d()
+{
+ test_big_2d_with<CoordinateType, CalculationType>
+ (123456.78900001, 234567.89100001,
+ 987654.32100001, 876543.21900001);
+}
+
+template <typename CoordinateType, typename CalculationType>
+void test_big_2d_string()
+{
+ test_big_2d_with<CoordinateType, CalculationType>
+ ("123456.78900001", "234567.89100001",
+ "987654.32100001", "876543.21900001");
+}
+
+template <typename CoordinateType>
+void test_integer(bool check_types)
+{
+ typedef bg::model::point<CoordinateType, 2, bg::cs::cartesian> point_type;
+
+ point_type p1, p2;
+ bg::assign_values(p1, 12345678, 23456789);
+ bg::assign_values(p2, 98765432, 87654321);
+
+ typedef bg::strategy::distance::pythagoras
+ <
+ point_type
+ > pythagoras_type;
+ pythagoras_type pythagoras;
+ BOOST_AUTO(distance, pythagoras.apply(p1, p2));
+ BOOST_CHECK_CLOSE(distance, 107655455.02347542, 0.001);
+
+ typedef typename bg::strategy::distance::services::comparable_type
+ <
+ pythagoras_type
+ >::type comparable_type;
+ comparable_type comparable;
+ BOOST_AUTO(cdistance, comparable.apply(p1, p2));
+ BOOST_CHECK_EQUAL(cdistance, 11589696996311540);
+
+ typedef BOOST_TYPEOF(cdistance) cdistance_type;
+ typedef BOOST_TYPEOF(distance) distance_type;
+
+ distance_type distance2 = sqrt(distance_type(cdistance));
+ BOOST_CHECK_CLOSE(distance, distance2, 0.001);
+
+ if (check_types)
+ {
+ BOOST_CHECK((boost::is_same<distance_type, double>::type::value));
+ BOOST_CHECK((boost::is_same<cdistance_type, boost::long_long_type>::type::value));
+ }
+}
+
+
+template <typename P1, typename P2>
+void test_all_3d()
+{
+ test_null_distance_3d<P1, P2>();
+ test_axis_3d<P1, P2>();
+ test_arbitrary_3d<P1, P2>();
+}
+
+template <typename P>
+void test_all_3d()
+{
+ test_all_3d<P, int[3]>();
+ test_all_3d<P, float[3]>();
+ test_all_3d<P, double[3]>();
+ test_all_3d<P, test::test_point>();
+ test_all_3d<P, bg::model::point<int, 3, bg::cs::cartesian> >();
+ test_all_3d<P, bg::model::point<float, 3, bg::cs::cartesian> >();
+ test_all_3d<P, bg::model::point<double, 3, bg::cs::cartesian> >();
+}
+
+template <typename P, typename Strategy>
+void time_compare_s(int const n)
+{
+ boost::timer t;
+ P p1, p2;
+ bg::assign_values(p1, 1, 1);
+ bg::assign_values(p2, 2, 2);
+ Strategy strategy;
+ typename bg::strategy::distance::services::return_type<Strategy>::type s = 0;
+ for (int i = 0; i < n; i++)
+ {
+ for (int j = 0; j < n; j++)
+ {
+ bg::set<0>(p2, bg::get<0>(p2) + 0.001);
+ s += strategy.apply(p1, p2);
+ }
+ }
+ std::cout << "s: " << s << " t: " << t.elapsed() << std::endl;
+}
+
+template <typename P>
+void time_compare(int const n)
+{
+ time_compare_s<P, bg::strategy::distance::pythagoras<P> >(n);
+ time_compare_s<P, bg::strategy::distance::comparable::pythagoras<P> >(n);
+}
+
+int test_main(int, char* [])
+{
+ test_integer<int>(true);
+ test_integer<boost::long_long_type>(true);
+ test_integer<double>(false);
+
+ test_all_3d<int[3]>();
+ test_all_3d<float[3]>();
+ test_all_3d<double[3]>();
+
+ test_all_3d<test::test_point>();
+
+ test_all_3d<bg::model::point<int, 3, bg::cs::cartesian> >();
+ test_all_3d<bg::model::point<float, 3, bg::cs::cartesian> >();
+ test_all_3d<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ test_big_2d<float, float>();
+ test_big_2d<double, double>();
+ test_big_2d<long double, long double>();
+ test_big_2d<float, long double>();
+
+ test_services<bg::model::point<float, 3, bg::cs::cartesian>, double[3], long double>();
+ test_services<double[3], test::test_point, float>();
+
+
+ // TODO move this to another non-unit test
+ // time_compare<bg::model::point<double, 2, bg::cs::cartesian> >(10000);
+
+#if defined(HAVE_TTMATH)
+
+ typedef ttmath::Big<1,4> tt;
+ typedef bg::model::point<tt, 3, bg::cs::cartesian> tt_point;
+
+ //test_all_3d<tt[3]>();
+ test_all_3d<tt_point>();
+ test_all_3d<tt_point, tt_point>();
+ test_big_2d<tt, tt>();
+ test_big_2d_string<tt, tt>();
+#endif
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/pythagoras.vcproj b/libs/geometry/test/strategies/pythagoras.vcproj
new file mode 100644
index 000000000..7dedcaaa0
--- /dev/null
+++ b/libs/geometry/test/strategies/pythagoras.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="pythagoras"
+ ProjectGUID="{763CA955-FC01-4AFD-9593-69D36836B3F7}"
+ RootNamespace="pythagoras"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\pythagoras"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\pythagoras"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\pythagoras.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/segment_intersection.cpp b/libs/geometry/test/strategies/segment_intersection.cpp
new file mode 100644
index 000000000..c0191c18f
--- /dev/null
+++ b/libs/geometry/test/strategies/segment_intersection.cpp
@@ -0,0 +1,374 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#if defined(_MSC_VER)
+// We deliberately mix float/double's here so turn off warning
+#pragma warning( disable : 4244 )
+#endif // defined(_MSC_VER)
+
+#define HAVE_MATRIX_AS_STRING
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+
+#include <boost/geometry/strategies/cartesian/cart_intersect.hpp>
+#include <boost/geometry/strategies/intersection_result.hpp>
+
+#include <boost/geometry/policies/relate/intersection_points.hpp>
+#include <boost/geometry/policies/relate/direction.hpp>
+//#include <boost/geometry/policies/relate/de9im.hpp>
+#include <boost/geometry/policies/relate/tupled.hpp>
+
+#include <boost/geometry/algorithms/intersection.hpp>
+
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);
+
+
+template <typename R>
+void print_is(R const& is)
+{
+#ifdef REPORT
+ for (int i = 0; i < is.count; i++)
+ {
+ std::cout
+ << " (" << bg::get<0>(is.intersections[i])
+ << "," << bg::get<1>(is.intersections[i])
+ << ")";
+ }
+#endif
+}
+/*
+void print_im(bg::de9im const& im)
+{
+#ifdef REPORT
+ if (im.equals()) std::cout << " EQUALS";
+ if (im.disjoint()) std::cout << " DISJOINT";
+ if (im.intersects()) std::cout << " INTERSECTS";
+ if (im.touches()) std::cout << " TOUCHES";
+ if (im.crosses()) std::cout << " CROSSES";
+ if (im.overlaps()) std::cout << " OVERLAPS";
+ if (im.within()) std::cout << " WITHIN";
+ if (im.contains()) std::cout << " CONTAINS";
+
+ //std::cout << " ra=" << im.ra << " rb=" << im.rb;
+#endif
+}
+*/
+
+template <typename P>
+static void test_segment_intersection(int caseno,
+ int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4,
+ std::string const& expected_matrix,
+ std::string const& expected_characteristic,
+ std::string const& expected_direction_a = "",
+ std::string const& expected_direction_b = "",
+ int expected_x1 = -99, int expected_y1 = -99,
+ int expected_x2 = -99, int expected_y2 = -99)
+{
+ using namespace boost::geometry;
+
+#ifdef REPORT
+ std::cout << "CASE " << caseno << std::endl;
+#endif
+
+ typedef typename bg::coordinate_type<P>::type coordinate_type;
+ typedef bg::model::referring_segment<const P> segment_type;
+
+ P p1, p2, p3, p4;
+ bg::assign_values(p1, x1, y1);
+ bg::assign_values(p2, x2, y2);
+ bg::assign_values(p3, x3, y3);
+ bg::assign_values(p4, x4, y4);
+
+ segment_type s12(p1,p2);
+ segment_type s34(p3,p4);
+
+ // Get the intersection point (or two points)
+ segment_intersection_points<P> is
+ = strategy::intersection::relate_cartesian_segments
+ <
+ policies::relate::segments_intersection_points
+ <
+ segment_type,
+ segment_type,
+ segment_intersection_points<P>
+ >
+ >::apply(s12, s34);
+
+ // Get the Dimension Extended 9 Intersection Matrix (de9im) for Segments
+ // (this one is extended by GGL having opposite)
+ /***
+ TODO TO BE UPDATED (if necessary) OR DELETED
+ de9im_segment matrix = strategy::intersection::relate_cartesian_segments
+ <
+ policies::relate::segments_de9im<segment_type, segment_type>
+ >::apply(s12, s34);
+ ***/
+
+ // Get just a character for Left/Right/intersects/etc, purpose is more for debugging
+ policies::relate::direction_type dir = strategy::intersection::relate_cartesian_segments
+ <
+ policies::relate::segments_direction<segment_type, segment_type>
+ >::apply(s12, s34);
+
+ int expected_count = 0;
+
+ if (expected_x1 != -99 && expected_y1 != -99)
+ {
+ expected_count++;
+
+ BOOST_CHECK(is.count >= 1);
+ BOOST_CHECK_CLOSE(bg::get<0>(is.intersections[0]),
+ coordinate_type(expected_x1), 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(is.intersections[0]),
+ coordinate_type(expected_y1), 0.001);
+ }
+ if (expected_x2 != -99 && expected_y2 != -99)
+ {
+ expected_count++;
+
+ BOOST_CHECK(is.count >= 2);
+ BOOST_CHECK_CLOSE(bg::get<0>(is.intersections[1]),
+ coordinate_type(expected_x2), 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(is.intersections[1]),
+ coordinate_type(expected_y2), 0.001);
+ }
+ BOOST_CHECK_EQUAL(is.count, expected_count);
+
+ //BOOST_CHECK_EQUAL(expected_matrix, matrix.matrix_as_string());
+
+ std::string characteristic;
+ characteristic += dir.how;
+
+ BOOST_CHECK_EQUAL(characteristic, expected_characteristic);
+
+ if (!expected_direction_a.empty())
+ {
+ BOOST_CHECK_EQUAL(dir.dir_a == 1 ? "L"
+ : dir.dir_a == -1 ? "R"
+ : "-", expected_direction_a);
+ }
+ if (!expected_direction_b.empty())
+ {
+ BOOST_CHECK_EQUAL(dir.dir_b == 1 ? "L"
+ : dir.dir_b == -1 ? "R"
+ : "-", expected_direction_b);
+ }
+
+
+
+ // Things can also be used together
+ // -> intersection is only once calculated, two results
+ /***
+ typedef boost::tuple
+ <
+ de9im_segment,
+ policies::relate::direction_type
+ > tup;
+
+ tup t = strategy::intersection::relate_cartesian_segments
+ <
+ policies::relate::segments_tupled
+ <
+ policies::relate::segments_de9im<segment_type, segment_type>,
+ policies::relate::segments_direction<segment_type, segment_type>
+ >
+ >::apply(segment_type(p1,p2), segment_type(p3,p4));
+
+
+ //BOOST_CHECK_EQUAL(t.get<0>().matrix_as_string(), matrix.matrix_as_string());
+ BOOST_CHECK_EQUAL(t.get<1>().how, dir.how);
+ */
+
+#ifdef REPORT
+ //std::cout << std::endl << "\t" << matrix.as_string() << " ";
+ std::cout << "METHOD=" << c << " ";
+ print_is(is);
+ //print_im(matrix);
+ std::cout << std::endl;
+#endif
+
+ /*
+ To check with a spatial database: issue this statement
+ std::cout << "select relate("
+ << "GeomFromText(LINESTRING('" << x1 << " " << y1 << "," << x2 << " " << y2 << ")')"
+ << ", "
+ << "GeomFromText(LINESTRING('" << x3 << " " << y3 << "," << x4 << " " << y4 << ")')"
+ << ");"
+ << std::endl;
+ */
+
+
+ // Now use generic intersection.
+ std::vector<P> out;
+ bg::detail::intersection::intersection_insert<P>(s12, s34, std::back_inserter(out));
+
+ BOOST_CHECK_EQUAL(boost::size(out), expected_count);
+
+ if (expected_x1 != -99 && expected_y1 != -99
+ && is.count >= 1
+ && boost::size(out) >= 1)
+ {
+ BOOST_CHECK_CLOSE(bg::get<0>(out[0]),
+ coordinate_type(expected_x1), 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(out[0]),
+ coordinate_type(expected_y1), 0.001);
+ }
+ if (expected_x2 != -99 && expected_y2 != -99
+ && is.count >= 2
+ && boost::size(out) >= 2)
+ {
+ BOOST_CHECK_CLOSE(bg::get<0>(out[1]),
+ coordinate_type(expected_x2), 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(out[1]),
+ coordinate_type(expected_y2), 0.001);
+ }
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_segment_intersection<P>( 1, 0,2, 2,0, 0,0, 2,2, "0-1--0102",
+ "i", "R", "L", 1, 1);
+ test_segment_intersection<P>( 2, 2,2, 3,1, 0,0, 2,2, "--1-00102",
+ "a", "R", "R", 2, 2);
+ test_segment_intersection<P>( 3, 3,1, 2,2, 0,0, 2,2, "--1-00102",
+ "t", "R", "L", 2, 2);
+ test_segment_intersection<P>( 4, 0,2, 1,1, 0,0, 2,2, "--10-0102",
+ "m", "L", "L", 1, 1);
+#ifdef REPORT
+ std::cout << std::endl;
+#endif
+
+ test_segment_intersection<P>( 5, 1,1, 0,2, 0,0, 2,2, "--10-0102",
+ "s", "L", "R", 1, 1);
+ test_segment_intersection<P>( 6, 0,2, 2,0, 0,0, 1,1, "-01--0102",
+ "m", "R", "R", 1, 1);
+ test_segment_intersection<P>( 7, 2,0, 0,2, 0,0, 1,1, "-01--0102",
+ "m", "L", "L", 1, 1);
+ test_segment_intersection<P>( 8, 2,3, 3,2, 0,0, 2,2, "--1--0102",
+ "d");
+#ifdef REPORT
+ std::cout << std::endl;
+#endif
+
+ test_segment_intersection<P>( 9, 0,0, 2,2, 0,0, 2,2, "1---0---2",
+ "e", "-", "-", 0, 0, 2, 2);
+ test_segment_intersection<P>(10, 2,2, 0,0, 0,0, 2,2, "1---0---2",
+ "e", "-", "-", 2, 2, 0, 0);
+ test_segment_intersection<P>(11, 1,1, 3,3, 0,0, 2,2, "1010-0102",
+ "c", "-", "-", 1, 1, 2, 2);
+ test_segment_intersection<P>(12, 3,3, 1,1, 0,0, 2,2, "1010-0102",
+ "c", "-", "-", 1, 1, 2, 2);
+#ifdef REPORT
+ std::cout << std::endl;
+#endif
+
+ test_segment_intersection<P>(13, 0,2, 2,2, 2,1, 2,3, "--10-0102",
+ "m", "L", "L", 2, 2);
+ test_segment_intersection<P>(14, 2,2, 2,4, 2,0, 2,2, "--1-00102",
+ "C", "-", "-", 2, 2);
+ test_segment_intersection<P>(15, 2,2, 2,4, 2,0, 2,1, "--1--0102",
+ "d");
+ test_segment_intersection<P>(16, 2,4, 2,2, 2,0, 2,1, "--1--0102",
+ "d");
+
+ test_segment_intersection<P>(17, 2,1, 2,3, 2,2, 2,4, "1010-0102",
+ "c", "-", "-", 2, 3, 2, 2);
+ test_segment_intersection<P>(18, 2,3, 2,1, 2,2, 2,4, "1010-0102",
+ "c", "-", "-", 2, 3, 2, 2);
+ test_segment_intersection<P>(19, 0,2, 2,2, 4,2, 2,2, "--1-00102",
+ "C", "-", "-", 2, 2);
+ test_segment_intersection<P>(20, 0,2, 2,2, 2,2, 4,2, "--1-00102",
+ "C", "-", "-", 2, 2);
+
+ test_segment_intersection<P>(21, 1,2, 3,2, 2,1, 2,3, "0-1--0102",
+ "i", "R", "L", 2, 2);
+ test_segment_intersection<P>(22, 2,4, 2,1, 2,1, 2,3, "101-00--2",
+ "c", "-", "-", 2, 1, 2, 3);
+ test_segment_intersection<P>(23, 2,4, 2,1, 2,3, 2,1, "101-00--2",
+ "c", "-", "-", 2, 3, 2, 1);
+ test_segment_intersection<P>(24, 1,1, 3,3, 0,0, 3,3, "1--00-102",
+ "c", "-", "-", 1, 1, 3, 3);
+
+ test_segment_intersection<P>(25, 2,0, 2,4, 2,1, 2,3, "101--0--2",
+ "c", "-", "-", 2, 1, 2, 3);
+ test_segment_intersection<P>(26, 2,0, 2,4, 2,3, 2,1, "101--0--2",
+ "c", "-", "-", 2, 3, 2, 1);
+ test_segment_intersection<P>(27, 0,0, 4,4, 1,1, 3,3, "101--0--2",
+ "c", "-", "-", 1, 1, 3, 3);
+ test_segment_intersection<P>(28, 0,0, 4,4, 3,3, 1,1, "101--0--2",
+ "c", "-", "-", 3, 3, 1, 1);
+
+ test_segment_intersection<P>(29, 1,1, 3,3, 0,0, 4,4, "1--0--102",
+ "c", "-", "-", 1, 1, 3, 3);
+ test_segment_intersection<P>(30, 0,0, 2,2, 2,2, 3,1, "--1-00102",
+ "a", "R", "R", 2, 2);
+ test_segment_intersection<P>(31, 0,0, 2,2, 2,2, 1,3, "--1-00102",
+ "a", "L", "L", 2, 2);
+ test_segment_intersection<P>(32, 0,0, 2,2, 1,1, 2,0, "-01--0102",
+ "s", "L", "R", 1, 1);
+
+ test_segment_intersection<P>(33, 0,0, 2,2, 1,1, 0,2, "-01--0102",
+ "s", "R", "L", 1, 1);
+ test_segment_intersection<P>(34, 2,2, 1,3, 0,0, 2,2, "--1-00102",
+ "a", "L", "L", 2, 2);
+ test_segment_intersection<P>(35, 2,2, 3,1, 0,0, 2,2, "--1-00102",
+ "a", "R", "R", 2, 2);
+ test_segment_intersection<P>(36, 0,0, 2,2, 0,2, 1,1, "-01--0102",
+ "m", "L", "L", 1, 1);
+
+ test_segment_intersection<P>(37, 0,0, 2,2, 2,0, 1,1, "-01--0102",
+ "m", "R", "R", 1, 1);
+ test_segment_intersection<P>(38, 1,1, 0,2, 0,0, 2,2, "--10-0102",
+ "s", "L", "R", 1, 1);
+ test_segment_intersection<P>(39, 1,1, 2,0, 0,0, 2,2, "--10-0102",
+ "s", "R", "L", 1, 1);
+ test_segment_intersection<P>(40, 2,0, 1,1, 0,0, 2,2, "--10-0102",
+ "m", "R", "R", 1, 1);
+
+ test_segment_intersection<P>(41, 1,2, 0,2, 2,2, 0,2, "1--00-102",
+ "c", "-", "-", 1, 2, 0, 2);
+ test_segment_intersection<P>(42, 2,1, 1,1, 2,2, 0,2, "--1--0102",
+ "p");
+ test_segment_intersection<P>(43, 4,1, 3,1, 2,2, 0,2, "--1--0102",
+ "p");
+ test_segment_intersection<P>(44, 4,2, 3,2, 2,2, 0,2, "--1--0102",
+ "d");
+
+ test_segment_intersection<P>(45, 2,0, 0,2, 0,0, 2,2, "0-1--0102",
+ "i", "L", "R", 1, 1);
+
+ // In figure: times 2
+ test_segment_intersection<P>(46, 8,2, 4,6, 0,0, 8, 8, "0-1--0102",
+ "i", "L", "R", 5, 5);
+}
+
+int test_main(int, char* [])
+{
+ std::cout << "Note this test is out-of-date and either obsolete or should be updated" << std::endl;
+ test_all<boost::tuple<double, double> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/segment_intersection.vcproj b/libs/geometry/test/strategies/segment_intersection.vcproj
new file mode 100644
index 000000000..6ce11dee0
--- /dev/null
+++ b/libs/geometry/test/strategies/segment_intersection.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="segment_intersection"
+ ProjectGUID="{4CCCD6BD-E77F-4A7B-BD9D-89ED2E213309}"
+ RootNamespace="segment_intersection"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\segment_intersection"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\segment_intersection"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\segment_intersection.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/segment_intersection_collinear.cpp b/libs/geometry/test/strategies/segment_intersection_collinear.cpp
new file mode 100644
index 000000000..0466c0955
--- /dev/null
+++ b/libs/geometry/test/strategies/segment_intersection_collinear.cpp
@@ -0,0 +1,256 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+
+#include <boost/geometry/strategies/cartesian/cart_intersect.hpp>
+#include <boost/geometry/strategies/intersection_result.hpp>
+
+#include <boost/geometry/policies/relate/intersection_points.hpp>
+#include <boost/geometry/policies/relate/direction.hpp>
+#include <boost/geometry/policies/relate/de9im.hpp>
+#include <boost/geometry/policies/relate/tupled.hpp>
+
+#include <boost/geometry/algorithms/intersection.hpp>
+
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+
+template <typename IntersectionPoints>
+static int check(IntersectionPoints const& is,
+ std::size_t index, double expected_x, double expected_y)
+{
+ if (expected_x != -99 && expected_y != -99 && is.count > index)
+ {
+ double x = bg::get<0>(is.intersections[index]);
+ double y = bg::get<1>(is.intersections[index]);
+
+ BOOST_CHECK_CLOSE(x, expected_x, 0.001);
+ BOOST_CHECK_CLOSE(y, expected_y, 0.001);
+ return 1;
+ }
+ return 0;
+}
+
+
+template <typename P>
+static void test_segment_intersection(std::string const& case_id,
+ int x1, int y1, int x2, int y2,
+ int x3, int y3, int x4, int y4,
+ char expected_how, bool expected_opposite,
+ int expected_arrival1, int expected_arrival2,
+ int expected_x1, int expected_y1,
+ int expected_x2 = -99, int expected_y2 = -99)
+
+{
+ typedef typename bg::coordinate_type<P>::type coordinate_type;
+ typedef bg::model::referring_segment<const P> segment_type;
+
+ P p1, p2, p3, p4;
+ bg::assign_values(p1, x1, y1);
+ bg::assign_values(p2, x2, y2);
+ bg::assign_values(p3, x3, y3);
+ bg::assign_values(p4, x4, y4);
+
+ segment_type s12(p1,p2);
+ segment_type s34(p3,p4);
+
+ // Get the intersection point (or two points)
+ bg::segment_intersection_points<P> is
+ = bg::strategy::intersection::relate_cartesian_segments
+ <
+ bg::policies::relate::segments_intersection_points
+ <
+ segment_type,
+ segment_type,
+ bg::segment_intersection_points<P>
+ >
+ >::apply(s12, s34);
+
+ // Get just a character for Left/Right/intersects/etc, purpose is more for debugging
+ bg::policies::relate::direction_type dir
+ = bg::strategy::intersection::relate_cartesian_segments
+ <
+ bg::policies::relate::segments_direction
+ <
+ segment_type,
+ segment_type
+ >
+ >::apply(s12, s34);
+
+ int expected_count =
+ check(is, 0, expected_x1, expected_y1)
+ + check(is, 1, expected_x2, expected_y2);
+
+ BOOST_CHECK_EQUAL(is.count, expected_count);
+ BOOST_CHECK_EQUAL(dir.how, expected_how);
+ BOOST_CHECK_EQUAL(dir.opposite, expected_opposite);
+ BOOST_CHECK_EQUAL(dir.arrival[0], expected_arrival1);
+ BOOST_CHECK_EQUAL(dir.arrival[1], expected_arrival2);
+}
+
+
+template <typename P>
+void test_all()
+{
+ // Collinear - non opposite
+
+ // a1---------->a2
+ // b1--->b2
+ test_segment_intersection<P>("n1",
+ 2, 0, 6, 0,
+ 0, 0, 2, 0,
+ 'a', false, -1, 0,
+ 2, 0);
+
+ // a1---------->a2
+ // b1--->b2
+ test_segment_intersection<P>("n2",
+ 2, 0, 6, 0,
+ 1, 0, 3, 0,
+ 'c', false, -1, 1,
+ 2, 0, 3, 0);
+
+ // a1---------->a2
+ // b1--->b2
+ test_segment_intersection<P>("n3",
+ 2, 0, 6, 0,
+ 2, 0, 4, 0,
+ 'c', false, -1, 1,
+ 2, 0, 4, 0);
+
+ // a1---------->a2
+ // b1--->b2
+ test_segment_intersection<P>("n4",
+ 2, 0, 6, 0,
+ 3, 0, 5, 0,
+ 'c', false, -1, 1,
+ 3, 0, 5, 0);
+
+ // a1---------->a2
+ // b1--->b2
+ test_segment_intersection<P>("n5",
+ 2, 0, 6, 0,
+ 4, 0, 6, 0,
+ 'c', false, 0, 0,
+ 4, 0, 6, 0);
+
+ // a1---------->a2
+ // b1--->b2
+ test_segment_intersection<P>("n6",
+ 2, 0, 6, 0,
+ 5, 0, 7, 0,
+ 'c', false, 1, -1,
+ 5, 0, 6, 0);
+
+ // a1---------->a2
+ // b1--->b2
+ test_segment_intersection<P>("n7",
+ 2, 0, 6, 0,
+ 6, 0, 8, 0,
+ 'a', false, 0, -1,
+ 6, 0);
+
+ // Collinear - opposite
+ // a1---------->a2
+ // b2<---b1
+ test_segment_intersection<P>("o1",
+ 2, 0, 6, 0,
+ 2, 0, 0, 0,
+ 'f', true, -1, -1,
+ 2, 0);
+
+ // a1---------->a2
+ // b2<---b1
+ test_segment_intersection<P>("o2",
+ 2, 0, 6, 0,
+ 3, 0, 1, 0,
+ 'c', true, -1, -1,
+ 2, 0, 3, 0);
+
+ // a1---------->a2
+ // b2<---b1
+ test_segment_intersection<P>("o3",
+ 2, 0, 6, 0,
+ 4, 0, 2, 0,
+ 'c', true, -1, 0,
+ 2, 0, 4, 0);
+
+ // a1---------->a2
+ // b2<---b1
+ test_segment_intersection<P>("o4",
+ 2, 0, 6, 0,
+ 5, 0, 3, 0,
+ 'c', true, -1, 1,
+ 3, 0, 5, 0);
+
+ // a1---------->a2
+ // b2<---b1
+ test_segment_intersection<P>("o5",
+ 2, 0, 6, 0,
+ 6, 0, 4, 0,
+ 'c', true, 0, 1,
+ 4, 0, 6, 0);
+
+ // a1---------->a2
+ // b2<---b1
+ test_segment_intersection<P>("o6",
+ 2, 0, 6, 0,
+ 7, 0, 5, 0,
+ 'c', true, 1, 1,
+ 5, 0, 6, 0);
+
+ // a1---------->a2
+ // b2<---b1
+ test_segment_intersection<P>("o7",
+ 2, 0, 6, 0,
+ 8, 0, 6, 0,
+ 't', true, 0, 0,
+ 6, 0);
+
+ // a1---------->a2
+ // b1---------->b2
+ test_segment_intersection<P>("e1",
+ 2, 0, 6, 0,
+ 2, 0, 6, 0,
+ 'e', false, 0, 0,
+ 2, 0, 6, 0);
+
+ // a1---------->a2
+ // b2<----------b1
+ test_segment_intersection<P>("e1",
+ 2, 0, 6, 0,
+ 6, 0, 2, 0,
+ 'e', true, 0, 0,
+ 2, 0, 6, 0);
+
+ // a1---------->a2
+ // b2<----------b1
+ test_segment_intersection<P>("case_recursive_boxes_1",
+ 10, 7, 10, 6,
+ 10, 10, 10, 9,
+ 'd', false, 0, 0,
+ -1, -1, -1, -1);
+
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/segment_intersection_collinear.vcproj b/libs/geometry/test/strategies/segment_intersection_collinear.vcproj
new file mode 100644
index 000000000..0d479586f
--- /dev/null
+++ b/libs/geometry/test/strategies/segment_intersection_collinear.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="segment_intersection_collinear"
+ ProjectGUID="{2D0CB6D3-6ABC-4119-A235-66E6065A279E}"
+ RootNamespace="segment_intersection_collinear"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\segment_intersection_collinear"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\segment_intersection_collinear"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\segment_intersection_collinear.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/spherical_side.cpp b/libs/geometry/test/strategies/spherical_side.cpp
new file mode 100644
index 000000000..d2d114440
--- /dev/null
+++ b/libs/geometry/test/strategies/spherical_side.cpp
@@ -0,0 +1,142 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/algorithms/assign.hpp>
+
+
+#include <boost/geometry/strategies/spherical/side_by_cross_track.hpp>
+//#include <boost/geometry/strategies/spherical/side_via_plane.hpp>
+#include <boost/geometry/strategies/spherical/ssf.hpp>
+#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
+
+#include <boost/geometry/core/cs.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/segment.hpp>
+
+
+namespace boost { namespace geometry {
+
+template <typename Vector, typename Point1, typename Point2>
+static inline Vector create_vector(Point1 const& p1, Point2 const& p2)
+{
+ Vector v;
+ convert(p1, v);
+ subtract_point(v, p2);
+ return v;
+}
+
+}}
+
+inline char side_char(int side)
+{
+ return side == 1 ? 'L'
+ : side == -1 ? 'R'
+ : '-'
+ ;
+}
+
+template <typename Point>
+void test_side1(std::string const& case_id, Point const& p1, Point const& p2, Point const& p3,
+ int expected, int expected_cartesian)
+{
+ // std::cout << case_id << ": ";
+ //int s = bg::strategy::side::side_via_plane<>::apply(p1, p2, p3);
+ int side_ssf = bg::strategy::side::spherical_side_formula<>::apply(p1, p2, p3);
+ //int side2 = bg::strategy::side::side_via_plane<>::apply(p1, p2, p3);
+ int side_ct = bg::strategy::side::side_by_cross_track<>::apply(p1, p2, p3);
+
+ typedef bg::strategy::side::services::default_strategy<bg::cartesian_tag>::type cartesian_strategy;
+ int side_cart = cartesian_strategy::apply(p1, p2, p3);
+
+
+ BOOST_CHECK_EQUAL(side_ssf, expected);
+ BOOST_CHECK_EQUAL(side_ct, expected);
+ BOOST_CHECK_EQUAL(side_cart, expected_cartesian);
+ /*
+ std::cout
+ << "exp: " << side_char(expected)
+ << " ssf: " << side_char(side1)
+ << " pln: " << side_char(side2)
+ << " ct: " << side_char(side3)
+ //<< " def: " << side_char(side4)
+ << " cart: " << side_char(side5)
+ << std::endl;
+ */
+}
+
+template <typename Point>
+void test_side(std::string const& case_id, Point const& p1, Point const& p2, Point const& p3,
+ int expected, int expected_cartesian = -999)
+{
+ if (expected_cartesian == -999)
+ {
+ expected_cartesian = expected;
+ }
+ test_side1(case_id, p1, p2, p3, expected, expected_cartesian);
+ test_side1(case_id, p2, p1, p3, -expected, -expected_cartesian);
+}
+
+
+template <typename Point>
+void test_all()
+{
+ typedef std::pair<double, double> pair;
+
+ Point amsterdam(5.9, 52.4);
+ Point barcelona(2.0, 41.0);
+ Point paris(2.0, 48.0);
+ Point milan(7.0, 45.0);
+
+ //goto wrong;
+
+ test_side<Point>("bp-m", barcelona, paris, milan, -1);
+ test_side<Point>("bm-p", barcelona, milan, paris, 1);
+ test_side<Point>("mp-b", milan, paris, barcelona, 1);
+
+ test_side<Point>("am-p", amsterdam, milan, paris, -1);
+ test_side<Point>("pm-a", paris, milan, amsterdam, 1);
+
+ // http://www.gcmap.com/mapui?P=30N+10E-50N+50E,39N+30E
+ Point gcmap_p1(10.0, 30.0);
+ Point gcmap_p2(50.0, 50.0);
+ test_side<Point>("blog1", gcmap_p1, gcmap_p2, Point(30.0, 41.0), -1, 1);
+ test_side<Point>("blog1", gcmap_p1, gcmap_p2, Point(30.0, 42.0), -1, 1);
+ test_side<Point>("blog1", gcmap_p1, gcmap_p2, Point(30.0, 43.0), -1, 1);
+ test_side<Point>("blog1", gcmap_p1, gcmap_p2, Point(30.0, 44.0), 1);
+
+ // http://www.gcmap.com/mapui?P=50N+80E-60N+50W,65N+30E
+ Point gcmap_np1(80.0, 50.0);
+ Point gcmap_np2(-50.0, 60.0);
+ // http://www.gcmap.com/mapui?P=50N+140E-60N+10E,65N+30E
+ //Point gcmap_np1(140.0, 50.0);
+ //Point gcmap_np2(10.0, 60.0);
+ //test_side<Point>(gcmap_np1, gcmap_np2, gcmap_np, 1);
+ test_side<Point>("40", gcmap_np1, gcmap_np2, Point(30.0, 60.0), 1, -1);
+ test_side<Point>("45", gcmap_np1, gcmap_np2, Point(30.0, 65.0), 1, -1);
+ test_side<Point>("70", gcmap_np1, gcmap_np2, Point(30.0, 70.0), 1, -1);
+ test_side<Point>("75", gcmap_np1, gcmap_np2, Point(30.0, 75.0), -1);
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<int, 2, bg::cs::spherical<bg::degree> > >();
+ test_all<bg::model::point<double, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+
+#if defined(HAVE_TTMATH)
+ typedef ttmath::Big<1,4> tt;
+ test_all<bg::model::point<tt, 2, bg::cs::spherical_equatorial<bg::degree> > >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/spherical_side.vcproj b/libs/geometry/test/strategies/spherical_side.vcproj
new file mode 100644
index 000000000..70dd8689c
--- /dev/null
+++ b/libs/geometry/test/strategies/spherical_side.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="spherical_side"
+ ProjectGUID="{ADBE38D8-1828-48A2-BBA1-81F50B53C67C}"
+ RootNamespace="spherical_side"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\spherical_side"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\spherical_side"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\spherical_side.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/strategies_tests.sln b/libs/geometry/test/strategies/strategies_tests.sln
new file mode 100644
index 000000000..d29448213
--- /dev/null
+++ b/libs/geometry/test/strategies/strategies_tests.sln
@@ -0,0 +1,73 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythagoras", "pythagoras.vcproj", "{763CA955-FC01-4AFD-9593-69D36836B3F7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "transformer", "transformer.vcproj", "{9B62EBF7-D444-4D67-BA00-48CAEAF92756}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "segment_intersection", "segment_intersection.vcproj", "{4CCCD6BD-E77F-4A7B-BD9D-89ED2E213309}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "haversine", "haversine.vcproj", "{AA654B76-E384-4E10-B367-4F51B5D3E96F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cross_track", "cross_track.vcproj", "{4CE6F112-9EA1-4D7E-9AC6-907E77895263}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "projected_point", "projected_point.vcproj", "{A27A46D2-AAD2-47F9-86E2-21FF849EF2D4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "segment_intersection_collinear", "segment_intersection_collinear.vcproj", "{2D0CB6D3-6ABC-4119-A235-66E6065A279E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spherical_side", "spherical_side.vcproj", "{ADBE38D8-1828-48A2-BBA1-81F50B53C67C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "within", "within.vcproj", "{AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "transform_cs", "transform_cs.vcproj", "{2128A5D9-C67E-4C00-A917-A79058C78FCC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {763CA955-FC01-4AFD-9593-69D36836B3F7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {763CA955-FC01-4AFD-9593-69D36836B3F7}.Debug|Win32.Build.0 = Debug|Win32
+ {763CA955-FC01-4AFD-9593-69D36836B3F7}.Release|Win32.ActiveCfg = Release|Win32
+ {763CA955-FC01-4AFD-9593-69D36836B3F7}.Release|Win32.Build.0 = Release|Win32
+ {9B62EBF7-D444-4D67-BA00-48CAEAF92756}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9B62EBF7-D444-4D67-BA00-48CAEAF92756}.Debug|Win32.Build.0 = Debug|Win32
+ {9B62EBF7-D444-4D67-BA00-48CAEAF92756}.Release|Win32.ActiveCfg = Release|Win32
+ {9B62EBF7-D444-4D67-BA00-48CAEAF92756}.Release|Win32.Build.0 = Release|Win32
+ {4CCCD6BD-E77F-4A7B-BD9D-89ED2E213309}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4CCCD6BD-E77F-4A7B-BD9D-89ED2E213309}.Debug|Win32.Build.0 = Debug|Win32
+ {4CCCD6BD-E77F-4A7B-BD9D-89ED2E213309}.Release|Win32.ActiveCfg = Release|Win32
+ {4CCCD6BD-E77F-4A7B-BD9D-89ED2E213309}.Release|Win32.Build.0 = Release|Win32
+ {AA654B76-E384-4E10-B367-4F51B5D3E96F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA654B76-E384-4E10-B367-4F51B5D3E96F}.Debug|Win32.Build.0 = Debug|Win32
+ {AA654B76-E384-4E10-B367-4F51B5D3E96F}.Release|Win32.ActiveCfg = Release|Win32
+ {AA654B76-E384-4E10-B367-4F51B5D3E96F}.Release|Win32.Build.0 = Release|Win32
+ {4CE6F112-9EA1-4D7E-9AC6-907E77895263}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4CE6F112-9EA1-4D7E-9AC6-907E77895263}.Debug|Win32.Build.0 = Debug|Win32
+ {4CE6F112-9EA1-4D7E-9AC6-907E77895263}.Release|Win32.ActiveCfg = Release|Win32
+ {4CE6F112-9EA1-4D7E-9AC6-907E77895263}.Release|Win32.Build.0 = Release|Win32
+ {A27A46D2-AAD2-47F9-86E2-21FF849EF2D4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A27A46D2-AAD2-47F9-86E2-21FF849EF2D4}.Debug|Win32.Build.0 = Debug|Win32
+ {A27A46D2-AAD2-47F9-86E2-21FF849EF2D4}.Release|Win32.ActiveCfg = Release|Win32
+ {A27A46D2-AAD2-47F9-86E2-21FF849EF2D4}.Release|Win32.Build.0 = Release|Win32
+ {2D0CB6D3-6ABC-4119-A235-66E6065A279E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2D0CB6D3-6ABC-4119-A235-66E6065A279E}.Debug|Win32.Build.0 = Debug|Win32
+ {2D0CB6D3-6ABC-4119-A235-66E6065A279E}.Release|Win32.ActiveCfg = Release|Win32
+ {2D0CB6D3-6ABC-4119-A235-66E6065A279E}.Release|Win32.Build.0 = Release|Win32
+ {ADBE38D8-1828-48A2-BBA1-81F50B53C67C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {ADBE38D8-1828-48A2-BBA1-81F50B53C67C}.Debug|Win32.Build.0 = Debug|Win32
+ {ADBE38D8-1828-48A2-BBA1-81F50B53C67C}.Release|Win32.ActiveCfg = Release|Win32
+ {ADBE38D8-1828-48A2-BBA1-81F50B53C67C}.Release|Win32.Build.0 = Release|Win32
+ {AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}.Debug|Win32.Build.0 = Debug|Win32
+ {AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}.Release|Win32.ActiveCfg = Release|Win32
+ {AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}.Release|Win32.Build.0 = Release|Win32
+ {2128A5D9-C67E-4C00-A917-A79058C78FCC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2128A5D9-C67E-4C00-A917-A79058C78FCC}.Debug|Win32.Build.0 = Debug|Win32
+ {2128A5D9-C67E-4C00-A917-A79058C78FCC}.Release|Win32.ActiveCfg = Release|Win32
+ {2128A5D9-C67E-4C00-A917-A79058C78FCC}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/strategies/transform_cs.cpp b/libs/geometry/test/strategies/transform_cs.cpp
new file mode 100644
index 000000000..36b327e3e
--- /dev/null
+++ b/libs/geometry/test/strategies/transform_cs.cpp
@@ -0,0 +1,149 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/strategies/strategy_transform.hpp>
+#include <boost/geometry/algorithms/transform.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+
+template <typename T, typename P>
+inline T check_distance(P const& p)
+{
+ T x = bg::get<0>(p);
+ T y = bg::get<1>(p);
+ T z = bg::get<2>(p);
+ return sqrt(x * x + y * y + z * z);
+}
+
+template <typename T>
+void test_transformations_spherical()
+{
+ T const input_long = 15.0;
+ T const input_lat = 5.0;
+
+ T const expected_long = 0.26179938779914943653855361527329;
+ T const expected_lat = 0.08726646259971647884618453842443;
+
+ // Can be checked using http://www.calc3d.com/ejavascriptcoordcalc.html
+ // (for phi use long, in radians, for theta use lat, in radians, they are listed there as "theta, phi")
+ T const expected_polar_x = 0.084186;
+ T const expected_polar_y = 0.0225576;
+ T const expected_polar_z = 0.996195;
+
+ // Can be checked with same URL using 90-theta for lat.
+ // So for theta use 85 degrees, in radians: 0.08726646259971647884618453842443
+ T const expected_equatorial_x = 0.962250;
+ T const expected_equatorial_y = 0.257834;
+ T const expected_equatorial_z = 0.0871557;
+
+ // 1: Spherical-polar (lat=5, so it is near the pole - on a unit sphere)
+ bg::model::point<T, 2, bg::cs::spherical<bg::degree> > sp(input_long, input_lat);
+
+ // 1a: to radian
+ bg::model::point<T, 2, bg::cs::spherical<bg::radian> > spr;
+ bg::transform(sp, spr);
+ BOOST_CHECK_CLOSE(bg::get<0>(spr), expected_long, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(spr), expected_lat, 0.001);
+
+ // 1b: to cartesian-3d
+ bg::model::point<T, 3, bg::cs::cartesian> pc3;
+ bg::transform(sp, pc3);
+ BOOST_CHECK_CLOSE(bg::get<0>(pc3), expected_polar_x, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(pc3), expected_polar_y, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<2>(pc3), expected_polar_z, 0.001);
+ BOOST_CHECK_CLOSE(check_distance<T>(pc3), 1.0, 0.001);
+
+ // 1c: back
+ bg::transform(pc3, spr);
+ BOOST_CHECK_CLOSE(bg::get<0>(spr), expected_long, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(spr), expected_lat, 0.001);
+
+ // 2: Spherical-equatorial (lat=5, so it is near the equator)
+ bg::model::point<T, 2, bg::cs::spherical_equatorial<bg::degree> > se(input_long, input_lat);
+
+ // 2a: to radian
+ bg::model::point<T, 2, bg::cs::spherical_equatorial<bg::radian> > ser;
+ bg::transform(se, ser);
+ BOOST_CHECK_CLOSE(bg::get<0>(ser), expected_long, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(ser), expected_lat, 0.001);
+
+ bg::transform(se, pc3);
+ BOOST_CHECK_CLOSE(bg::get<0>(pc3), expected_equatorial_x, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(pc3), expected_equatorial_y, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<2>(pc3), expected_equatorial_z, 0.001);
+ BOOST_CHECK_CLOSE(check_distance<T>(pc3), 1.0, 0.001);
+
+ // 2c: back
+ bg::transform(pc3, ser);
+ BOOST_CHECK_CLOSE(bg::get<0>(spr), expected_long, 0.001); // expected_long
+ BOOST_CHECK_CLOSE(bg::get<1>(spr), expected_lat, 0.001); // expected_lat
+
+
+ // 3: Spherical-polar including radius
+ bg::model::point<T, 3, bg::cs::spherical<bg::degree> > sp3(input_long, input_lat, 0.5);
+
+ // 3a: to radian
+ bg::model::point<T, 3, bg::cs::spherical<bg::radian> > spr3;
+ bg::transform(sp3, spr3);
+ BOOST_CHECK_CLOSE(bg::get<0>(spr3), expected_long, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(spr3), expected_lat, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<2>(spr3), 0.5, 0.001);
+
+ // 3b: to cartesian-3d
+ bg::transform(sp3, pc3);
+ BOOST_CHECK_CLOSE(bg::get<0>(pc3), expected_polar_x / 2.0, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(pc3), expected_polar_y / 2.0, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<2>(pc3), expected_polar_z / 2.0, 0.001);
+ BOOST_CHECK_CLOSE(check_distance<T>(pc3), 0.5, 0.001);
+
+ // 3c: back
+ bg::transform(pc3, spr3);
+ BOOST_CHECK_CLOSE(bg::get<0>(spr3), expected_long, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(spr3), expected_lat, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<2>(spr3), 0.5, 0.001);
+
+
+ // 4: Spherical-equatorial including radius
+ bg::model::point<T, 3, bg::cs::spherical_equatorial<bg::degree> > se3(input_long, input_lat, 0.5);
+
+ // 4a: to radian
+ bg::model::point<T, 3, bg::cs::spherical_equatorial<bg::radian> > ser3;
+ bg::transform(se3, ser3);
+ BOOST_CHECK_CLOSE(bg::get<0>(ser3), expected_long, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(ser3), expected_lat, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<2>(ser3), 0.5, 0.001);
+
+ // 4b: to cartesian-3d
+ bg::transform(se3, pc3);
+ BOOST_CHECK_CLOSE(bg::get<0>(pc3), expected_equatorial_x / 2.0, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(pc3), expected_equatorial_y / 2.0, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<2>(pc3), expected_equatorial_z / 2.0, 0.001);
+ BOOST_CHECK_CLOSE(check_distance<T>(pc3), 0.5, 0.001);
+
+ // 4c: back
+ bg::transform(pc3, ser3);
+ BOOST_CHECK_CLOSE(bg::get<0>(ser3), expected_long, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<1>(ser3), expected_lat, 0.001);
+ BOOST_CHECK_CLOSE(bg::get<2>(ser3), 0.5, 0.001);
+}
+
+int test_main(int, char* [])
+{
+ test_transformations_spherical<double>();
+
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/transform_cs.vcproj b/libs/geometry/test/strategies/transform_cs.vcproj
new file mode 100644
index 000000000..ea115c56f
--- /dev/null
+++ b/libs/geometry/test/strategies/transform_cs.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="transform_cs"
+ ProjectGUID="{2128A5D9-C67E-4C00-A917-A79058C78FCC}"
+ RootNamespace="transform_cs"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\transform_cs"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\transform_cs"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\transform_cs.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/transformer.cpp b/libs/geometry/test/strategies/transformer.cpp
new file mode 100644
index 000000000..b469e08cc
--- /dev/null
+++ b/libs/geometry/test/strategies/transformer.cpp
@@ -0,0 +1,113 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/strategies/transform/inverse_transformer.hpp>
+#include <boost/geometry/strategies/transform/map_transformer.hpp>
+#include <boost/geometry/strategies/transform/matrix_transformers.hpp>
+
+
+#include <boost/geometry/algorithms/make.hpp>
+#include <boost/geometry/algorithms/transform.hpp>
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+template <typename P, typename T>
+void check_inverse(P const& p, T const& trans)
+{
+ bg::strategy::transform::inverse_transformer<P, P> inverse(trans);
+
+ P i;
+ bg::transform(p, i, inverse);
+
+ BOOST_CHECK_CLOSE(double(bg::get<0>(i)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(double(bg::get<1>(i)), 1.0, 0.001);
+}
+
+template <typename P>
+void test_all()
+{
+ P p;
+ bg::assign_values(p, 1, 1);
+
+ {
+ bg::strategy::transform::translate_transformer<P, P> trans(1, 1);
+ P tp;
+ bg::transform(p, tp, trans);
+
+ BOOST_CHECK_CLOSE(double(bg::get<0>(tp)), 2.0, 0.001);
+ BOOST_CHECK_CLOSE(double(bg::get<1>(tp)), 2.0, 0.001);
+
+ check_inverse(tp, trans);
+ }
+
+ {
+ bg::strategy::transform::scale_transformer<P, P> trans(10, 10);
+ P tp;
+ bg::transform(p, tp, trans);
+
+ BOOST_CHECK_CLOSE(double(bg::get<0>(tp)), 10.0, 0.001);
+ BOOST_CHECK_CLOSE(double(bg::get<1>(tp)), 10.0, 0.001);
+
+ check_inverse(tp, trans);
+ }
+
+ {
+ bg::strategy::transform::rotate_transformer<P, P, bg::degree> trans(90.0);
+ P tp;
+ bg::transform(p, tp, trans);
+
+ BOOST_CHECK_CLOSE(double(bg::get<0>(tp)), 1.0, 0.001);
+ BOOST_CHECK_CLOSE(double(bg::get<1>(tp)), -1.0, 0.001);
+ check_inverse(tp, trans);
+ }
+
+ {
+ // Map from 0,0,2,2 to 0,0,500,500
+ bg::strategy::transform::map_transformer<P, P, false> trans
+ (
+ 0.0, 0.0, 2.0, 2.0, 500, 500
+ );
+ P tp;
+ bg::transform(p, tp, trans);
+
+ BOOST_CHECK_CLOSE(double(bg::get<0>(tp)), 250.0, 0.001);
+ BOOST_CHECK_CLOSE(double(bg::get<1>(tp)), 250.0, 0.001);
+
+ check_inverse(tp, trans);
+ }
+}
+
+int test_main(int, char* [])
+{
+ //test_all<int[2]>();
+ //test_all<float[2]>();
+ //test_all<double[2]>();
+
+ test_all<boost::tuple<float, float> >();
+
+ //test_all<point<int, 2, cs::cartesian> >();
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/transformer.vcproj b/libs/geometry/test/strategies/transformer.vcproj
new file mode 100644
index 000000000..f9c02344a
--- /dev/null
+++ b/libs/geometry/test/strategies/transformer.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="transformer"
+ ProjectGUID="{9B62EBF7-D444-4D67-BA00-48CAEAF92756}"
+ RootNamespace="transformer"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\transformer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\transformer"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\transformer.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/strategies/within.cpp b/libs/geometry/test/strategies/within.cpp
new file mode 100644
index 000000000..17cf8a33f
--- /dev/null
+++ b/libs/geometry/test/strategies/within.cpp
@@ -0,0 +1,194 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+// Tests with-strategies, especially point-in-polygon
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/algorithms/covered_by.hpp>
+#include <boost/geometry/algorithms/within.hpp>
+
+#include <boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp>
+#include <boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp>
+#include <boost/geometry/strategies/agnostic/point_in_poly_winding.hpp>
+#include <boost/geometry/strategies/cartesian/point_in_box.hpp>
+#include <boost/geometry/strategies/cartesian/box_in_box.hpp>
+#include <boost/geometry/strategies/agnostic/point_in_box_by_side.hpp>
+
+#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
+
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+
+
+
+
+
+
+template <typename Point, typename Polygon, typename Strategy>
+void test_point_in_polygon(std::string const& case_id,
+ Point const& point, Polygon const& polygon,
+ Strategy const& strategy, std::string const& strategy_id,
+ bool expected)
+{
+ BOOST_CONCEPT_ASSERT( (bg::concept::WithinStrategyPolygonal<Strategy>) );
+ bool detected = bg::within(point, polygon, strategy);
+
+ BOOST_CHECK_MESSAGE(detected == expected,
+ "within: " << case_id
+ << " strategy: " << strategy_id // typeid(strategy).name() is too long
+ << " output expected: " << int(expected)
+ << " detected: " << int(detected)
+ );
+}
+
+template <typename Point, typename Polygon>
+void test_geometry(std::string const& case_id, std::string const& wkt_point
+ , std::string const& wkt_polygon
+ , bool expected
+ , std::string const& deviations = ""
+ )
+{
+ Point point;
+ Polygon polygon;
+ bg::read_wkt(wkt_point, point);
+ bg::read_wkt(wkt_polygon, polygon);
+
+ namespace sw = bg::strategy::within;
+ test_point_in_polygon(case_id, point, polygon, sw::winding<Point>(),
+ "winding", expected);
+ test_point_in_polygon(case_id, point, polygon, sw::franklin<Point>(),
+ "franklin", boost::contains(deviations, "f") ? !expected : expected);
+ test_point_in_polygon(case_id, point, polygon, sw::crossings_multiply<Point>(),
+ "cross.mult", boost::contains(deviations, "c") ? !expected : expected);
+}
+
+template <typename Point>
+void test_box_of(std::string const& wkt_point, std::string const& wkt_box,
+ bool expected_within, bool expected_covered_by)
+{
+ typedef bg::model::box<Point> box_type;
+
+ Point point;
+ box_type box;
+ bg::read_wkt(wkt_point, point);
+ bg::read_wkt(wkt_box, box);
+
+ bool detected_within = bg::within(point, box);
+ bool detected_covered_by = bg::covered_by(point, box);
+ BOOST_CHECK_EQUAL(detected_within, expected_within);
+ BOOST_CHECK_EQUAL(detected_covered_by, expected_covered_by);
+
+ // Also test with the non-default agnostic side version
+ namespace wi = bg::strategy::within;
+ wi::point_in_box_by_side<Point, box_type> within_strategy;
+ wi::point_in_box_by_side<Point, box_type, wi::decide_covered_by> covered_by_strategy;
+
+ detected_within = bg::within(point, box, within_strategy);
+ detected_covered_by = bg::covered_by(point, box, covered_by_strategy);
+ BOOST_CHECK_EQUAL(detected_within, expected_within);
+ BOOST_CHECK_EQUAL(detected_covered_by, expected_covered_by);
+
+ // We might exchange strategies between within/covered by.
+ // So the lines below might seem confusing, but are as intended
+ detected_within = bg::covered_by(point, box, within_strategy);
+ detected_covered_by = bg::within(point, box, covered_by_strategy);
+ BOOST_CHECK_EQUAL(detected_within, expected_within);
+ BOOST_CHECK_EQUAL(detected_covered_by, expected_covered_by);
+
+ // Finally we call the strategies directly
+ detected_within = within_strategy.apply(point, box);
+ detected_covered_by = covered_by_strategy.apply(point, box);
+ BOOST_CHECK_EQUAL(detected_within, expected_within);
+ BOOST_CHECK_EQUAL(detected_covered_by, expected_covered_by);
+}
+
+template <typename Point>
+void test_box()
+{
+ test_box_of<Point>("POINT(1 1)", "BOX(0 0,2 2)", true, true);
+ test_box_of<Point>("POINT(0 0)", "BOX(0 0,2 2)", false, true);
+ test_box_of<Point>("POINT(2 2)", "BOX(0 0,2 2)", false, true);
+ test_box_of<Point>("POINT(0 1)", "BOX(0 0,2 2)", false, true);
+ test_box_of<Point>("POINT(1 0)", "BOX(0 0,2 2)", false, true);
+ test_box_of<Point>("POINT(3 3)", "BOX(0 0,2 2)", false, false);
+}
+
+
+template <typename Point>
+void test_all()
+{
+ test_box<Point>();
+
+ typedef bg::model::polygon<Point> polygon;
+
+ std::string const box = "POLYGON((0 0,0 2,2 2,2 0,0 0))";
+ std::string const triangle = "POLYGON((0 0,0 4,6 0,0 0))";
+ std::string const with_hole = "POLYGON((0 0,0 3,3 3,3 0,0 0),(1 1,2 1,2 2,1 2,1 1))";
+
+
+ test_geometry<Point, polygon>("b1", "POINT(1 1)", box, true);
+ test_geometry<Point, polygon>("b2", "POINT(3 3)", box, false);
+
+ // Test ALL corners (officialy false but some strategies might answer true)
+ test_geometry<Point, polygon>("b3a", "POINT(0 0)", box, false, "f");
+ test_geometry<Point, polygon>("b3b", "POINT(0 2)", box, false);
+ test_geometry<Point, polygon>("b3c", "POINT(2 2)", box, false);
+ test_geometry<Point, polygon>("b3d", "POINT(2 0)", box, false);
+
+ // Test ALL sides (officialy false but some strategies might answer true)
+ test_geometry<Point, polygon>("b4a", "POINT(0 1)", box, false, "f");
+ test_geometry<Point, polygon>("b4b", "POINT(1 2)", box, false, "c");
+ test_geometry<Point, polygon>("b4c", "POINT(2 1)", box, false);
+ test_geometry<Point, polygon>("b4d", "POINT(1 0)", box, false, "f");
+
+
+ test_geometry<Point, polygon>("t1", "POINT(1 1)", triangle, true);
+ test_geometry<Point, polygon>("t2", "POINT(3 3)", triangle, false);
+
+ test_geometry<Point, polygon>("t3a", "POINT(0 0)", triangle, false, "f");
+ test_geometry<Point, polygon>("t3b", "POINT(0 4)", triangle, false, "c");
+ test_geometry<Point, polygon>("t3c", "POINT(5 0)", triangle, false, "f");
+
+ test_geometry<Point, polygon>("t4a", "POINT(0 2)", triangle, false, "f");
+ test_geometry<Point, polygon>("t4b", "POINT(3 2)", triangle, false);
+ test_geometry<Point, polygon>("t4c", "POINT(2 0)", triangle, false, "f");
+
+
+ test_geometry<Point, polygon>("h1", "POINT(0.5 0.5)", with_hole, true);
+ test_geometry<Point, polygon>("h2a", "POINT(1.5 1.5)", with_hole, false);
+ test_geometry<Point, polygon>("h2b", "POINT(5 5)", with_hole, false);
+
+ test_geometry<Point, polygon>("h3a", "POINT(1 1)", with_hole, false, "c");
+ test_geometry<Point, polygon>("h3b", "POINT(2 2)", with_hole, false, "f");
+ test_geometry<Point, polygon>("h3c", "POINT(0 0)", with_hole, false, "f");
+
+ test_geometry<Point, polygon>("h4a", "POINT(1 1.5)", with_hole, false);
+ test_geometry<Point, polygon>("h4b", "POINT(1.5 2)", with_hole, false, "f");
+
+ // Lying ON (one of the sides of) interior ring
+ test_geometry<Point, polygon>("#77-1", "POINT(6 3.5)", "POLYGON((5 3,5 4,4 4,4 5,3 5,3 6,5 6,5 5,7 5,7 6,8 6,8 5,9 5,9 2,8 2,8 1,7 1,7 2,5 2,5 3),(6 3,8 3,8 4,6 4,6 3))", false);
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<float, 2, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+#if defined(HAVE_TTMATH)
+ test_all<bg::model::point<ttmath_big, 2, bg::cs::cartesian> >();
+#endif
+
+ return 0;
+}
diff --git a/libs/geometry/test/strategies/within.vcproj b/libs/geometry/test/strategies/within.vcproj
new file mode 100644
index 000000000..8ad1dbc87
--- /dev/null
+++ b/libs/geometry/test/strategies/within.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="within"
+ ProjectGUID="{AB13D2AC-FD34-4DE4-BD8E-4D463050E5DD}"
+ RootNamespace="within"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\within"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\within"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops;..\ttmath.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\within.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/test_common/test_point.hpp b/libs/geometry/test/test_common/test_point.hpp
new file mode 100644
index 000000000..5a19d6c3c
--- /dev/null
+++ b/libs/geometry/test/test_common/test_point.hpp
@@ -0,0 +1,94 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+
+
+#ifndef GEOMETRY_TEST_TEST_COMMON_TEST_POINT_HPP
+#define GEOMETRY_TEST_TEST_COMMON_TEST_POINT_HPP
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/coordinate_system.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/tag.hpp>
+
+// NOTE: since Boost 1.51 the Point type may always be a pointer.
+// Therefore the traits class don't need to add a pointer.
+// This obsoletes this whole test-point-type
+
+namespace test
+{
+
+// Test point class
+
+struct test_point
+{
+ float c1, c2, c3;
+};
+
+
+} // namespace test
+
+
+namespace boost { namespace geometry { namespace traits {
+
+template<>
+struct tag<test::test_point> { typedef point_tag type; };
+
+template<>
+struct coordinate_type<test::test_point> { typedef float type; };
+
+template<>
+struct coordinate_system<test::test_point> { typedef cs::cartesian type; };
+
+template<>
+struct dimension<test::test_point>: boost::mpl::int_<3> {};
+
+template<> struct access<test::test_point, 0>
+{
+ static inline const float& get(const test::test_point& p)
+ {
+ return p.c1;
+ }
+
+ static inline void set(test::test_point& p, const float& value)
+ {
+ p.c1 = value;
+ }
+};
+
+template<> struct access<test::test_point, 1>
+{
+ static inline const float& get(const test::test_point& p)
+ {
+ return p.c2;
+ }
+
+ static inline void set(test::test_point& p, const float& value)
+ {
+ p.c2 = value;
+ }
+};
+
+template<> struct access<test::test_point, 2>
+{
+ static inline const float& get(const test::test_point& p)
+ {
+ return p.c3;
+ }
+
+ static inline void set(test::test_point& p, const float& value)
+ {
+ p.c3 = value;
+ }
+};
+
+}}} // namespace bg::traits
+
+#endif // GEOMETRY_TEST_TEST_COMMON_TEST_POINT_HPP
diff --git a/libs/geometry/test/test_common/with_pointer.hpp b/libs/geometry/test/test_common/with_pointer.hpp
new file mode 100644
index 000000000..22edbdef5
--- /dev/null
+++ b/libs/geometry/test/test_common/with_pointer.hpp
@@ -0,0 +1,87 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// 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)
+
+
+#ifndef GEOMETRY_TEST_COMMON_WITH_POINTER_HPP
+#define GEOMETRY_TEST_COMMON_WITH_POINTER_HPP
+
+
+#include <boost/geometry/core/access.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/coordinate_system.hpp>
+#include <boost/geometry/core/coordinate_dimension.hpp>
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/core/tag.hpp>
+
+// NOTE: since Boost 1.51 the Point type may always be a pointer.
+// Therefore the traits class don't need to add a pointer.
+// This obsoletes this whole test-point-type
+
+
+
+namespace test
+{
+
+// Sample point, having x/y
+struct test_point_xy
+{
+ float x,y;
+};
+
+}
+
+
+namespace boost { namespace geometry { namespace traits {
+
+template<> struct tag<test::test_point_xy>
+{ typedef point_tag type; };
+
+template<> struct coordinate_type<test::test_point_xy>
+{ typedef double type; };
+
+template<> struct coordinate_system<test::test_point_xy>
+{ typedef cs::cartesian type; };
+
+template<> struct dimension<test::test_point_xy> : boost::mpl::int_<2> {};
+
+template<>
+struct access<test::test_point_xy, 0>
+{
+ static double get(test::test_point_xy const& p)
+ {
+ return p.x;
+ }
+
+ static void set(test::test_point_xy& p, double const& value)
+ {
+ p.x = value;
+ }
+
+};
+
+
+template<>
+struct access<test::test_point_xy, 1>
+{
+ static double get(test::test_point_xy const& p)
+ {
+ return p.y;
+ }
+
+ static void set(test::test_point_xy& p, double const& value)
+ {
+ p.y = value;
+ }
+
+};
+
+}}} // namespace bg::traits
+
+
+#endif // #ifndef GEOMETRY_TEST_COMMON_WITH_POINTER_HPP
diff --git a/libs/geometry/test/test_geometries/all_custom_container.hpp b/libs/geometry/test/test_geometries/all_custom_container.hpp
new file mode 100644
index 000000000..7f4a83012
--- /dev/null
+++ b/libs/geometry/test/test_geometries/all_custom_container.hpp
@@ -0,0 +1,137 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#ifndef GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_CONTAINER_HPP
+#define GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_CONTAINER_HPP
+
+#include <cstddef>
+#include <deque>
+
+
+template <typename Item>
+class all_custom_container
+{
+private :
+ std::deque<Item> m_hidden_deque;
+
+public :
+ typedef typename std::deque<Item>::iterator custom_iterator_type;
+ typedef typename std::deque<Item>::const_iterator custom_const_iterator_type;
+
+ inline std::size_t custom_size() const { return m_hidden_deque.size(); }
+
+ inline custom_const_iterator_type custom_begin() const { return m_hidden_deque.begin(); }
+ inline custom_const_iterator_type custom_end() const { return m_hidden_deque.end(); }
+ inline custom_iterator_type custom_begin() { return m_hidden_deque.begin(); }
+ inline custom_iterator_type custom_end() { return m_hidden_deque.end(); }
+
+ inline void custom_clear() { m_hidden_deque.clear(); }
+ inline void custom_push_back(Item const& p) { m_hidden_deque.push_back(p); }
+ inline void custom_resize(std::size_t new_size) { m_hidden_deque.resize(new_size); }
+};
+
+
+// 1. Adapt to Boost.Geometry (for e.g. inner rings)
+namespace boost { namespace geometry
+{
+
+namespace traits
+{
+ template <typename Item>
+ struct clear<all_custom_container<Item> >
+ {
+ static inline void apply(all_custom_container<Item>& container)
+ {
+ container.custom_clear();
+ }
+ };
+
+ template <typename Item>
+ struct push_back<all_custom_container<Item> >
+ {
+ static inline void apply(all_custom_container<Item>& container, Item const& item)
+ {
+ container.custom_push_back(item);
+ }
+ };
+
+ template <typename Item>
+ struct resize<all_custom_container<Item> >
+ {
+ static inline void apply(all_custom_container<Item>& container, std::size_t new_size)
+ {
+ container.custom_resize(new_size);
+ }
+ };
+
+} // namespace traits
+
+}} // namespace boost::geometry
+
+
+// 2a. Adapt to Boost.Range, meta-functions
+namespace boost
+{
+ template<typename Item>
+ struct range_mutable_iterator<all_custom_container<Item> >
+ {
+ typedef typename all_custom_container<Item>::custom_iterator_type type;
+ };
+
+ template<typename Item>
+ struct range_const_iterator<all_custom_container<Item> >
+ {
+ typedef typename all_custom_container<Item>::custom_const_iterator_type type;
+ };
+
+} // namespace boost
+
+
+// 2b. Adapt to Boost.Range, part 2, ADP
+
+template<typename Item>
+inline typename all_custom_container<Item>::custom_iterator_type
+ range_begin(all_custom_container<Item>& container)
+{
+ return container.custom_begin();
+}
+
+template<typename Item>
+inline typename all_custom_container<Item>::custom_const_iterator_type
+ range_begin(all_custom_container<Item> const& container)
+{
+ return container.custom_begin();
+}
+
+template<typename Item>
+inline typename all_custom_container<Item>::custom_iterator_type
+ range_end(all_custom_container<Item>& container)
+{
+ return container.custom_end();
+}
+
+template<typename Item>
+inline typename all_custom_container<Item>::custom_const_iterator_type
+ range_end(all_custom_container<Item> const& container)
+{
+ return container.custom_end();
+}
+
+// (Optional)
+template<typename Item>
+inline std::size_t range_calculate_size(all_custom_container<Item> const& container)
+{
+ return container.custom_size();
+}
+
+
+
+
+#endif // GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_CONTAINER_HPP
diff --git a/libs/geometry/test/test_geometries/all_custom_linestring.hpp b/libs/geometry/test/test_geometries/all_custom_linestring.hpp
new file mode 100644
index 000000000..01b5ae4b0
--- /dev/null
+++ b/libs/geometry/test/test_geometries/all_custom_linestring.hpp
@@ -0,0 +1,137 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// 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)
+
+#ifndef GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_LINESTRING_HPP
+#define GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_LINESTRING_HPP
+
+#include <cstddef>
+
+#include <boost/range.hpp>
+
+
+#include <boost/geometry/core/mutable_range.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <test_geometries/all_custom_container.hpp>
+
+
+template <typename P>
+class all_custom_linestring : public all_custom_container<P>
+{};
+
+
+// 1. Adapt to Boost.Geometry
+namespace boost { namespace geometry
+{
+
+namespace traits
+{
+ template <typename Point>
+ struct tag<all_custom_linestring<Point> >
+ {
+ typedef linestring_tag type;
+ };
+
+
+ // Implement traits for the mutable als
+ // These are all optional traits (normally / default they are implemented
+ // conforming std:: functionality)
+
+ template <typename Point>
+ struct clear<all_custom_linestring<Point> >
+ {
+ static inline void apply(all_custom_linestring<Point>& als)
+ {
+ als.custom_clear();
+ }
+ };
+
+ template <typename Point>
+ struct push_back<all_custom_linestring<Point> >
+ {
+ static inline void apply(all_custom_linestring<Point>& als, Point const& point)
+ {
+ als.custom_push_back(point);
+ }
+ };
+
+ template <typename Point>
+ struct resize<all_custom_linestring<Point> >
+ {
+ static inline void apply(all_custom_linestring<Point>& als, std::size_t new_size)
+ {
+ als.custom_resize(new_size);
+ }
+ };
+
+} // namespace traits
+
+}} // namespace boost::geometry
+
+
+// 2a. Adapt to Boost.Range, meta-functions
+namespace boost
+{
+ template<typename Point>
+ struct range_mutable_iterator<all_custom_linestring<Point> >
+ {
+ typedef typename all_custom_linestring<Point>::custom_iterator_type type;
+ };
+
+ template<typename Point>
+ struct range_const_iterator<all_custom_linestring<Point> >
+ {
+ typedef typename all_custom_linestring<Point>::custom_const_iterator_type type;
+ };
+
+} // namespace boost
+
+
+// 2b. Adapt to Boost.Range, part 2, ADP
+
+template<typename Point>
+inline typename all_custom_linestring<Point>::custom_iterator_type
+ range_begin(all_custom_linestring<Point>& als)
+{
+ return als.custom_begin();
+}
+
+template<typename Point>
+inline typename all_custom_linestring<Point>::custom_const_iterator_type
+ range_begin(all_custom_linestring<Point> const& als)
+{
+ return als.custom_begin();
+}
+
+template<typename Point>
+inline typename all_custom_linestring<Point>::custom_iterator_type
+ range_end(all_custom_linestring<Point>& als)
+{
+ return als.custom_end();
+}
+
+template<typename Point>
+inline typename all_custom_linestring<Point>::custom_const_iterator_type
+ range_end(all_custom_linestring<Point> const& als)
+{
+ return als.custom_end();
+}
+
+// (Optional)
+template<typename Point>
+inline std::size_t range_calculate_size(all_custom_linestring<Point> const& als)
+{
+ return als.custom_size();
+}
+
+
+// 3. There used to be a std::back_insert adaption but that is now done using push_back
+
+
+#endif // GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_LINESTRING_HPP
diff --git a/libs/geometry/test/test_geometries/all_custom_polygon.hpp b/libs/geometry/test/test_geometries/all_custom_polygon.hpp
new file mode 100644
index 000000000..62da9ecf8
--- /dev/null
+++ b/libs/geometry/test/test_geometries/all_custom_polygon.hpp
@@ -0,0 +1,130 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#ifndef GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_POLYGON_HPP
+#define GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_POLYGON_HPP
+
+#include <cstddef>
+
+#include <boost/range.hpp>
+
+
+#include <boost/geometry/core/mutable_range.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <test_geometries/all_custom_container.hpp>
+#include <test_geometries/all_custom_ring.hpp>
+
+
+template <typename P>
+class all_custom_polygon
+{
+public :
+ typedef all_custom_ring<P> custom_ring_type;
+ typedef all_custom_container<custom_ring_type> custom_int_type;
+
+ custom_ring_type& custom_ext() { return m_ext; }
+ custom_int_type& custom_int() { return m_int; }
+
+ custom_ring_type const& custom_ext() const { return m_ext; }
+ custom_int_type const& custom_int() const { return m_int; }
+
+private :
+ custom_ring_type m_ext;
+ custom_int_type m_int;
+};
+
+
+
+namespace boost { namespace geometry
+{
+
+namespace traits
+{
+
+
+
+template <typename Point>
+struct tag<all_custom_polygon<Point> >
+{
+ typedef polygon_tag type;
+};
+
+template <typename Point>
+struct ring_const_type<all_custom_polygon<Point> >
+{
+ typedef typename all_custom_polygon<Point>::custom_ring_type const& type;
+};
+
+template <typename Point>
+struct ring_mutable_type<all_custom_polygon<Point> >
+{
+ typedef typename all_custom_polygon<Point>::custom_ring_type& type;
+};
+
+
+template <typename Point>
+struct interior_const_type<all_custom_polygon<Point> >
+{
+ typedef typename all_custom_polygon<Point>::custom_int_type const& type;
+};
+
+template <typename Point>
+struct interior_mutable_type<all_custom_polygon<Point> >
+{
+ typedef typename all_custom_polygon<Point>::custom_int_type& type;
+};
+
+
+
+template <typename Point>
+struct exterior_ring<all_custom_polygon<Point> >
+{
+ typedef all_custom_polygon<Point> polygon_type;
+ typedef typename polygon_type::custom_ring_type ring_type;
+
+ static inline ring_type& get(polygon_type& p)
+ {
+ return p.custom_ext();
+ }
+
+ static inline ring_type const& get(polygon_type const& p)
+ {
+ return p.custom_ext();
+ }
+};
+
+template <typename Point>
+struct interior_rings<all_custom_polygon<Point> >
+{
+ typedef all_custom_polygon<Point> polygon_type;
+ typedef typename polygon_type::custom_int_type int_type;
+
+ static inline int_type& get(polygon_type& p)
+ {
+ return p.custom_int();
+ }
+
+ static inline int_type const& get(polygon_type const& p)
+ {
+ return p.custom_int();
+ }
+};
+
+
+} // namespace traits
+
+}} // namespace boost::geometry
+
+
+
+
+
+#endif // GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_POLYGON_HPP
diff --git a/libs/geometry/test/test_geometries/all_custom_ring.hpp b/libs/geometry/test/test_geometries/all_custom_ring.hpp
new file mode 100644
index 000000000..c7c2b78df
--- /dev/null
+++ b/libs/geometry/test/test_geometries/all_custom_ring.hpp
@@ -0,0 +1,142 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#ifndef GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_RING_HPP
+#define GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_RING_HPP
+
+#include <cstddef>
+
+#include <boost/range.hpp>
+
+
+#include <boost/geometry/core/mutable_range.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+#include <test_geometries/all_custom_container.hpp>
+
+
+template <typename P>
+class all_custom_ring : public all_custom_container<P>
+{};
+
+
+// Note that the things below are nearly all identical to implementation
+// in *linestring, but it seems not possible to re-use this (without macro's)
+// (the only thing DIFFERENT is the tag)
+
+
+// 1. Adapt to Boost.Geometry
+namespace boost { namespace geometry
+{
+
+namespace traits
+{
+ template <typename Point>
+ struct tag<all_custom_ring<Point> >
+ {
+ typedef ring_tag type;
+ };
+
+
+ // Implement traits for mutable actions
+ // These are all optional traits (normally / default they are implemented
+ // conforming std:: functionality)
+
+ template <typename Point>
+ struct clear<all_custom_ring<Point> >
+ {
+ static inline void apply(all_custom_ring<Point>& acr)
+ {
+ acr.custom_clear();
+ }
+ };
+
+ template <typename Point>
+ struct push_back<all_custom_ring<Point> >
+ {
+ static inline void apply(all_custom_ring<Point>& acr, Point const& point)
+ {
+ acr.custom_push_back(point);
+ }
+ };
+
+ template <typename Point>
+ struct resize<all_custom_ring<Point> >
+ {
+ static inline void apply(all_custom_ring<Point>& acr, std::size_t new_size)
+ {
+ acr.custom_resize(new_size);
+ }
+ };
+
+} // namespace traits
+
+}} // namespace boost::geometry
+
+
+// 2a. Adapt to Boost.Range, meta-functions
+namespace boost
+{
+ template<typename Point>
+ struct range_mutable_iterator<all_custom_ring<Point> >
+ {
+ typedef typename all_custom_ring<Point>::custom_iterator_type type;
+ };
+
+ template<typename Point>
+ struct range_const_iterator<all_custom_ring<Point> >
+ {
+ typedef typename all_custom_ring<Point>::custom_const_iterator_type type;
+ };
+
+} // namespace boost
+
+
+// 2b. Adapt to Boost.Range, part 2, ADP
+
+template<typename Point>
+inline typename all_custom_ring<Point>::custom_iterator_type
+ range_begin(all_custom_ring<Point>& acr)
+{
+ return acr.custom_begin();
+}
+
+template<typename Point>
+inline typename all_custom_ring<Point>::custom_const_iterator_type
+ range_begin(all_custom_ring<Point> const& acr)
+{
+ return acr.custom_begin();
+}
+
+template<typename Point>
+inline typename all_custom_ring<Point>::custom_iterator_type
+ range_end(all_custom_ring<Point>& acr)
+{
+ return acr.custom_end();
+}
+
+template<typename Point>
+inline typename all_custom_ring<Point>::custom_const_iterator_type
+ range_end(all_custom_ring<Point> const& acr)
+{
+ return acr.custom_end();
+}
+
+// (Optional)
+template<typename Point>
+inline std::size_t range_calculate_size(all_custom_ring<Point> const& acr)
+{
+ return acr.custom_size();
+}
+
+
+
+
+#endif // GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_RING_HPP
diff --git a/libs/geometry/test/test_geometries/custom_segment.hpp b/libs/geometry/test/test_geometries/custom_segment.hpp
new file mode 100644
index 000000000..740377742
--- /dev/null
+++ b/libs/geometry/test/test_geometries/custom_segment.hpp
@@ -0,0 +1,58 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#ifndef GEOMETRY_TEST_TEST_GEOMETRIES_CUSTOM_SEGMENT_HPP
+#define GEOMETRY_TEST_TEST_GEOMETRIES_CUSTOM_SEGMENT_HPP
+
+
+#include <boost/geometry/geometries/register/point.hpp>
+#include <boost/geometry/geometries/register/segment.hpp>
+
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+
+namespace test
+{
+
+struct custom_point_for_segment
+{
+ double x, y;
+};
+
+
+struct custom_segment
+{
+ custom_point_for_segment one, two;
+};
+
+template <typename P>
+struct custom_segment_of
+{
+ P p1, p2;
+};
+
+struct custom_segment_4
+{
+ double a, b, c, d;
+};
+
+
+} // namespace test
+
+
+BOOST_GEOMETRY_REGISTER_POINT_2D(test::custom_point_for_segment, double, cs::cartesian, x, y)
+
+BOOST_GEOMETRY_REGISTER_SEGMENT(test::custom_segment, test::custom_point_for_segment, one, two)
+BOOST_GEOMETRY_REGISTER_SEGMENT_TEMPLATIZED(test::custom_segment_of, p1, p2)
+BOOST_GEOMETRY_REGISTER_SEGMENT_2D_4VALUES(test::custom_segment_4, test::custom_point_for_segment, a, b, c, d)
+
+
+#endif // GEOMETRY_TEST_TEST_GEOMETRIES_CUSTOM_SEGMENT_HPP
diff --git a/libs/geometry/test/test_geometries/wrapped_boost_array.hpp b/libs/geometry/test/test_geometries/wrapped_boost_array.hpp
new file mode 100644
index 000000000..961e593a4
--- /dev/null
+++ b/libs/geometry/test/test_geometries/wrapped_boost_array.hpp
@@ -0,0 +1,151 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#ifndef GEOMETRY_TEST_TEST_GEOMETRIES_WRAPPED_BOOST_ARRAY_HPP
+#define GEOMETRY_TEST_TEST_GEOMETRIES_WRAPPED_BOOST_ARRAY_HPP
+
+#include <cstddef>
+
+#include <boost/array.hpp>
+#include <boost/range.hpp>
+
+#include <boost/geometry/core/mutable_range.hpp>
+#include <boost/geometry/core/tag.hpp>
+#include <boost/geometry/core/tags.hpp>
+
+
+namespace test
+{
+
+template <typename Point, std::size_t Count>
+struct wrapped_boost_array
+{
+ inline wrapped_boost_array() : size(0) {}
+
+ boost::array<Point, Count> array;
+ int size;
+};
+
+
+} // namespace test
+
+
+// 1a: adapt to Boost.Range
+namespace boost
+{
+ using namespace test;
+
+ template <typename Point, std::size_t Count>
+ struct range_mutable_iterator<wrapped_boost_array<Point, Count> >
+ : public range_mutable_iterator<boost::array<Point, Count> >
+ {};
+
+ template <typename Point, std::size_t Count>
+ struct range_const_iterator<wrapped_boost_array<Point, Count> >
+ : public range_const_iterator<boost::array<Point, Count> >
+ {};
+
+
+} // namespace 'boost'
+
+
+// 1b) adapt to Boost.Range with ADP
+namespace test
+{
+ template <typename Point, std::size_t Count>
+ inline typename boost::range_iterator
+ <
+ wrapped_boost_array<Point, Count>
+ >::type range_begin(wrapped_boost_array<Point, Count>& ar)
+ {
+ return ar.array.begin();
+ }
+
+ template <typename Point, std::size_t Count>
+ inline typename boost::range_iterator
+ <
+ wrapped_boost_array<Point, Count> const
+ >::type range_begin(wrapped_boost_array<Point, Count> const& ar)
+ {
+ return ar.array.begin();
+ }
+
+ template <typename Point, std::size_t Count>
+ inline typename boost::range_iterator
+ <
+ wrapped_boost_array<Point, Count>
+ >::type range_end(wrapped_boost_array<Point, Count>& ar)
+ {
+ typename boost::range_iterator
+ <
+ wrapped_boost_array<Point, Count>
+ >::type it = ar.array.begin();
+ return it + ar.size;
+ }
+
+ template <typename Point, std::size_t Count>
+ inline typename boost::range_iterator
+ <
+ wrapped_boost_array<Point, Count> const
+ >::type range_end(wrapped_boost_array<Point, Count> const& ar)
+ {
+ typename boost::range_iterator
+ <
+ wrapped_boost_array<Point, Count> const
+ >::type it = ar.array.begin();
+ return it + ar.size;
+ }
+
+}
+
+
+// 2: adapt to Boost.Geometry
+namespace boost { namespace geometry { namespace traits
+{
+
+ template <typename Point, std::size_t Count>
+ struct tag< wrapped_boost_array<Point, Count> >
+ {
+ typedef linestring_tag type;
+ };
+
+ template <typename Point, std::size_t Count>
+ struct clear< wrapped_boost_array<Point, Count> >
+ {
+ static inline void apply(wrapped_boost_array<Point, Count>& ar)
+ {
+ ar.size = 0;
+ }
+ };
+
+ template <typename Point, std::size_t Count>
+ struct push_back< wrapped_boost_array<Point, Count> >
+ {
+ static inline void apply(wrapped_boost_array<Point, Count>& ar, Point const& point)
+ {
+ // BOOST_ASSERT((ar.size < Count));
+ ar.array[ar.size++] = point;
+ }
+ };
+
+ template <typename Point, std::size_t Count>
+ struct resize< wrapped_boost_array<Point, Count> >
+ {
+ static inline void apply(wrapped_boost_array<Point, Count>& ar, std::size_t new_size)
+ {
+ BOOST_ASSERT(new_size < Count);
+ ar.size = new_size;
+ }
+ };
+
+}}} // namespace bg::traits
+
+
+#endif // GEOMETRY_TEST_TEST_GEOMETRIES_WRAPPED_BOOST_ARRAY_HPP
diff --git a/libs/geometry/test/ttmath.vsprops b/libs/geometry/test/ttmath.vsprops
new file mode 100644
index 000000000..e01e29698
--- /dev/null
+++ b/libs/geometry/test/ttmath.vsprops
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="ttmath"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(TTMATH_ROOT)&quot;;&quot;../$(TTMATH_ROOT)&quot;;&quot;../../$(TTMATH_ROOT)&quot;"
+ />
+ <UserMacro
+ Name="TTMATH_ROOT"
+ Value="..\..\..\boost\geometry\extensions\contrib\ttmath"
+ />
+</VisualStudioPropertySheet>
diff --git a/libs/geometry/test/util/Jamfile.v2 b/libs/geometry/test/util/Jamfile.v2
new file mode 100644
index 000000000..bf706df73
--- /dev/null
+++ b/libs/geometry/test/util/Jamfile.v2
@@ -0,0 +1,18 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-util
+ :
+ [ run calculation_type.cpp ]
+ [ run for_each_coordinate.cpp ]
+ [ run rational.cpp ]
+ [ run select_most_precise.cpp ]
+ [ run write_dsv.cpp ]
+ ;
diff --git a/libs/geometry/test/util/as_range.cpp b/libs/geometry/test/util/as_range.cpp
new file mode 100644
index 000000000..f8696eeca
--- /dev/null
+++ b/libs/geometry/test/util/as_range.cpp
@@ -0,0 +1,79 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/views/detail/range_type.hpp>
+#include <boost/geometry/util/as_range.hpp>
+
+#include <boost/geometry/core/cs.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+template <int D, typename Range>
+double sum(Range const& range)
+{
+ double s = 0.0;
+ for (typename boost::range_const_iterator<Range>::type it = boost::begin(range);
+ it != boost::end(range); ++it)
+ {
+ s += bg::get<D>(*it);
+ }
+ return s;
+}
+
+template <typename G>
+void test_geometry(std::string const& wkt, double expected_x, double expected_y)
+{
+ G geometry;
+
+ // Declare a range-type, compatible with boost::range,
+ // such that range_iterator etc could be called
+ typedef typename bg::detail::range_type<G>::type range_type;
+
+ bg::read_wkt(wkt, geometry);
+
+ double s = sum<0>(bg::as_range<range_type>(geometry));
+ BOOST_CHECK_CLOSE(s, expected_x, 0.001);
+
+ s = sum<1>(bg::as_range<range_type>(geometry));
+ BOOST_CHECK_CLOSE(s, expected_y, 0.001);
+}
+
+
+template <typename P>
+void test_all()
+{
+ // As-range utility should consider a geometry as a range, so
+ // linestring stays linestring
+ test_geometry<bg::model::linestring<P> >("LINESTRING(1 2,3 4)", 4, 6);
+
+ // polygon will only be outer-ring
+ test_geometry<bg::model::polygon<P> >("POLYGON((1 2,3 4))", 4, 6);
+ test_geometry<bg::model::polygon<P> >("POLYGON((1 2,3 4),(5 6,7 8,9 10))", 4, 6);
+
+ // the utility is useful for:
+ // - convex hull (holes do not count)
+ // - envelope (idem)
+}
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::point<double, 2, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/util/as_range.vcproj b/libs/geometry/test/util/as_range.vcproj
new file mode 100644
index 000000000..cc96fd53b
--- /dev/null
+++ b/libs/geometry/test/util/as_range.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="as_range"
+ ProjectGUID="{A36D8426-67EB-405C-B6E8-3FBB3374A59B}"
+ RootNamespace="as_range"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\as_range"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\as_range"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\as_range.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/util/calculation_type.cpp b/libs/geometry/test/util/calculation_type.cpp
new file mode 100644
index 000000000..34523e8af
--- /dev/null
+++ b/libs/geometry/test/util/calculation_type.cpp
@@ -0,0 +1,206 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2012 Mateusz Loskot, London, UK.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/util/calculation_type.hpp>
+
+template <typename G1, typename G2>
+inline std::string helper()
+{
+ std::string result;
+ result += typeid(typename bg::coordinate_type<G1>::type).name();
+ result += "/";
+ result += typeid(typename bg::coordinate_type<G2>::type).name();
+ return result;
+}
+
+template <typename G1, typename G2, typename G3>
+inline std::string helper3()
+{
+ std::string result;
+ result += typeid(typename bg::coordinate_type<G1>::type).name();
+ result += "/";
+ result += typeid(typename bg::coordinate_type<G2>::type).name();
+ result += "/";
+ result += typeid(typename bg::coordinate_type<G3>::type).name();
+ return result;
+}
+
+template
+<
+ typename G1,
+ typename G2,
+ typename DefaultFP,
+ typename DefaultInt,
+ typename ExpectedType
+>
+void test()
+{
+ typedef typename bg::util::calculation_type::geometric::binary
+ <
+ G1,
+ G2,
+ void,
+ DefaultFP,
+ DefaultInt
+ >::type type;
+
+ std::string const caption = helper<G1, G2>();
+
+ BOOST_CHECK_MESSAGE((boost::is_same<type, ExpectedType>::type::value),
+ "Failure, types do not agree;"
+ << " input: " << caption
+ << " defaults: " << typeid(DefaultFP).name()
+ << "/" << typeid(DefaultInt).name()
+ << " expected: " << typeid(ExpectedType).name()
+ << " detected: " << typeid(type).name()
+ );
+}
+
+template
+<
+ typename G1,
+ typename G2,
+ typename CalculationType,
+ typename ExpectedType
+>
+void test_with_calculation_type()
+{
+ typedef typename bg::util::calculation_type::geometric::binary
+ <
+ G1,
+ G2,
+ CalculationType,
+ double,
+ int
+ >::type type;
+
+ std::string const caption = helper<G1, G2>();
+
+ BOOST_CHECK_MESSAGE((boost::is_same<type, ExpectedType>::type::value),
+ "Failure, types do not agree;"
+ << " input: " << caption
+ << " calculation type: " << typeid(CalculationType).name()
+ << " expected: " << typeid(ExpectedType).name()
+ << " detected: " << typeid(type).name()
+ );
+}
+
+template
+<
+ typename Geometry,
+ typename DefaultFP,
+ typename DefaultInt,
+ typename ExpectedType
+>
+void test_unary()
+{
+ typedef typename bg::util::calculation_type::geometric::unary
+ <
+ Geometry,
+ void,
+ DefaultFP,
+ DefaultInt
+ >::type type;
+
+ BOOST_CHECK_MESSAGE((boost::is_same<type, ExpectedType>::type::value),
+ "Failure, types do not agree;"
+ << " input: " << typeid(typename bg::coordinate_type<Geometry>::type).name()
+ << " defaults: " << typeid(DefaultFP).name()
+ << "/" << typeid(DefaultInt).name()
+ << " expected: " << typeid(ExpectedType).name()
+ << " detected: " << typeid(type).name()
+ );
+}
+
+
+template
+<
+ typename G1,
+ typename G2,
+ typename G3,
+ typename DefaultFP,
+ typename DefaultInt,
+ typename ExpectedType
+>
+void test_ternary()
+{
+ typedef typename bg::util::calculation_type::geometric::ternary
+ <
+ G1,
+ G2,
+ G3,
+ void,
+ DefaultFP,
+ DefaultInt
+ >::type type;
+
+ std::string const caption = helper3<G1, G2, G3>();
+
+ BOOST_CHECK_MESSAGE((boost::is_same<type, ExpectedType>::type::value),
+ "Failure, types do not agree;"
+ << " input: " << caption
+ << " defaults: " << typeid(DefaultFP).name()
+ << "/" << typeid(DefaultInt).name()
+ << " expected: " << typeid(ExpectedType).name()
+ << " detected: " << typeid(type).name()
+ );
+}
+
+
+struct user_defined {};
+
+int test_main(int, char* [])
+{
+ using namespace boost::geometry;
+ typedef model::point<double, 2, cs::cartesian> d;
+ typedef model::point<float, 2, cs::cartesian> f;
+ typedef model::point<int, 2, cs::cartesian> i;
+ typedef model::point<char, 2, cs::cartesian> c;
+ typedef model::point<short int, 2, cs::cartesian> s;
+ typedef model::point<boost::long_long_type, 2, cs::cartesian> ll;
+ typedef model::point<user_defined, 2, cs::cartesian> u;
+
+ // Calculation type "void" so
+ test<f, f, double, int, double>();
+ test<d, d, double, int, double>();
+ test<f, d, double, int, double>();
+
+ // FP/int mixed
+ test<i, f, double, int, double>();
+
+ // integers
+ test<i, i, double, int, int>();
+ test<c, i, double, int, int>();
+ test<c, c, double, char, char>();
+ test<c, c, double, int, int>();
+ test<i, i, double, boost::long_long_type, boost::long_long_type>();
+
+ // Even if we specify "int" as default-calculation-type, it should never go downwards.
+ // So it will select "long long"
+ test<ll, ll, double, int, boost::long_long_type>();
+
+ // user defined
+ test<u, i, double, char, user_defined>();
+ test<u, d, double, double, user_defined>();
+
+ test_with_calculation_type<i, i, double, double>();
+ test_with_calculation_type<u, u, double, double>();
+
+ test_unary<i, double, int, int>();
+ test_unary<u, double, double, user_defined>();
+ test_ternary<u, u, u, double, double, user_defined>();
+
+ return 0;
+}
diff --git a/libs/geometry/test/util/calculation_type.vcproj b/libs/geometry/test/util/calculation_type.vcproj
new file mode 100644
index 000000000..9c2920035
--- /dev/null
+++ b/libs/geometry/test/util/calculation_type.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="calculation_type"
+ ProjectGUID="{CF8FE803-A26B-4553-B605-9C28225B5595}"
+ RootNamespace="calculation_type"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\calculation_type"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\calculation_type"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\calculation_type.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/util/for_each_coordinate.cpp b/libs/geometry/test/util/for_each_coordinate.cpp
new file mode 100644
index 000000000..140d6f6cb
--- /dev/null
+++ b/libs/geometry/test/util/for_each_coordinate.cpp
@@ -0,0 +1,84 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <sstream>
+
+#include <geometry_test_common.hpp>
+
+
+#include <boost/geometry/util/for_each_coordinate.hpp>
+
+#include <boost/geometry/algorithms/assign.hpp>
+
+
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/adapted/c_array.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+#include <test_common/test_point.hpp>
+
+BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian)
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
+
+
+struct test_operation
+{
+ template <typename P, int I>
+ static void apply(P& p)
+ {
+ bg::set<I>(p, bg::get<I>(p) * 10);
+ }
+};
+
+struct get_operation
+{
+ std::string s;
+
+ template <typename P, int I>
+ inline void apply(P const& p)
+ {
+ std::ostringstream out;
+ out << bg::get<I>(p);
+ s += out.str();
+ }
+};
+
+
+template <typename P>
+void test_all()
+{
+ P p;
+ bg::assign_values(p, 1, 2, 3);
+ bg::for_each_coordinate(p, test_operation());
+ BOOST_CHECK(bg::get<0>(p) == 10);
+ BOOST_CHECK(bg::get<1>(p) == 20);
+ BOOST_CHECK(bg::get<2>(p) == 30);
+
+ P const& cp = p;
+ get_operation op;
+ op = bg::for_each_coordinate(cp, op);
+ BOOST_CHECK(op.s == std::string("102030"));
+}
+
+int test_main(int, char* [])
+{
+ test_all<int[3]>();
+ test_all<float[3]>();
+ test_all<double[3]>();
+ test_all<test::test_point>();
+ test_all<bg::model::point<int, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<float, 3, bg::cs::cartesian> >();
+ test_all<bg::model::point<double, 3, bg::cs::cartesian> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/util/for_each_coordinate.vcproj b/libs/geometry/test/util/for_each_coordinate.vcproj
new file mode 100644
index 000000000..5afce6532
--- /dev/null
+++ b/libs/geometry/test/util/for_each_coordinate.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="for_each_coordinate"
+ ProjectGUID="{900CD32E-1B78-40E3-887F-9BCCC0A1041E}"
+ RootNamespace="for_each_coordinate"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\for_each_coordinate"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\for_each_coordinate"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\for_each_coordinate.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/util/rational.cpp b/libs/geometry/test/util/rational.cpp
new file mode 100644
index 000000000..595d391e2
--- /dev/null
+++ b/libs/geometry/test/util/rational.cpp
@@ -0,0 +1,61 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/util/rational.hpp>
+
+void test_coordinate_cast(std::string const& s, int expected_nom, int expected_denom)
+{
+ boost::rational<int> a = bg::detail::coordinate_cast<boost::rational<int> >::apply(s);
+ BOOST_CHECK_EQUAL(a.numerator(), expected_nom);
+ BOOST_CHECK_EQUAL(a.denominator(), expected_denom);
+}
+
+
+void test_wkt(std::string const& wkt, std::string const expected_wkt)
+{
+ bg::model::point<boost::rational<int>, 2, bg::cs::cartesian> p;
+ bg::read_wkt(wkt, p);
+ std::ostringstream out;
+ out << bg::wkt(p);
+
+ BOOST_CHECK_EQUAL(out.str(), expected_wkt);
+}
+
+int test_main(int, char* [])
+{
+ test_coordinate_cast("0", 0, 1);
+ test_coordinate_cast("1", 1, 1);
+ test_coordinate_cast("-1", -1, 1);
+ test_coordinate_cast("-0.5", -1, 2);
+ test_coordinate_cast("-1.5", -3, 2);
+ test_coordinate_cast("0.5", 1, 2);
+ test_coordinate_cast("1.5", 3, 2);
+ test_coordinate_cast("2.12345", 42469, 20000);
+ test_coordinate_cast("1.", 1, 1);
+
+ test_coordinate_cast("3/2", 3, 2);
+ test_coordinate_cast("-3/2", -3, 2);
+
+ test_wkt("POINT(1.5 2.75)", "POINT(3/2 11/4)");
+ test_wkt("POINT(3/2 11/4)", "POINT(3/2 11/4)");
+ test_wkt("POINT(-1.5 2.75)", "POINT(-3/2 11/4)");
+ test_wkt("POINT(-3/2 11/4)", "POINT(-3/2 11/4)");
+
+ return 0;
+}
diff --git a/libs/geometry/test/util/rational.vcproj b/libs/geometry/test/util/rational.vcproj
new file mode 100644
index 000000000..28ad0a237
--- /dev/null
+++ b/libs/geometry/test/util/rational.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="rational"
+ ProjectGUID="{6ABF6324-C1DC-4687-9895-B4CE2B27446F}"
+ RootNamespace="rational"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\rational"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\rational"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\rational.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/util/select_most_precise.cpp b/libs/geometry/test/util/select_most_precise.cpp
new file mode 100644
index 000000000..11b066fa3
--- /dev/null
+++ b/libs/geometry/test/util/select_most_precise.cpp
@@ -0,0 +1,69 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/util/select_most_precise.hpp>
+
+
+struct user_defined {};
+
+template <typename T1, typename T2, typename ExpectedType>
+void test()
+{
+ typedef typename bg::select_most_precise<T1, T2>::type type;
+
+ BOOST_CHECK((boost::is_same<type, ExpectedType>::type::value));
+}
+
+int test_main(int, char* [])
+{
+ // fp only
+ test<float, float, float>();
+ test<float, double, double>();
+ test<double, float, double>();
+ test<double, double, double>();
+
+ // integer only
+ test<int, int, int>();
+ test<int, short int, int>();
+ test<short int, int, int>();
+ test<short int, short int, short int>();
+
+ // int/fp
+ test<double, int, double>();
+ test<int, double, double>();
+ test<long double, long double, long double>();
+ test<float, int, float>();
+ test<int, float, float>();
+
+#ifndef _MSC_VER
+ // This cannot be done for MSVC because double/long double is the same
+ test<double, long double, long double>();
+ test<long double, double, long double>();
+#endif
+
+ // with any other non-integer/float class
+ test<int, user_defined, user_defined>();
+ test<user_defined, int, user_defined>();
+ test<long double, user_defined, user_defined>();
+ test<user_defined, long double, user_defined>();
+ test<user_defined, user_defined, user_defined>();
+
+ // should not compile
+ //test<void, void, void>();
+
+ return 0;
+}
diff --git a/libs/geometry/test/util/select_most_precise.vcproj b/libs/geometry/test/util/select_most_precise.vcproj
new file mode 100644
index 000000000..ebe824503
--- /dev/null
+++ b/libs/geometry/test/util/select_most_precise.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="select_most_precise"
+ ProjectGUID="{D0982142-D3B1-4084-B724-83FB7E49EB98}"
+ RootNamespace="select_most_precise"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\select_most_precise"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\select_most_precise"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\select_most_precise.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/util/util_tests.sln b/libs/geometry/test/util/util_tests.sln
new file mode 100644
index 000000000..1e140df83
--- /dev/null
+++ b/libs/geometry/test/util/util_tests.sln
@@ -0,0 +1,49 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "for_each_coordinate", "for_each_coordinate.vcproj", "{900CD32E-1B78-40E3-887F-9BCCC0A1041E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "select_most_precise", "select_most_precise.vcproj", "{D0982142-D3B1-4084-B724-83FB7E49EB98}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "write_dsv", "write_dsv.vcproj", "{FC796B9D-2FC4-46C1-B733-9C2C5BB48094}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "as_range", "as_range.vcproj", "{A36D8426-67EB-405C-B6E8-3FBB3374A59B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rational", "rational.vcproj", "{6ABF6324-C1DC-4687-9895-B4CE2B27446F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calculation_type", "calculation_type.vcproj", "{CF8FE803-A26B-4553-B605-9C28225B5595}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {900CD32E-1B78-40E3-887F-9BCCC0A1041E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {900CD32E-1B78-40E3-887F-9BCCC0A1041E}.Debug|Win32.Build.0 = Debug|Win32
+ {900CD32E-1B78-40E3-887F-9BCCC0A1041E}.Release|Win32.ActiveCfg = Release|Win32
+ {900CD32E-1B78-40E3-887F-9BCCC0A1041E}.Release|Win32.Build.0 = Release|Win32
+ {D0982142-D3B1-4084-B724-83FB7E49EB98}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D0982142-D3B1-4084-B724-83FB7E49EB98}.Debug|Win32.Build.0 = Debug|Win32
+ {D0982142-D3B1-4084-B724-83FB7E49EB98}.Release|Win32.ActiveCfg = Release|Win32
+ {D0982142-D3B1-4084-B724-83FB7E49EB98}.Release|Win32.Build.0 = Release|Win32
+ {FC796B9D-2FC4-46C1-B733-9C2C5BB48094}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FC796B9D-2FC4-46C1-B733-9C2C5BB48094}.Debug|Win32.Build.0 = Debug|Win32
+ {FC796B9D-2FC4-46C1-B733-9C2C5BB48094}.Release|Win32.ActiveCfg = Release|Win32
+ {FC796B9D-2FC4-46C1-B733-9C2C5BB48094}.Release|Win32.Build.0 = Release|Win32
+ {A36D8426-67EB-405C-B6E8-3FBB3374A59B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A36D8426-67EB-405C-B6E8-3FBB3374A59B}.Debug|Win32.Build.0 = Debug|Win32
+ {A36D8426-67EB-405C-B6E8-3FBB3374A59B}.Release|Win32.ActiveCfg = Release|Win32
+ {A36D8426-67EB-405C-B6E8-3FBB3374A59B}.Release|Win32.Build.0 = Release|Win32
+ {6ABF6324-C1DC-4687-9895-B4CE2B27446F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6ABF6324-C1DC-4687-9895-B4CE2B27446F}.Debug|Win32.Build.0 = Debug|Win32
+ {6ABF6324-C1DC-4687-9895-B4CE2B27446F}.Release|Win32.ActiveCfg = Release|Win32
+ {6ABF6324-C1DC-4687-9895-B4CE2B27446F}.Release|Win32.Build.0 = Release|Win32
+ {CF8FE803-A26B-4553-B605-9C28225B5595}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CF8FE803-A26B-4553-B605-9C28225B5595}.Debug|Win32.Build.0 = Debug|Win32
+ {CF8FE803-A26B-4553-B605-9C28225B5595}.Release|Win32.ActiveCfg = Release|Win32
+ {CF8FE803-A26B-4553-B605-9C28225B5595}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/geometry/test/util/write_dsv.cpp b/libs/geometry/test/util/write_dsv.cpp
new file mode 100644
index 000000000..ebb70636a
--- /dev/null
+++ b/libs/geometry/test/util/write_dsv.cpp
@@ -0,0 +1,73 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <sstream>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/io/dsv/write.hpp>
+
+
+#include <boost/geometry/geometries/geometries.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+
+template <typename G>
+void test_dsv(std::string const& wkt, std::string const& dsv)
+{
+ G geometry;
+
+ bg::read_wkt(wkt, geometry);
+
+ std::ostringstream out;
+ out << bg::dsv(geometry);
+ BOOST_CHECK_EQUAL(out.str(), dsv);
+}
+
+
+#ifndef GEOMETRY_TEST_MULTI
+template <typename T>
+void test_all()
+{
+ using namespace boost::geometry;
+ typedef model::point<T, 2, cs::cartesian> P;
+
+ test_dsv<P >("POINT(1 2)", "(1, 2)");
+ test_dsv<model::linestring<P> >(
+ "LINESTRING(1 1,2 2,3 3)",
+ "((1, 1), (2, 2), (3, 3))");
+ test_dsv<model::polygon<P> >("POLYGON((0 0,0 4,4 4,4 0,0 0))",
+ "(((0, 0), (0, 4), (4, 4), (4, 0), (0, 0)))");
+
+ test_dsv<model::ring<P> >("POLYGON((0 0,0 4,4 4,4 0,0 0))",
+ "((0, 0), (0, 4), (4, 4), (4, 0), (0, 0))");
+
+ test_dsv<model::box<P> >("BOX(0 0,1 1)",
+ "((0, 0), (1, 1))");
+}
+#endif
+
+
+int test_main(int, char* [])
+{
+ test_all<double>();
+ test_all<int>();
+
+
+ return 0;
+}
+
diff --git a/libs/geometry/test/util/write_dsv.vcproj b/libs/geometry/test/util/write_dsv.vcproj
new file mode 100644
index 000000000..8525f7393
--- /dev/null
+++ b/libs/geometry/test/util/write_dsv.vcproj
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="write_dsv"
+ ProjectGUID="{FC796B9D-2FC4-46C1-B733-9C2C5BB48094}"
+ RootNamespace="write_dsv"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\write_dsv"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\write_dsv"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\write_dsv.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/views/Jamfile.v2 b/libs/geometry/test/views/Jamfile.v2
new file mode 100644
index 000000000..cb2f5fb5a
--- /dev/null
+++ b/libs/geometry/test/views/Jamfile.v2
@@ -0,0 +1,18 @@
+# Boost.Geometry (aka GGL, Generic Geometry Library)
+#
+# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+#
+# 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)
+
+test-suite boost-geometry-views
+ :
+ [ run segment_view.cpp ]
+ [ run box_view.cpp ]
+ [ run reversible_view.cpp ]
+ [ run closeable_view.cpp ]
+ [ run reversible_closeable.cpp ]
+ ;
diff --git a/libs/geometry/test/views/box_view.cpp b/libs/geometry/test/views/box_view.cpp
new file mode 100644
index 000000000..e2eab5d21
--- /dev/null
+++ b/libs/geometry/test/views/box_view.cpp
@@ -0,0 +1,81 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <algorithm>
+#include <iterator>
+#include <sstream>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/views/box_view.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+
+template <typename Box, bool Reverse>
+void test_geometry(std::string const& wkt, std::string const& expected,
+ bg::order_selector expected_order)
+{
+
+ Box box;
+ bg::read_wkt(wkt, box);
+
+ typedef bg::box_view<Box, Reverse> view_type;
+ view_type range(box);
+
+ {
+ std::ostringstream out;
+ for (typename boost::range_iterator<view_type>::type it = boost::begin(range);
+ it != boost::end(range); ++it)
+ {
+ out << " " << bg::get<0>(*it) << bg::get<1>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), expected);
+ }
+
+ {
+ // Check forward/backward behaviour
+ typename boost::range_iterator<view_type>::type it = boost::begin(range);
+ it++;
+ it--;
+ // Not verified further, same as segment
+ }
+
+ {
+ // Check random access behaviour
+ int const n = boost::size(range);
+ BOOST_CHECK_EQUAL(n, 5);
+ }
+
+ // Check Boost.Range concept
+ BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<view_type>) );
+
+ // Check order
+ bg::order_selector order = bg::point_order<view_type>::value;
+ BOOST_CHECK_EQUAL(order, expected_order);
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::box<P>, true> ("polygon((1 1,2 2))", " 11 12 22 21 11", bg::clockwise);
+ test_geometry<bg::model::box<P>, false>("polygon((1 1,2 2))", " 11 21 22 12 11", bg::counterclockwise);
+ test_geometry<bg::model::box<P>, true> ("polygon((3 3,5 5))", " 33 35 55 53 33", bg::clockwise);
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+ return 0;
+}
diff --git a/libs/geometry/test/views/box_view.vcproj b/libs/geometry/test/views/box_view.vcproj
new file mode 100644
index 000000000..ab1036bee
--- /dev/null
+++ b/libs/geometry/test/views/box_view.vcproj
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="box_view"
+ ProjectGUID="{34A1F53A-DA46-41E6-9E26-740D22D662DC}"
+ RootNamespace="box_view"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\box_view"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="false"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\box_view"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="false"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\box_view.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/views/closeable_view.cpp b/libs/geometry/test/views/closeable_view.cpp
new file mode 100644
index 000000000..dde61a067
--- /dev/null
+++ b/libs/geometry/test/views/closeable_view.cpp
@@ -0,0 +1,134 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <algorithm>
+#include <iterator>
+#include <sstream>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/views/closeable_view.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);
+
+
+
+// The closeable view should also work on normal std:: containers
+void test_non_geometry()
+{
+ typedef bg::closeable_view
+ <
+ std::vector<int> const, bg::open
+ >::type view_type;
+
+ std::vector<int> v;
+ v.push_back(1);
+ v.push_back(2);
+ v.push_back(3);
+
+ view_type view(v);
+
+ typedef boost::range_iterator<view_type const>::type iterator;
+ iterator it = boost::begin(view);
+ iterator end = boost::end(view);
+
+ std::ostringstream out;
+ for ( ; it != end; ++it)
+ {
+ out << *it;
+ }
+ BOOST_CHECK_EQUAL(out.str(), "1231");
+
+ // Check operators =, ++, --, +=, -=
+ it = boost::begin(view);
+ BOOST_CHECK_EQUAL(*it, 1);
+ it += 2;
+ BOOST_CHECK_EQUAL(*it, 3);
+ it -= 2;
+ BOOST_CHECK_EQUAL(*it, 1);
+ it++;
+ BOOST_CHECK_EQUAL(*it, 2);
+ it--;
+ BOOST_CHECK_EQUAL(*it, 1);
+
+ // Also check them in the last regions
+ it = boost::begin(view) + 3;
+ BOOST_CHECK_EQUAL(*it, 1);
+ it--;
+ BOOST_CHECK_EQUAL(*it, 3);
+ it++;
+ BOOST_CHECK_EQUAL(*it, 1);
+ it -= 2;
+ BOOST_CHECK_EQUAL(*it, 2);
+ it += 2;
+ BOOST_CHECK_EQUAL(*it, 1);
+
+ BOOST_CHECK_EQUAL(boost::size(view), 4u);
+}
+
+
+template <bg::closure_selector Closure, typename Range>
+void test_optionally_closing(Range const& range, std::string const& expected)
+{
+ typedef typename bg::closeable_view<Range const, Closure>::type view_type;
+ typedef typename boost::range_iterator<view_type const>::type iterator;
+
+ view_type view(range);
+
+ bool first = true;
+ std::ostringstream out;
+ iterator end = boost::end(view);
+ for (iterator it = boost::begin(view); it != end; ++it, first = false)
+ {
+ out << (first ? "" : " ") << bg::dsv(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt,
+ std::string const& expected_false,
+ std::string const& expected_true)
+{
+ Geometry geo;
+ bg::read_wkt(wkt, geo);
+
+ test_optionally_closing<bg::closed>(geo, expected_false);
+ test_optionally_closing<bg::open>(geo, expected_true);
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::ring<P> >(
+ "POLYGON((1 1,1 4,4 4,4 1))",
+ "(1, 1) (1, 4) (4, 4) (4, 1)",
+ "(1, 1) (1, 4) (4, 4) (4, 1) (1, 1)");
+}
+
+
+int test_main(int, char* [])
+{
+ test_non_geometry();
+
+ test_all<bg::model::d2::point_xy<double> >();
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<boost::tuple<double, double> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/views/closeable_view.vcproj b/libs/geometry/test/views/closeable_view.vcproj
new file mode 100644
index 000000000..204e1ac30
--- /dev/null
+++ b/libs/geometry/test/views/closeable_view.vcproj
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="closeable_view"
+ ProjectGUID="{5C40995A-B6FC-4C94-B552-0D80EC9E2049}"
+ RootNamespace="closeable_view"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\closeable_view"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\closeable_view"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\closeable_view.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/views/reversible_closeable.cpp b/libs/geometry/test/views/reversible_closeable.cpp
new file mode 100644
index 000000000..9cd2421b6
--- /dev/null
+++ b/libs/geometry/test/views/reversible_closeable.cpp
@@ -0,0 +1,165 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+
+#include <algorithm>
+#include <iterator>
+#include <sstream>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/views/closeable_view.hpp>
+#include <boost/geometry/views/reversible_view.hpp>
+
+#include <boost/geometry/io/wkt/read.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);
+
+
+template <typename View>
+void test_option(View const& view, std::string const& expected)
+{
+
+ bool first = true;
+ std::ostringstream out;
+
+ typedef typename boost::range_iterator<View const>::type iterator;
+
+ iterator end = boost::end(view);
+ for (iterator it = boost::begin(view); it != end; ++it, first = false)
+ {
+ out << (first ? "" : " ") << bg::dsv(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+template <bg::closure_selector Closure, bg::iterate_direction Direction, typename Range>
+void test_close_reverse(Range const& range, std::string const& expected)
+{
+ typedef typename bg::reversible_view<Range const, Direction>::type rview;
+ typedef typename bg::closeable_view<rview const, Closure>::type cview;
+
+ rview view1(range);
+ cview view2(view1);
+
+ test_option(view2, expected);
+}
+
+
+template <bg::iterate_direction Direction, bg::closure_selector Closure, typename Range>
+void test_reverse_close(Range const& range, std::string const& expected)
+{
+ typedef typename bg::closeable_view<Range const, Closure>::type cview;
+ typedef typename bg::reversible_view<cview const, Direction>::type rview;
+
+ cview view1(range);
+ rview view2(view1);
+ test_option(view2, expected);
+}
+
+
+template
+<
+ bg::iterate_direction Direction1,
+ bg::iterate_direction Direction2,
+ typename Range
+>
+void test_reverse_reverse(Range const& range, std::string const& expected)
+{
+ typedef typename bg::reversible_view<Range const, Direction1>::type rview1;
+ typedef typename bg::reversible_view<rview1 const, Direction2>::type rview2;
+
+ rview1 view1(range);
+ rview2 view2(view1);
+ test_option(view2, expected);
+}
+
+template
+<
+ bg::closure_selector Closure1,
+ bg::closure_selector Closure2,
+ typename Range
+>
+void test_close_close(Range const& range, std::string const& expected)
+{
+ typedef typename bg::closeable_view<Range const, Closure1>::type cview1;
+ typedef typename bg::closeable_view<cview1 const, Closure2>::type cview2;
+
+ cview1 view1(range);
+ cview2 view2(view1);
+ test_option(view2, expected);
+}
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt,
+ std::string const& expected_n,
+ std::string const& expected_r,
+ std::string const& closing,
+ std::string const& rclosing
+ )
+{
+ std::string expected;
+ Geometry geo;
+ bg::read_wkt(wkt, geo);
+
+ test_close_reverse<bg::closed, bg::iterate_forward>(geo, expected_n);
+ test_close_reverse<bg::open, bg::iterate_forward>(geo, expected_n + closing);
+ test_close_reverse<bg::closed, bg::iterate_reverse>(geo, expected_r);
+
+ // 13-12-2010, this case was problematic in MSVC
+ // SOLVED: caused by IMPLICIT constructor! It is now explicit and should be kept like that.
+ test_close_reverse<bg::open, bg::iterate_reverse>(geo, expected_r + rclosing);
+
+ test_reverse_close<bg::iterate_forward, bg::closed>(geo, expected_n);
+ test_reverse_close<bg::iterate_forward, bg::open>(geo, expected_n + closing);
+ test_reverse_close<bg::iterate_reverse, bg::closed>(geo, expected_r);
+
+ // first closed, then reversed:
+ expected = boost::trim_copy(closing + " " + expected_r);
+ test_reverse_close<bg::iterate_reverse, bg::open>(geo, expected);
+
+ test_reverse_reverse<bg::iterate_forward, bg::iterate_forward>(geo, expected_n);
+ test_reverse_reverse<bg::iterate_reverse, bg::iterate_reverse>(geo, expected_n);
+ test_reverse_reverse<bg::iterate_forward, bg::iterate_reverse>(geo, expected_r);
+ test_reverse_reverse<bg::iterate_reverse, bg::iterate_forward>(geo, expected_r);
+
+ test_close_close<bg::closed, bg::closed>(geo, expected_n);
+ test_close_close<bg::open, bg::closed>(geo, expected_n + closing);
+ test_close_close<bg::closed, bg::open>(geo, expected_n + closing);
+ test_close_close<bg::open, bg::open>(geo, expected_n + closing + closing);
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::ring<P> >(
+ "POLYGON((1 1,1 4,4 4,4 1))",
+ "(1, 1) (1, 4) (4, 4) (4, 1)",
+ "(4, 1) (4, 4) (1, 4) (1, 1)",
+ " (1, 1)", // closing
+ " (4, 1)" // rclosing
+ );
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<boost::tuple<double, double> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/views/reversible_closeable.vcproj b/libs/geometry/test/views/reversible_closeable.vcproj
new file mode 100644
index 000000000..b2a3846b1
--- /dev/null
+++ b/libs/geometry/test/views/reversible_closeable.vcproj
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="reversible_closeable"
+ ProjectGUID="{AAA72638-34CD-4A34-8329-984DFC766E24}"
+ RootNamespace="reversible_closeable"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\reversible_closeable"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\reversible_closeable"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\reversible_closeable.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/views/reversible_view.cpp b/libs/geometry/test/views/reversible_view.cpp
new file mode 100644
index 000000000..ba9c5ef0f
--- /dev/null
+++ b/libs/geometry/test/views/reversible_view.cpp
@@ -0,0 +1,81 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <algorithm>
+#include <iterator>
+#include <sstream>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/views/reversible_view.hpp>
+
+#include <boost/geometry/io/wkt/wkt.hpp>
+#include <boost/geometry/io/dsv/write.hpp>
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
+
+BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian);
+
+
+template <bg::iterate_direction Direction, typename Range>
+void test_forward_or_reverse(Range const& range, std::string const& expected)
+{
+ typedef typename bg::reversible_view
+ <
+ Range const,
+ Direction
+ >::type view_type;
+
+ view_type view(range);
+
+ bool first = true;
+ std::ostringstream out;
+ for (typename boost::range_iterator<view_type const>::type
+ it = boost::begin(view);
+ it != boost::end(view);
+ ++it, first = false)
+ {
+ out << (first ? "" : " ") << bg::dsv(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), expected);
+}
+
+
+
+template <typename Geometry>
+void test_geometry(std::string const& wkt,
+ std::string const& expected_forward, std::string const& expected_reverse)
+{
+ Geometry geo;
+ bg::read_wkt(wkt, geo);
+
+ test_forward_or_reverse<bg::iterate_forward>(geo, expected_forward);
+ test_forward_or_reverse<bg::iterate_reverse>(geo, expected_reverse);
+}
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::linestring<P> >(
+ "linestring(1 1,2 2,3 3)",
+ "(1, 1) (2, 2) (3, 3)",
+ "(3, 3) (2, 2) (1, 1)");
+}
+
+
+int test_main(int, char* [])
+{
+ test_all<bg::model::d2::point_xy<double> >();
+ test_all<bg::model::point<int, 2, bg::cs::cartesian> >();
+ test_all<boost::tuple<double, double> >();
+
+ return 0;
+}
diff --git a/libs/geometry/test/views/reversible_view.vcproj b/libs/geometry/test/views/reversible_view.vcproj
new file mode 100644
index 000000000..f81885210
--- /dev/null
+++ b/libs/geometry/test/views/reversible_view.vcproj
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="reversible_view"
+ ProjectGUID="{BFB08FEE-76D6-4F3D-9184-BE03CC3F7968}"
+ RootNamespace="reversible_view"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\reversible_view"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\reversible_view"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\reversible_view.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/views/segment_view.cpp b/libs/geometry/test/views/segment_view.cpp
new file mode 100644
index 000000000..adc9535bd
--- /dev/null
+++ b/libs/geometry/test/views/segment_view.cpp
@@ -0,0 +1,86 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+// 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)
+
+#include <algorithm>
+#include <iterator>
+#include <sstream>
+#include <string>
+
+#include <geometry_test_common.hpp>
+
+#include <boost/geometry/geometries/geometries.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/views/segment_view.hpp>
+#include <boost/geometry/io/wkt/read.hpp>
+
+
+
+template <typename Segment>
+void test_geometry(std::string const& wkt, std::string const& expected)
+{
+
+ Segment segment;
+ bg::read_wkt(wkt, segment);
+
+ typedef bg::segment_view<Segment> range_type;
+ range_type range(segment);
+
+ {
+ std::ostringstream out;
+ for (typename boost::range_iterator<range_type>::type it = boost::begin(range);
+ it != boost::end(range); ++it)
+ {
+ out << " " << bg::get<0>(*it) << bg::get<1>(*it);
+ }
+ BOOST_CHECK_EQUAL(out.str(), expected);
+ }
+
+ {
+ // Check forward/backward behaviour
+ std::ostringstream out;
+ typename boost::range_iterator<range_type>::type it = boost::begin(range);
+ it++;
+ it--;
+ out << " " << bg::get<0>(*it) << bg::get<1>(*it);
+ typename boost::range_iterator<range_type>::type it2 = boost::end(range);
+ it2--;
+ out << " " << bg::get<0>(*it2) << bg::get<1>(*it2);
+ BOOST_CHECK_EQUAL(out.str(), expected);
+ }
+
+ {
+ // Check random access behaviour
+ int const n = boost::size(range);
+ BOOST_CHECK_EQUAL(n, 2);
+ }
+
+ // Check Boost.Range concept
+ BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<range_type>) );
+
+}
+
+
+template <typename P>
+void test_all()
+{
+ test_geometry<bg::model::segment<P> >("linestring(1 1,2 2)", " 11 22");
+ test_geometry<bg::model::segment<P> >("linestring(4 4,3 3)", " 44 33");
+}
+
+
+int test_main(int, char* [])
+{
+ std::vector<int> a;
+ a.push_back(1);
+ boost::range_iterator<std::vector<int> const>::type it = a.end();
+ --it;
+ std::cout << *it << std::endl;
+ test_all<bg::model::d2::point_xy<double> >();
+ return 0;
+}
diff --git a/libs/geometry/test/views/segment_view.vcproj b/libs/geometry/test/views/segment_view.vcproj
new file mode 100644
index 000000000..9b8840193
--- /dev/null
+++ b/libs/geometry/test/views/segment_view.vcproj
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="segment_view"
+ ProjectGUID="{B49AC3E2-3497-465B-88C2-BCADA4B4ADAF}"
+ RootNamespace="segment_view"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\segment_view"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="false"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)\segment_view"
+ ConfigurationType="1"
+ InheritedPropertySheets="..\boost.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../..;.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ ExceptionHandling="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="false"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\segment_view.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/libs/geometry/test/views/views.sln b/libs/geometry/test/views/views.sln
new file mode 100644
index 000000000..7fcf73665
--- /dev/null
+++ b/libs/geometry/test/views/views.sln
@@ -0,0 +1,43 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "closeable_view", "closeable_view.vcproj", "{5C40995A-B6FC-4C94-B552-0D80EC9E2049}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reversible_closeable", "reversible_closeable.vcproj", "{AAA72638-34CD-4A34-8329-984DFC766E24}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reversible_view", "reversible_view.vcproj", "{BFB08FEE-76D6-4F3D-9184-BE03CC3F7968}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "box_view", "box_view.vcproj", "{34A1F53A-DA46-41E6-9E26-740D22D662DC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "segment_view", "segment_view.vcproj", "{B49AC3E2-3497-465B-88C2-BCADA4B4ADAF}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5C40995A-B6FC-4C94-B552-0D80EC9E2049}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5C40995A-B6FC-4C94-B552-0D80EC9E2049}.Debug|Win32.Build.0 = Debug|Win32
+ {5C40995A-B6FC-4C94-B552-0D80EC9E2049}.Release|Win32.ActiveCfg = Release|Win32
+ {5C40995A-B6FC-4C94-B552-0D80EC9E2049}.Release|Win32.Build.0 = Release|Win32
+ {AAA72638-34CD-4A34-8329-984DFC766E24}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AAA72638-34CD-4A34-8329-984DFC766E24}.Debug|Win32.Build.0 = Debug|Win32
+ {AAA72638-34CD-4A34-8329-984DFC766E24}.Release|Win32.ActiveCfg = Release|Win32
+ {AAA72638-34CD-4A34-8329-984DFC766E24}.Release|Win32.Build.0 = Release|Win32
+ {BFB08FEE-76D6-4F3D-9184-BE03CC3F7968}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BFB08FEE-76D6-4F3D-9184-BE03CC3F7968}.Debug|Win32.Build.0 = Debug|Win32
+ {BFB08FEE-76D6-4F3D-9184-BE03CC3F7968}.Release|Win32.ActiveCfg = Release|Win32
+ {BFB08FEE-76D6-4F3D-9184-BE03CC3F7968}.Release|Win32.Build.0 = Release|Win32
+ {34A1F53A-DA46-41E6-9E26-740D22D662DC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {34A1F53A-DA46-41E6-9E26-740D22D662DC}.Debug|Win32.Build.0 = Debug|Win32
+ {34A1F53A-DA46-41E6-9E26-740D22D662DC}.Release|Win32.ActiveCfg = Release|Win32
+ {34A1F53A-DA46-41E6-9E26-740D22D662DC}.Release|Win32.Build.0 = Release|Win32
+ {B49AC3E2-3497-465B-88C2-BCADA4B4ADAF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B49AC3E2-3497-465B-88C2-BCADA4B4ADAF}.Debug|Win32.Build.0 = Debug|Win32
+ {B49AC3E2-3497-465B-88C2-BCADA4B4ADAF}.Release|Win32.ActiveCfg = Release|Win32
+ {B49AC3E2-3497-465B-88C2-BCADA4B4ADAF}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal