Example #1
0
    def test3(self, LatLon):
        self.subtitle(points, LatLon=LatLon)

        p = LatLon(45, 1), LatLon(45, 2), LatLon(46, 2), LatLon(46, 1)
        self.test('areaOf', areaOf(p, radius=R_MA), '8.811228e+09', fmt='%.6e')
        self.test(
            'centroidOf',
            fStr(centroidOf(p), prec=6),
            '45.5, 1.5',
        )
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_MA),
                  '2.673633e+05',
                  fmt='%.6e')
        self.test('isclockwise', isclockwise(p), False)

        p = LatLon(0, 0), LatLon(1, 0), LatLon(0, 1)
        self.test('areaOf', areaOf(p, radius=R_MA), '7.086883e+09', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_MA),
                  '2.687460e+05',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fStr(centroidOf(p), prec=6),
            '0.333333, 0.333333',
        )
        self.test('isclockwise', isclockwise(p), True)

        p = LatLon(0, 1), LatLon(1, 2), LatLon(2, 1), LatLon(1, 0)
        self.test('areaOf', areaOf(p, radius=R_M), '2.827856e+10', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '4.717039e+05',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fStr(centroidOf(p), prec=6),
            '1.0, 1.0',
        )
        self.test('isclockwise', isclockwise(p), False)

        p = LatLon(45, -70), LatLon(60, 0), LatLon(20, 110), LatLon(80, 170)
        self.test('areaOf', areaOf(p, radius=R_M), '1.047657e+12', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '2.332643e+07',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fStr(centroidOf(p), prec=3),
            '22.536, -164.928',
        )
        self.test('isclockwise', isclockwise(p), True)

        p = LatLon(0, 0), LatLon(0, 3), LatLon(3, 3), LatLon(3, 2), \
            LatLon(1, 2), LatLon(1, 1), LatLon(2, 1), LatLon(2, 0)
        self.test('areaOf', areaOf(p, radius=R_M), '8.482014e+10', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '1.334104e+06',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fStr(centroidOf(p), prec=3),
            '1.167, 1.667',
        )
        self.test('isclockwise', isclockwise(p), False)

        p = LatLon(-20, -180), LatLon(5, -160), LatLon(0,
                                                       -60), LatLon(-60, -160)
        self.test('areaOf', areaOf(p, radius=R_M), '5.151974e+13', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '2.638608e+07',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fStr(centroidOf(p), prec=3),
            '-19.444, -133.333',
        )
        self.test('isclockwise', isclockwise(p), True)

        # <https://GeographicLib.SourceForge.io/scripts/geod-calc.html>
        p = LatLon(-63.1,  -58), LatLon(-72.9,  -74), LatLon(-71.9, -102), \
            LatLon(-74.9, -102), LatLon(-74.3, -131), LatLon(-77.5, -163), \
            LatLon(-77.4,  163), LatLon(-71.7,  172), LatLon(-65.9,  140), \
            LatLon(-65.7,  113), LatLon(-66.6,   88), LatLon(-66.9,   59), \
            LatLon(-69.8,   25), LatLon(-70.0,   -4), LatLon(-71.0,  -14), \
            LatLon(-77.3,  -33), LatLon(-77.9,  -46), LatLon(-74.7,  -61)  # on/around south pole!
        self.test('areaOf',
                  areaOf(p, radius=R_M),
                  '1.366270e+13',
                  fmt='%.6e',
                  known=True)  # 1.366270368002013e+13'
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '1.366270e+13',
                  fmt='%.6e',
                  known=True)  # 1.366270368002013e+13
        self.test(
            'centroidOf',
            fStr(centroidOf(p), prec=3),
            '-72.112, 92.032',
        )
        self.test('isclockwise', isclockwise(p), False)

        p = LatLon(-66.6, -88)
        self.test('to2ab', fStr(p.to2ab(), prec=6), '-1.162389, -1.53589')

        q = p.classof(-66.6, -88)
        self.test('classof', q, p)
        try:
            t = p.others(q)
        except Exception as x:
            t = str(x)
        self.test('others', t, None)

        self.testCopy(p)
