def test_GeodSolve2(self): # Check fix for antipodal prolate bug found 2010-09-04 geod = FrameE(6.4e6, -1/150.0) lat1, lon1, lat2, lon2 = np.deg2rad((0.07476, 0, -0.07476, 180)) s_ab, az_a, az_b = geod.inverse(lat1, lon1, lat2, lon2) az_a, az_b = np.rad2deg((az_a, az_b)) self.assertAlmostEqual(az_a, 90.00078, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00078, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20106193, delta=0.5) lat1, lon1, lat2, lon2 = np.deg2rad((0.1, 0, -0.1, 180)) s_ab, az_a, az_b = geod.inverse(lat1, lon1, lat2, lon2) az_a, az_b = np.rad2deg((az_a, az_b)) self.assertAlmostEqual(az_a, 90.00105, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00105, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20106193, delta=0.5)
def test_GeodSolve2(self): # Check fix for antipodal prolate bug found 2010-09-04 geod = FrameE(6.4e6, -1 / 150.0) lat1, lon1, lat2, lon2 = np.deg2rad((0.07476, 0, -0.07476, 180)) s_ab, az_a, az_b = geod.inverse(lat1, lon1, lat2, lon2) az_a, az_b = np.rad2deg((az_a, az_b)) self.assertAlmostEqual(az_a, 90.00078, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00078, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20106193, delta=0.5) lat1, lon1, lat2, lon2 = np.deg2rad((0.1, 0, -0.1, 180)) s_ab, az_a, az_b = geod.inverse(lat1, lon1, lat2, lon2) az_a, az_b = np.rad2deg((az_a, az_b)) self.assertAlmostEqual(az_a, 90.00105, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00105, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20106193, delta=0.5)
def test_GeodSolve12(self): # Check fix for inverse geodesics on extreme prolate/oblate # ellipsoids Reported 2012-08-29 Stefan Guenther # <*****@*****.**>; fixed 2012-10-07 geod = FrameE(89.8, -1.83) lat1, lon1, lat2, lon2 = np.deg2rad((0, 0, -10, 160)) s_ab, az_a, az_b = geod.inverse(lat1, lon1, lat2, lon2) az_a, az_b = np.rad2deg((az_a, az_b)) self.assertAlmostEqual(az_a, 120.27, delta=1e-2) self.assertAlmostEqual(az_b, 105.15, delta=1e-2) self.assertAlmostEqual(s_ab, 266.7, delta=1e-1)
def test_GeodSolve33(self): # Check max(-0.0,+0.0) issues 2015-08-22 (triggered by bugs in # Octave -- sind(-0.0) = +0.0 -- and in some version of Visual # Studio -- fmod(-0.0, 360.0) = +0.0. s_ab, az_a, az_b = wgs84.inverse(0, 0, 0, 179, degrees=True) self.assertAlmostEqual(az_a, 90.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19926189, delta=0.5) s_ab, az_a, az_b = wgs84.inverse(0, 0, 0, 179.5, degrees=True) self.assertAlmostEqual(az_a, 55.96650, delta=0.5e-5) self.assertAlmostEqual(az_b, 124.03350, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19980862, delta=0.5) s_ab, az_a, az_b = wgs84.inverse(0, 0, 0, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20003931, delta=0.5) s_ab, az_a, az_b = wgs84.inverse(0, 0, 1, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19893357, delta=0.5) geod = FrameE(6.4e6, 0) s_ab, az_a, az_b = geod.inverse(0, 0, 0, 179, degrees=True) self.assertAlmostEqual(az_a, 90.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19994492, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 0, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20106193, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 1, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19994492, delta=0.5) geod = FrameE(6.4e6, -1/300.0) s_ab, az_a, az_b = geod.inverse(0, 0, 0, 179, degrees=True) self.assertAlmostEqual(az_a, 90.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19994492, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 0, 180, degrees=True) self.assertAlmostEqual(az_a, 90.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20106193, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 0.5, 180, degrees=True) self.assertAlmostEqual(az_a, 33.02493, delta=0.5e-5) self.assertAlmostEqual(az_b, 146.97364, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20082617, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 1, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20027270, delta=0.5)
def test_GeodSolve33(self): # Check max(-0.0,+0.0) issues 2015-08-22 (triggered by bugs in # Octave -- sind(-0.0) = +0.0 -- and in some version of Visual # Studio -- fmod(-0.0, 360.0) = +0.0. s_ab, az_a, az_b = wgs84.inverse(0, 0, 0, 179, degrees=True) self.assertAlmostEqual(az_a, 90.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19926189, delta=0.5) s_ab, az_a, az_b = wgs84.inverse(0, 0, 0, 179.5, degrees=True) self.assertAlmostEqual(az_a, 55.96650, delta=0.5e-5) self.assertAlmostEqual(az_b, 124.03350, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19980862, delta=0.5) s_ab, az_a, az_b = wgs84.inverse(0, 0, 0, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20003931, delta=0.5) s_ab, az_a, az_b = wgs84.inverse(0, 0, 1, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19893357, delta=0.5) geod = FrameE(6.4e6, 0) s_ab, az_a, az_b = geod.inverse(0, 0, 0, 179, degrees=True) self.assertAlmostEqual(az_a, 90.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19994492, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 0, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20106193, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 1, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19994492, delta=0.5) geod = FrameE(6.4e6, -1 / 300.0) s_ab, az_a, az_b = geod.inverse(0, 0, 0, 179, degrees=True) self.assertAlmostEqual(az_a, 90.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 19994492, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 0, 180, degrees=True) self.assertAlmostEqual(az_a, 90.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, 90.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20106193, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 0.5, 180, degrees=True) self.assertAlmostEqual(az_a, 33.02493, delta=0.5e-5) self.assertAlmostEqual(az_b, 146.97364, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20082617, delta=0.5) s_ab, az_a, az_b = geod.inverse(0, 0, 1, 180, degrees=True) self.assertAlmostEqual(az_a, 0.00000, delta=0.5e-5) self.assertAlmostEqual(az_b, -180.00000, delta=0.5e-5) self.assertAlmostEqual(s_ab, 20027270, delta=0.5)
def test_geo_solve12(): # Check fix for inverse geodesics on extreme prolate/oblate # ellipsoids Reported 2012-08-29 Stefan Guenther # <*****@*****.**>; fixed 2012-10-07 prolate_geod = FrameE(89.8, -1.83) lat1, lon1, lat2, lon2 = (0, 0, -10, 160) s_ab, az_a, az_b = prolate_geod.inverse(lat1, lon1, lat2, lon2, degrees=True) assert az_a == approx(120.27, abs=1e-2) assert az_b == approx(105.15, abs=1e-2) assert s_ab == approx(266.7, abs=1e-1)