3
3
4
4
import pytest
5
5
from custom_interfaces .msg import HelperLatLon
6
- from shapely .geometry import MultiPolygon , Polygon , box
6
+ from shapely .geometry import MultiPolygon , Point , Polygon , box
7
7
8
- import local_pathfinding .coord_systems as coord_systems
8
+ import local_pathfinding .coord_systems as cs
9
9
10
10
11
11
@pytest .mark .parametrize (
18
18
],
19
19
)
20
20
def test_cartesian_to_true_bearing (cartesian : float , true_bearing : float ):
21
- assert coord_systems .cartesian_to_true_bearing (cartesian ) == pytest .approx (
21
+ assert cs .cartesian_to_true_bearing (cartesian ) == pytest .approx (
22
22
true_bearing
23
23
), "incorrect angle conversion"
24
24
@@ -28,15 +28,15 @@ def test_cartesian_to_true_bearing(cartesian: float, true_bearing: float):
28
28
[(0.0 , 0.0 ), (30 , 0.03 ), (500 , 0.5 ), (- 30.5 , - 0.0305 ), (- 0.0 , 0.0 )],
29
29
)
30
30
def test_meters_to_km (meters : float , km : float ):
31
- assert coord_systems .meters_to_km (meters ) == pytest .approx (km ), "incorrect distance conversion"
31
+ assert cs .meters_to_km (meters ) == pytest .approx (km ), "incorrect distance conversion"
32
32
33
33
34
34
@pytest .mark .parametrize (
35
35
"km,meters" ,
36
36
[(0.0 , 0.0 ), (0.03 , 30 ), (0.5 , 500 ), (- 0.0305 , - 30.5 ), (- 0.0 , 0.0 )],
37
37
)
38
38
def test_km_to_meters (km : float , meters : float ):
39
- assert coord_systems .km_to_meters (km ) == pytest .approx (meters ), "incorrect distance conversion"
39
+ assert cs .km_to_meters (km ) == pytest .approx (meters ), "incorrect distance conversion"
40
40
41
41
42
42
@pytest .mark .parametrize (
@@ -53,19 +53,19 @@ def test_km_to_meters(km: float, meters: float):
53
53
def test_latlon_to_xy (ref_lat : float , ref_lon : float , true_bearing_deg : float , dist_km : float ):
54
54
# create inputs
55
55
reference = HelperLatLon (latitude = ref_lat , longitude = ref_lon )
56
- lon , lat , _ = coord_systems .GEODESIC .fwd (
56
+ lon , lat , _ = cs .GEODESIC .fwd (
57
57
lons = ref_lon , lats = ref_lat , az = true_bearing_deg , dist = dist_km * 1000
58
58
)
59
59
latlon = HelperLatLon (latitude = lat , longitude = lon )
60
60
61
61
# create expected output
62
62
true_bearing = math .radians (true_bearing_deg )
63
- xy = coord_systems .XY (
63
+ xy = cs .XY (
64
64
x = dist_km * math .sin (true_bearing ),
65
65
y = dist_km * math .cos (true_bearing ),
66
66
)
67
67
68
- assert coord_systems .latlon_to_xy (reference , latlon ) == pytest .approx (
68
+ assert cs .latlon_to_xy (reference , latlon ) == pytest .approx (
69
69
xy
70
70
), "incorrect coordinate conversion"
71
71
@@ -85,26 +85,49 @@ def test_latlon_to_xy(ref_lat: float, ref_lon: float, true_bearing_deg: float, d
85
85
def test_xy_to_latlon (ref_lat : float , ref_lon : float , true_bearing_deg : float , dist_km : float ):
86
86
# create inputs
87
87
true_bearing = math .radians (true_bearing_deg )
88
- xy = coord_systems .XY (
88
+ xy = cs .XY (
89
89
x = dist_km * math .sin (true_bearing ),
90
90
y = dist_km * math .cos (true_bearing ),
91
91
)
92
92
93
93
# create expected output
94
94
reference = HelperLatLon (latitude = ref_lat , longitude = ref_lon )
95
- lon , lat , _ = coord_systems .GEODESIC .fwd (
95
+ lon , lat , _ = cs .GEODESIC .fwd (
96
96
lons = ref_lon , lats = ref_lat , az = true_bearing_deg , dist = dist_km * 1000
97
97
)
98
98
latlon = HelperLatLon (latitude = lat , longitude = lon )
99
99
100
- converted_latlon = coord_systems .xy_to_latlon (reference , xy )
100
+ converted_latlon = cs .xy_to_latlon (reference , xy )
101
101
assert (converted_latlon .latitude , converted_latlon .longitude ) == pytest .approx (
102
102
(latlon .latitude , latlon .longitude )
103
103
), "incorrect coordinate conversion"
104
104
105
105
106
+ @pytest .mark .parametrize (
107
+ "reference_latlon, polygon" ,
108
+ [
109
+ (
110
+ HelperLatLon (latitude = 50.0 , longitude = 100.0 ),
111
+ Polygon ([Point ([0 , 0 ]), Point ([0 , 1 ]), Point ([1 , 1 ]), Point ([1 , 0 ])]),
112
+ )
113
+ ],
114
+ )
115
+ def test_xy_polygon_to_latlon_polygon (reference_latlon : HelperLatLon , polygon : Polygon ):
116
+
117
+ latlon_polygon = cs .xy_polygon_to_latlon_polygon (reference = reference_latlon , poly = polygon )
118
+
119
+ for i , point in enumerate (latlon_polygon .exterior .coords ):
120
+ assert (
121
+ cs .latlon_to_xy (
122
+ reference_latlon , cs .HelperLatLon (longitude = point [0 ], latitude = point [1 ])
123
+ )
124
+ ) == pytest .approx (
125
+ polygon .exterior .coords [i ]
126
+ ), "Incorrect conversion from xy polygon to latlon polygon"
127
+
128
+
106
129
# Test latlon_polygon_list_to_xy_polygon_list
107
- # just asserts that every point in every xy_polygon agrees with latlon_to_xy() from coord_systems
130
+ # just asserts that every point in every xy_polygon agrees with latlon_to_xy() from cs
108
131
@pytest .mark .parametrize (
109
132
"latlon_polygons, reference_point" ,
110
133
[
@@ -205,9 +228,7 @@ def test_latlon_polygons_to_xy_polygons(
205
228
latlon_polygons : List [Polygon ], reference_point : HelperLatLon
206
229
):
207
230
208
- xy_polygons = coord_systems .latlon_polygon_list_to_xy_polygon_list (
209
- latlon_polygons , reference_point
210
- )
231
+ xy_polygons = cs .latlon_polygon_list_to_xy_polygon_list (latlon_polygons , reference_point )
211
232
assert isinstance (xy_polygons , list )
212
233
assert len (xy_polygons ) == len (latlon_polygons )
213
234
@@ -221,7 +242,7 @@ def test_latlon_polygons_to_xy_polygons(
221
242
latlon_point = latlon_poly .exterior .coords [j ]
222
243
assert isinstance (xy_point , tuple )
223
244
assert xy_point == pytest .approx (
224
- coord_systems .latlon_to_xy (
245
+ cs .latlon_to_xy (
225
246
reference_point ,
226
247
HelperLatLon (longitude = latlon_point [0 ], latitude = latlon_point [1 ]),
227
248
)
@@ -238,7 +259,7 @@ def test_latlon_polygons_to_xy_polygons_empty_Polygon():
238
259
assert isinstance (empty_poly , Polygon )
239
260
assert empty_poly .is_empty
240
261
241
- result = coord_systems .latlon_polygon_list_to_xy_polygon_list ([empty_poly ], reference_point )
262
+ result = cs .latlon_polygon_list_to_xy_polygon_list ([empty_poly ], reference_point )
242
263
assert isinstance (result , List )
243
264
assert len (result ) == 1
244
265
assert result [0 ].is_empty
0 commit comments