예제 #1
0
    def testUtils(self):

        self.test('antipode1', antipode(89, 179), (-89, -1))
        self.test('antipode2', antipode(-89, -179), (89, 1))

        self.test('isantipode1', isantipode(89, 179, -89, -1), True)
        self.test('isantipode2', isantipode(-89, -179, 89, 1), True)
        self.test('isantipode3', isantipode(-89, -179, -89, -1), False)

        self.test('heightof0', heightOf(0, R_M), 2638958.23912, fmt='%.5f')
        self.test('heightof45', heightOf(45, R_M), 5401080.43931, fmt='%.5f')
        self.test('heightof90', heightOf(90, R_M), R_M)
        self.test('heightof135', heightOf(135, R_M), 5401080.43931, fmt='%.5f')

        self.test('horizon0', horizon(0), 0.0)
        self.test('horizon10Km', horizon(10000), '357099.672', fmt='%.3f')
        self.test('horizon30Kft',
                  horizon(10000, refraction=True),
                  '392310.704',
                  fmt='%.3f')
        self.test('horizon10Kft',
                  horizon(3000, refraction=True),
                  '214877.422',
                  fmt='%.3f')

        self.test('unroll180', fStr(unroll180(-90, 110, wrap=True)),
                  '-160.0, -250.0')
        self.test('unroll180', fStr(unroll180(-90, 110, wrap=False)),
                  '200.0, 110.0')

        self.test('unroll180', fStr(unroll180(-90, 830, wrap=True)),
                  '-160.0, -250.0')
        self.test('unroll180', fStr(unroll180(-90, 830, wrap=False)),
                  '920.0, 830.0')

        self.test('unroll180', fStr(unroll180(-110, 90, wrap=True)),
                  '-160.0, -270.0')
        self.test('unroll180', fStr(unroll180(-110, 90, wrap=False)),
                  '200.0, 90.0')

        self.test('unroll180', fStr(unroll180(-830, 90, wrap=True)),
                  '-160.0, -990.0')
        self.test('unroll180', fStr(unroll180(-830, 90, wrap=False)),
                  '920.0, 90.0')
예제 #2
0
    def testFormy(self):

        self.test('antipode1', antipode(89, 179), (-89, -1))
        self.test('antipode2', antipode(-89, -179), (89, 1))

        self.test('isantipode1', isantipode(89, 179, -89, -1), True)
        self.test('isantipode2', isantipode(-89, -179, 89, 1), True)
        self.test('isantipode3', isantipode(-89, -179, -89, -1), False)

        self.test('heightOf0', heightOf(0, R_M), 2638958.23912, fmt='%.5f')
        self.test('heightOf45', heightOf(45, R_M), 5401080.43931, fmt='%.5f')
        self.test('heightOf90', heightOf(90, R_M), R_M)
        self.test('heightOf135', heightOf(135, R_M), 5401080.43931, fmt='%.5f')

        self.test('horizon0', horizon(0), 0.0)
        self.test('horizon10Km', horizon(10000), '357099.672', fmt='%.3f')
        self.test('horizon30Kft',
                  horizon(10000, refraction=True),
                  '392310.704',
                  fmt='%.3f')
        self.test('horizon10Kft',
                  horizon(3000, refraction=True),
                  '214877.422',
                  fmt='%.3f')

        Boston = 42.3541165, -71.0693514
        Cleveland = 41.499498, -81.695391
        MtDiablo = 37.8816, -121.9142
        Newport = 41.49008, -71.312796
        NewYork = 40.7791472, -73.9680804
        # <http://GeographicLib.SourceForge.io/cgi-bin/GeodSolve>
        for ll1, ll2, x in ((Boston, NewYork, 298396.057), (Boston, Newport,
                                                            98071.559),
                            (Cleveland, NewYork,
                             653456.173), (NewYork, MtDiablo, 4094953.628)):
            abx = ll1 + ll2 + (x, )
            self.testDistances(*abx)
