Ejemplo n.º 1
0
    def testUnregister(self):
        self.subtitle(named, 'ing %s ' % ('unregister',))
        from pygeodesy import Conics, Ellipsoids, RefFrames, Transforms

        self.test('Conics', len(Conics), 8)
        for n, c in tuple(Conics.items()):
            c.unregister()  # coverage _NamedEnum.unregister
            self.test('Conics.' + n + '.unregister', getattr(Conics, n, None), None)
        self.test('Conics', len(Conics), 0)

        self.test('Datums', len(Datums), 18)
        for n, d in tuple(Datums.items()):
            Datums.unregister(d)  # coverage _NamedEnum.unregister
            self.test('Datums.unregister(%s)' % (n,), getattr(Datums, n, None), None)
        self.test('Datums', len(Datums), 0)

        self.test('Ellipsoids', len(Ellipsoids), 41)
        for n, e in tuple(Ellipsoids.items()):
            e.unregister()  # coverage _NamedEnum.unregister
            self.test('Ellipsoids.' + n + '.unregister', getattr(Ellipsoids, n, None), None)
        self.test('Ellipsoids', len(Ellipsoids), 0)

        self.test('RefFrames', len(RefFrames), 12)
        for n, r in tuple(RefFrames.items()):
            r.unregister()  # coverage _NamedEnum.unregister
            self.test('RefFrames.' + n + '.unregister', getattr(RefFrames, n, None), None)
        self.test('RefFrames', len(RefFrames), 0)

        self.test('Transforms', len(Transforms), 18)
        for n, x in tuple(Transforms.items()):
            x.unregister()  # coverage _NamedEnumItem.unregister
            self.test('Transforms.' + n + '.unregister', getattr(Transforms, n, None), None)
        self.test('Transforms', len(Transforms), 0)
Ejemplo n.º 2
0
    def testDatums(self):
        # datum module tests
        E = Ellipsoid(1000, 1000, 0, name='TestEllipsiod')
        self.test('ellipsoid', E is Ellipsoids.TestEllipsiod, True)
        #       print(Ellipsoid())

        T = Transform(name='TestTransform')
        self.test('transform', T is Transforms.TestTransform, True)
        #       print(Transform())

        D = Datum(E, T, name='TestDatum')
        self.test('datum', D is Datums.TestDatum, True)
        #       print(Datum())

        e = Ellipsoids.unregister('TestEllipsiod')
        self.test(e.name, e, E)
        t = Transforms.unregister('TestTransform')
        self.test(t.name, t, T)
        d = Datums.unregister('TestDatum')
        self.test(d.name, d, D)

        T = Transforms.ED50
        t = T.inverse().inverse("ED50_")
        self.test('ED50.inverse().inverse()', t == T, True)
Ejemplo n.º 3
0
    t.testNamedTuples(ecef)
    t.testNamedTuples(elliptic)
    t.testNamedTuples(frechet)
    t.testNamedTuples(hausdorff)

    # test __doc__ strings in all pygeodesy modules
    for m in glob(os_path.join(PyGeodesy_dir, 'pygeodesy', '*.py')):
        with open(m, 'rb') as f:
            py = f.read()
            if isinstance(py, bytes):  # Python 3+
                py = py.decode('utf-8')
            t.testNamed__doc__(m[len(PyGeodesy_dir):], py)

    t.testNamed_xtend(named)

    for n, d in tuple(Datums.items()):
        Datums.unregister(d)  # coverage _NamedEnum.unregister
        t.test('unregister(%s)' % (n,), getattr(Datums, n, None), None)
    t.test('Datums', len(Datums), 0)

    for n, e in tuple(Transforms.items()):
        e.unregister()  # coverage _NamedEnumItem.unregister
        t.test(n + '.unregister', getattr(Transforms, n, None), None)
    t.test('Transforms', len(Transforms), 0)

    Nd = named.Neighbors8Dict  # coverage
    nd = Nd(**dict((t, t) for t in (Nd._Keys_ + ('name',))))
    t.test('nd.name', nd.name, 'name')
    t.test('nd.named', nd.named, 'name')
    del nd.name
    t.test('nd.named', nd.named, Nd.__name__)
