Hosting

Funciones varias para geolocalización en Javascript

En el articulo FirefoxOS: API de geolocalización explicaba como iniciar el GPS y obtener las coordenadas actuales con un dispositivo en Firefox OS, usando la API de HTML5 Geolocation, en esta entrada pondré funciones de georreferenciación para el tratamiento de datos de geolocalización obtenidos de la API Geolocation.

Grados a puntos cardinales

Si necesitamos convertir los grados del rumbo , devueltos por la propiedad position.coords.heading a puntos cardinales de la rosa de los vientos:
  • Norte, N
  • Noreste, NE
  • Este, E
  • Sureste ,SE
  • Sur, S
  • Suroeste, SW
  • Oeste, W
  • Noroeste NW
La función bearingToCardinalDirection(bearing) en Javascript, transforma los grados entre 0 y 360 a la dirección cardinal correspondiente
//cardinal direction, cadinal points, direcciones cardinales, puntos cardinales
//given "0-360" returns the nearest cardinal direction "N/NE/E/SE/S/SW/W/NW/N" 
function bearingToCardinalDirection(bearing) {
   var cardinalPoints = ["NE", "E", "SE", "S", "SW", "W", "NW", "N"];
   var index = bearing - 22.5;
   if (index < 0) index += 360;
   index = parseInt(index / 45);
   return(cardinalPoints[index]);
}
Ejemplo en Codepen
Otro método para obtener los puntos cardinales de una dirección en grados, es usando la función getCardinal() escrita por Basarat, la podéis encontrar en su GitHub - Snapping an angle to the nearest cardinal direction in javascript

Formatear posiciones, latitud y longitud

Las coordenadas obtenidas por la propiedad position.coords.latitude y position.coords.longitude, inicialmente están en grados decimales 359.99999º , la siguiente función convDDToDMS() permite convertir Grados decimales al sistema sexagesimal representado en Grados minutos, Grados minutos y segundos
function convDDToDMS(degree) {
   var output = {};
   output.deg = 0 | ( degree < 0 ? degree =- degree : degree );
   output.min = 0 | degree % 1 * 60;
   output.sec = ( 0 | degree * 60 % 1 * 6000 ) / 100;
   return output;
}
la función convDDToDMS(degree) le pasamos la coordenada, latitud o longitud con el sistema grados decimales y nos devuelve un objeto con las propiedades .deg .min y .sec.
var lat = 41.9397012;
var lon = -73.7402344;

var latDMS = convDDToDMS(lat);
var lonDMS = convDDToDMS(lon);
En el ejemplo la variable latDMS  donde está la latitud convertida en el Sistema Sexagesimal y con latDMS.deg obtenemos los grados, latDMS.min los minutos Y latDMS.sec los segundos.
 latDMS.deg + 'º ' + latDMS.min + "' " + latDMS.seg + '"'
La coordenada 41.9397012 representada en 41º 56′ 22.92″
Para obtener el cuadrante terrestre N,S para la latitud y E,W para la longitud, lo podemos solucionar con un condicional, dependiendo si el grado es positivo o negativo
Para obtener el cuadrante terrestre dependiendo de su latitud:
(lat > 0 ? 'N' : 'S')
Para obtener el cuadrante terrestre dependiendo de su longitud:
(lon > 0 ? 'E' : 'W')
Ejemplo en Codepen

Calcular la distancia entre dos coordenadas geográficas

La siguiente función permite calcular la distancia entre dos puntos geográficos, debemos pasar la latitud y longitud de los puntos a medir.
la distancia entre dos puntos geográficos se puede expresar en Kilómetros o bien en Millas.
El numero: 6378.137 es el diámetro de la tierra en kilómetros de acuerdo al sistema WGS84. Use 3963.191 para millas
function getDistanceToCoords(lat1,lon1,lat2,lon2) {
  function _deg2rad(deg) {
    return deg * (Math.PI/180)
  }
  var R = 6371; // Radius of the earth in km 3963.191 in milles
  var dLat = _deg2rad(lat2-lat1);  // deg2rad below
  var dLon = _deg2rad(lon2-lon1); 
  var a = 
    Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(_deg2rad(lat1)) * Math.cos(_deg2rad(lat2)) * 
    Math.sin(dLon/2) * Math.sin(dLon/2); 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = R * c; // Distance in km
  return d.toFixed(3);
}
Ejemplo en Codepen
b
SHARE
    Blogger Comment
    Facebook Comment

0 comentarios:

Publicar un comentario