1 // Boost.Geometry
2 // Unit Test Helper
3
4 // Copyright (c) 2018-2019 Barend Gehrels, Amsterdam, the Netherlands.
5
6 // Use, modification and distribution is subject to the Boost Software License,
7 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
9
10
11 #ifndef BOOST_GEOMETRY_TEST_BUFFER_GEO_HPP
12 #define BOOST_GEOMETRY_TEST_BUFFER_GEO_HPP
13
14 #include "test_buffer.hpp"
15
16 template
17 <
18 typename Geometry,
19 typename GeometryOut,
20 typename JoinStrategy,
21 typename EndStrategy
22 >
test_one_geo(std::string const & caseid,std::string const & wkt,JoinStrategy const & join_strategy,EndStrategy const & end_strategy,int expected_count,int expected_holes_count,double expected_area,double distance_left,ut_settings settings=ut_settings (),double distance_right=same_distance)23 void test_one_geo(std::string const& caseid,
24 std::string const& wkt,
25 JoinStrategy const& join_strategy, EndStrategy const& end_strategy,
26 int expected_count, int expected_holes_count, double expected_area,
27 double distance_left, ut_settings settings = ut_settings(),
28 double distance_right = same_distance)
29 {
30 Geometry input_geometry;
31 bg::read_wkt(wkt, input_geometry);
32 bg::correct(input_geometry);
33
34 bg::strategy::buffer::side_straight side_strategy;
35 bg::strategy::buffer::distance_asymmetric
36 <
37 typename bg::coordinate_type<Geometry>::type
38 > distance_strategy(distance_left,
39 bg::math::equals(distance_right, same_distance)
40 ? distance_left : distance_right);
41
42 // Use the appropriate strategy for geographic points
43 bg::strategy::buffer::geographic_point_circle<> circle_strategy(settings.points_per_circle);
44
45 // Use Thomas strategy to calculate geographic area, because it is
46 // the most precise (unless scale of buffer is only around 1 meter)
47 bg::strategy::area::geographic
48 <
49 bg::strategy::thomas, 5,
50 bg::srs::spheroid<long double>, long double
51 > area_strategy;
52
53 bg::model::multi_polygon<GeometryOut> buffer;
54
55 test_buffer<GeometryOut>
56 (caseid, buffer, input_geometry,
57 join_strategy, end_strategy,
58 distance_strategy, side_strategy, circle_strategy,
59 area_strategy,
60 expected_count, expected_holes_count, expected_area,
61 settings);
62 }
63
64 template
65 <
66 typename Geometry,
67 typename GeometryOut,
68 typename JoinStrategy,
69 typename EndStrategy
70 >
test_one_geo(std::string const & caseid,std::string const & wkt,JoinStrategy const & join_strategy,EndStrategy const & end_strategy,double expected_area,double distance_left,ut_settings const & settings=ut_settings (),double distance_right=same_distance)71 void test_one_geo(std::string const& caseid, std::string const& wkt,
72 JoinStrategy const& join_strategy, EndStrategy const& end_strategy,
73 double expected_area,
74 double distance_left, ut_settings const& settings = ut_settings(),
75 double distance_right = same_distance)
76 {
77 test_one_geo<Geometry, GeometryOut>(caseid, wkt, join_strategy, end_strategy,
78 -1 ,-1, expected_area,
79 distance_left, settings, distance_right);
80 }
81
82
83 #endif
84