FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
geometry/test/algorithms/merge_elements.cpp at develop · boostorg/geometry · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
boostorg
/
geometry
Public
Notifications
You must be signed in to change notification settings
Fork
232
Star
516
Code
Issues
145
Pull requests
11
Discussions
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Discussions
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
geometry
/
test
/
algorithms
/
merge_elements.cpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
78 lines (65 loc) · 3.3 KB
Breadcrumbs
geometry
/
test
/
algorithms
/
merge_elements.cpp
Copy path
File metadata and controls
78 lines (65 loc) · 3.3 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//
Boost.Geometry
//
Unit Test
//
Copyright (c) 2022-2023, Oracle and/or its affiliates.
//
Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
//
Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
//
Licensed under the Boost Software License version 1.0.
//
http://www.boost.org/users/license.html
#
include
<
geometry_test_common.hpp
>
#
include
<
boost/geometry/algorithms/area.hpp
>
#
include
<
boost/geometry/algorithms/length.hpp
>
#
include
<
boost/geometry/algorithms/merge_elements.hpp
>
#
include
<
boost/geometry/algorithms/perimeter.hpp
>
#
include
<
boost/geometry/geometries/adapted/boost_variant2.hpp
>
#
include
<
boost/geometry/geometries/geometries.hpp
>
#
include
<
boost/geometry/io/wkt/wkt.hpp
>
template
<
typename
P>
void
test_all
(std::
size_t
points_count, std::
size_t
linestrings_count, std::
size_t
polygons_count,
double
length,
double
perimeter,
double
area)
{
using
pt_t
= P;
using
mpt_t
= bg::model::multi_point<
pt_t
>;
//
using seg_t = bg::model::segment<pt_t>;
using
ls_t
= bg::model::linestring<
pt_t
>;
using
mls_t
= bg::model::multi_linestring<
ls_t
>;
//
using box_t = bg::model::box<pt_t>;
using
ring_t
= bg::model::ring<
pt_t
>;
using
poly_t
= bg::model::polygon<
pt_t
>;
using
mpoly_t
= bg::model::multi_polygon<
poly_t
>;
using
var_t
= boost::variant<
pt_t
,
mpt_t
/*
, seg_t
*/
,
ls_t
,
mls_t
,
/*
box_t,
*/
ring_t
,
poly_t
,
mpoly_t
>;
//
using var_t = boost::variant2::variant<pt_t, mpt_t/*, seg_t*/, ls_t, mls_t, /*box_t,*/ ring_t, poly_t, mpoly_t>;
using
gc_t
= bg::model::geometry_collection<
var_t
>;
gc_t
gc{
poly_t
{{{
0
,
0
},{
0
,
10
},{
10
,
10
},{
10
,
0
},{
0
,
0
}}, {{
1
,
1
},{
5
,
1
},{
5
,
5
},{
1
,
5
},{
1
,
1
}}},
mpoly_t
{{{{
4
,
4
},{
4
,
6
},{
6
,
6
},{
6
,
4
},{
4
,
4
}}}, {{{
10
,
10
},{
10
,
12
},{
12
,
12
},{
12
,
10
},{
10
,
10
}}}},
ring_t
{{
11
,
11
},{
11
,
14
},{
14
,
14
},{
14
,
11
},{
11
,
11
}},
//
box_t{{13, 13}, {16, 16}},
mls_t
{{{
0
,
0
},{
20
,
20
}}, {{
3
,
3
},{
3
,
6
},{
6
,
6
},{
6
,
3
},{
3
,
3
}}},
ls_t
{{
3
,
3
},{
3
,
20
}},
mpt_t
{{
2
,
2
},{
2
,
2
},{
5
,
5
},{
9
,
9
},{
11
,
11
},{
0
,
20
},{
1
,
20
}},
pt_t
{
0
,
20
}
};
gc_t
result;
bg::merge_elements
(gc, result);
BOOST_CHECK
(boost::get<
mpt_t
>(result[
0
]).
size
() == points_count);
BOOST_CHECK
(boost::get<
mls_t
>(result[
1
]).
size
() == linestrings_count);
BOOST_CHECK
(boost::get<
mpoly_t
>(result[
2
]).
size
() == polygons_count);
auto
l =
bg::length
(result);
auto
a =
bg::area
(result);
auto
p =
bg::perimeter
(result);
decltype
(l) l_expected = length;
decltype
(p) p_expected = perimeter;
decltype
(a) a_expected = area;
BOOST_CHECK_CLOSE
(l, l_expected,
0.000001
);
BOOST_CHECK_CLOSE
(p, p_expected,
0.000001
);
BOOST_CHECK_CLOSE
(a, a_expected,
0.000001
);
}
int
test_main
(
int
,
char
* [])
{
test_all<bg::model::point<
double
,
2
, bg::cs::cartesian>>(
2
,
5
,
2
,
std::sqrt
(
2.0
) * (
3
+
6
) +
4
+
10
,
72
,
97
);
//
TODO: right now the elements of multi geometries are not merged,
//
only different geometries stored in a GC. Hence duplicated point in the result.
test_all<bg::model::point<
double
,
2
, bg::cs::spherical_equatorial<bg::degree>>>(
4
,
6
,
2
,
0.48141804683843953
,
1.2506937915396685
,
0.029392562222852522
);
test_all<bg::model::point<
double
,
2
, bg::cs::geographic<bg::degree>>>(
4
,
6
,
2
,
3058383.6297531724
,
7951118.1434133006
,
1187967114570.5911
);
return
0
;
}
Back
|
FazBrowse Home
|
New Git URL