Example #2
0
    def test2(self, pts, npt, psxy=False):

        clas_ = classname(pts) + '.'

        def _test(name, *args, **kwds):
            # prefix class to test name
            self.test(clas_ + name, *args, **kwds)

        if Sequence:  # check abstact base class conformance
            _test('ABC', isinstance(pts, Sequence), True)

        e = pts.epsilon
        _test('epsilon', e, EPS)
        pts.epsilon = 0
        _test('epsilon', pts.epsilon, 0.0)
        pts.epsilon = e

        n = len(pts) // 6  # 0 < some number < len(pts)
        _test('len',    len(pts), len(npt))
        _test('iter',   len(tuple(iter(pts))), len(npt))
        if hasattr(npt, 'shape'):
            _test('shape',  npt.shape, pts.shape)
        _test('slice1', len(pts[:n]), n)
        _test('slice2', type(pts[1:n:2]), type(pts))
        _test('slice3', pts[1:n][0], pts[1])
        _test('strepr', str(pts), repr(pts))
        if hasattr(pts, 'subset'):
            _test('subset', type(pts.subset(range(n))), type(npt))  # , nt=1)

        for i, p in ((10, (52.224006, -0.707747)),
                     (20, (52.232688, -0.714608)),
                     (30, (52.234375, -0.714348)),
                     (40, (52.237239, -0.712557)),
                     (50, (52.24023,  -0.709919)),
                     (60, (52.240745, -0.707042))):

            if psxy:  # flip to x, y tuple
                p = tuple(reversed(p))

            _test('count', pts.count(p), 1)
            _test('index', pts.index(p), i)
            _test('rfind', pts.rfind(p), i)
            _test('in', p in pts, True)

            p = tuple(reversed(p))
            _test('count', pts.count(p), 0)
            _test('find', pts.find(p), -1)
            _test('rfind', pts.rfind(p), -1)
            _test('not in', p not in pts, True)

        pts = pts[::6]
        for i, p in enumerate(pts):
            _test('enumerate[%s]' % (i,), p, pts[i])

        i = len(pts)
        for p in reversed(pts):
            i -= 1
            _test('reversed[%s]' % (i,), p, pts[i])

        p = LatLon_(45, 1), LatLon_(45, 2), LatLon_(46, 2), LatLon_(46, 1)
        self.test('areaOf', areaOf(p, radius=R_MA), '8.811228e+09', fmt='%.6e')
        self.test('isclockwise', isclockwise(p), False)

        p = LatLon_(0, 0), LatLon_(1, 0), LatLon_(0, 1)
        self.test('areaOf', areaOf(p, radius=R_MA), '7.09e+09', fmt='%.2e')
        self.test('isclockwise', isclockwise(p), True)
