/// <summary> /// Initializes the transform using the parameters from the specified coordinate system information /// </summary> /// <param name="projInfo">A ProjectionInfo class contains all the standard and custom parameters needed to initialize this transform</param> protected override void OnInit(ProjectionInfo projInfo) { if (projInfo.Parameters.ContainsKey("W")) { _w = projInfo.ParamD("W"); if (_w <= 0) throw new ProjectionException(27); } else { _w = .5; } if(projInfo.Parameters.ContainsKey("M")) { _m = projInfo.ParamD("M"); if(_m <= 0)throw new ProjectionException(27); } else { _m = 1; } _rm = 1/_m; _m /= _w; }
/// <summary> /// Initializes the transform using the parameters from the specified coordinate system information /// </summary> /// <param name="projInfo">A ProjectionInfo class contains all the standard and custom parameters needed to initialize this transform</param> protected override void OnInit(ProjectionInfo projInfo) { if ((_h = projInfo.ParamD("h")) <= 0) throw new ProjectionException(-30); if (Phi0 == 0) throw new ProjectionException(-46); _radiusG = 1 + (_radiusG1 = _h / A); _c = _radiusG * _radiusG - 1.0; if (IsElliptical) { _radiusP = Math.Sqrt(OneEs); _radiusP2 = OneEs; _radiusPInv2 = ROneEs; } else { _radiusP = _radiusP2 = _radiusPInv2 = 1.0; } }
/// <summary> /// Initializes the transform using the parameters from the specified coordinate system information /// </summary> /// <param name="projInfo">A ProjectionInfo class contains all the standard and custom parameters needed to initialize this transform</param> protected override void OnInit(ProjectionInfo projInfo) { double t=0; if (projInfo.StandardParallel1 != null) t = projInfo.StandardParallel1.Value * Math.PI / 180; t = projInfo.ParamD("lat_ts")*Math.PI/180; if((K0 = Math.Cos(t)) < 0) throw new ProjectionException(-24); if (!IsElliptical) return; t = Math.Sin(t); K0 /= Math.Sqrt(1- Es * t * t); E = Math.Sqrt(Es); _apa = Proj.Authset(Es); _qp = Proj.Qsfn(1, E, OneEs); }
/// <summary> /// Initializes the transform using the parameters from the specified coordinate system information /// </summary> /// <param name="projInfo">A ProjectionInfo class contains all the standard and custom parameters needed to initialize this transform</param> protected override void OnInit(ProjectionInfo projInfo) { double con; double f; double d; double toRadians = projInfo.GeographicInfo.Unit.Radians; _rot = projInfo.ParamI("no_rot") == 0; bool azi = projInfo.ParamD("alpha") != 0.0; if (azi) { _lamc = projInfo.ParamD("lonc")*toRadians; _alpha = projInfo.ParamD("alpha") *toRadians; if (Math.Abs(_alpha) < Tol || Math.Abs(Math.Abs(Phi0) - HalfPi) <= Tol || Math.Abs(Math.Abs(_alpha) - HalfPi) <= Tol) throw new ProjectionException(32); } else { _lam1 = projInfo.GetLam1(); _phi1 = projInfo.GetPhi1(); _lam2 = projInfo.GetLam2(); _phi2 = projInfo.GetPhi2(); if(Math.Abs(_phi1 - _phi2) <= Tol || (con = Math.Abs(_phi1)) <= Tol || Math.Abs(con - HalfPi) <= Tol || Math.Abs(Math.Abs(Phi0) - HalfPi) <= Tol || Math.Abs(Math.Abs(_phi2) - HalfPi) <= Tol) { throw new ProjectionException(33); } } _ellips = Es > 0; double com = _ellips ? Math.Sqrt(OneEs) : 1; if (Math.Abs(Phi0) > EPS10) { double sinph0 = Math.Sin(Phi0); double cosph0 = Math.Cos(Phi0); if (_ellips) { con = 1 - Es*sinph0*sinph0; _bl = cosph0*cosph0; _bl = Math.Sqrt(1 + Es*_bl*_bl/OneEs); _al = _bl*K0*com/con; d = _bl*com/(cosph0*Math.Sqrt(con)); } else { _bl = 1; _al = K0; d = 1/cosph0; } if ((f = d*d - 1) <= 0) { f = 0; } else { f = Math.Sqrt(f); if (Phi0 < 0) f = -f; } _el = f += d; if (_ellips) { _el *= Math.Pow(Proj.Tsfn(Phi0, sinph0, E), _bl); } else { _el *= TSFN0(Phi0); } } else { _bl = 1/com; _al = K0; _el = d = f = 1; } if(azi) { _gamma = Math.Asin(Math.Sin(_alpha)/d); Lam0 = _lamc - Math.Asin((.5*(f - 1/f))*Math.Tan(_gamma))/_bl; } else { double h; double l; if(_ellips) { h = Math.Pow(Proj.Tsfn(_phi1, Math.Sin(_phi1), E), _bl); l = Math.Pow(Proj.Tsfn(_phi2, Math.Sin(_phi2), E), _bl); } else { h = TSFN0(_phi1); l = TSFN0(_phi2); } f = _el/h; double p = (l - h)/(l + h); double j = _el*_el; j = (j - l*h)/(j + l*h); if ((con = _lam1 - _lam2) < -Math.PI) { _lam2 -= Math.PI*2; } else if (con > Math.PI) { _lam2 += Math.PI*2; } Lam0 = Proj.Adjlon(.5*(_lam1 + _lam2) - Math.Atan(j*Math.Tan(.5*_bl*(_lam1 - _lam2))/p)/_bl); _gamma = Math.Atan(2*Math.Sin(_bl*Proj.Adjlon(_lam1 - Lam0))/(f - 1/f)); _alpha = Math.Asin(d*Math.Sin(_gamma)); } _singam = Math.Sin(_gamma); _cosgam = Math.Cos(_gamma); if(projInfo.ParamI("rot_conv") != 0) { f = _gamma; } else { f = _alpha; } _sinrot = Math.Sin(f); _cosrot = Math.Cos(f); if(projInfo.ParamI("no_uoff") != 0) { _u0 = 0; } else { _u0 = Math.Abs(_al*Math.Atan(Math.Sqrt(d*d - 1)/_cosrot)/_bl); } if (Phi0 < 0) _u0 = -_u0; }