예제 #3
0
    def testFormy(self):

        self.test('antipode1', antipode(89, 179), (-89.0, -1.0))
        self.test('antipode2', antipode(-89, -179), (89.0, 1.0))

        # roughly, Newport to New York
        self.test('bearing1',
                  bearing(41.49, -71.31, 40.78, -73.97),
                  251.364,
                  fmt='%.3f')
        self.test('bearing2',
                  bearing(41.49, -71.31, 40.78, -73.97, final=False),
                  251.364,
                  fmt='%.3f')
        self.test('bearing3',
                  bearing(41.49, -71.31, 40.78, -73.97, final=True),
                  249.614,
                  fmt='%.3f')

        self.test('isantipode1', isantipode(89, 179, -89, -1), True)
        self.test('isantipode2', isantipode(-89, -179, 89, 1), True)
        self.test('isantipode3', isantipode(-89, -179, -89, -1), False)

        self.test('isantipode4', isantipode_(*map1(radians, 89, 179, -89, -1)),
                  True)
        self.test('isantipode5', isantipode_(*map1(radians, -89, -179, 89, 1)),
                  True)
        self.test('isantipode6',
                  isantipode_(*map1(radians, -89, -179, -89, -1)), False)

        self.test('heightOf0', heightOf(0, R_M), 2638958.23912, fmt='%.5f')
        self.test('heightOf45', heightOf(45, R_M), 5401080.43931, fmt='%.5f')
        self.test('heightOf90', heightOf(90, R_M), R_M, fmt='%.5f')  # Height
        self.test('heightOf135', heightOf(135, R_M), 5401080.43931, fmt='%.5f')

        self.test('horizon0', horizon(0), 0.0)
        self.test('horizon10Km', horizon(10000), '357099.672', fmt='%.3f')
        self.test('horizon30Kft',
                  horizon(10000, refraction=True),
                  '392310.704',
                  fmt='%.3f')
        self.test('horizon10Kft',
                  horizon(3000, refraction=True),
                  '214877.422',
                  fmt='%.3f')

        #              lat          lon
        Auckland = -36.8485, 174.7633
        Boston = 42.3541165, -71.0693514
        Cleveland = 41.499498, -81.695391
        LosAngeles = 34.0522, -118.2437
        MtDiablo = 37.8816, -121.9142
        Newport = 41.49008, -71.312796
        NewYork = 40.7791472, -73.9680804
        Santiago = -33.4489, -70.6693
        X = 25.2522, 55.28
        Y = 14.6042, 120.982
        # <https://GeographicLib.SourceForge.io/cgi-bin/GeodSolve>, <https://www.Distance.to>
        for i, (ll1, ll2, expected) in enumerate((
            (Boston, NewYork, 298009.404),  # ..328,722.580        370 km
            (Boston, Newport, 98164.988),  # ..106,147.318         99 km
            (Cleveland, NewYork, 651816.987),  # ..736,534.840        536 km
            (NewYork, MtDiablo, 4084985.780),  # ..4,587,896.452    3,952 km
            (Auckland, Santiago, 9670051.606),  # ..15,045,906.074   9,665 km
            (Auckland, LosAngeles,
             10496496.577),  # ..13,002,288.857  10,940 km
            (LosAngeles, Santiago, 8998396.669),  # ..10,578,638.162   8,993 km
            (X, Y, 6906867.946))):  # ..6916,085.326     6,907 km
            self.testDistances(str(i + 1), *(ll1 + ll2), x=expected)

        # Thomas' S2, page 153 <https://apps.DTIC.mil/dtic/tr/fulltext/u2/703541.pdf>
        self.testDistances2('9',
                            parseDMS('75 57 42.053'),
                            0,
                            parseDMS('17  5 21.296'),
                            parseDMS('85 31 54.631'),
                            x=8044806.076,
                            datum=Datums.NAD27)  # Clarke1866 ellipsoid

        self.test(intersections2.__name__,
                  intersections2.__module__,
                  formy.__name__,
                  nl=1)
        for datum in (None, R_M, Datums.WGS84):
            self.testIntersections2(datum)

        n = radical2.__name__
        self.test(n, radical2(10, 4, 8), '(0.26, 2.6)', nl=1)
        self.test(n, radical2(10, 8, 4), '(0.74, 7.4)')
        self.test(n, radical2(10, 5, 5), '(0.5, 5.0)')

        try:  # coverage
            self.test(n, radical2(10, 5, 4), IntersectionError.__name__, nt=1)
        except Exception as x:
            self.test(IntersectionError.__name__,
                      str(x),
                      'distance (10.0), ...',
                      known=True,
                      nt=1)

        n = LimitError.__name__
        t = limiterrors(True)
        try:  # coverage
            self.test(n, equirectangular(0, 0, 60, 120), n)
        except Exception as x:
            self.test(n, str(x), 'delta exceeds ...', known=True)
        limiterrors(t)