HTML5 Geolocalización

0 - , - 17/11/2010 13:48:02

HTML5 trae consigo muchas novedades y una de ellas es la integración con una nueva API de geolocalización. Dicha API no forma parte de forma estricta de HTML5, sino que está siendo normalizado por el Geolocation Working Group, que es independiente del HTML5 Working Group. El soporte para la API de geolocalización está disponible, de momento, para los navegadores más actuales como Firefox 3.5+ o Chrome 5+.

Un modo sencillo de acceso al API de geolocalización sería:

<!DOCTYPE HTML>
<html>
<head>
<title></title>
</head>
<body>
<script language="javascript">
function obtener_localizacion() {
  navigator.geolocation.getCurrentPosition(coordenadas);
}
function coordenadas(position) {
  var latitud = position.coords.latitude;
  var longitud = position.coords.longitude;
  alert('Tus coordenadas son: ('+latitud+','+longitud+')');
}
</script>
<a href="javascript:obtener_localizacion();">Mostrar Posición</a>
</body>
</html> 

Ver ejemplo en funcionamiento » »

Con el anterior ejemplo, si el navegador soporta el acceso a la API, el usuario da su consentimiento y... no hay ningún problema se obtiene la geolocalización del usuario al hacer click sobre el enlace "Mostrar Posición".

Puesto que el éxito de la geolocalización depende de varios factores, lo mejor es gestionar los posibles errores que se puedan producir. Podemos añadir un segundo argumento a la función obtener_localizacion: una función para gestionar los errores. Los errores que se pueden obtener son:

Permiso denegado (1), cuando el usuario no comparte la posición y por tanto deniga el acceso a su localización.
Posición no disponible (2), si se ha perdido la conexión o no se puede contactar con los satélites que realizan el posicionamiento.
Timeout (3), si se ha tardado demasiado en calcular la posición del usuario.
Error desconocido (0), si ha fallado cualquier otra cosa.

<!DOCTYPE HTML>
<html>
<head>
<title></title>
</head>
<body>
<script language="javascript">
function obtener_localizacion() {
  navigator.geolocation.getCurrentPosition(coordenadas,gestiona_errores);
}
function coordenadas(position) {
  var latitud = position.coords.latitude;
  var longitud = position.coords.longitude;
  alert('Tus coordenadas son: ('+latitud+','+longitud+')');
}
function gestiona_errores(err) {
  if (err.code == 0) {
    alert("error desconocido");
  }
  if (err.code == 1) {
    alert("El usuario no ha compartido su posicion");
  }
  if (err.code == 2) {
    alert("no se puede obtener la posicion actual");
  }
  if (err.code == 3) {
    alert("timeout recibiendo la posicion");
  }
}

</script>
<a href="javascript:obtener_localizacion();">Mostrar Posición</a>
</body>
</html> 

Ver ejemplo en funcionamiento » »

Con el ejemplo anterior controlamos los errores durante el proceso de geolocalización pero no controlamos si el navegador soporta o no este servicio. Para hacer este último control podemos comprobar si existe el objeto navigator.geolocation.

<!DOCTYPE HTML>
<html>
<head>
<title></title>
</head>
<body>
<script language="javascript">
function obtener_localizacion() {
  if (navigator.geolocation) {
  		navigator.geolocation.getCurrentPosition(coordenadas,gestiona_errores);
  }else{
	alert('Tu navegador no soporta la API de geolocalizacion');  
  }
}
function coordenadas(position) {
  var latitud = position.coords.latitude;
  var longitud = position.coords.longitude;
  alert('Tus coordenadas son: ('+latitud+','+longitud+')');
}
function gestiona_errores(err) {
  if (err.code == 0) {
    alert("error desconocido");
  }
  if (err.code == 1) {
    alert("El usuario no ha compartido su posicion");
  }
  if (err.code == 2) {
    alert("no se puede obtener la posicion actual");
  }
  if (err.code == 3) {
    alert("timeout recibiendo la posicion");
  }
}

</script>
<a href="javascript:obtener_localizacion();">Mostrar Posición</a>
</body>
</html> 

Ver ejemplo en funcionamiento » »

Una vez hemos obtenido las coordenadas mediante la API es bastante sencillo integrar Google Maps para mostrar un mapa con la posición del visitante. El siguiente ejemplo utiliza jQuery para crear un mapa una vez obtenida la posición mediante la API de geolocalización.

