Ticket #10412: main_boost_geometry_incorrect_polygon_offset.cpp

File main_boost_geometry_incorrect_polygon_offset.cpp, 2.6 KB (added by Olivier Tournaire <olivier.tournaire@…>, 8 years ago)

Sample code

Line 
1#include <iostream>
2
3#include <boost/geometry/geometry.hpp>
4
5#include <boost/geometry/geometries/point_xy.hpp>
6#include <boost/geometry/geometries/polygon.hpp>
7#include <boost/geometry/geometries/multi_polygon.hpp>
8
9#include <boost/geometry/algorithms/buffer.hpp>
10
11#include <boost/geometry/strategies/cartesian/buffer_join_miter.hpp>
12#include <boost/geometry/strategies/cartesian/buffer_end_flat.hpp>
13#include <boost/geometry/strategies/cartesian/buffer_point_square.hpp>
14#include <boost/geometry/strategies/cartesian/buffer_side_straight.hpp>
15
16#include <boost/geometry/io/wkt/read.hpp>
17#include <boost/geometry/io/wkt/write.hpp>
18
19using namespace std;
20
21typedef double coordinate_type;
22typedef boost::geometry::model::d2::point_xy<coordinate_type> point_xy_type;
23typedef boost::geometry::model::polygon<point_xy_type> polygon_type;
24boost::geometry::strategy::buffer::end_flat end_strategy;
25boost::geometry::strategy::buffer::point_square point_strategy;
26boost::geometry::strategy::buffer::side_straight side_strategy;
27
28int main(int argc, char** argv)
29{
30 string polygon_geometry = "POLYGON((897747.8 6270564.3,897764.3 6270569.7,897776.5 6270529.5,897768.1 6270527.1,897767.6 6270529.4,897756.3 6270525.8,897745.8 6270522.3,897752 6270502.9,897749.7 6270502,897750.7 6270499.1,897751.8 6270498.6,897752.3 6270499.3,897754.6 6270497.9,897755.8 6270500.2,897766.8 6270494.1,897765.6 6270491.5,897768.3 6270490.5,897770.9 6270491.5,897770.2 6270494.6,897780.1 6270497.5,897781 6270494.6,897786.8 6270496.6,897790.8 6270482.5,897785.3 6270480.7,897785.9 6270478.2,897768.9 6270473.2,897768.1 6270475.8,897766.1 6270475.2,897758.7 6270479.2,897753.2 6270481.8,897751.9 6270479,897746.5 6270481.9,897748 6270484.6,897745.2 6270486.1,897743.9 6270483.3,897741.4 6270484.7,897742.6 6270487.3,897739.4 6270488.9,897738.3 6270486.3,897735.6 6270487.8,897733.1 6270496.8,897731.2 6270502.7,897732.4 6270503.2,897731.5 6270506.1,897730.3 6270505.7,897725.8 6270520.2,897726.8 6270520.7,897726 6270523,897728 6270523.7,897726.3 6270529.6,897742.8 6270534.5,897741.2 6270539.9,897751.4 6270543.4,897750.7 6270546.4,897753.2 6270547.2,897747.8 6270564.3))";
31
32 double offset_distance = 1.5;
33
34 boost::geometry::strategy::buffer::distance_symmetric<coordinate_type> distance_strategy(offset_distance);
35 boost::geometry::strategy::buffer::join_miter join_strategy(offset_distance);
36
37 polygon_type input;
38 boost::geometry::model::multi_polygon<polygon_type> output;
39
40 boost::geometry::read_wkt(polygon_geometry, input);
41
42 boost::geometry::buffer(input, output, distance_strategy, side_strategy, join_strategy, end_strategy, point_strategy);
43
44 return 0;
45}