def test_way_relation_update_only_resets_if_no_possible_found(self): wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) location_rad = wayRelation.bbox[ 0] # Location inside bbox but outside actual way (due to padding) wayRelation.update(location_rad, 0., 10.) self.assertTrue(wayRelation.is_location_in_bbox(location_rad)) self.assert_wayRelation_variables_reset(wayRelation)
def test_way_relation_update_resets_on_update(self): wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) self.make_wayRelation_location_dirty(wayRelation) location_rad = np.array([0., 0.]) # Location outside bbox wayRelation.update(location_rad, 0., 10.) self.assertFalse(wayRelation.is_location_in_bbox(location_rad)) self.assert_wayRelation_variables_reset(wayRelation)
def test_way_relation_updates_will_become_inactive_if_too_far_from_way( self): wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) # Location is 24.9 mts away from the way. There are 2 Lanes in this way. location_rad = np.radians( np.array([52.328634560607746, 13.445609877522788])) location_stdev = 5.5 # threshold is 4 * location_stdev + LANE_WIDTH distance_threshold = 4. * location_stdev + wayRelation.lanes * LANE_WIDTH / 2. wayRelation.update(location_rad, 0., location_stdev) self.assertTrue(wayRelation.active) self.assertLess(wayRelation._distance_to_way, distance_threshold) location_stdev = 5. wayRelation.update(location_rad, 0., location_stdev) self.assertFalse(wayRelation.active)
def test_way_relation_updates_in_the_correct_direction_with_correct_property_values( self): wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) location_rad = np.radians( np.array([52.32855593146639, 13.445320150125069])) bearing_rad = 0. wayRelation.update(location_rad, bearing_rad, 10.) self.assertTrue(wayRelation.is_location_in_bbox(location_rad)) self.assertEqual(wayRelation.direction, DIRECTION.FORWARD) self.assertEqual(wayRelation.ahead_idx, 17) self.assertEqual(wayRelation.behind_idx, 16) self.assertAlmostEqual(wayRelation._distance_to_way, 3.43290781621360) self.assertAlmostEqual(wayRelation._active_bearing_delta, 0.320717420388962) self.assertAlmostEqual(wayRelation.distance_to_node_ahead, 25.4998961709014) self.assertTrue(wayRelation.active) self.assertFalse(wayRelation.diverting) assert_array_almost_equal(wayRelation.location_rad, location_rad) self.assertEqual(wayRelation.bearing_rad, bearing_rad) self.assertIsNone(wayRelation._speed_limit) bearing_rad = 180. wayRelation.update(location_rad, bearing_rad, 10.) self.assertTrue(wayRelation.is_location_in_bbox(location_rad)) self.assertEqual(wayRelation.direction, DIRECTION.BACKWARD) self.assertEqual(wayRelation.ahead_idx, 16) self.assertEqual(wayRelation.behind_idx, 17) self.assertAlmostEqual(wayRelation._distance_to_way, 3.43290781621360) self.assertAlmostEqual(wayRelation._active_bearing_delta, 0.9507682562504284) self.assertAlmostEqual(wayRelation.distance_to_node_ahead, 11.11623371145368) self.assertTrue(wayRelation.active) self.assertFalse(wayRelation.diverting) assert_array_almost_equal(wayRelation.location_rad, location_rad) self.assertEqual(wayRelation.bearing_rad, bearing_rad) self.assertIsNone(wayRelation._speed_limit)
def test_way_relation_updates_will_update_diverting_correctly(self): wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) # Location is 24.9 mts away from the way. There are 2 Lanes in this way. location_rad = np.radians( np.array([52.328634560607746, 13.445609877522788])) location_stdev = 11. distance_threshold = 2. * location_stdev + wayRelation.lanes * LANE_WIDTH / 2. wayRelation.update(location_rad, 0., location_stdev) self.assertLess(wayRelation._distance_to_way, distance_threshold) self.assertFalse(wayRelation.diverting) location_stdev = 10. distance_threshold = 2. * location_stdev + wayRelation.lanes * LANE_WIDTH / 2. wayRelation.update(location_rad, 0., location_stdev) self.assertGreater(wayRelation._distance_to_way, distance_threshold) self.assertTrue(wayRelation.diverting)
def test_way_relation_updates_with_location_closest_to_way_when_multiple_possible( self): wayRelation = WayRelation(mockOSMWay_01_02_Loop) location_rad = np.radians( np.array([52.313303275461564, 13.437729236325788])) bearing_rad = np.radians(10.) wayRelation.update(location_rad, bearing_rad, 10.) self.assertTrue(wayRelation.is_location_in_bbox(location_rad)) self.assertEqual(wayRelation.direction, DIRECTION.BACKWARD) self.assertEqual(wayRelation.ahead_idx, 26) self.assertEqual(wayRelation.behind_idx, 27) self.assertAlmostEqual(wayRelation._distance_to_way, 10.151775235257011) self.assertAlmostEqual(wayRelation._active_bearing_delta, 0.06371131069242782) self.assertAlmostEqual(wayRelation.distance_to_node_ahead, 10.174073707120915) self.assertTrue(wayRelation.active) self.assertFalse(wayRelation.diverting) assert_array_almost_equal(wayRelation.location_rad, location_rad) self.assertEqual(wayRelation.bearing_rad, bearing_rad) self.assertIsNone(wayRelation._speed_limit)