function TTECCNVCoorParametros(H,F,D,B,G,E,C,A){this.Nombre=H;this.AX=F;this.AY=D;this.AZ=B;this.RX=G;this.RY=E;this.RZ=C;this.S=A}function TTECCNVCoorElipsoides(D,C,B,A){this.Nombre=D;this.Fecha=C;this.A=B;this.B=A;this.E=Math.sqrt(Math.pow(this.A,2)-Math.pow(this.B,2))/this.A;this.E2=Math.sqrt(Math.pow(this.A,2)-Math.pow(this.B,2))/this.B;this.E22=Math.pow(this.E2,2);this.C=+(Math.pow(this.A,2))/this.B}var objCoorDef=new TTECCNVCoordenadasDefiniciones();function TTECCNVCoordenadasDefiniciones(){this.pUTM=new Array();this.pUTM[this.pUTM.length]=new TTECCNVCoorParametros("H30 ETRS89 ED50",131.032,100.251,163.354,-1.2438,-0.0195,-1.1436,-9.39);this.pUTM[this.pUTM.length]=new TTECCNVCoorParametros("H30 ED50 ETRS89",-131.032,-100.251,-163.354,1.2438,0.0195,1.1436,9.39);this.pUTM[this.pUTM.length]=new TTECCNVCoorParametros("H31 ETRS89 ED50",181.4609,90.2931,187.1902,0.1435,0.4922,-0.3935,-17.57);this.pUTM[this.pUTM.length]=new TTECCNVCoorParametros("H31 ED50 ETRS89",-181.4609,-90.2931,-187.1902,-0.1435,-0.4922,0.3935,17.57);this.pElip=new Array();this.pElip[this.pElip.length]=new TTECCNVCoorElipsoides("GRS80",1980,6378137,6356752.31414);this.pElip[this.pElip.length]=new TTECCNVCoorElipsoides("Hayford 1909",1909,6378388,6356911.94613);this.pElip[this.pElip.length]=new TTECCNVCoorElipsoides("Internacional 1924",1924,6378388,6356911.94613);this.pElip[this.pElip.length]=new TTECCNVCoorElipsoides("WGS84",1984,6378137,6356752.314245)}TTECCNVCoordenadasDefiniciones.prototype.GetElipse=function(B){for(var A=0;A<this.pElip.length;A++){if(this.pElip[A].Nombre.toUpperCase()==B.toUpperCase()){return this.pElip[A]}}return null};TTECCNVCoordenadasDefiniciones.prototype.GetUTM=function(B){for(var A=0;A<this.pUTM.length;A++){if(this.pUTM[A].Nombre.toUpperCase()==B.toUpperCase()){return this.pUTM[A]}}return null};function TTECCoordenada(B,A,C){this.ConvCoor=new TTECCNVCoordenadas(objCoorDef);this.ConvCoor.Hemisferio="N";this.onChange=this.funcionNull;this.setXY(B,A,C)}TTECCoordenada.prototype.funcionNull=function(A){};TTECCoordenada.prototype.setXY=function(B,A,D,C){this.DatumActual=B;this.DatumOrigenId=B.Id;this._datumUltimoId=B.Id;this._x=A;this._y=D;this._z=C;this._calculaCoordenadas();this.onChange(this)};TTECCoordenada.prototype._calculaCoordenadas=function(){this.ConvCoor.X=this._x;this.ConvCoor.Y=this._y;this.ConvCoor.Z=(this._z==null?0:this._z);if(this.DatumActual.Id==23030||this.DatumActual.Id==25830){this.ConvCoor.HusoE=30;this.ConvCoor.HusoS=31}else{this.ConvCoor.HusoE=31;this.ConvCoor.HusoS=30}switch(this.DatumActual.Id){case 23030:case 23031:this.ConvCoor.ElipE=objCoorDef.GetElipse("Internacional 1924");break;case 25830:case 25831:this.ConvCoor.ElipE=objCoorDef.GetElipse("GRS80");break}this.ConvCoor.ElipS=this.ConvCoor.ElipE;this.ConvCoor.SetUTMGeodesicas();this.ConvCoor.LongitudS=this.ConvCoor.Longitud;this.ConvCoor.LatitudS=this.ConvCoor.Latitud;this.ConvCoor.SetGeodesicasUTM(this.ConvCoor.HusoS);this.HusoReal=this.ConvCoor.HusoReal;if(this.ConvCoor.HusoE==30){this._x30=this._x;this._y30=this._y;this._x31=this.ConvCoor.XS;this._y31=this.ConvCoor.YS}else{this._x30=this.ConvCoor.XS;this._y30=this.ConvCoor.YS;this._x31=this._x;this._y31=this._y}this._longitud=this.ConvCoor.Longitud;this._latitud=this.ConvCoor.Latitud};TTECCoordenada.prototype._verificaDatum=function(){if(this.DatumActual.Id==this._datumUltimoId){return }this._cambiaDatum()};TTECCoordenada.prototype._cambiaDatum=function(){var B="";var A="";this.ConvCoor.Z=(this._z==null?0:this._z);switch(this._datumUltimoId){case 23030:this.ConvCoor.X=this._x30;this.ConvCoor.Y=this._y30;this.ConvCoor.HusoE=30;this.ConvCoor.ElipE=objCoorDef.GetElipse("Internacional 1924");B="ED50";break;case 23031:this.ConvCoor.X=this._x31;this.ConvCoor.Y=this._y31;this.ConvCoor.HusoE=31;this.ConvCoor.ElipE=objCoorDef.GetElipse("Internacional 1924");B="ED50";break;case 25830:this.ConvCoor.X=this._x30;this.ConvCoor.Y=this._y30;this.ConvCoor.HusoE=30;this.ConvCoor.ElipE=objCoorDef.GetElipse("GRS80");B="ETRS89";break;case 25831:this.ConvCoor.X=this._x31;this.ConvCoor.Y=this._y31;this.ConvCoor.HusoE=31;this.ConvCoor.ElipE=objCoorDef.GetElipse("GRS80");B="ETRS89";break}switch(this.DatumActual.Id){case 23030:this.ConvCoor.HusoS=30;this.ConvCoor.ElipS=objCoorDef.GetElipse("Internacional 1924");A="ED50";break;case 23031:this.ConvCoor.HusoS=31;this.ConvCoor.ElipS=objCoorDef.GetElipse("Internacional 1924");A="ED50";break;case 25830:this.ConvCoor.HusoS=30;this.ConvCoor.ElipS=objCoorDef.GetElipse("GRS80");A="ETRS89";break;case 25831:this.ConvCoor.HusoS=31;this.ConvCoor.ElipS=objCoorDef.GetElipse("GRS80");A="ETRS89";break}this.ConvCoor.SetUTMGeodesicas();if(B!=A){this.ConvCoor.Parametros=objCoorDef.GetUTM("H"+this.ConvCoor.HusoE+" "+B+" "+A);this.ConvCoor.SetGeodesicasGeocentricas();this.ConvCoor.SetGeocentricasDestino();this.ConvCoor.SetGeocentricasGeodesicas()}else{this.ConvCoor.LongitudS=this.ConvCoor.Longitud;this.ConvCoor.LatitudS=this.ConvCoor.Latitud}this.ConvCoor.SetGeodesicasUTM(this.ConvCoor.HusoS);this._x=this.ConvCoor.XS;this._y=this.ConvCoor.YS;this._datumUltimoId=this.DatumActual.Id;this._calculaCoordenadas()};TTECCoordenada.prototype.getX=function(){this._verificaDatum();return Math.round(this._x)};TTECCoordenada.prototype.getY=function(){this._verificaDatum();return Math.round(this._y)};TTECCoordenada.prototype.getZ=function(){return this._z};TTECCoordenada.prototype.getX30=function(){this._verificaDatum();return Math.round(this._x30)};TTECCoordenada.prototype.getY30=function(){this._verificaDatum();return Math.round(this._y30)};TTECCoordenada.prototype.getX31=function(){this._verificaDatum();return Math.round(this._x31)};TTECCoordenada.prototype.getY31=function(){this._verificaDatum();return Math.round(this._y31)};TTECCoordenada.prototype.getLongitud=function(){this._verificaDatum();return this._longitud};TTECCoordenada.prototype.getLatitud=function(){this._verificaDatum();return this._latitud};TTECCoordenada.prototype.getLongitudGrados=function(){this._verificaDatum();return this._NotacionGrados(this._longitud)+(this._longitud>0?"E":"W")};TTECCoordenada.prototype.getLatitudGrados=function(){this._verificaDatum();return this._NotacionGrados(this._latitud)+(this._latitud>0?"N":"S")};TTECCoordenada.prototype._NotacionGrados=function(D){D=Math.abs(D);var C=Math.floor(D);D=(D-C)*60;var B=Math.floor(D);D=(D-B)*60;var A=Math.floor(D);D=Math.round((D-A)*1000)/1000;D=new String(D).substring(2);while(D.length<3){D+="0"}return C+"&deg; "+B+"' "+A+","+D+"''"};function TTECCNVCoordenadas(A){this.CoorDef=A;this.Hemisferio="N";this.X=null;this.Y=null;this.Z=null;this.HusoE=null;this.ElipE=null;this.ElipS=null;this.Parametros=null;this.Longitud=null;this.Latitud=null;this.XS=null;this.YS=null;this.HusoS=null;this.LongitudS=null;this.LatitudS=null}TTECCNVCoordenadas.prototype.SetUTMGeodesicas=function(){var X=6*this.HusoE-183;var K=(this.Hemisferio=="S"?this.Y-10000000:this.Y);var E=K/(6366197.724*0.9996);var J=Math.pow(Math.cos(E),2);var M=(this.ElipE.C/Math.pow(1+this.ElipE.E22*J,0.5))*0.9996;var U=(this.X-500000)/M;var G=Math.sin(2*E);var C=G*J;var I=E+G/2;var D=(3*I+C)/4;var A=(5*D+C*J)/3;var F=(3/4)*this.ElipE.E22;var H=(5/3)*Math.pow(F,2);var P=(35/27)*Math.pow(F,3);var O=0.9996*this.ElipE.C*(E-(F*I)+(H*D)-(P*A));var T=(K-O)/M;var Q=(this.ElipE.E22*Math.pow(U,2)/2)*J;var S=U*(1-(Q/3));var N=T*(1-Q)+E;var W=(Math.exp(S)-Math.exp(-S))/2;var L=Math.atan(W/Math.cos(N));var V=Math.atan(Math.cos(L)*Math.tan(N));this.Longitud=+(L/Math.PI)*180+X;var R=E+(1+this.ElipE.E22*J-(3/2)*this.ElipE.E22*Math.sin(E)*Math.cos(E)*(V-E))*(V-E);this.Latitud=+(R/Math.PI)*180};TTECCNVCoordenadas.prototype.SetGeodesicasGeocentricas=function(){var A=this.Radianes(this.Longitud);var B=this.Radianes(this.Latitud);var C=+Math.pow(this.ElipE.A,2)/Math.sqrt(Math.pow(this.ElipE.A,2)*Math.pow(Math.cos(B),2)+Math.pow(this.ElipE.B,2)*Math.pow(Math.sin(B),2));this.XGeo=+(C+this.Z)*Math.cos(B)*Math.cos(A);this.YGeo=+(C+this.Z)*Math.cos(B)*Math.sin(A);this.ZGeo=+((Math.pow(this.ElipE.B,2)/Math.pow(this.ElipE.A,2))*C+this.Z)*Math.sin(B)};TTECCNVCoordenadas.prototype.SetGeocentricasDestino=function(){var B=this.Parametros;var A=B.S/1000000;this.XGeoD=+B.AX+((1+A)*(this.XGeo+(this.YGeo*this.Radianes(B.RZ/60/60))-(this.ZGeo*this.Radianes(B.RY/60/60))));this.YGeoD=+B.AY+((1+A)*(-(this.Radianes(B.RZ/60/60)*this.XGeo)+this.YGeo+(this.ZGeo*this.Radianes(B.RX/60/60))));this.ZGeoD=+B.AZ+((1+A)*((this.XGeo*this.Radianes(B.RY/60/60))-(this.YGeo*this.Radianes(B.RX/60/60))+this.ZGeo))};TTECCNVCoordenadas.prototype.SetGeocentricasGeodesicas=function(){var G=+(Math.pow(this.ElipS.A,2)-Math.pow(this.ElipS.B,2))/Math.pow(this.ElipS.A,2);var F=+(Math.pow(this.ElipS.A,2)-Math.pow(this.ElipS.B,2))/Math.pow(this.ElipS.B,2);var E=+Math.sqrt(Math.pow(this.XGeoD,2)+Math.pow(this.YGeoD,2));var B=Math.atan((this.ZGeoD*this.ElipS.A)/(E*this.ElipS.B));var A=+Math.atan((+this.ZGeoD+F*this.ElipS.B*Math.pow(Math.sin(B),3))/(E-G*this.ElipS.A*Math.pow(Math.cos(B),3)));var D=+Math.atan(this.YGeoD/this.XGeoD);var H=+Math.pow(this.ElipS.A,2)/(Math.sqrt(Math.pow(this.ElipS.A,2)*Math.pow(Math.cos(A),2)+Math.pow(this.ElipS.B,2)*Math.pow(Math.sin(A),2)));var C=+(E/Math.cos(A))-H;this.LongitudS=+this.Grados(D);this.LatitudS=+this.Grados(A);this.AlturaS=C};TTECCNVCoordenadas.prototype.SetGeodesicasUTM=function(S){var B=this.LongitudS*Math.PI/180;var G=this.LatitudS*Math.PI/180;this.HusoReal=Math.floor((B/6)+31);if(S==null){S=this.HusoReal}var N=6*S-183;var K=+B-(N*Math.PI/180);var L=Math.cos(G)*Math.sin(K);var H=(1/2)*Math.log((1+L)/(1-L));var D=Math.atan((Math.tan(G))/Math.cos(K))-G;var C=(this.ElipS.C/Math.pow(1+this.ElipS.E22*Math.pow(Math.cos(G),2),(1/2)))*0.9996;var F=(this.ElipS.E22/2)*Math.pow(H,2)*Math.pow(Math.cos(G),2);var Q=Math.sin(2*G);var O=+Q*Math.pow(Math.cos(G),2);var A=G+(Q/2);var P=((3*A)+O)/4;var M=(5*P+O*Math.pow(G,2))/3;var I=(3/4)*this.ElipS.E22;var J=(5/3)*Math.pow(I,2);var E=(35/27)*Math.pow(I,3);var R=0.9996*this.ElipS.C*(G-(I*A)+(J*P)-(E*M));this.XS=H*C*(1+F/3)+500000;this.YS=(this.Hemisferio=="S"?(D*C*(1+F)+R+10000000):(D*C*(1+F)+R));this.HusoS=S};TTECCNVCoordenadas.prototype.Radianes=function(A){return A*Math.PI/180};TTECCNVCoordenadas.prototype.Grados=function(A){return A*180/Math.PI}
