!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):t.proj4=s()}(this,function(){"use strict";function p(t,s){if(t[s])return t[s];for(var i,a=Object.keys(t),h=s.toLowerCase().replace(zt,""),e=-1;++eMath.PI&&(a-=2*Math.PI),t=Math.sin(h),h=Math.cos(h),{x:((i=i/Math.sqrt(1-s*(t*t)))+e)*h*Math.cos(a),y:(i+e)*h*Math.sin(a),z:(i*(1-s)+e)*t}}function W(t,s,i,a){var h,e,n,r,o,l,u,M,c,f,d,p=t.x,m=t.y,y=t.z||0,_=Math.sqrt(p*p+m*m),g=Math.sqrt(p*p+m*m+y*y);if(_/i<1e-12){if(f=0,g/i<1e-12)return d=-a,{x:t.x,y:t.y,z:t.z}}else f=Math.atan2(m,p);for(h=y/g,r=(e=_/g)*(1-s)*(n=1/Math.sqrt(1-s*(2-s)*e*e)),o=h*n,c=0;c++,M=s*(M=i/Math.sqrt(1-s*o*o))/(M+(d=_*r+y*o-M*(1-s*o*o))),M=(u=h*(n=1/Math.sqrt(1-M*(2-M)*e*e)))*r-(l=e*(1-M)*n)*o,r=l,o=u,1e-24=s.lim[0])return e;if(a<0||a>=s.lim[1])return e;var a=a*s.lim[0]+i,i=s.cvs[a][0],n=s.cvs[a][1],r=s.cvs[++a][0],o=s.cvs[a][1];a+=s.lim[0];var l=s.cvs[a][0],u=s.cvs[a][1],M=s.cvs[--a][0],s=s.cvs[a][1],a=h*t,c=h*(1-t),f=(1-h)*(1-t),h=(1-h)*t;return e.x=f*i+c*r+h*M+a*l,e.y=f*n+c*o+h*s+a*u,e}function K(t){if("function"==typeof Number.isFinite){if(Number.isFinite(t))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof t||t!=t||!isFinite(t))throw new TypeError("coordinates must be finite numbers")}function V(t,s,i,a){var h,e,n=void 0!==(i=Array.isArray(i)?ct(i):{x:i.x,y:i.y,z:i.z,m:i.m}).z;if(ft(i),t.datum&&s.datum&&(e=s,((h=t).datum.datum_type===x||h.datum.datum_type===b||h.datum.datum_type===v)&&"WGS84"!==e.datumCode||(e.datum.datum_type===x||e.datum.datum_type===b||e.datum.datum_type===v)&&"WGS84"!==h.datumCode)&&(i=V(t,e=new m("WGS84"),i,a),t=e),a&&"enu"!==t.axis&&(i=Mt(t,!1,i)),"longlat"===t.projName)i={x:i.x*C,y:i.y*C,z:i.z||0};else if(t.to_meter&&(i={x:i.x*t.to_meter,y:i.y*t.to_meter,z:i.z||0}),!(i=t.inverse(i)))return;if(t.from_greenwich&&(i.x+=t.from_greenwich),i=ut(t.datum,s.datum,i))return s.from_greenwich&&(i={x:i.x-s.from_greenwich,y:i.y,z:i.z||0}),"longlat"===s.projName?i={x:i.x*S,y:i.y*S,z:i.z||0}:(i=s.forward(i),s.to_meter&&(i={x:i.x/s.to_meter,y:i.y/s.to_meter,z:i.z||0})),a&&"enu"!==s.axis?Mt(s,!0,i):(n||delete i.z,i)}function Z(s,i,a,t){var h,e;return Array.isArray(a)?(e=V(s,i,a,t)||{x:NaN,y:NaN},2=this.text.length)return;t=this.text[this.place++]}switch(this.state){case 1:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},a.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if(Ft.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},a.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=1)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=1,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},a.prototype.number=function(t){if(!Ut.test(t)){if(Ft.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},a.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},a.prototype.keyword=function(t){if(Dt.test(t))this.word+=t;else{var s;if("["===t)return(s=[]).push(this.word),this.level++,null===this.root?this.root=s:this.currentObject.push(s),this.stack.push(this.currentObject),this.currentObject=s,void(this.state=1);if(!Ft.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},a.prototype.neutral=function(t){if(Tt.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(Ut.test(t))return this.word=t,void(this.state=3);if(!Ft.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},a.prototype.output=function(){for(;this.placeN?Math.tan(i):0,l=Math.pow(l,2),u=Math.pow(l,2),M=1-this.es*Math.pow(a,2),M=(e/=Math.sqrt(M),pt(i,a,h,this.en)),c=this.a*(this.k0*e*(1+n/6*(1-l+r+n/20*(5-18*l+u+14*r-58*l*r+n/42*(61+179*u-u*l-479*l)))))+this.x0,M=this.a*(this.k0*(M-this.ml0+a*s*e/2*(1+n/12*(5-l+9*r+4*o+n/30*(61+u-58*l+270*r-330*l*r+n/56*(1385+543*u-u*l-3111*l))))))+this.y0;else{a=h*Math.sin(s);if(Math.abs(Math.abs(a)-1)N?Math.tan(l):0,o=this.ep2*Math.pow(s,2),n=Math.pow(o,2),i=Math.pow(h,2),e=Math.pow(i,2),a=1-this.es*Math.pow(r,2),r=u*Math.sqrt(a)/this.k0,h=l-(a*=h)*(l=Math.pow(r,2))/(1-this.es)*.5*(1-l/12*(5+3*i-9*o*i+o-4*n-l/30*(61+90*i-252*o*i+45*e+46*o-l/56*(1385+3633*i+4095*e+1574*e*i)))),E(this.long0+r*(1-l/6*(1+2*i+o-l/20*(5+28*i+24*e+8*o*i+6*o-l/42*(61+662*i+1320*e+720*e*i))))/s)):(h=w*ot(M),0)):(r=.5*((n=Math.exp(u/this.k0))-1/n),o=this.lat0+M/this.k0,l=Math.cos(o),a=Math.sqrt((1-Math.pow(l,2))/(1+Math.pow(r,2))),h=Math.asin(a),M<0&&(h=-h),0==r&&0===l?0:E(Math.atan2(r,l)+this.long0)),t.x=e,t.y=h,t},names:["Fast_Transverse_Mercator","Fast Transverse Mercator"]},rs={init:function(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(ns.init.apply(this),this.forward=ns.forward,this.inverse=ns.inverse),this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),t=t/(2-t),s=t,t=(this.cgb[0]=t*(2+t*(-2/3+t*(t*(116/45+t*(26/45+-2854/675*t))-2))),this.cbg[0]=t*(t*(2/3+t*(4/3+t*(-82/45+t*(32/45+4642/4725*t))))-2),this.cgb[1]=(s*=t)*(7/3+t*(t*(-227/45+t*(2704/315+2323/945*t))-1.6)),this.cbg[1]=s*(5/3+t*(-16/15+t*(-13/9+t*(904/315+-1522/945*t)))),this.cgb[2]=(s*=t)*(56/15+t*(-136/35+t*(-1262/105+73814/2835*t))),this.cbg[2]=s*(-26/15+t*(34/21+t*(1.6+-12686/2835*t))),this.cgb[3]=(s*=t)*(4279/630+t*(-332/35+-399572/14175*t)),this.cbg[3]=s*(1237/630+t*(-24832/14175*t-2.4)),this.cgb[4]=(s*=t)*(4174/315+-144838/6237*t),this.cbg[4]=s*(-734/315+109598/31185*t),this.cgb[5]=601676/22275*(s*=t),this.cbg[5]=444337/155925*s,s=Math.pow(t,2),this.Qn=this.k0/(1+t)*(1+s*(.25+s*(1/64+s/256))),this.utg[0]=t*(t*(2/3+t*(-37/96+t*(1/360+t*(81/512+-96199/604800*t))))-.5),this.gtu[0]=t*(.5+t*(-2/3+t*(5/16+t*(41/180+t*(-127/288+7891/37800*t))))),this.utg[1]=s*(-1/48+t*(-1/15+t*(437/1440+t*(-46/105+1118711/3870720*t)))),this.gtu[1]=s*(13/48+t*(t*(557/1440+t*(281/630+-1983433/1935360*t))-.6)),this.utg[2]=(s*=t)*(-17/480+t*(37/840+t*(209/4480+-5569/90720*t))),this.gtu[2]=s*(61/240+t*(-103/140+t*(15061/26880+167603/181440*t))),this.utg[3]=(s*=t)*(-4397/161280+t*(11/504+830251/7257600*t)),this.gtu[3]=s*(49561/161280+t*(-179/168+6601661/7257600*t)),this.utg[4]=(s*=t)*(-4583/161280+108847/3991680*t),this.gtu[4]=s*(34729/80640+-3418889/1995840*t),this.utg[5]=-.03233083094085698*(s*=t),this.gtu[5]=.6650675310896665*s,gt(this.cbg,this.lat0));this.Zb=-this.Qn*(t+function(t,s){for(var i,a=2*Math.cos(s),h=t.length-1,e=t[h],n=0;0<=--h;)i=a*e-n+t[h],n=e,e=i;return Math.sin(s)*i}(this.gtu,2*t))},forward:function(t){var s,i=E(t.x-this.long0),a=t.y,a=gt(this.cbg,a),h=Math.sin(a),e=Math.cos(a),n=Math.sin(i),r=Math.cos(i),n=(a=Math.atan2(h,r*e),i=Math.atan2(n*e,M(h,e*r)),i=_t(Math.tan(i)),xt(this.gtu,2*a,2*i));return a+=n[0],i+=n[1],h=Math.abs(i)<=2.623395162778?(s=this.a*(this.Qn*i)+this.x0,this.a*(this.Qn*a+this.Zb)+this.y0):s=1/0,t.x=s,t.y=h,t},inverse:function(t){var s,i,a,h,e=(t.x-this.x0)*(1/this.a),n=(t.y-this.y0)*(1/this.a);return n=(n-this.Zb)/this.Qn,e/=this.Qn,h=Math.abs(e)<=2.623395162778?(n+=(a=xt(this.utg,2*n,2*e))[0],e+=a[1],e=Math.atan(yt(e)),a=Math.sin(n),s=Math.cos(n),h=Math.sin(e),i=Math.cos(e),n=Math.atan2(a*i,M(h,i*s)),e=Math.atan2(h,i*s),a=E(e+this.long0),gt(this.cgb,n)):a=1/0,t.x=a,t.y=h,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","tmerc"]},os={init:function(){var t=function(t,s){if(void 0===t){if((t=Math.floor(30*(E(s)+Math.PI)/Math.PI)+1)<0)return 0;if(60N?(a=Math.sin(this.lat0),s=Math.cos(this.lat0),t=1-this.es*a*a,this.B=s*s,this.B=Math.sqrt(1+this.es*this.B*this.B/d),this.A=this.B*this.k0*p/t,(i=(s=this.B*p/(s*Math.sqrt(t)))*s-1)<=0?i=0:(i=Math.sqrt(i),this.lat0<0&&(i=-i)),this.E=i+=s,this.E*=Math.pow(y(this.e,this.lat0,a),this.B)):(this.B=1/p,this.A=this.k0,this.E=s=i=1),c||f?(c?(h=Math.asin(Math.sin(M)/s),f||(e=M)):(h=e,M=Math.asin(s*Math.sin(h))),this.lam0=n-Math.asin(.5*(i-1/i)*Math.tan(h))/this.B):(d=Math.pow(y(this.e,l,Math.sin(l)),this.B),a=Math.pow(y(this.e,u,Math.sin(u)),this.B),i=this.E/d,p=(a-d)/(a+d),c=((c=this.E*this.E)-a*d)/(c+a*d),(t=r-o)<-Math.pi?o-=jt:t>Math.pi&&(o+=jt),this.lam0=E(.5*(r+o)-Math.atan(c*Math.tan(.5*this.B*(r-o))/p)/this.B),h=Math.atan(2*Math.sin(this.B*E(r-this.lam0))/(i-1/i)),e=M=Math.asin(s*Math.sin(h))),this.singam=Math.sin(h),this.cosgam=Math.cos(h),this.sinrot=Math.sin(e),this.cosrot=Math.cos(e),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(s*s-1)/Math.cos(M))),this.lat0<0&&(this.u_0=-this.u_0)),i=.5*h,this.v_pole_n=this.ArB*Math.log(Math.tan(P-i)),this.v_pole_s=this.ArB*Math.log(Math.tan(P+i))},forward:function(t){var s,i,a,h,e={};if(t.x=t.x-this.lam0,Math.abs(Math.abs(t.y)-w)>N){if(a=.5*((h=this.E/Math.pow(y(this.e,t.y,Math.sin(t.y)),this.B))-(i=1/h)),h=.5*(h+i),s=Math.sin(this.B*t.x),h=(a*this.singam-s*this.cosgam)/h,Math.abs(Math.abs(h)-1)N?this.ns=Math.log(s/a)/Math.log(i/h):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=s/(this.ns*Math.pow(i,this.ns)),this.rh=this.a*this.f0*Math.pow(e,this.ns),this.title||(this.title="Lambert Conformal Conic"))},forward:function(t){var s=t.x,i=t.y;Math.abs(2*Math.abs(i)-Math.PI)<=N&&(i=ot(i)*(w-2*N));var a,h=Math.abs(Math.abs(i)-w);if(NN?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var s=t.x,i=t.y,i=(this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i),_(this.e3,this.sin_phi)),i=this.a*Math.sqrt(this.c-this.ns0*i)/this.ns0,s=this.ns0*E(s-this.long0),a=i*Math.sin(s)+this.x0,i=this.rh-i*Math.cos(s)+this.y0;return t.x=a,t.y=i,t},inverse:function(t){var s,i,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,a=0<=this.ns0?(i=Math.sqrt(t.x*t.x+t.y*t.y),1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),-1),(s=0)!==i&&(s=Math.atan2(a*t.x,a*t.y)),a=i*this.ns0/this.a,a=this.sphere?Math.asin((this.c-a*a)/(2*this.ns0)):(i=(this.c-a*a)/this.ns0,this.phi1z(this.e3,i)),i=E(s/this.ns0+this.long0),t.x=i,t.y=a,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,s){var i,a,h,e=g(.5*s);if(tMath.PI&&(i=Math.PI),s=(2*a+Math.sin(2*a))/Math.PI,12*w*this.a?void 0:(h=o/this.a,r=Math.sin(h),h=Math.cos(h),s=this.long0,Math.abs(o)<=N?i=this.lat0:(i=g(h*this.sin_p12+t.y*r*this.cos_p12/o),n=Math.abs(this.lat0)-w,s=E(Math.abs(n)<=N?0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y):this.long0+Math.atan2(t.x*r,o*this.cos_p12*h-t.y*this.sin_p12*r))),t.x=s,t.y=i,t):(n=vt(this.es),h=wt(this.es),r=Nt(this.es),e=Ct(this.es),Math.abs(this.sin_p12-1)<=N?(a=this.a*d(n,h,r,e,w),o=Math.sqrt(t.x*t.x+t.y*t.y),i=St((a-o)/this.a,n,h,r,e),s=E(this.long0+Math.atan2(t.x,-1*t.y))):Math.abs(this.sin_p12+1)<=N?(a=this.a*d(n,h,r,e,w),o=Math.sqrt(t.x*t.x+t.y*t.y),i=St((o-a)/this.a,n,h,r,e),s=E(this.long0+Math.atan2(t.x,t.y))):(o=Math.sqrt(t.x*t.x+t.y*t.y),a=Math.atan2(t.x,t.y),n=c(this.a,this.e,this.sin_p12),h=Math.cos(a),e=-(r=this.e*this.cos_p12*h)*r/(1-this.es),r=3*this.es*(1-e)*this.sin_p12*this.cos_p12*h/(1-this.es),r=1-e*(n=(o=o/n)-e*(1+e)*Math.pow(o,3)/6-r*(1+3*e)*Math.pow(o,4)/24)*n/2-o*n*n*n/6,e=Math.asin(this.sin_p12*Math.cos(n)+this.cos_p12*Math.sin(n)*h),s=E(this.long0+Math.asin(Math.sin(a)*Math.sin(n)/Math.cos(e))),o=Math.sin(e),i=Math.atan2((o-this.es*r*this.sin_p12)*Math.tan(e),o*(1-this.es))),t.x=s,t.y=i,t)},names:["Azimuthal_Equidistant","aeqd"]},qs={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var s,i,a,h=t.x,e=t.y,h=E(h-this.long0),n=Math.sin(e),e=Math.cos(e),r=Math.cos(h);return(0<(s=this.sin_p14*n+this.cos_p14*e*r)||Math.abs(s)<=N)&&(i=+this.a*e*Math.sin(h),a=this.y0+ +this.a*(this.cos_p14*n-this.sin_p14*e*r)),t.x=i,t.y=a,t},inverse:function(t){var s,i,a,h,e,n;return t.x-=this.x0,t.y-=this.y0,s=Math.sqrt(t.x*t.x+t.y*t.y),a=g(s/this.a),i=Math.sin(a),a=Math.cos(a),e=this.long0,Math.abs(s)<=N?n=this.lat0:(n=g(a*this.sin_p14+t.y*i*this.cos_p14/s),h=Math.abs(this.lat0)-w,e=Math.abs(h)<=N?E(0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y)):E(this.long0+Math.atan2(t.x*i,s*this.cos_p14*a-t.y*this.sin_p14*i))),t.x=e,t.y=n,t},names:["ortho"]},As=1,Os=2,js=3,Gs=4,Ls=5,zs=6,j=1,G=2,L=3,Rs=4,Bs={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=w-P/2?this.face=Ls:this.lat0<=-(w-P/2)?this.face=zs:Math.abs(this.long0)<=P?this.face=As:Math.abs(this.long0)<=w+P?this.face=0=Math.abs(t.y)?r.value=j:0<=t.y&&t.y>=Math.abs(t.x)?(r.value=G,s-=w):t.x<0&&-t.x>=Math.abs(t.y)?(r.value=L,s=s<0?s+k:s-k):(r.value=Rs,s+=w),e=k/12*Math.tan(s),h=Math.sin(e)/(Math.cos(e)-1/Math.sqrt(2)),h=Math.atan(h),(a=1-(s=Math.cos(s))*s*(s=Math.tan(a))*s*(1-Math.cos(Math.atan(1/Math.cos(h)))))<-1?a=-1:1s.y)--i;else{if(!(Ds[i+1][0]<=s.y))break;++i}var a=Ds[i],h=function(t,s,i,a){for(var h=s;a;--a){var e=t(h);if(h-=e,Math.abs(e)