Example #3
0
    def test3(self, LatLon):
        self.subtitle(points, LatLon=LatLon)

        p = LatLon(45, 1), LatLon(45, 2), LatLon(46, 2), LatLon(46, 1)
        self.test('areaOf', areaOf(p, radius=R_MA), '8.811228e+09', fmt='%.6e')
        self.test(
            'centroidOf',
            fstr(centroidOf(p), prec=6),
            '45.5, 1.5',
        )
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_MA),
                  '2.673633e+05',
                  fmt='%.6e')
        self.test('isclockwise', isclockwise(p), False)

        p = LatLon(0, 0), LatLon(1, 0), LatLon(0, 1)
        self.test('areaOf', areaOf(p, radius=R_MA), '7.086883e+09', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_MA),
                  '2.687460e+05',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fstr(centroidOf(p), prec=6),
            '0.333333, 0.333333',
        )
        self.test('isclockwise', isclockwise(p), True)

        p = LatLon(0, 1), LatLon(1, 2), LatLon(2, 1), LatLon(1, 0)
        self.test('areaOf', areaOf(p, radius=R_M), '2.827856e+10', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '4.717039e+05',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fstr(centroidOf(p), prec=6),
            '1.0, 1.0',
        )
        self.test('isclockwise', isclockwise(p), False)

        p = LatLon(45, -70), LatLon(60, 0), LatLon(20, 110), LatLon(80, 170)
        self.test('areaOf', areaOf(p, radius=R_M), '1.047657e+12', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '2.332643e+07',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fstr(centroidOf(p), prec=3),
            '22.536, -164.928',
        )
        self.test('isclockwise', isclockwise(p), True)

        p = LatLon(0, 0), LatLon(0, 3), LatLon(3, 3), LatLon(3, 2), \
            LatLon(1, 2), LatLon(1, 1), LatLon(2, 1), LatLon(2, 0)
        self.test('areaOf', areaOf(p, radius=R_M), '8.482014e+10', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '1.334104e+06',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fstr(centroidOf(p), prec=3),
            '1.167, 1.667',
        )
        self.test('isclockwise', isclockwise(p), False)

        p = LatLon(-20, -180), LatLon(5, -160), LatLon(0,
                                                       -60), LatLon(-60, -160)
        self.test('areaOf', areaOf(p, radius=R_M), '5.151974e+13', fmt='%.6e')
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '2.638608e+07',
                  fmt='%.6e')
        self.test(
            'centroidOf',
            fstr(centroidOf(p), prec=3),
            '-19.444, -133.333',
        )
        self.test('isclockwise', isclockwise(p), True)

        # <https://GeographicLib.SourceForge.io/scripts/geod-calc.html>
        p = LatLon(-63.1,  -58), LatLon(-72.9,  -74), LatLon(-71.9, -102), \
            LatLon(-74.9, -102), LatLon(-74.3, -131), LatLon(-77.5, -163), \
            LatLon(-77.4,  163), LatLon(-71.7,  172), LatLon(-65.9,  140), \
            LatLon(-65.7,  113), LatLon(-66.6,   88), LatLon(-66.9,   59), \
            LatLon(-69.8,   25), LatLon(-70.0,   -4), LatLon(-71.0,  -14), \
            LatLon(-77.3,  -33), LatLon(-77.9,  -46), LatLon(-74.7,  -61)  # on/around south pole!
        self.test('areaOf',
                  areaOf(p, radius=R_M),
                  '1.366270e+13',
                  fmt='%.6e',
                  known=True)  # 1.366270368002013e+13'
        self.test('perimeterOf',
                  perimeterOf(p, radius=R_M),
                  '1.366270e+13',
                  fmt='%.6e',
                  known=True)  # 1.366270368002013e+13
        self.test(
            'centroidOf',
            fstr(centroidOf(p), prec=3),
            '-72.112, 92.032',
        )
        self.test('isclockwise', isclockwise(p), False)
        self.test('points2', p[0].points2(p)[0], len(p))

        p = LatLon('66.6S', '88W')
        self.test('latlon', fstr(p.latlon, prec=6), '-66.6, -88.0')
        self.test('philam', fstr(p.philam, prec=6), '-1.162389, -1.53589')
        self.test('to2ab', fstr(p.to2ab(), prec=6), '-1.162389, -1.53589')
        if LatLon is LatLon_:
            self.test('toStr', p.toStr(prec=6, kwds='test'),
                      "66.6°S, 088.0°W, kwds='test'")
            q = p.classof(p.lat, p.lon, name='test')
            self.test('__ne__', q != p, False)

        self.test('latlonheight', fstr(p.latlonheight, prec=6),
                  '-66.6, -88.0, 0.0')
        self.test('philamheight', fstr(p.philamheight, prec=6),
                  '-1.162389, -1.53589, 0.0')

        self.test('_N_vector', p._N_vector, '(0.01386, -0.39691, -0.91775)')
        self.test('toNvector',
                  p.toNvector().toStr(prec=5), '(0.01386, -0.39691, -0.91775)')
        self.test('toNvector',
                  p.toNvector(Nvector=None),
                  '(0.01386, -0.396906, -0.917755)',
                  known=True)

        q = p.classof(-66.6, -88)
        self.test('classof', q, p)
        try:
            t = p.others(q)
        except Exception as x:
            t = str(x)
        self.test('others', t, None)

        self.testCopy(p)