//gms var ggg, minutos, segundos; //xyzla var lat, lon, h; //mercator var xx, yy, mc; function borrar() { nro1.salida.value=""; } function info() { nro1.salida.value+="\n\n"; nro1.salida.value+="SYS1SYS.htm\n\n"; nro1.salida.value+="Transformación de coordenadas geodésicas\n"; nro1.salida.value+="entre distintos sistemas y marcos de referencia.\n"; nro1.salida.value+="Autor: J.L.Hormaechea\n"; nro1.salida.value+="Versión HTML - JavaScript - julio 2002\n"; nro1.salida.value+="Corregido para Firefox - mayo 2007\n"; nro1.salida.value+="E-mail: jlhor@earg.gov.ar\n\n"; } function formatnumber(aaaa, np){ var pot=Math.pow(10,np); var ss=signo(aaaa); aaaa=Math.floor(Math.abs(aaaa*pot)+0.5); aaaa=aaaa/pot*ss; return aaaa; } function signo(aaaa){ if (aaaa < 0) return -1; if (aaaa == 0) return 0; if (aaaa > 0) return 1; } function gms(gra) { ggg=Math.floor(Math.abs(gra)); signos=signo(gra); minutos=Math.floor((Math.abs(gra)-ggg)*60); segundos=(Math.abs(gra)-ggg)*3600-minutos*60; ggg=ggg*signos; } function xyzfila (a, ff, x, y, z) { // // Pasa de X Y Z a Fi, Lambda y h // // // // ff = 1 / ff; var e2 = 2 * ff - ff * ff; var xk = 180 / 3.141592653589793; var xd6 = 60; var xd36 = 3600; // PASAJE DE RECTANGULARES A GEOGRAFICAS // // var zlat, n, zdxs, dif, zd0; var ydx = y / x; // xlat ==> Longitud var xlat = Math.atan(ydx) * xk; var xs = x * x + y * y; var xs = Math.sqrt(xs); var zdxs = 1 / (1 - e2) * z / xs; var zd0 = zdxs; do { zlat = Math.atan(zdxs); n = a / Math.sqrt(1 - e2 * Math.pow(Math.sin(zlat) , 2)); zdxs = (1 + e2 * n * Math.sin(zlat) / z) * z / xs; dif = Math.abs(zd0 - zdxs); zd0 = zdxs; } while (dif > .0000000001); // zlat ==> Latitud zlat = Math.atan(zdxs) * xk; h = x / (Math.cos(zlat / xk) * Math.cos(xlat / xk)) - n; lat = zlat; lon = xlat; } function mercator(aaa, ff, fir, longr) { // Obtiene coordenadas Easting y Norting UTM // a partir de Lat/Lon geodesicas // para elipsoide WGS84 o Internacional 1924 // Elige la faja por proximidad // // Autor: J.L.Hormaechea // abril 1994. // // Modificacion: elige faja por proximidad (nov 1995) // si Meridiano Central = 0 var x0 = 500000; var y0 = 10000000; var pii = 3.141592653589793; // semi ancho faja G-K (nov 1995) var g15 = 1.5 * pii / 180; var falsonor = arco(aaa, ff); var falsonor = falsonor - y0; // //Elige faja por proximidad si mc =0 signol=signo(longr); var mcr=0; if (nro1.mca.checked) { for(i = 0; i<=60;i++){ mcfaj = i * 3 * pii / 180; if (mcfaj - Math.abs(longr) < g15) mcr = mcfaj * signol; } } if (!nro1.mca.checked) mcr=mc*pii/180; if (nro1.mca.checked) { mc=mcr*180/pii; nro1.medcen.value=formatnumber(mc,5); } // fin elige faja mcr sale en radianes longr = longr - mcr; k0 = 1; var e2 = 2 * ff - ff * ff; var e = Math.sqrt(e2); var n = ff / (2 - ff); var n2 = n * n; var n3 = n2 * n; var n4 = n3 * n; var a0 = 1 + n2 / 4 + n4 / 64; var a2 = 1.5 * (n - n3 / 8); var a4 = 15 / 16 * (n2 - n4 / 4); var a6 = 35 / 48 * n3; var a8 = 315 / 512 * n4; var nn = aaa / (Math.sqrt(1 - e2 * Math.pow(Math.sin(fir) , 2))); var mm = aaa * (1 - e2) / Math.pow(Math.sqrt(1 - e2 * Math.pow(Math.sin(fir) , 2)), 3); var t = Math.tan(fir); var t2 = t * t; var t4 = t2 * t2; var eta2 = e2 / (1 - e2) * Math.pow(Math.cos(fir) , 2); var fia = Math.abs(fir); var s = aaa / (1 + n) * (a0 * fir - a2 * Math.sin(2 * fir) + a4 * Math.sin(4 * fir) - a6 * Math.sin(6 * fir) + a8 * Math.sin(8 * fir)); var tx1 = longr * Math.cos(fir); var tx2 = Math.pow(longr * Math.cos(fir), 3) * (1 - t2 + eta2) / 6; var tx3 = Math.pow(longr * Math.cos(fir), 5) * (5 - 18 * t2 + t4 + 14 * eta2 - 58 * t2 * eta2) / 120; var ty1 = s / nn; var ty2 = Math.pow(longr, 2) * Math.sin(fir) * Math.cos(fir) / 2; var ty3 = Math.pow(longr, 4) * Math.sin(fir) * Math.pow(Math.cos(fir), 3) * (5 - t2 + 9 * eta2 + 4 * eta2 * eta2) / 24; var ty4 = Math.pow(longr, 6) * Math.sin(fir) * Math.pow(Math.cos(fir), 5) * (61 - 58 * t2 + t4 + 270 * eta2 - 30 * t2 * eta2) / 720; xx = (tx1 + tx2 + tx3) * k0 * nn + x0; yy = (ty1 + ty2 + ty3 + ty4) * k0 * nn + y0 + falsonor; } function arco(a, f) { var pii = 3.141592653589793; var fi = 90 * pii / 180; var n = f / (2 - f); var n2 = n * n; var n3 = n2 * n; var n4 = n2 * n2; var a0 = 1 + n2 / 4 + n4 / 64; var a2 = 3 / 2 * (n - n3 / 8); var a4 = 15 / 16 * (n2 - n4 / 4); var a6 = 35 / 48 * n3; var a8 = 315 / 512 * n4; var arcoo = a / (1 + n) * (a0 * fi - a2 * Math.sin(2 * fi) + a4 * Math.sin(4 * fi) - a6 * Math.sin(6 * fi) + a8 * Math.sin(8 * fi)); return arcoo; } function transf() { // // Transforma coordenadas entre diferentes sistemas // partiendo de geográficas geodésicas // // geo -> cartesianas -> dx dy dz -> cartesianas -> geodesicas // // Permite definier DX DY DZ y los parametros de los elipsoides // inicial y final. // // Realizado a partir del WGS84_IN // // abril de 2000 // // Autor: José Luis Hormaechea // // version HTML y JavaScript: junio 2001 (J.L.H.) // //ent = new String(""); f = new Array(11); a = new Array(11); dx = new Array(11); dy = new Array(11); dz = new Array(11); sis = new Array(11); conv = new Array(11); elip1 = new Array(11); elip2 = new Array(11); var break1="
"; var break2="

