1 package com.gradoservice.proj4as.proj
\r
3 import com.gradoservice.proj4as.ProjPoint;
\r
4 import com.gradoservice.proj4as.ProjConstants;
\r
5 import com.gradoservice.proj4as.Datum;
\r
7 public class ProjGauss extends AbstractProjProjection
\r
10 protected var phic0:Number;
\r
11 protected var ratexp:Number;
\r
13 public function ProjGauss(data:ProjParams)
\r
18 override public function init():void
\r
20 var sphi:Number = Math.sin(this.lat0);
\r
21 var cphi:Number = Math.cos(this.lat0);
\r
23 this.rc = Math.sqrt(1.0 - this.es) / (1.0 - this.es * sphi * sphi);
\r
24 this.c = Math.sqrt(1.0 + this.es * cphi * cphi / (1.0 - this.es));
\r
25 this.phic0 = Math.asin(sphi / this.c);
\r
26 this.ratexp = 0.5 * this.c * this.e;
\r
27 this.k = Math.tan(0.5 * this.phic0 + ProjConstants.FORTPI) / (Math.pow(Math.tan(0.5*this.lat0 + ProjConstants.FORTPI), this.c) * ProjConstants.srat(this.e*sphi, this.ratexp));
\r
30 override public function forward(p:ProjPoint):ProjPoint
\r
32 var lon:Number = p.x;
\r
33 var lat:Number = p.y;
\r
35 p.y = 2.0 * Math.atan( this.k * Math.pow(Math.tan(0.5 * lat + ProjConstants.FORTPI), this.c) * ProjConstants.srat(this.e * Math.sin(lat), this.ratexp) ) - ProjConstants.HALF_PI;
\r
40 override public function inverse(p:ProjPoint):ProjPoint
\r
42 var DEL_TOL:Number = 1e-14;
\r
43 var lon:Number = p.x / this.c;
\r
44 var lat:Number = p.y;
\r
45 var num:Number = Math.pow(Math.tan(0.5 * lat + ProjConstants.FORTPI)/this.k, 1./this.c);
\r
46 for (var i:int = ProjConstants.MAX_ITER; i>0; --i) {
\r
47 lat = 2.0 * Math.atan(num * ProjConstants.srat(this.e * Math.sin(p.y), -0.5 * this.e)) - ProjConstants.HALF_PI;
\r
48 if (Math.abs(lat - p.y) < DEL_TOL) break;
\r
51 /* convergence failed */
\r
53 trace("gauss:inverse:convergence failed");
\r