示例#1
0
    def __new__(cls, sa, ca, sb, cb, *_m):
        '''New L{EcefMatrix} matrix.

           @arg sa: C{sin(phi)} (C{float}).
           @arg ca: C{cos(phi)} (C{float}).
           @arg sb: C{sin(lambda)} (C{float}).
           @arg cb: C{cos(lambda)} (C{float}).
           @arg _m: (INTERNAL) from C{.multiply}.

           @raise EcefError: If B{C{sa}}, B{C{ca}}, B{C{sb}} or
                             B{C{cb}} outside M{[-1.0, +1.0]}.
        '''
        t = sa, ca, sb, cb
        if _m:  # all 9 matrix elements ...
            t += _m  # ... from .multiply

        elif max(map(abs, t)) > 1:
            raise EcefError('%s invalid: %r' % (EcefMatrix.__name__, t))

        else:  # build matrix from the following quaternion operations
            #   qrot(lam, [0,0,1]) * qrot(phi, [0,-1,0]) * [1,1,1,1]/2
            # or
            #   qrot(pi/2 + lam, [0,0,1]) * qrot(-pi/2 + phi, [-1,0,0])
            # where
            #   qrot(t,v) = [cos(t/2), sin(t/2)*v[1], sin(t/2)*v[2], sin(t/2)*v[3]]

            # Local X axis (east) in geocentric coords
            #  M[0] = -slam;        M[3] =  clam;        M[6] = 0;
            # Local Y axis (north) in geocentric coords
            #  M[1] = -clam * sphi; M[4] = -slam * sphi; M[7] = cphi;
            # Local Z axis (up) in geocentric coords
            #  M[2] =  clam * cphi; M[5] =  slam * cphi; M[8] = sphi;
            t = (-sb, -cb * sa, cb * ca, cb, -sb * sa, sb * ca, 0, ca, sa)

        return _NamedTuple.__new__(cls, *t)
示例#2
0
 def __new__(cls, z, h, e, n, B, d, c, s, Error=None):
     if Error is not None:
         e = Easting(e, Error=Error)
         n = Northing(n, Error=Error)
         c = Scalar(c, name=_convergence_, Error=Error)
         s = Scalar(s, name=_scale_, Error=Error)
     return _NamedTuple.__new__(cls, z, h, e, n, B, d, c, s)
示例#3
0
文件: ecef.py 项目: mzy2240/PyGeodesy
    def __new__(cls, sa, ca, sb, cb, *_m):
        '''New L{EcefMatrix} matrix.

           @param sa: C{sin(phi)} (C{float}).
           @param ca: C{cos(phi)} (C{float}).
           @param sb: C{sin(lambda)} (C{float}).
           @param cb: C{cos(lambda)} (C{float}).
           @param _m: (INTERNAL) from C{.multiply}.

           @raise EcefError: If B{C{sa}}, B{C{ca}}, B{C{sb}} or
                             B{C{cb}} outside M{[-1.0, +1.0]}.
        '''
        t = sa, ca, sb, cb
        if _m:  # all 9 matrix elements ...
            t += _m  # ... from .multiply

        elif max(map(abs, t)) > 1:
            raise EcefError('%s invalid: %r' % ('sa, ca, sb or cb', t))

        else:  # build matrix
            t = (-sb, -cb * sa, cb * ca,
                  cb, -sb * sa, sb * ca,
                   0,       ca,      sa)

        return _NamedTuple.__new__(cls, *t)
示例#4
0
 def __new__(cls, z, h, e, n, B, d, c, s, Error=None):
     if Error is not None:
         e = Easting(e, Error=Error)
         n = Northing(n, Error=Error)
         c = Degrees(convergence=c, Error=Error)
         s = Scalar(scale=s, Error=Error)
     return _NamedTuple.__new__(cls, z, h, e, n, B, d, c, s)
示例#5
0
 def __new__(cls, x, y, lat, lon, azi, s, datum):
     return _NamedTuple.__new__(
         cls,
         Scalar(x, name=_x_, Error=AzimuthalError),
         Scalar(y, name=_y_, Error=AzimuthalError),  # PYCHOK indent
         Lat_(lat, Error=AzimuthalError),
         Lon_(lon, Error=AzimuthalError),
         Bearing(azi, name=_azimuth_, Error=AzimuthalError),
         Scalar(s, name=_scale_, Error=AzimuthalError),
         datum)
示例#6
0
 def __new__(cls, x, y, lat, lon, g, k, datum):
     return _NamedTuple.__new__(cls, Scalar(x, name=_x_, Error=AlbersError),
                                Scalar(y, name=_y_, Error=AlbersError),
                                _Lat_(lat), _Lon_(lon),
                                Degrees(g, name=_gamma_, Error=AlbersError),
                                _Ks(k, _scale_), datum)
示例#7
0
 def __new__(cls, z, B, h, lat, lon, Error=None):
     if Error is not None:
         lat = Lat(lat, Error=Error)
         lon = Lon(lon, Error=Error)
     return _NamedTuple.__new__(cls, z, B, h, lat, lon)
示例#8
0
 def __new__(cls, z, h, e, n, B, Error=None):
     if Error is not None:
         e = Easting(e, Error=Error)
         n = Northing(n, Error=Error)
     return _NamedTuple.__new__(cls, z, h, e, n, B)
示例#9
0
 def __new__(cls, lat, lon, d, c, s):
     return _NamedTuple.__new__(cls, Lat(lat), Lon(lon), d,
                                Scalar(c, name=_convergence_),
                                Scalar(s, name=_scale_))
示例#10
0
 def __new__(cls, z, di, e, n, Error=MGRSError):
     if Error is not None:
         e = Easting(e, Error=Error)
         n = Northing(n, Error=Error)
     return _NamedTuple.__new__(cls, z, di, e, n)
示例#11
0
 def __new__(cls, lat, lon, azi, rk):
     return _NamedTuple.__new__(cls, Lat(lat, Error=CSSError),
                                Lon(lon, Error=CSSError),
                                Bearing(azi, Error=CSSError),
                                Scalar(rk, Error=CSSError))
示例#12
0
 def __new__(cls, e, n, azi, rk):
     return _NamedTuple.__new__(cls, Easting(e, Error=CSSError),
                                Northing(n, Error=CSSError),
                                Bearing(azi, Error=CSSError),
                                Scalar(rk, Error=CSSError))
示例#13
0
 def __new__(cls, e, n, r):
     return _NamedTuple.__new__(cls, Easting(e, Error=WebMercatorError),
                                Northing(n, Error=WebMercatorError),
                                Radius(r, Error=WebMercatorError))