<!DOCTYPE HTML>
<html>
<head>
<title></title>
</head>
<body>
<script language="javascript">
function obtener_localizacion() {
  if (navigator.geolocation) {
  		navigator.geolocation.getCurrentPosition(coordenadas,gestiona_errores);
  }else{
	alert('Tu navegador no soporta la API de geolocalizacion');  
  }
}
function coordenadas(position) {
  var latitud = position.coords.latitude;
  var longitud = position.coords.longitude;
  alert('Tus coordenadas son: ('+latitud+','+longitud+')');
}
function gestiona_errores(err) {
  if (err.code == 0) {
    alert("error desconocido");
  }
  if (err.code == 1) {
    alert("El usuario no ha compartido su posicion");
  }
  if (err.code == 2) {
    alert("no se puede obtener la posicion actual");
  }
  if (err.code == 3) {
    alert("timeout recibiendo la posicion");
  }
}

</script>
<a href="javascript:obtener_localizacion();">Mostrar Posición</a>
</body>
</html> 

Ver ejemplo en funcionamiento » »

HTML 5: El elemento canvas (Parte 1)

0 - , - 29/08/2010 11:58:04

La especificación de HTML5 incluye un buen número de características, una de las cuales es el elemento canvas. El elemento canvas proporciona una manera fácil y eficaz de dibujar gráficos usando Javascript. Para cada elemento canvas podemos utilizar un objeto contexto o"context", el cual posee los métodos para dibujar dentro del canvas. Entre estos métodos se encuentran fillFect(), arc(), moveTo(), stroke(), etc.

Los navegadores pueden implementar múltiples contextos y las diferentes APIs que proporcionarán la funcionalidad de dibujo. En la actualidad la mayoría de los navegadores más importantes incluyen el contexto 2D.

Para usar el elemento canvas, necesitamos dos cosas:

1. Una etiqueta Canvas en el HTML para colocar el canvas dibujante
2. JavaScript para realizar los dibujos

Añadiremos el elemento <canvas> con un código similar al siguiente:

<canvas id="myCanvas" width="300" height="150">
Contenido alternativo, en caso de que el navegador no sea compatible con canvas.
</canvas>

Se necesita definir un ID para el elemento, para que más adelante se pueda identificar este mismo elemento mediante Javascript. También es necesario definir una altura y una anchura para el elemento canvas.

En este momento hemos creado algo parecido a una hoja en blanco sobre la que dibujar. Para dibujar deberemos utilizar Javascript, encontrar el elemento canvas con getElementById, inicializar el contexto que deseemos, y utilizar los comandos disponibles en la API del contexto. A continuación vamos a ir viendo algunas de las funciones de la API del contexto 2D.

fillRect()
Esta función, perteneciente al contexto 2D, sirve para dibujar rectángulos rellenos de color.Su sintaxis es:

fillRect(x,y,anchura,altura)

fillRect dibuja un rectángulo cuya esquina superior izquierda está en el punto (x,y) y cuyas dimensiones son las defindas en el parámetro altura y anchura. El color de relleno lo podemos especificar con la propiedad fillStyle, asignando por ejemplo el RGB de un color. Un ejemplo de un primer dibujo podría ser:

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Canvas- Ejemplo 1</title>
<script type="text/javascript">
window.addEventListener('load', function () {
var elem = document.getElementById('myCanvas');
// Comprobamos que podemos acceder al elemento y sus propiedades
if (elem && elem.getContext) {
  // Obtenemos el contexto 2D
  var context = elem.getContext('2d');
  if (context) {
    // Dibujamos
	context.fillStyle = '#0000FF'; // Azul
	context.fillRect  (0,   0, 500, 300);
  }
}
}, false);
</script>
  </head>
  <body>
    <p><canvas id="myCanvas" width="500" height="300">
     Tu navegador no soporta el elemento canvas</canvas>
  </body>
</html>

Este ejemplo rellena todo el lienzo con un rectángulo de color azul.

Ver ejemplo en funcionamiento » »

strokeRect()
Esta función sirve para dibujar el contorno de un rectángulo y su sintaxis es similar a fillRect:

strokeRect(x,y,anchura,altura)

De manera similar, para definir el color del borde del rectángulo, utilizamos la propiedad strokeStyle. Además también podemos cambiar el grosor de las líneas con la propiedad lineWidth. Por ejemplo:

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Canvas- Ejemplo 1</title>
<script type="text/javascript">
window.addEventListener('load', function () {
var elem = document.getElementById('myCanvas');
// Comprobamos que podemos acceder al elemento y sus propiedades
if (elem && elem.getContext) {
  // Obtenemos el contexto 2D
  var context = elem.getContext('2d');
  if (context) {
		context.strokeStyle = '#999'; // Gris
		context.lineWidth   = 4; //Grosor
		context.strokeRect(10, 50, 350, 150);
  }
}
}, false);
</script>
  </head>
  <body>
    <p><canvas id="myCanvas" width="500" height="300">
     Tu navegador no soporta el elemento canvas</canvas>
  </body>