Ejemplo n.º 4
0
    def testDatum(self):
        # datum module tests
        E = Ellipsoid(1000, 1000, 0, name='TestEllipsiod')
        self.test('ellipsoid', E is Ellipsoids.TestEllipsiod, True)
        #       print(Ellipsoid())

        T = Transform(name='TestTransform')
        self.test('transform', T is Transforms.TestTransform, True)
        #       print(Transform())

        D = Datum(E, T, name='TestDatum')
        self.test('datum', D is Datums.TestDatum, True)
        #       print(Datum())

        e = Ellipsoids.unregister('TestEllipsiod')
        self.test(e.name, e, E)
        t = Transforms.unregister('TestTransform')
        self.test(t.name, t, T)
        d = Datums.unregister('TestDatum')
        self.test(d.name, d, D)

        T = Transforms.ED50
        t = T.inverse().inverse("ED50_")
        self.test('ED50.inverse().inverse()', t == T, True)

        E = Ellipsoids.WGS84
        self.test('R1', E.R1, R_M, fmt='%.4f')
        self.test('R2', E.R2, '6371007.2', fmt='%.1f')
        self.test('R3', E.R3, '6371000.8', fmt='%.1f')
        self.test('Rr', E.Rr, '6367449.1', fmt='%.1f')  # 6367445.0
        self.test('Rs', E.Rs, '6367435.7', fmt='%.1f')

        self.test('Rgeocentric', E.Rgeocentric(0), '6378137.000', fmt='%.3f')
        self.test('Rgeocentric', E.Rgeocentric(45), '6367489.544', fmt='%.3f')
        self.test('Rgeocentric', E.Rgeocentric(90), '6356752.314', fmt='%.3f')

        self.test('Rlat', E.Rlat(0), '6378137.000', fmt='%.3f')
        self.test('Rlat', E.Rlat(45), '6367444.657', fmt='%.3f')
        self.test('Rlat', E.Rlat(90), '6356752.314', fmt='%.3f')

        self.test('distance2', fStr(E.distance2(0, 0, 1, 1), prec=3),
                  '156903.472, 45.192')
        self.test('distance2', fStr(E.distance2(0, 0, 10, 10), prec=3),
                  '1569034.719, 45.192')
        self.test('distance2', fStr(E.distance2(40, 40, 50, 50), prec=3),
                  '1400742.676, 37.563')
        self.test('distance2', fStr(E.distance2(70, 70, 80, 80), prec=3),
                  '1179164.848, 18.896')

        self.test('roc2', fStr(E.roc2(0), prec=3), '6335439.327, 6378137.0')
        self.test('roc2', fStr(E.roc2(45), prec=3), '6367381.816, 6388838.29')
        self.test('roc2', fStr(E.roc2(90), prec=3), '6399593.626, 6399593.626')

        self.test('rocBearing', E.rocBearing(0, 0), '6335439.327', fmt='%.3f')
        self.test('rocBearing',
                  E.rocBearing(45, 45),
                  '6378092.008',
                  fmt='%.3f')
        self.test('rocBearing', E.rocBearing(90, 0), '6399593.626', fmt='%.3f')

        self.test('rocGauss', E.rocGauss(0), '6356752.314', fmt='%.3f')
        self.test('rocGauss', E.rocGauss(45), '6378101.030', fmt='%.3f')
        self.test('rocGauss', E.rocGauss(90), '6399593.626', fmt='%.3f')

        self.test('rocMean', E.rocMean(0), '6356716.465', fmt='%.3f')
        self.test('rocMean', E.rocMean(45), '6378092.008', fmt='%.3f')
        self.test('rocMean', E.rocMean(90), '6399593.626', fmt='%.3f')

        E = Datums.WGS84.ellipsoid
        e = (E.a - E.b) / (E.a + E.b) - E.n
        t = (E.toStr(prec=10), 'A=%.10f, e=%.10f, f_=%.10f, n=%.10f(%.10e)' %
             (E.A, E.e, E.f_, E.n, e), 'Alpha6=(%s)' %
             (fStr(E.Alpha6, prec=12, fmt='%.*e', ints=True), ),
             'Beta6=(%s)' % (fStr(E.Beta6, prec=12, fmt='%.*e', ints=True), ))
        self.test(
            'WGS84', t[0],
            "name='WGS84', a=6378137, b=6356752.3142499998, f_=298.257223563, f=0.0033528107, e=0.0818191908, e2=0.00669438, e22=0.0067394967, n=0.0016792204, R1=6371008.7714166669, R2=6371007.180920884, R3=6371000.7900107643, Rr=6367449.1458250266, Rs=6367435.6797186071"
        )
        self.test(
            'WGS84', t[1],
            "A=6367449.1458234144, e=0.0818191908, f_=298.2572235630, n=0.0016792204(-3.7914875232e-13)"
        )
        self.test(
            'WGS84', t[2],
            "Alpha6=(0, 8.377318206245e-04, 7.608527773572e-07, 1.197645503329e-09, 2.429170607201e-12, 5.711757677866e-15, 1.491117731258e-17)"
        )
        self.test(
            'WGS84', t[3],
            "Beta6=(0, 8.377321640579e-04, 5.905870152220e-08, 1.673482665284e-1, 2.164798040063e-13, 3.787978046169e-16, 7.248748890694e-19)"
        )
