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/



