/*~
proj4js.js	Javascript reprojection library.

Authors:	Mike Adair madairATdmsolutions.ca, Richard Greenwood richATgreenwoodmap.com, Didier Richard didier.richardATign.fr, Stephen Irons
License:	LGPL as per: http://www.gnu.org/copyleft/lesser.html
Note:		This program is an almost direct port of the C library Proj4.
UK Build:	Charles Macfarlane Harrison jjATjavajive.macfh.co.uk. Contains only WGS84, EPSG:27700 (UK), EPSG:29902 (Eire & NI), & EPSG:900913 (Google Spherical Mercator)
*/
window["Proj4js"]={defaultDatum:"WGS84",transform:function(d,b,a){if(!d.readyToUse||!b.readyToUse){this.reportError("Proj4js initialization for "+d.srsCode+" not yet complete");return a}if((d.srsProjNumber=="900913"&&b.datumCode!="WGS84")||(b.srsProjNumber=="900913"&&d.datumCode!="WGS84")){var c=Proj4js.WGS84;this.transform(d,c,a);d=c}if(d.projName=="longlat"){a.x*=Proj4js.common.D2R;a.y*=Proj4js.common.D2R}else{if(d.to_meter){a.x*=d.to_meter;a.y*=d.to_meter}d.inverse(a)}if(d.from_greenwich){a.x+=d.from_greenwich}a=this.datum_transform(d.datum,b.datum,a);if(b.from_greenwich){a.x-=b.from_greenwich}if(b.projName=="longlat"){a.x*=Proj4js.common.R2D;a.y*=Proj4js.common.R2D}else{b.forward(a);if(b.to_meter){a.x/=b.to_meter;a.y/=b.to_meter}}return a},datum_transform:function(c,b,a){if(c.compare_datums(b)){return a}if(c.datum_type==Proj4js.common.PJD_NODATUM||b.datum_type==Proj4js.common.PJD_NODATUM){return a}if(c.datum_type==Proj4js.common.PJD_GRIDSHIFT){alert("ERROR: Grid shift transformations are not implemented yet.")}if(b.datum_type==Proj4js.common.PJD_GRIDSHIFT){alert("ERROR: Grid shift transformations are not implemented yet.")}if(c.es!=b.es||c.a!=b.a||c.datum_type==Proj4js.common.PJD_3PARAM||c.datum_type==Proj4js.common.PJD_7PARAM||b.datum_type==Proj4js.common.PJD_3PARAM||b.datum_type==Proj4js.common.PJD_7PARAM){c.geodetic_to_geocentric(a);if(c.datum_type==Proj4js.common.PJD_3PARAM||c.datum_type==Proj4js.common.PJD_7PARAM){c.geocentric_to_wgs84(a)}if(b.datum_type==Proj4js.common.PJD_3PARAM||b.datum_type==Proj4js.common.PJD_7PARAM){b.geocentric_from_wgs84(a)}b.geocentric_to_geodetic(a)}if(b.datum_type==Proj4js.common.PJD_GRIDSHIFT){alert("ERROR: Grid shift transformations are not implemented yet.")}return a},reportError:function(a){},extend:function(a,d){a=a||{};if(d){for(var c in d){var b=d[c];if(b!==undefined){a[c]=b}}}return a},Class:function(){var b=function(){this.initialize.apply(this,arguments)};var a={};var d;for(var c=0;c<arguments.length;++c){if(typeof arguments[c]=="function"){d=arguments[c].prototype}else{d=arguments[c]}Proj4js.extend(a,d)}b.prototype=a;return b},bind:function(c,b){var a=Array.prototype.slice.apply(arguments,[2]);return function(){var d=a.concat(Array.prototype.slice.apply(arguments,[0]));return c.apply(b,d)}},scriptName:"proj4js-compressed.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath){return this.libPath}var e=this.scriptName;var d=e.length;var a=document.getElementsByTagName("script");for(var c=0;c<a.length;c++){var f=a[c].getAttribute("src");if(f){var b=f.lastIndexOf(e);if((b>-1)&&(b+d==f.length)){this.libPath=f.slice(0,-d);break}}}return this.libPath||""},loadScript:function(d,e,c,a){var b=document.createElement("script");b.defer=false;b.type="text/javascript";b.id=d;b.src=d;b.onload=e;b.onerror=c;b.loadCheck=a;if(/MSIE/.test(navigator.userAgent)){b.onreadystatechange=this.checkReadyState}document.getElementsByTagName("head")[0].appendChild(b)},checkReadyState:function(){if(this.readyState=="loaded"){if(!this.loadCheck()){this.onerror()}else{this.onload()}}}};Proj4js.Proj=Proj4js.Class({readyToUse:false,title:null,projName:null,units:null,datum:null,x0:0,y0:0,initialize:function(c){this.srsCodeInput=c;if(c.indexOf("urn:")==0){var a=c.split(":");if((a[1]=="ogc"||a[1]=="x-ogc")&&(a[2]=="def")&&(a[3]=="crs")){c=a[4]+":"+a[a.length-1]}}else{if(c.indexOf("http://")==0){var b=c.split("#");if(b[0].match(/epsg.org/)){c="EPSG:"+b[1]}else{if(b[0].match(/RIG.xml/)){c="IGNF:"+b[1]}}}}this.srsCode=c.toUpperCase();if(this.srsCode.indexOf("EPSG")==0){this.srsCode=this.srsCode;this.srsAuth="epsg";this.srsProjNumber=this.srsCode.substring(5)}else{if(this.srsCode.indexOf("IGNF")==0){this.srsCode=this.srsCode;this.srsAuth="IGNF";this.srsProjNumber=this.srsCode.substring(5)}else{if(this.srsCode.indexOf("CRS")==0){this.srsCode=this.srsCode;this.srsAuth="CRS";this.srsProjNumber=this.srsCode.substring(4)}else{this.srsAuth="";this.srsProjNumber=this.srsCode}}}this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode]){this.defsLoaded();return}var a=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(a,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var a=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(a,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs();this.loadProjCode(this.projName)},checkDefsLoaded:function(){if(Proj4js.defs[this.srsCode]){return true}else{return false}},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode);Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84;this.defsLoaded()},loadProjCode:function(b){if(Proj4js.Proj[b]){this.initTransforms();return}var a=Proj4js.getScriptLocation()+"projCode/"+b+".js";Proj4js.loadScript(a,Proj4js.bind(this.loadProjCodeSuccess,this,b),Proj4js.bind(this.loadProjCodeFailure,this,b),Proj4js.bind(this.checkCodeLoaded,this,b))},loadProjCodeSuccess:function(a){if(Proj4js.Proj[a].dependsOn){this.loadProjCode(Proj4js.Proj[a].dependsOn)}else{this.initTransforms()}},loadProjCodeFailure:function(a){Proj4js.reportError("failed to find projection file for: "+a)},checkCodeLoaded:function(a){if(Proj4js.Proj[a]){return true}else{return false}},initTransforms:function(){Proj4js.extend(this,Proj4js.Proj[this.projName]);this.init();this.readyToUse=true},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var d,b;if(!this.defData){return}var a=this.defData.split("+");for(var e=0;e<a.length;e++){var c=a[e].split("=");d=c[0].toLowerCase();b=c[1];switch(d.replace(/\s/gi,"")){case"":break;case"title":this.title=b;break;case"proj":this.projName=b.replace(/\s/gi,"");break;case"units":this.units=b.replace(/\s/gi,"");break;case"datum":this.datumCode=b.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=b.replace(/\s/gi,"");break;case"ellps":this.ellps=b.replace(/\s/gi,"");break;case"a":this.a=parseFloat(b);break;case"b":this.b=parseFloat(b);break;case"rf":this.rf=parseFloat(b);break;case"lat_0":this.lat0=b*Proj4js.common.D2R;break;case"lat_1":this.lat1=b*Proj4js.common.D2R;break;case"lat_2":this.lat2=b*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=b*Proj4js.common.D2R;break;case"lon_0":this.long0=b*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(b)*Proj4js.common.D2R;break;case"lonc":this.longc=b*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(b);break;case"y_0":this.y0=parseFloat(b);break;case"k_0":this.k0=parseFloat(b);break;case"k":this.k0=parseFloat(b);break;case"r_a":this.R_A=true;break;case"zone":this.zone=parseInt(b);break;case"south":this.utmSouth=true;break;case"towgs84":this.datum_params=b.split(",");break;case"to_meter":this.to_meter=parseFloat(b);break;case"from_greenwich":this.from_greenwich=b*Proj4js.common.D2R;break;case"pm":b=b.replace(/\s/gi,"");this.from_greenwich=Proj4js.PrimeMeridian[b]?Proj4js.PrimeMeridian[b]:parseFloat(b);this.from_greenwich*=Proj4js.common.D2R;break;case"no_defs":break;default:}}this.deriveConstants()},deriveConstants:function(){if(this.nagrids=="@null"){this.datumCode="none"}if(this.datumCode&&this.datumCode!="none"){var a=Proj4js.Datum[this.datumCode];if(a){this.datum_params=a.towgs84?a.towgs84.split(","):null;this.ellps=a.ellipse;this.datumName=a.datumName?a.datumName:this.datumCode}}if(!this.a){var b=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,b)}if(this.rf&&!this.b){this.b=(1-1/this.rf)*this.a}if(Math.abs(this.a-this.b)<Proj4js.common.EPSLN){this.sphere=true;this.b=this.a}this.a2=this.a*this.a;this.b2=this.b*this.b;this.es=(this.a2-this.b2)/this.a2;this.e=Math.sqrt(this.es);if(this.R_A){this.a*=1-this.es*(Proj4js.common.SIXTH+this.es*(Proj4js.common.RA4+this.es*Proj4js.common.RA6));this.a2=this.a*this.a;this.b2=this.b*this.b;this.es=0}this.ep2=(this.a2-this.b2)/this.b2;if(!this.k0){this.k0=1}this.datum=new Proj4js.datum(this)}});Proj4js.Proj.longlat={init:function(){},forward:function(a){return a},inverse:function(a){return a}};Proj4js.defs={WGS84:"+title=long/lat:WGS84 +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees","EPSG:4326":"+title=long/lat:WGS84 +proj=longlat +a=6378137.0 +b=6356752.31424518 +ellps=WGS84 +datum=WGS84 +units=degrees","EPSG:4269":"+title=long/lat:NAD83 +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees","EPSG:3785":"+title= Google Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"};Proj4js.defs.GOOGLE=Proj4js.defs["EPSG:3785"];Proj4js.defs["EPSG:900913"]=Proj4js.defs["EPSG:3785"];Proj4js.defs["EPSG:102113"]=Proj4js.defs["EPSG:3785"];Proj4js.common={PI:3.141592653589793,HALF_PI:1.5707963267948966,TWO_PI:6.283185307179586,FORTPI:0.7853981633974483,R2D:57.29577951308232,D2R:0.017453292519943295,SEC_TO_RAD:0.00000484813681109536,EPSLN:1e-10,MAX_ITER:20,COS_67P5:0.3826834323650898,AD_C:1.0026,PJD_UNKNOWN:0,PJD_3PARAM:1,PJD_7PARAM:2,PJD_GRIDSHIFT:3,PJD_WGS84:4,PJD_NODATUM:5,SRS_WGS84_SEMIMAJOR:6378137,SIXTH:0.16666666666666666,RA4:0.04722222222222222,RA6:0.022156084656084655,RV4:0.06944444444444445,RV6:0.04243827160493827,msfnz:function(c,b,d){var a=c*b;return d/(Math.sqrt(1-a*a))},tsfnz:function(e,d,c){var a=e*c;var b=0.5*e;a=Math.pow(((1-a)/(1+a)),b);return(Math.tan(0.5*(this.HALF_PI-d))/a)},phi2z:function(f,e){var d=0.5*f;var a,b;var c=this.HALF_PI-2*Math.atan(e);for(i=0;i<=15;i++){a=f*Math.sin(c);b=this.HALF_PI-2*Math.atan(e*(Math.pow(((1-a)/(1+a)),d)))-c;c+=b;if(Math.abs(b)<=1e-10){return c}}alert("phi2z has NoConvergence");return(-9999)},qsfnz:function(c,b){var a;if(c>1e-7){a=c*b;return((1-c*c)*(b/(1-a*a)-(0.5/c)*Math.log((1-a)/(1+a))))}else{return(2*b)}},asinz:function(a){if(Math.abs(a)>1){a=(a>1)?1:-1}return Math.asin(a)},e0fn:function(a){return(1-0.25*a*(1+a/16*(3+1.25*a)))},e1fn:function(a){return(0.375*a*(1+0.25*a*(1+0.46875*a)))},e2fn:function(a){return(0.05859375*a*a*(1+0.75*a))},e3fn:function(a){return(a*a*a*(35/3072))},mlfn:function(e,d,c,b,a){return(e*a-d*Math.sin(2*a)+c*Math.sin(4*a)-b*Math.sin(6*a))},srat:function(a,b){return(Math.pow((1-a)/(1+a),b))},sign:function(a){if(a<0){return(-1)}else{return(1)}},adjust_lon:function(a){a=(Math.abs(a)<this.PI)?a:(a-(this.sign(a)*this.TWO_PI));return a},adjust_lat:function(a){a=(Math.abs(a)<this.HALF_PI)?a:(a-(this.sign(a)*this.PI));return a},latiso:function(d,c,b){if(Math.abs(c)>this.HALF_PI){return +Number.NaN}if(c==this.HALF_PI){return Number.POSITIVE_INFINITY}if(c==-1*this.HALF_PI){return -1*Number.POSITIVE_INFINITY}var a=d*b;return Math.log(Math.tan((this.HALF_PI+c)/2))+d*Math.log((1-a)/(1+a))/2},fL:function(b,a){return 2*Math.atan(b*Math.exp(a))-this.HALF_PI},invlatiso:function(e,c){var b=this.fL(1,c);var d=0;var a=0;do{d=b;a=e*Math.sin(d);b=this.fL(Math.exp(e*Math.log((1+a)/(1-a))/2),c)}while(Math.abs(b-d)>1e-12);return b},sinh:function(a){var b=Math.exp(a);b=(b-1/b)/2;return b},cosh:function(a){var b=Math.exp(a);b=(b+1/b)/2;return b},tanh:function(a){var b=Math.exp(a);b=(b-1/b)/(b+1/b);return b},asinh:function(a){var b=(a>=0?1:-1);return b*(Math.log(Math.abs(a)+Math.sqrt(a*a+1)))},acosh:function(a){return 2*Math.log(Math.sqrt((a+1)/2)+Math.sqrt((a-1)/2))},atanh:function(a){return Math.log((a-1)/(a+1))/2},gN:function(b,f,d){var c=f*d;return b/Math.sqrt(1-c*c)}};Proj4js.datum=Proj4js.Class({initialize:function(b){this.datum_type=Proj4js.common.PJD_WGS84;if(b.datumCode&&b.datumCode=="none"){this.datum_type=Proj4js.common.PJD_NODATUM}if(b&&b.datum_params){for(var a=0;a<b.datum_params.length;a++){b.datum_params[a]=parseFloat(b.datum_params[a])}if(b.datum_params[0]!=0||b.datum_params[1]!=0||b.datum_params[2]!=0){this.datum_type=Proj4js.common.PJD_3PARAM}if(b.datum_params.length>3){if(b.datum_params[3]!=0||b.datum_params[4]!=0||b.datum_params[5]!=0||b.datum_params[6]!=0){this.datum_type=Proj4js.common.PJD_7PARAM;b.datum_params[3]*=Proj4js.common.SEC_TO_RAD;b.datum_params[4]*=Proj4js.common.SEC_TO_RAD;b.datum_params[5]*=Proj4js.common.SEC_TO_RAD;b.datum_params[6]=(b.datum_params[6]/1000000)+1}}}if(b){this.a=b.a;this.b=b.b;this.es=b.es;this.ep2=b.ep2;this.datum_params=b.datum_params}},compare_datums:function(a){if(this.datum_type!=a.datum_type){return false}else{if(this.a!=a.a||Math.abs(this.es-a.es)>5e-11){return false}else{if(this.datum_type==Proj4js.common.PJD_3PARAM){return(this.datum_params[0]==a.datum_params[0]&&this.datum_params[1]==a.datum_params[1]&&this.datum_params[2]==a.datum_params[2])}else{if(this.datum_type==Proj4js.common.PJD_7PARAM){return(this.datum_params[0]==a.datum_params[0]&&this.datum_params[1]==a.datum_params[1]&&this.datum_params[2]==a.datum_params[2]&&this.datum_params[3]==a.datum_params[3]&&this.datum_params[4]==a.datum_params[4]&&this.datum_params[5]==a.datum_params[5]&&this.datum_params[6]==a.datum_params[6])}else{if(this.datum_type==Proj4js.common.PJD_GRIDSHIFT){return strcmp(pj_param(this.params,"snadgrids").s,pj_param(a.params,"snadgrids").s)==0}else{return true}}}}}},geodetic_to_geocentric:function(c){var m=c.x;var h=c.y;var d=c.z?c.z:0;var e;var b;var a;var k=0;var l;var j;var g;var f;if(h<-Proj4js.common.HALF_PI&&h>-1.001*Proj4js.common.HALF_PI){h=-Proj4js.common.HALF_PI}else{if(h>Proj4js.common.HALF_PI&&h<1.001*Proj4js.common.HALF_PI){h=Proj4js.common.HALF_PI}else{if((h<-Proj4js.common.HALF_PI)||(h>Proj4js.common.HALF_PI)){Proj4js.reportError("geocent:lat out of range:"+h);return null}}}if(m>Proj4js.common.PI){m-=(2*Proj4js.common.PI)}j=Math.sin(h);f=Math.cos(h);g=j*j;l=this.a/(Math.sqrt(1-this.es*g));e=(l+d)*f*Math.cos(m);b=(l+d)*f*Math.sin(m);a=((l*(1-this.es))+d)*j;c.x=e;c.y=b;c.z=a;return k},geocentric_to_geodetic:function(u){var z=1e-12;var v=(z*z);var f=30;var m;var h;var a;var o;var b;var n;var l;var y;var x;var k;var s;var r;var e;var w;var g=u.x;var d=u.y;var c=u.z?u.z:0;var j;var t;var q;e=false;m=Math.sqrt(g*g+d*d);h=Math.sqrt(g*g+d*d+c*c);if(m/this.a<z){e=true;j=0;if(h/this.a<z){t=Proj4js.common.HALF_PI;q=-this.b;return}}else{j=Math.atan2(d,g)}a=c/h;o=m/h;b=1/Math.sqrt(1-this.es*(2-this.es)*o*o);y=o*(1-this.es)*b;x=a*b;w=0;do{w++;l=this.a/Math.sqrt(1-this.es*x*x);q=m*y+c*x-l*(1-this.es*x*x);n=this.es*l/(l+q);b=1/Math.sqrt(1-n*(2-n)*o*o);k=o*(1-n)*b;s=a*b;r=s*y-k*x;y=k;x=s}while(r*r>v&&w<f);t=Math.atan(s/Math.abs(k));u.x=j;u.y=t;u.z=q;return u},geocentric_to_geodetic_noniter:function(t){var d=t.x;var c=t.y;var a=t.z?t.z:0;var g;var s;var m;var e;var o;var r;var n;var k;var h;var j;var w;var f;var v;var u;var q;var l;var b;d=parseFloat(d);c=parseFloat(c);a=parseFloat(a);b=false;if(d!=0){g=Math.atan2(c,d)}else{if(c>0){g=Proj4js.common.HALF_PI}else{if(c<0){g=-Proj4js.common.HALF_PI}else{b=true;g=0;if(a>0){s=Proj4js.common.HALF_PI}else{if(a<0){s=-Proj4js.common.HALF_PI}else{s=Proj4js.common.HALF_PI;m=-this.b;return}}}}}o=d*d+c*c;e=Math.sqrt(o);r=a*Proj4js.common.AD_C;k=Math.sqrt(r*r+o);j=r/k;f=e/k;w=j*j*j;n=a+this.b*this.ep2*w;l=e-this.a*this.es*f*f*f;h=Math.sqrt(n*n+l*l);v=n/h;u=l/h;q=this.a/Math.sqrt(1-this.es*v*v);if(u>=Proj4js.common.COS_67P5){m=e/u-q}else{if(u<=-Proj4js.common.COS_67P5){m=e/-u-q}else{m=a/v+q*(this.es-1)}}if(b==false){s=Math.atan(v/u)}t.x=g;t.y=s;t.z=m;return t},geocentric_to_wgs84:function(b){if(this.datum_type==Proj4js.common.PJD_3PARAM){b.x+=this.datum_params[0];b.y+=this.datum_params[1];b.z+=this.datum_params[2]}else{if(this.datum_type==Proj4js.common.PJD_7PARAM){var f=this.datum_params[0];var d=this.datum_params[1];var j=this.datum_params[2];var e=this.datum_params[3];var k=this.datum_params[4];var h=this.datum_params[5];var g=this.datum_params[6];var c=g*(b.x-h*b.y+k*b.z)+f;var a=g*(h*b.x+b.y-e*b.z)+d;var l=g*(-k*b.x+e*b.y+b.z)+j;b.x=c;b.y=a;b.z=l}}},geocentric_from_wgs84:function(c){if(this.datum_type==Proj4js.common.PJD_3PARAM){c.x-=this.datum_params[0];c.y-=this.datum_params[1];c.z-=this.datum_params[2]}else{if(this.datum_type==Proj4js.common.PJD_7PARAM){var g=this.datum_params[0];var d=this.datum_params[1];var k=this.datum_params[2];var f=this.datum_params[3];var l=this.datum_params[4];var j=this.datum_params[5];var h=this.datum_params[6];var e=(c.x-g)/h;var b=(c.y-d)/h;var a=(c.z-k)/h;c.x=e+j*b-l*a;c.y=-j*e+b+f*a;c.z=l*e-f*b+a}}}});Proj4js.Point=Proj4js.Class({initialize:function(a,d,c){if(typeof a=="object"){this.x=a[0];this.y=a[1];this.z=a[2]||0}else{if(typeof a=="string"){var b=a.split(",");this.x=parseFloat(b[0]);this.y=parseFloat(b[1]);this.z=parseFloat(b[2])||0}else{this.x=a;this.y=d;this.z=c||0}}},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return("x="+this.x+",y="+this.y)},toShortString:function(){return(this.x+", "+this.y)}});Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667};Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}};Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}};Proj4js.WGS84=new Proj4js.Proj("WGS84");Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36;Proj4js.defs["EPSG:27700"]="+title=OSGB 1936 - British National Grid +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs";Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es);this.e1=Proj4js.common.e1fn(this.es);this.e2=Proj4js.common.e2fn(this.es);this.e3=Proj4js.common.e3fn(this.es);this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(d){var a=d.x;var o=d.y;var g=Proj4js.common.adjust_lon(a-this.long0);var e;var v,s;var u=Math.sin(o);var l=Math.cos(o);if(this.sphere){var r=l*Math.sin(g);if((Math.abs(Math.abs(r)-1))<1e-10){Proj4js.reportError("tmerc:forward: Point projects into infinity");return(93)}else{v=0.5*this.a*this.k0*Math.log((1+r)/(1-r));e=Math.acos(l*Math.cos(g)/Math.sqrt(1-r*r));if(o<0){e=-e}s=this.a*this.k0*(e-this.lat0)}}else{var k=l*g;var j=Math.pow(k,2);var m=this.ep2*Math.pow(l,2);var q=Math.tan(o);var w=Math.pow(q,2);e=1-this.es*Math.pow(u,2);var f=this.a/Math.sqrt(e);var h=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,o);v=this.k0*f*k*(1+j/6*(1-w+m+j/20*(5-18*w+Math.pow(w,2)+72*m-58*this.ep2)))+this.x0;s=this.k0*(h-this.ml0+f*q*(j*(0.5+j/24*(5-w+9*m+4*Math.pow(m,2)+j/30*(61-58*w+Math.pow(w,2)+600*m-330*this.ep2)))))+this.y0}d.x=v;d.y=s;return d},inverse:function(A){var k,e;var J;var C;var o=6;var m,j;if(this.sphere){var F=Math.exp(A.x/(this.a*this.k0));var E=0.5*(F-1/F);var H=this.lat0+A.y/(this.a*this.k0);var D=Math.cos(H);k=Math.sqrt((1-D*D)/(1+E*E));m=Proj4js.common.asinz(k);if(H<0){m=-m}if((E==0)&&(D==0)){j=this.long0}else{j=Proj4js.common.adjust_lon(Math.atan2(E,D)+this.long0)}}else{var s=A.x-this.x0;var q=A.y-this.y0;k=(this.ml0+q/this.k0)/this.a;e=k;for(C=0;true;C++){J=((k+this.e1*Math.sin(2*e)-this.e2*Math.sin(4*e)+this.e3*Math.sin(6*e))/this.e0)-e;e+=J;if(Math.abs(J)<=Proj4js.common.EPSLN){break}if(C>=o){Proj4js.reportError("tmerc:inverse: Latitude failed to converge");return(95)}}if(Math.abs(e)<Proj4js.common.HALF_PI){var b=Math.sin(e);var K=Math.cos(e);var u=Math.tan(e);var I=this.ep2*Math.pow(K,2);var l=Math.pow(I,2);var v=Math.pow(u,2);var a=Math.pow(v,2);k=1-this.es*Math.pow(b,2);var B=this.a/Math.sqrt(k);var w=B*(1-this.es)/k;var G=s/(B*this.k0);var z=Math.pow(G,2);m=e-(B*u*z/w)*(0.5-z/24*(5+3*v+10*I-4*l-9*this.ep2-z/30*(61+90*v+298*I+45*a-252*this.ep2-3*l)));j=Proj4js.common.adjust_lon(this.long0+(G*(1-z/6*(1+2*v+I-z/20*(5-2*I+28*v-3*l+8*this.ep2+24*a)))/K))}else{m=Proj4js.common.HALF_PI*Proj4js.common.sign(q);j=this.long0}}A.x=j;A.y=m;return A}};Proj4js.defs["EPSG:900913"]="+title= Google Mercator EPSG:900913 +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs";Proj4js.defs["EPSG:29902"]="+title=TM65 - Irish Grid +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs";Proj4js.Proj.merc={init:function(){if(this.lat_ts){if(this.sphere){this.k0=Math.cos(this.lat_ts)}else{this.k0=Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts))}}},forward:function(e){var f=e.x;var d=e.y;if(d*Proj4js.common.R2D>90&&d*Proj4js.common.R2D<-90&&f*Proj4js.common.R2D>180&&f*Proj4js.common.R2D<-180){Proj4js.reportError("merc:forward: llInputOutOfRange: "+f+" : "+d);return null}var a,g;if(Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN){Proj4js.reportError("merc:forward: ll2mAtPoles");return null}else{if(this.sphere){a=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(f-this.long0);g=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+0.5*d))}else{var c=Math.sin(d);var b=Proj4js.common.tsfnz(this.e,d,c);a=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(f-this.long0);g=this.y0-this.a*this.k0*Math.log(b)}e.x=a;e.y=g;return e}},inverse:function(d){var a=d.x-this.x0;var f=d.y-this.y0;var e,c;if(this.sphere){c=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-f/this.a*this.k0))}else{var b=Math.exp(-f/(this.a*this.k0));c=Proj4js.common.phi2z(this.e,b);if(c==-9999){Proj4js.reportError("merc:inverse: lat = -9999");return null}}e=Proj4js.common.adjust_lon(this.long0+a/(this.a*this.k0));d.x=e;d.y=c;return d}};