</html>

Ver ejemplo en funcionamiento » »

clearRect()
clearRect es una función que sirve para borrar áreas rectangulares de un canvas. Su sintaxis es similar a las dos funciones vistas con anterioridad.

clearRect(x,y,anchura,altura) 

Paths

Los paths o "caminos" permiten dibujar formas personalizadas. Crear una forma personalizada es bastante sencillo: para empezar a dibujar el camino utilizamos beginPath(), a continuación, dibujamos el camino que constituye la forma usando líneas, curvas y otras primitivas. Una vez que hemos terminado, rellenamos y contorneamos la forma y llamamos a la función closePath() para acabar con la forma.

Un ejemplo podría ser:

context.strokeStyle = '#000'; // Negro
context.fillStyle = '#FF0000'; // Rojo
context.lineWidth   = 10; //
context.beginPath();
context.moveTo(20, 20);
context.lineTo(250, 20);
context.lineTo(20, 250);
context.lineTo(20, 15);
context.fill();
context.stroke();
context.closePath();
  • beginPath() sirve para decirle al contexto del canvas que vamos a empezar a dibujar un camino. No tiene ningún parámetro y por si sola no hace ninguna acción visible en el canvas.
  • moveTo() sirve para mover el puntero imaginario a las coordenadas x,y donde comenzaremos a hacer el camino. Esta función no dibuja nada, pero nos permite definir el primer punto de un camino.
  • lineTo() hace que se dibuje una línea recta, desde la posición actual del puntero de dibujo, hasta el punto (x,y) que se indique como parámetro.
  • fill() sirve para rellenar de color el área circunscrita por un camino. Para rellenar de color un camino, el camino tiene que estar cerrado, por lo que, si no lo está, automáticamente se cerrará con una línea recta hasta el primer punto del camino. Si durante los distintos segmentos del camino nos dejamos algún segmento abierto, no se pintará nada.
  • closePath() sirve para cerrar un camino, volviendo al punto inicial del dibujo.

Ver ejemplo en funcionamiento » »

Para definir el modo en que se unen las líneas podemos acceder al el atributo lineJoin. El atributo lineJoin acepta los valores "round", "bevel" y "miter". Un ejemplo de uso de este atributo:

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Canvas- Ejemplo 4</title>
<script type="text/javascript">
window.addEventListener('load', function () {
var elem = document.getElementById('myCanvas');
// Comprobamos que podemos acceder al elemento y sus propiedades
if (elem && elem.getContext) {
  // Obtenemos el contexto 2D
  var context = elem.getContext('2d');
  if (context) {
        var lineJoin = ['round','bevel','miter'];
        context.lineWidth = 15;
        for (i=0;i<lineJoin.length;i++){
          context.lineJoin = lineJoin[i];
          context.beginPath();
          context.moveTo(0,5+i*50);
          context.lineTo(100,70+i*50);
          context.lineTo(200,5+i*50);
          context.lineTo(300,70+i*50);
          context.lineTo(400,5+i*50);
          context.stroke();
		}
  }
}
}, false);
</script>
  </head>
  <body>
    <p><canvas id="myCanvas" width="500" height="300">
    Tu navegador no soporta el elemento canvas</canvas>
  </body>
</html>

Ver ejemplo en funcionamiento » »

HTML5 Boilerplate

0 - , - 15/08/2010 13:00:00

HTML5 Boilerplate es un conjunto de plantillas HTML/CSS/JS para el inicio de sitios web, de un modo rápido, robusto y profesional. Incluye también un fichero .htaccess, de configuración de Apache que establece algunas reglas de caché para un mejor rendimiento y prepara el sitio para servir video con HTML5. Entre las características de HTML5 Boilerplate cabe destacar:

  • Multinavegador (también IE6)
  • Preparado para HTML5
  • Optimizaciones para la visualización en navegadores para móviles
  • Clases específicas para IE, que facilitan un mayor control multinavegador
  • Perfiles Javascript en función del navegador
  • Una hoja de estilos de impresión óptima
  • IE6 pngfix

HTML5 Boilerplate » »