• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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