// transforma XYZ a Lat., Long. y H sobre elipsoide WGS84 u otro // Lee de archivo encolumnado o del teclado // Produce archivo encolumnado Lat. Long. H en sexa o en decimales // // ultima correcion 8 de set 1993 // 3 de febrero de 1996: agrego decimales a los segundos // mayo 2007 corregido para firefox // versión JavaScript: agosto de 2002 J.L.H. function infoe(){ nro1.salida.value+="\n\n"; nro1.salida.value+="WGS84 Internat.1924 Clarke 1866 WGS72 GRS80\n"; nro1.salida.value+="6378137 6378388 6378206.4 6378135 6378137\n"; nro1.salida.value+="0.003352811 0.003367003 0.003390075 0.003352779 0.003352811\n"; nro1.salida.value+="298.2572236 297 294.9786982 298.26 298.2572221\n"; nro1.salida.value+="\n\n"; nro1.salida.value+="ANS Airy Clarke 1858 '165' Clarke 1880\n"; nro1.salida.value+="6378160.000 6377563.396 6378293.645 6378165.000 6378249.145\n"; nro1.salida.value+="0.003352892 0.003340851 0.003352811 0.003352330 0.003407561\n"; nro1.salida.value+="298.25 299.3249646 294.26 298.3 293.465\n"; nro1.salida.value+="\n\n"; nro1.salida.value+="Bessel 1841 Everest Fischer 1968 SA 1969 Helmert 1906\n"; nro1.salida.value+="6377397.155 6377276.345 6378150.0 6378160.0 6378200.0\n"; nro1.salida.value+="0.003342773 0.0033244493 0.0033523299 0.003352892 0.0033523299\n"; nro1.salida.value+="299.1528128 300.8017 298.3 298.25 298.3\n"; nro1.salida.value+="\n\n"; nro1.salida.value+="WGS 60 WGS 66 GRS 67 Fischer 1960 Hough\n"; nro1.salida.value+="6378165.0 6378145.0 6378160.0 6378166.0 6378270.0\n"; nro1.salida.value+="0.003352330 0.003352892 0.0033529237 0.0033523299 0.003367003\n"; nro1.salida.value+="298.3 298.25 298.247167427 298.3 297.0\n"; nro1.salida.value+="\n\n"; nro1.salida.value+="Hayford 1909 Krassovsky Struve 1860 S.G.S. 1985 S.G.S. 1990\n"; nro1.salida.value+="6378388.0 6378245.0 6378298.3 6378136.0 6378136.0\n"; nro1.salida.value+="0.003367465 0.003352330 0.003392936 0.003349298 0.003352804\n"; nro1.salida.value+="296.9592630 298.3 294.73 298.257 298.2578393\n"; } function borrar() { nro1.salida.value=""; } function info() { nro1.salida.value+="\n\n"; nro1.salida.value+="XYZ2FILA.htm\n\n"; nro1.salida.value+="Transformación de cartesianas geocéntricas\n"; nro1.salida.value+="a geográficas geodésicas\n"; nro1.salida.value+="para distintos elipsoides.\n"; nro1.salida.value+="Autor: J.L.Hormaechea\n"; nro1.salida.value+="Versión HTML - JavaScript - agosto 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 xyz2geo() { b=" "; semieje = new Array(6378137,6378137,6378388,6378206.4,6378135,6378245.0, 6378388); aplanai = new Array(298.2572236, 298.257222101, 297, 294.9786982, 298.26, 298.3, 296.959263); indice=nro1.elipsoide.value; if (indice < 7) { nro1.aaa.value=semieje[indice]; nro1.fff.value=aplanai[indice]; } a = nro1.aaa.value; f = 1 / nro1.fff.value; // GRS80 // f = 1 / 298.257222101; e2 = 2 * f - f * f; xk = 180 / 3.141592653589793; xd6 = 60; xd36 = 3600; // PASAJE DE RECTANGULARES A GEOGRAFICAS fin = 0; reg = 0; x = nro1.xx1.value; y = nro1.xx2.value; z = nro1.xx3.value; if (x != 0) { ydx = y / x; // xlat ==> Longitud xlat = Math.atan(ydx) * xk; xs = x * x + y * y; xs = Math.sqrt(xs); zdxs = 1 / (1 - e2) * z / xs; zd0 = zdxs; do { zlat = Math.atan(zdxs); n = a / Math.sqrt((1 - e2 * Math.sin(zlat) * Math.sin(zlat))); 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; nro1.xlatg.value = Math.floor(Math.abs(xlat))*signo(xlat); nro1.xlatm.value = Math.floor((Math.abs(xlat) - Math.abs(nro1.xlatg.value)) * xd6); nro1.xlats.value = (Math.abs(xlat) - Math.abs(nro1.xlatg.value) - nro1.xlatm.value / xd6) * xd36; nro1.zlatg.value = Math.floor(Math.abs(zlat))*signo(zlat); nro1.zlatm.value = Math.floor((Math.abs(zlat) - Math.abs(nro1.zlatg.value)) * xd6); nro1.zlats.value = (Math.abs(zlat) - Math.abs(nro1.zlatg.value) - nro1.zlatm.value / xd6) * xd36; nro1.h.value = x / (Math.cos(zlat / xk) * Math.cos(xlat / xk)) - n; nro1.contador.value=eval(nro1.contador.value)+1; if (nro1.contador.value==1) nro1.salida.value=" x y z long. lat. G M S G M S h \n"; nro1.salida.value+=nro1.nombre.value+b; nro1.salida.value+=formatnumber(x,3)+b; nro1.salida.value+=formatnumber(y,3)+b; nro1.salida.value+=formatnumber(z,3)+b; nro1.salida.value+=formatnumber(xlat,8)+b; nro1.salida.value+=formatnumber(zlat,8)+b; nro1.salida.value+=nro1.xlatg.value+b; nro1.salida.value+=nro1.xlatm.value+b; nro1.salida.value+=formatnumber(nro1.xlats.value,5)+b; nro1.salida.value+=nro1.zlatg.value+b; nro1.salida.value+=nro1.zlatm.value+b; nro1.salida.value+=formatnumber(nro1.zlats.value,5)+b; nro1.salida.value+=formatnumber(nro1.h.value,3)+"\n"; } }