"; var break3="


"; var b=" "; var pii = 3.141592653589793; var nrosi = 2; // Meridiano Central (si mc=0 elige por proximidad); mc = nro1.medcen.value; //WGS84 f[1] = 1 / 298.257223563; a[1] = 6378137; sis[1] = "WGS84"; //INTERNACIONAL f[2] = 1 / 297; a[2] = 6378388; sis[2] = "INTERNACIONAL"; k = pii / 180; // nro de juegos deparametros nrosin = 9; conv[1] = "WGS84 a Inchauspe (DMA)" dx[1] = 148; dy[1] = -136; dz[1] = -90; elip1[1]=1; elip2[1]=2; conv[2] = "Inchauspe a WGS84 (DMA)" dx[2] = -148; dy[2] = 136; dz[2] = 90; elip1[2]=2; elip2[2]=1; conv[3] = "MMS A POSGAR" dx[3] = -78.1; dy[3] = 101.6; dz[3] = 133.3; elip1[3]=2; elip2[3]=1; conv[4] = "POSGAR A MMS" dx[4] = 78.1; dy[4] = -101.6; dz[4] = -133.3; elip1[4]=1; elip2[4]=2; conv[5] = "POSGAR a ITRF97 en TdF" dx[5] = .645; dy[5] = -1.091; dz[5] = -.28; elip1[5]=1; elip2[5]=1; conv[6] = "POSGAR A Hito XVIII" dx[6] = -18.2; dy[6] = -190.7; dz[6] = -100.9; elip1[6]=1; elip2[6]=2; conv[7] = "Hito XVIII a POSGAR" dx[7] = 18.2; dy[7] = 190.7; dz[7] = 100.9; elip1[7]=2; elip2[7]=1; conv[8] = "POSGAR a MM Norte" dx[8] = 9.5; dy[8] = -122.9; dz[8] = -138.2; elip1[8]=1; elip2[8]=2; conv[9] = "MM Norte a POSGAR" dx[9] = -9.5; dy[9] = 122.9; dz[9] = 138.2; elip1[9]=2; elip2[9]=1; // Fija Parametros de Transformacion var kpar = Math.abs(nro1.cc.value); if (kpar > nrosin) kpar=nrosin; if (kpar > 0) { nro1.ppt.value=conv[kpar]; nro1.pdx.value=dx[kpar]; nro1.pdy.value=dy[kpar]; nro1.pdz.value=dz[kpar]; is1=elip1[kpar]; is2=elip2[kpar]; nro1.semieje1.value=a[is1]; nro1.aplanai1.value=1/f[is1]; nro1.sistema1.value=sis[is1]; nro1.semieje2.value=a[is2]; nro1.aplanai2.value=1/f[is2]; nro1.sistema2.value=sis[is2]; }; if (kpar == 0) { is1=1; is2=2; f[1] = 1 / nro1.aplanai1.value; a[1] = nro1.semieje1.value; sis[1] = nro1.sistema1.value; f[2] = 1 / nro1.aplanai2.value; a[2] = nro1.semieje2.value; sis[2] = nro1.sistema2.value; dx[kpar] = Math.abs(nro1.pdx.value)*signo(nro1.pdx.value); dy[kpar] = Math.abs(nro1.pdy.value)*signo(nro1.pdy.value); dz[kpar] = Math.abs(nro1.pdz.value)*signo(nro1.pdz.value); } var fg = nro1.fig.value; if (Math.abs(fg) <= 90) { var fm = nro1.fim.value; var fs = nro1.fis.value; //longitud: var lg = nro1.lag.value; var lm = nro1.lam.value; var ls = nro1.las.value; var h1 = Math.abs(nro1.hh.value)*signo(nro1.hh.value); var fir = (Math.abs(fg) + fm / 60 + fs / 3600) * k * signo(fg); var longi = (Math.abs(lg) + lm / 60 + ls / 3600) * signo(lg) * k; var e2 = 2 * f[is1] - f[is1] * f[is1]; var n = a[is1] / Math.sqrt(1 - e2 * Math.pow(Math.sin(fir) , 2)); var xwgs84 = (n + h1) * Math.cos(fir) * Math.cos(longi); var ywgs84 = (n + h1) * Math.cos(fir) * Math.sin(longi); var zwgs84 = (n * (1 - e2) + h1) * Math.sin(fir); mercator(a[is1], f[is1], fir, longi); xgk84=xx; ygk84=yy; var x69 = xwgs84 + dx[kpar]; var y69 = ywgs84 + dy[kpar]; var z69 = zwgs84 + dz[kpar]; //CALL xyzfila(6378388#, 297#, x69, y69, z69, lat69, lon69, h69) var lat69=0; var lon69=0; var h69=0; xyzfila(a[is2], 1 / f[is2], x69, y69, z69); lat69=lat; lon69=lon; h69=h; la69 = lat69; lo69 = lon69; ggg=0; minutos=0; segundos=0; gms(la69); nro1.lig.value = ggg ; nro1.lim.value = minutos ; nro1.lis.value = formatnumber(segundos,5); gms(lo69); nro1.log.value = ggg ; nro1.lom.value = minutos; nro1.los.value = formatnumber(segundos,5); nro1.hhf.value = formatnumber(h69, 4); lat69 = lat69 * pii / 180; lon69 = lon69 * pii / 180; mercator(a[is2], f[is2], lat69, lon69) xgk69=xx; ygk69=yy; //determinacion de faja fajan = (eval(nro1.medcen.value) + 75)/ 3; if (Math.floor(fajan)==fajan) { xgk84=fajan*1000000 + xgk84; xgk69=fajan*1000000 + xgk69; } nro1.sisi.value= sis[is1]; nro1.xgeo.value= formatnumber(xwgs84,3); nro1.ygeo.value= formatnumber(ywgs84,3); nro1.zgeo.value= formatnumber(zwgs84,3); nro1.sisf.value = sis[is2]; nro1.xgeof.value = formatnumber(x69,3); nro1.ygeof.value = formatnumber(y69,3); nro1.zgeof.value = formatnumber(z69,3); nro1.xgk.value = formatnumber(ygk84,4); nro1.ygk.value = formatnumber(xgk84,4); nro1.xgkf.value = formatnumber(ygk69,4); nro1.ygkf.value = formatnumber(xgk69,4); if (nro1.inic.checked) { nro1.salida.value+="\n\n"; if (nro1.sisc.checked) { nro1.salida.value+= sis[is1]+" - " +nro1.cc.value+"\n"; } if (nro1.geoc.checked) { nro1.salida.value+=nro1.fig.value+b; nro1.salida.value+=nro1.fim.value+b; nro1.salida.value+=nro1.fis.value+b; nro1.salida.value+=nro1.lag.value+b; nro1.salida.value+=nro1.lam.value+b; nro1.salida.value+=nro1.las.value+b+b; nro1.salida.value+=nro1.hh.value+b; } if (nro1.recc.checked) { nro1.salida.value+=formatnumber(xwgs84,3)+b; nro1.salida.value+= formatnumber(ywgs84,3)+b; nro1.salida.value+= formatnumber(zwgs84,3)+b+b; } if (nro1.plac.checked) { nro1.salida.value+= formatnumber(ygk84,4)+b; nro1.salida.value+= formatnumber(xgk84,4)+b+b; if (nro1.altc.checked) nro1.salida.value+=nro1.hh.value+b; } nro1.salida.value+= "\n"; } if (nro1.finc.checked) { if (nro1.sisc.checked) { nro1.salida.value+= sis[is2]+"\n"; } if (nro1.geoc.checked) { nro1.salida.value+=nro1.lig.value+b; nro1.salida.value+=nro1.lim.value+b; nro1.salida.value+=nro1.lis.value+b; nro1.salida.value+=nro1.log.value+b; nro1.salida.value+=nro1.lom.value+b; nro1.salida.value+=nro1.los.value+b+b; nro1.salida.value+=nro1.hhf.value+b+b; } if (nro1.recc.checked) { nro1.salida.value+= formatnumber(x69,3)+b; nro1.salida.value+= formatnumber(y69,3)+b; nro1.salida.value+= formatnumber(z69,3)+b+b; } if (nro1.plac.checked) { nro1.salida.value+= formatnumber(ygk69,4)+b; nro1.salida.value+= formatnumber(xgk69,4)+b+b; if (nro1.altc.checked) nro1.salida.value+=nro1.hhf.value+b+b; } nro1.salida.value+= "\n"; } } }