Loading lib/proj4js-combined.js +347 −14 Original line number Diff line number Diff line Loading @@ -858,7 +858,7 @@ Proj4js.common = { /* Function to compute constant small q which is the radius of a parallel of latitude, phi, divided by the semimajor axis. ------------------------------------------------------------*/ qsfnz : function(eccent,sinphi,cosphi) { qsfnz : function(eccent,sinphi) { var con; if (eccent > 1.0e-7) { con = eccent * sinphi; Loading Loading @@ -906,8 +906,7 @@ Proj4js.common = { }, // Latitude Isometrique - close to tsfnz ... latiso : function(eccent, phi, sinphi) { latiso : function(eccent, phi, sinphi) { if (Math.abs(phi) > this.HALF_PI) return +Number.NaN; if (phi==this.HALF_PI) return Number.POSITIVE_INFINITY; if (phi==-1.0*this.HALF_PI) return -1.0*Number.POSITIVE_INFINITY; Loading Loading @@ -3554,6 +3553,95 @@ Proj4js.Proj.vandg = { return p; } }; /* ====================================================================== projCode/cea.js ====================================================================== */ /******************************************************************************* NAME LAMBERT CYLINDRICAL EQUAL AREA PURPOSE: Transforms input longitude and latitude to Easting and Northing for the Lambert Cylindrical Equal Area projection. This class of projection includes the Behrmann and Gall-Peters Projections. The longitude and latitude must be in radians. The Easting and Northing values will be returned in meters. PROGRAMMER DATE ---------- ---- R. Marsden August 2009 Winwaed Software Tech LLC, http://www.winwaed.com This function was adapted from the Miller Cylindrical Projection in the Proj4JS library. Note: This implementation assumes a Spherical Earth. The (commented) code has been included for the ellipsoidal forward transform, but derivation of the ellispoidal inverse transform is beyond me. Note that most of the Proj4JS implementations do NOT currently support ellipsoidal figures. Therefore this is not seen as a problem - especially this lack of support is explicitly stated here. ALGORITHM REFERENCES 1. "Cartographic Projection Procedures for the UNIX Environment - A User's Manual" by Gerald I. Evenden, USGS Open File Report 90-284 and Release 4 Interim Reports (2003) 2. Snyder, John P., "Flattening the Earth - Two Thousand Years of Map Projections", Univ. Chicago Press, 1993 *******************************************************************************/ Proj4js.Proj.cea = { /* Initialize the Cylindrical Equal Area projection -------------------------------------------*/ init: function() { //no-op }, /* Cylindrical Equal Area forward equations--mapping lat,long to x,y ------------------------------------------------------------*/ forward: function(p) { var lon=p.x; var lat=p.y; /* Forward equations -----------------*/ dlon = Proj4js.common.adjust_lon(lon -this.long0); var x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); var y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts); /* Elliptical Forward Transform Not implemented due to a lack of a matchign inverse function { var Sin_Lat = Math.sin(lat); var Rn = this.a * (Math.sqrt(1.0e0 - this.es * Sin_Lat * Sin_Lat )); x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); y = this.y0 + Rn * Math.sin(lat) / Math.cos(this.lat_ts); } */ p.x=x; p.y=y; return p; },//ceaFwd() /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long ------------------------------------------------------------*/ inverse: function(p) { p.x -= this.x0; p.y -= this.y0; var lon = Proj4js.common.adjust_lon( this.long0 + (p.x / this.a) / Math.cos(this.lat_ts) ); var lat = Math.asin( (p.y/this.a) * Math.cos(this.lat_ts) ); p.x=lon; p.y=lat; return p; }//ceaInv() }; /* ====================================================================== projCode/eqc.js ====================================================================== */ Loading Loading @@ -4094,13 +4182,56 @@ ALGORITHM REFERENCES *******************************************************************************/ Proj4js.Proj.laea = { S_POLE: 1, N_POLE: 2, EQUIT: 3, OBLIQ: 4, /* Initialize the Lambert Azimuthal Equal Area projection ------------------------------------------------------*/ init: function() { this.sin_lat_o=Math.sin(this.lat0); this.cos_lat_o=Math.cos(this.lat0); var t = Math.abs(this.lat0); if (Math.abs(t - Proj4js.common.HALF_PI) < Proj4js.common.EPSLN) { this.mode = this.lat0 < 0. ? this.S_POLE : this.N_POLE; } else if (Math.abs(t) < Proj4js.common.EPSLN) { this.mode = this.EQUIT; } else { this.mode = this.OBLIQ; } if (this.es > 0) { var sinphi; this.qp = Proj4js.common.qsfnz(this.e, 1.0); this.mmf = .5 / (1. - this.es); this.apa = this.authset(this.es); switch (this.mode) { case this.N_POLE: case this.S_POLE: this.dd = 1.; break; case this.EQUIT: this.rq = Math.sqrt(.5 * this.qp); this.dd = 1. / this.rq; this.xmf = 1.; this.ymf = .5 * this.qp; break; case this.OBLIQ: this.rq = Math.sqrt(.5 * this.qp); sinphi = Math.sin(this.lat0); this.sinb1 = Proj4js.common.qsfnz(this.e, sinphi) / this.qp; this.cosb1 = Math.sqrt(1. - this.sinb1 * this.sinb1); this.dd = Math.cos(this.lat0) / (Math.sqrt(1. - this.es * sinphi * sinphi) * this.rq * this.cosb1); this.ymf = (this.xmf = this.rq) / this.dd; this.xmf *= this.dd; break; } } else { if (this.mode == this.OBLIQ) { this.sinph0 = Math.sin(this.lat0); this.cosph0 = Math.cos(this.lat0); } } }, /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y Loading @@ -4109,11 +4240,97 @@ Proj4js.Proj.laea = { /* Forward equations -----------------*/ var lon=p.x; var lat=p.y; var delta_lon = Proj4js.common.adjust_lon(lon - this.long0); var x,y; var lam=p.x; var phi=p.y; lam = Proj4js.common.adjust_lon(lam - this.long0); if (this.sphere) { var coslam, cosphi, sinphi; sinphi = Math.sin(phi); cosphi = Math.cos(phi); coslam = Math.cos(lam); switch (this.mode) { case this.EQUIT: y = (this.mode == this.EQUIT) ? 1. + cosphi * coslam : 1. + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam; if (y <= Proj4js.common.EPSLN) { Proj4js.reportError("laea:fwd:y less than eps"); return null; } y = Math.sqrt(2. / y); x = y * cosphi * Math.sin(lam); y *= (this.mode == this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam; break; case this.N_POLE: coslam = -coslam; case this.S_POLE: if (Math.abs(phi + this.phi0) < Proj4js.common.EPSLN) { Proj4js.reportError("laea:fwd:phi < eps"); return null; } y = Proj4js.common.FORTPI - phi * .5; y = 2. * ((this.mode == this.S_POLE) ? Math.cos(y) : Math.sin(y)); x = y * Math.sin(lam); y *= coslam; break; } } else { var coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0; coslam = Math.cos(lam); sinlam = Math.sin(lam); sinphi = Math.sin(phi); q = Proj4js.common.qsfnz(this.e, sinphi); if (this.mode == this.OBLIQ || this.mode == this.EQUIT) { sinb = q / this.qp; cosb = Math.sqrt(1. - sinb * sinb); } switch (this.mode) { case this.OBLIQ: b = 1. + this.sinb1 * sinb + this.cosb1 * cosb * coslam; break; case this.EQUIT: b = 1. + cosb * coslam; break; case this.N_POLE: b = Proj4js.common.HALF_PI + phi; q = this.qp - q; break; case this.S_POLE: b = phi - Proj4js.common.HALF_PI; q = this.qp + q; break; } if (Math.abs(b) < Proj4js.common.EPSLN) { Proj4js.reportError("laea:fwd:b < eps"); return null; } switch (this.mode) { case this.OBLIQ: case this.EQUIT: b = Math.sqrt(2. / b); if (this.mode == this.OBLIQ) { y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam); } else { y = (b = Math.sqrt(2. / (1. + cosb * coslam))) * sinb * this.ymf; } x = this.xmf * b * cosb * sinlam; break; case this.N_POLE: case this.S_POLE: if (q >= 0.) { x = (b = Math.sqrt(q)) * sinlam; y = coslam * ((this.mode == this.S_POLE) ? b : -b); } else { x = y = 0.; } break; } } //v 1.0 /* var sin_lat=Math.sin(lat); var cos_lat=Math.cos(lat); Loading @@ -4128,8 +4345,9 @@ Proj4js.Proj.laea = { var ksp = this.a * Math.sqrt(2.0 / (1.0 + g)); var x = ksp * cos_lat * sin_delta_lon + this.x0; var y = ksp * (this.cos_lat_o * sin_lat - this.sin_lat_o * cos_lat * cos_delta_lon) + this.y0; p.x = x; p.y = y; */ p.x = this.a*x + this.x0; p.y = this.a*y + this.y0; return p; },//lamazFwd() Loading @@ -4138,8 +4356,94 @@ Proj4js.Proj.laea = { inverse: function(p) { p.x -= this.x0; p.y -= this.y0; var x = p.x/this.a; var y = p.y/this.a; if (this.sphere) { var cosz=0.0, rh, sinz=0.0; rh = Math.sqrt(x*x + y*y); var phi = rh * .5; if (phi > 1.) { Proj4js.reportError("laea:Inv:DataError"); return null; } phi = 2. * Math.asin(phi); if (this.mode == this.OBLIQ || this.mode == this.EQUIT) { sinz = Math.sin(phi); cosz = Math.cos(phi); } switch (this.mode) { case this.EQUIT: phi = (Math.abs(rh) <= Proj4js.common.EPSLN) ? 0. : Math.asin(y * sinz / rh); x *= sinz; y = cosz * rh; break; case this.OBLIQ: phi = (Math.abs(rh) <= Proj4js.common.EPSLN) ? this.phi0 : Math.asin(cosz * sinph0 + y * sinz * cosph0 / rh); x *= sinz * cosph0; y = (cosz - Math.sin(phi) * sinph0) * rh; break; case this.N_POLE: y = -y; phi = Proj4js.common.HALF_PI - phi; break; case this.S_POLE: phi -= Proj4js.common.HALF_PI; break; } lam = (y == 0. && (this.mode == this.EQUIT || this.mode == this.OBLIQ)) ? 0. : atan2(x, y); } else { var cCe, sCe, q, rho, ab=0.0; var Rh = Math.sqrt(p.x *p.x +p.y * p.y); switch (this.mode) { case this.EQUIT: case this.OBLIQ: x /= this.dd; y *= this.dd; rho = Math.sqrt(x*x + y*y); if (rho < Proj4js.common.EPSLN) { p.x = 0.; p.y = this.phi0; return p; } sCe = 2. * Math.asin(.5 * rho / this.rq); cCe = Math.cos(sCe); x *= (sCe = Math.sin(sCe)); if (this.mode == this.OBLIQ) { ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho q = this.qp * ab; y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe; } else { ab = y * sCe / rho; q = this.qp * ab; y = rho * cCe; } break; case this.N_POLE: y = -y; case this.S_POLE: q = (x * x + y * y); if (!q ) { p.x = 0.; p.y = this.phi0; return p; } /* q = this.qp - q; */ ab = 1. - q / this.qp; if (this.mode == this.S_POLE) { ab = - ab; } break; } lam = Math.atan2(x, y); phi = this.authlat(Math.asin(ab), this.apa); } /* var Rh = Math.Math.sqrt(p.x *p.x +p.y * p.y); var temp = Rh / (2.0 * this.a); if (temp > 1) { Loading @@ -4166,11 +4470,40 @@ Proj4js.Proj.laea = { } else { lat = this.lat0; } */ //return(OK); p.x = lon; p.y = lat; p.x = Proj4js.common.adjust_lon(this.long0+lam); p.y = phi; return p; }//lamazInv() },//lamazInv() /* determine latitude from authalic latitude */ P00: .33333333333333333333, P01: .17222222222222222222, P02: .10257936507936507936, P10: .06388888888888888888, P11: .06640211640211640211, P20: .01641501294219154443, authset: function(es) { var t; var APA = new Array(); APA[0] = es * this.P00; t = es * es; APA[0] += t * this.P01; APA[1] = t * this.P10; t *= es; APA[0] += t * this.P02; APA[1] += t * this.P11; APA[2] = t * this.P20; return APA; }, authlat: function(beta, APA) { var t = beta+beta; return(beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t+t) + APA[2] * Math.sin(t+t+t)); } }; Loading lib/proj4js-compressed.js +23 −8 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
lib/proj4js-combined.js +347 −14 Original line number Diff line number Diff line Loading @@ -858,7 +858,7 @@ Proj4js.common = { /* Function to compute constant small q which is the radius of a parallel of latitude, phi, divided by the semimajor axis. ------------------------------------------------------------*/ qsfnz : function(eccent,sinphi,cosphi) { qsfnz : function(eccent,sinphi) { var con; if (eccent > 1.0e-7) { con = eccent * sinphi; Loading Loading @@ -906,8 +906,7 @@ Proj4js.common = { }, // Latitude Isometrique - close to tsfnz ... latiso : function(eccent, phi, sinphi) { latiso : function(eccent, phi, sinphi) { if (Math.abs(phi) > this.HALF_PI) return +Number.NaN; if (phi==this.HALF_PI) return Number.POSITIVE_INFINITY; if (phi==-1.0*this.HALF_PI) return -1.0*Number.POSITIVE_INFINITY; Loading Loading @@ -3554,6 +3553,95 @@ Proj4js.Proj.vandg = { return p; } }; /* ====================================================================== projCode/cea.js ====================================================================== */ /******************************************************************************* NAME LAMBERT CYLINDRICAL EQUAL AREA PURPOSE: Transforms input longitude and latitude to Easting and Northing for the Lambert Cylindrical Equal Area projection. This class of projection includes the Behrmann and Gall-Peters Projections. The longitude and latitude must be in radians. The Easting and Northing values will be returned in meters. PROGRAMMER DATE ---------- ---- R. Marsden August 2009 Winwaed Software Tech LLC, http://www.winwaed.com This function was adapted from the Miller Cylindrical Projection in the Proj4JS library. Note: This implementation assumes a Spherical Earth. The (commented) code has been included for the ellipsoidal forward transform, but derivation of the ellispoidal inverse transform is beyond me. Note that most of the Proj4JS implementations do NOT currently support ellipsoidal figures. Therefore this is not seen as a problem - especially this lack of support is explicitly stated here. ALGORITHM REFERENCES 1. "Cartographic Projection Procedures for the UNIX Environment - A User's Manual" by Gerald I. Evenden, USGS Open File Report 90-284 and Release 4 Interim Reports (2003) 2. Snyder, John P., "Flattening the Earth - Two Thousand Years of Map Projections", Univ. Chicago Press, 1993 *******************************************************************************/ Proj4js.Proj.cea = { /* Initialize the Cylindrical Equal Area projection -------------------------------------------*/ init: function() { //no-op }, /* Cylindrical Equal Area forward equations--mapping lat,long to x,y ------------------------------------------------------------*/ forward: function(p) { var lon=p.x; var lat=p.y; /* Forward equations -----------------*/ dlon = Proj4js.common.adjust_lon(lon -this.long0); var x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); var y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts); /* Elliptical Forward Transform Not implemented due to a lack of a matchign inverse function { var Sin_Lat = Math.sin(lat); var Rn = this.a * (Math.sqrt(1.0e0 - this.es * Sin_Lat * Sin_Lat )); x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); y = this.y0 + Rn * Math.sin(lat) / Math.cos(this.lat_ts); } */ p.x=x; p.y=y; return p; },//ceaFwd() /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long ------------------------------------------------------------*/ inverse: function(p) { p.x -= this.x0; p.y -= this.y0; var lon = Proj4js.common.adjust_lon( this.long0 + (p.x / this.a) / Math.cos(this.lat_ts) ); var lat = Math.asin( (p.y/this.a) * Math.cos(this.lat_ts) ); p.x=lon; p.y=lat; return p; }//ceaInv() }; /* ====================================================================== projCode/eqc.js ====================================================================== */ Loading Loading @@ -4094,13 +4182,56 @@ ALGORITHM REFERENCES *******************************************************************************/ Proj4js.Proj.laea = { S_POLE: 1, N_POLE: 2, EQUIT: 3, OBLIQ: 4, /* Initialize the Lambert Azimuthal Equal Area projection ------------------------------------------------------*/ init: function() { this.sin_lat_o=Math.sin(this.lat0); this.cos_lat_o=Math.cos(this.lat0); var t = Math.abs(this.lat0); if (Math.abs(t - Proj4js.common.HALF_PI) < Proj4js.common.EPSLN) { this.mode = this.lat0 < 0. ? this.S_POLE : this.N_POLE; } else if (Math.abs(t) < Proj4js.common.EPSLN) { this.mode = this.EQUIT; } else { this.mode = this.OBLIQ; } if (this.es > 0) { var sinphi; this.qp = Proj4js.common.qsfnz(this.e, 1.0); this.mmf = .5 / (1. - this.es); this.apa = this.authset(this.es); switch (this.mode) { case this.N_POLE: case this.S_POLE: this.dd = 1.; break; case this.EQUIT: this.rq = Math.sqrt(.5 * this.qp); this.dd = 1. / this.rq; this.xmf = 1.; this.ymf = .5 * this.qp; break; case this.OBLIQ: this.rq = Math.sqrt(.5 * this.qp); sinphi = Math.sin(this.lat0); this.sinb1 = Proj4js.common.qsfnz(this.e, sinphi) / this.qp; this.cosb1 = Math.sqrt(1. - this.sinb1 * this.sinb1); this.dd = Math.cos(this.lat0) / (Math.sqrt(1. - this.es * sinphi * sinphi) * this.rq * this.cosb1); this.ymf = (this.xmf = this.rq) / this.dd; this.xmf *= this.dd; break; } } else { if (this.mode == this.OBLIQ) { this.sinph0 = Math.sin(this.lat0); this.cosph0 = Math.cos(this.lat0); } } }, /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y Loading @@ -4109,11 +4240,97 @@ Proj4js.Proj.laea = { /* Forward equations -----------------*/ var lon=p.x; var lat=p.y; var delta_lon = Proj4js.common.adjust_lon(lon - this.long0); var x,y; var lam=p.x; var phi=p.y; lam = Proj4js.common.adjust_lon(lam - this.long0); if (this.sphere) { var coslam, cosphi, sinphi; sinphi = Math.sin(phi); cosphi = Math.cos(phi); coslam = Math.cos(lam); switch (this.mode) { case this.EQUIT: y = (this.mode == this.EQUIT) ? 1. + cosphi * coslam : 1. + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam; if (y <= Proj4js.common.EPSLN) { Proj4js.reportError("laea:fwd:y less than eps"); return null; } y = Math.sqrt(2. / y); x = y * cosphi * Math.sin(lam); y *= (this.mode == this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam; break; case this.N_POLE: coslam = -coslam; case this.S_POLE: if (Math.abs(phi + this.phi0) < Proj4js.common.EPSLN) { Proj4js.reportError("laea:fwd:phi < eps"); return null; } y = Proj4js.common.FORTPI - phi * .5; y = 2. * ((this.mode == this.S_POLE) ? Math.cos(y) : Math.sin(y)); x = y * Math.sin(lam); y *= coslam; break; } } else { var coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0; coslam = Math.cos(lam); sinlam = Math.sin(lam); sinphi = Math.sin(phi); q = Proj4js.common.qsfnz(this.e, sinphi); if (this.mode == this.OBLIQ || this.mode == this.EQUIT) { sinb = q / this.qp; cosb = Math.sqrt(1. - sinb * sinb); } switch (this.mode) { case this.OBLIQ: b = 1. + this.sinb1 * sinb + this.cosb1 * cosb * coslam; break; case this.EQUIT: b = 1. + cosb * coslam; break; case this.N_POLE: b = Proj4js.common.HALF_PI + phi; q = this.qp - q; break; case this.S_POLE: b = phi - Proj4js.common.HALF_PI; q = this.qp + q; break; } if (Math.abs(b) < Proj4js.common.EPSLN) { Proj4js.reportError("laea:fwd:b < eps"); return null; } switch (this.mode) { case this.OBLIQ: case this.EQUIT: b = Math.sqrt(2. / b); if (this.mode == this.OBLIQ) { y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam); } else { y = (b = Math.sqrt(2. / (1. + cosb * coslam))) * sinb * this.ymf; } x = this.xmf * b * cosb * sinlam; break; case this.N_POLE: case this.S_POLE: if (q >= 0.) { x = (b = Math.sqrt(q)) * sinlam; y = coslam * ((this.mode == this.S_POLE) ? b : -b); } else { x = y = 0.; } break; } } //v 1.0 /* var sin_lat=Math.sin(lat); var cos_lat=Math.cos(lat); Loading @@ -4128,8 +4345,9 @@ Proj4js.Proj.laea = { var ksp = this.a * Math.sqrt(2.0 / (1.0 + g)); var x = ksp * cos_lat * sin_delta_lon + this.x0; var y = ksp * (this.cos_lat_o * sin_lat - this.sin_lat_o * cos_lat * cos_delta_lon) + this.y0; p.x = x; p.y = y; */ p.x = this.a*x + this.x0; p.y = this.a*y + this.y0; return p; },//lamazFwd() Loading @@ -4138,8 +4356,94 @@ Proj4js.Proj.laea = { inverse: function(p) { p.x -= this.x0; p.y -= this.y0; var x = p.x/this.a; var y = p.y/this.a; if (this.sphere) { var cosz=0.0, rh, sinz=0.0; rh = Math.sqrt(x*x + y*y); var phi = rh * .5; if (phi > 1.) { Proj4js.reportError("laea:Inv:DataError"); return null; } phi = 2. * Math.asin(phi); if (this.mode == this.OBLIQ || this.mode == this.EQUIT) { sinz = Math.sin(phi); cosz = Math.cos(phi); } switch (this.mode) { case this.EQUIT: phi = (Math.abs(rh) <= Proj4js.common.EPSLN) ? 0. : Math.asin(y * sinz / rh); x *= sinz; y = cosz * rh; break; case this.OBLIQ: phi = (Math.abs(rh) <= Proj4js.common.EPSLN) ? this.phi0 : Math.asin(cosz * sinph0 + y * sinz * cosph0 / rh); x *= sinz * cosph0; y = (cosz - Math.sin(phi) * sinph0) * rh; break; case this.N_POLE: y = -y; phi = Proj4js.common.HALF_PI - phi; break; case this.S_POLE: phi -= Proj4js.common.HALF_PI; break; } lam = (y == 0. && (this.mode == this.EQUIT || this.mode == this.OBLIQ)) ? 0. : atan2(x, y); } else { var cCe, sCe, q, rho, ab=0.0; var Rh = Math.sqrt(p.x *p.x +p.y * p.y); switch (this.mode) { case this.EQUIT: case this.OBLIQ: x /= this.dd; y *= this.dd; rho = Math.sqrt(x*x + y*y); if (rho < Proj4js.common.EPSLN) { p.x = 0.; p.y = this.phi0; return p; } sCe = 2. * Math.asin(.5 * rho / this.rq); cCe = Math.cos(sCe); x *= (sCe = Math.sin(sCe)); if (this.mode == this.OBLIQ) { ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho q = this.qp * ab; y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe; } else { ab = y * sCe / rho; q = this.qp * ab; y = rho * cCe; } break; case this.N_POLE: y = -y; case this.S_POLE: q = (x * x + y * y); if (!q ) { p.x = 0.; p.y = this.phi0; return p; } /* q = this.qp - q; */ ab = 1. - q / this.qp; if (this.mode == this.S_POLE) { ab = - ab; } break; } lam = Math.atan2(x, y); phi = this.authlat(Math.asin(ab), this.apa); } /* var Rh = Math.Math.sqrt(p.x *p.x +p.y * p.y); var temp = Rh / (2.0 * this.a); if (temp > 1) { Loading @@ -4166,11 +4470,40 @@ Proj4js.Proj.laea = { } else { lat = this.lat0; } */ //return(OK); p.x = lon; p.y = lat; p.x = Proj4js.common.adjust_lon(this.long0+lam); p.y = phi; return p; }//lamazInv() },//lamazInv() /* determine latitude from authalic latitude */ P00: .33333333333333333333, P01: .17222222222222222222, P02: .10257936507936507936, P10: .06388888888888888888, P11: .06640211640211640211, P20: .01641501294219154443, authset: function(es) { var t; var APA = new Array(); APA[0] = es * this.P00; t = es * es; APA[0] += t * this.P01; APA[1] = t * this.P10; t *= es; APA[0] += t * this.P02; APA[1] += t * this.P11; APA[2] = t * this.P20; return APA; }, authlat: function(beta, APA) { var t = beta+beta; return(beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t+t) + APA[2] * Math.sin(t+t+t)); } }; Loading
lib/proj4js-compressed.js +23 −8 File changed.Preview size limit exceeded, changes collapsed. Show changes