예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
    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)
예제 #6
0
    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)
예제 #7
0
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)