Ejemplo n.º 5
0
    def testDatum(self):
        # datum module tests
        E = Ellipsoid(1000, 1000, 0, name='TestEllipsiod')
        self.test('ellipsoid', E is Ellipsoids.TestEllipsiod, True)
        #       print(Ellipsoid())

        T = Transform(name='TestTransform')
        self.test('transform', T is Transforms.TestTransform, True)
        #       print(Transform())

        D = Datum(E, T, name='TestDatum')
        self.test('datum', D is Datums.TestDatum, True)
        #       print(Datum())

        e = Ellipsoids.unregister('TestEllipsiod')
        self.test(e.name, e, E)
        t = Transforms.unregister('TestTransform')
        self.test(t.name, t, T)
        d = Datums.unregister('TestDatum')
        self.test(d.name, d, D)

        T = Transforms.ED50
        t = T.inverse().inverse("ED50_")
        self.test('ED50.inverse().inverse()', t == T, True)

        # to show WGS84 and NAD83 are identical up to 3 decimals
        for E in (Ellipsoids.WGS84, Ellipsoids.GRS80):  # NAD83
            self.test('R1', E.R1, R_M, fmt='%.4f')
            self.test('R2', E.R2, '6371007.2', fmt='%.1f')
            self.test('R3', E.R3, '6371000.8', fmt='%.1f')
            self.test('Rr', E.Rr, '6367449.1', fmt='%.1f')  # 6367445.0
            self.test('Rs', E.Rs, '6367435.7', fmt='%.1f')

            self.test('Rgeocentric',
                      E.Rgeocentric(0),
                      '6378137.000',
                      fmt='%.3f')
            self.test('Rgeocentric',
                      E.Rgeocentric(45),
                      '6367489.544',
                      fmt='%.3f')
            self.test('Rgeocentric',
                      E.Rgeocentric(90),
                      '6356752.314',
                      fmt='%.3f')

            self.test('Rlat', E.Rlat(0), '6378137.000', fmt='%.3f')
            self.test('Rlat', E.Rlat(45), '6367444.657', fmt='%.3f')
            self.test('Rlat', E.Rlat(90), '6356752.314', fmt='%.3f')

            self.test('distance2', fStr(E.distance2(0, 0, 1, 1), prec=3),
                      '156903.472, 45.192')
            self.test('distance2', fStr(E.distance2(0, 0, 10, 10), prec=3),
                      '1569034.719, 45.192')
            self.test('distance2', fStr(E.distance2(40, 40, 50, 50), prec=3),
                      '1400742.676, 37.563')
            self.test('distance2', fStr(E.distance2(70, 70, 80, 80), prec=3),
                      '1179164.848, 18.896')

            self.test('roc2', fStr(E.roc2(0), prec=3),
                      '6335439.327, 6378137.0')
            self.test('roc2', fStr(E.roc2(45), prec=3),
                      '6367381.816, 6388838.29')
            self.test('roc2', fStr(E.roc2(90), prec=3),
                      '6399593.626, 6399593.626')

            self.test('rocBearing',
                      E.rocBearing(0, 0),
                      '6335439.327',
                      fmt='%.3f')
            self.test('rocBearing',
                      E.rocBearing(45, 45),
                      '6378092.008',
                      fmt='%.3f')
            self.test('rocBearing',
                      E.rocBearing(90, 0),
                      '6399593.626',
                      fmt='%.3f')

            self.test('rocGauss', E.rocGauss(0), '6356752.314', fmt='%.3f')
            self.test('rocGauss', E.rocGauss(45), '6378101.030', fmt='%.3f')
            self.test('rocGauss', E.rocGauss(90), '6399593.626', fmt='%.3f')

            self.test('rocMean', E.rocMean(0), '6356716.465', fmt='%.3f')
            self.test('rocMean', E.rocMean(45), '6378092.008', fmt='%.3f')
            self.test('rocMean', E.rocMean(90), '6399593.626', fmt='%.3f')

            self.test('rocMeridional', fStr(E.rocMeridional(0), prec=3),
                      '6335439.327')
            self.test('rocMeridional', fStr(E.rocMeridional(45), prec=3),
                      '6367381.816')
            self.test('rocMeridional', fStr(E.rocMeridional(90), prec=3),
                      '6399593.626')

            self.test('rocPrimeVertical', fStr(E.rocPrimeVertical(0), prec=3),
                      '6378137.0')
            self.test('rocPrimeVertical', fStr(E.rocPrimeVertical(45), prec=3),
                      '6388838.29')
            self.test('rocPrimeVertical', fStr(E.rocPrimeVertical(90), prec=3),
                      '6399593.626')

        E = Ellipsoids.WGS84.copy()
        self.test('WGS84.copy', E is not Ellipsoids.WGS84, True)
        self.test('WGS84.copy', E == Ellipsoids.WGS84, True)
        self.test('WGS84.find', Ellipsoids.find(E), None)

        t = E.toStr(prec=10)
        self.test(
            'WGS84', t,
            "name='WGS84', a=6378137, b=6356752.3142499998, f_=298.257223563, f=0.0033528107, e=0.0818191908, e2=0.00669438, e12=0.99330562, e22=0.0067394967, n=0.0016792204, R1=6371008.7714166669, R2=6371007.180920884, R3=6371000.7900107643, Rr=6367449.1458250266, Rs=6367435.6797186071"
        )
        e = (E.a - E.b) / (E.a + E.b) - E.n
        t = 'A=%.10f, e=%.10f, f_=%.10f, n=%.10f(%.10e)' % (E.A, E.e, E.f_,
                                                            E.n, e)
        self.test(
            'WGS84.', t,
            "A=6367449.1458234144, e=0.0818191908, f_=298.2572235630, n=0.0016792204(-3.7914875232e-13)"
        )

        def _AB(E, K, A, B):
            E.KsOrder = K
            self.test('WGS84.AlphaKs',
                      fStr(E.AlphaKs, prec=12, fmt='%.*e', ints=True), A)
            self.test('WGS84.BetaKs ',
                      fStr(E.BetaKs, prec=12, fmt='%.*e', ints=True), B)

        _AB(
            E, 8,
            '8.377318206245e-04, 7.608527773572e-07, 1.197645503242e-09, 2.429170680397e-12, 5.711818370428e-15, 1.479997931380e-17, 4.107624109371e-20, 1.210785038923e-22',
            '8.377321640579e-04, 5.905870152220e-08, 1.673482665344e-10, 2.164798110491e-13, 3.787930968626e-16, 7.236769021816e-19, 1.493479824778e-21, 3.259522545838e-24'
        )

        _AB(
            E, 6,
            '8.377318206245e-04, 7.608527773572e-07, 1.197645503329e-09, 2.429170607201e-12, 5.711757677866e-15, 1.491117731258e-17',
            '8.377321640579e-04, 5.905870152220e-08, 1.673482665284e-10, 2.164798040063e-13, 3.787978046169e-16, 7.248748890694e-19'
        )

        _AB(
            E, 4,
            '8.377318206304e-04, 7.608527714249e-07, 1.197638001561e-09, 2.443376194522e-12',
            '8.377321640601e-04, 5.905869567934e-08, 1.673488880355e-10, 2.167737763022e-13'
        )