Introducción.
Después de encontrar dos métodos (A y B) para la conversión de coordenadas entre formatos decimal y grados, minutos y segundos, encontré en el libro HTML5 Geolocation de Anthony T. Holdener III la implementación de dos funciones en Javascript que realizan con precisión este procedimiento y que me parecieron muy intersantes. Este corto libro es en general muy interesante y recomiendo su lectura.
Conversión de coordenadas: formato decimal a grados-minutos-segundos.
/** * Convierte una coordenada en formato decimal a su correspondiente * versión en formato grados-minutos-segundos. * * @param Float Valor real de la coordenada. * @param Int Tipo de la coordenada {Coordenada.LATITUD, Coordenada.LONGITUD}. * @return Array ['grados', 'minutos', 'segundos', 'direccion', 'valor']. */ function dec2gms(valor, tipo) { grados = Math.abs(parseInt(valor)); minutos = (Math.abs(valor) - grados) * 60; segundos = minutos; minutos = Math.abs(parseInt(minutos)); segundos = Math.round((segundos - minutos) * 60 * 1000000) / 1000000; signo = (valor < 0) ? -1 : 1; direccion = (tipo == Coordenada.LATITUD) ? ((signo > 0) ? 'N' : 'S') : ((signo > 0) ? 'E' : 'W'); if(isNaN(direccion)) grados = grados * signo; return { 'grados' : grados, 'minutos' : minutos, 'segundos' : segundos, 'direccion': direccion, 'valor' : grados + "u00b0 " + minutos + "' "+ segundos + """ + ((isNaN(direccion)) ? (' ' + direccion) : '') }; }
Por ejemplo.
var x = 48.853; r1 = dec2gms(x, Coordenada.LATITUD); alert('Conversion dec2gms = ' + r1.valor);
Conversión de coordenadas: formato grados-minutos-segundos a decimal.
/** * Convierte una coordenada en formato grados-minutos-segundos a su * correspondiente versión en formato decimal. * * @param Float Grados de la coordenada. * @param Float Minutos de la coordenada. * @param Float Segundos de la coordenada. * @param String Sentido de la coordenada {Coordenada.NORTE, Coordenada.SUR, Coordenada.ORIENTE, Coordenada.OCCIDENTE} * @return Array ['decimal', 'valor']. */ function gms2dec(grados, minutos, segundos, direccion) { if(direccion) { signo = (direccion.toLowerCase() == 'w' || direccion.toLowerCase() == 's') ? -1 : 1; direccion = (direccion.toLowerCase() == 'w' || direccion.toLowerCase() == 's' || direccion.toLowerCase() == 'n' || direccion.toLowerCase() == 'e') ? direccion.toLowerCase() : ''; } else { signo = (grados < 0) ? -1 : 1; direccion = ''; } dec = Math.round((Math.abs(grados) + ((minutos * 60) + segundos) / 3600) * 1000000) / 1000000; if(isNaN(direccion) || direccion == '') dec = dec * signo; return { 'decimal': dec, 'valor' : dec + "u00b0" + ((isNaN(direccion) || direccion == '') ? (' ' + direccion) : '') }; }
Por ejemplo.
var xg = 48; var xm = 51; var xs = 10.8; r2 = gms2dec(xg, xm, xs, Coordenada.NORTE); alert('Conversion gms2dec = ' + r2.valor);
Código fuente y demostración.
Obtenga el código fuente del artículo junto con la ejecución de la demostración en la siguiente ubicación.
http://demo.jorgeivanmeza.com/JavaScript/CoordConverter/0.3/