> Manuales > Taller de HTML5

No debemos confundir el soporte para la geolocalización y el método usado para la geolocalización.

El soporte para la geolocalización mediante HTML 5 depende del explorador de Internet y sólo de él -de que proporcione herramientas software para uso de funciones específicas para tal fin-. Del método usado posteriormente nos referiremos brevemente y será empleado, en todo caso, el mejor de los disponibles, de forma transparente para el usuario.

La geolocalización se lleva a cabo mediante tres métodos:

La tabla que sigue, nos informa del estado de soporte por parte de casi todos los exploradores de importancia del mercado:

El API de geolocalización de HTML 5

Lo primero que deberemos comprobar es la disponibilidad del API de geolocalización de HTML 5 en el explorador del usuario. El Listado 1 hace simplemente eso y ese código podría, y en parte debería, estar presente en todos los ejemplos que siguen del presente artículo. Lo obviaremos por innecesario para lo que de ilustrativo de ciertos conceptos se supone son.

Listado 1: En el listado que sigue, comprobamos sin más que el API de geolocalización es soportado por el explorador:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" lang="es-es">
<title>Geolocalización 0</title>
</head>
<body>

<h1>Geolocalización</h1>

<script>
if(navigator.geolocation) {
alert('El explorador soporta geolocalización');
} else {
alert('El explorador NO soporta geolocalización');
}
</script>

</body>
</html>

Mediante el objeto navigator.geolocation disponemos de los siguientes tres métodos:

Así pues, todo comienza realmente con una llamada a getCurrentPosition(function(){}, function(){}). Observe que toma como parámetros dos funciones optativas, puede haber una definida, las dos, o ninguna -caso de mera comprobación, dado que nada obtendremos de la llamada-. Se nos pedirá permiso como usuarios para acceder a nuestra posición. En caso de que el usuario dé su permiso, se llamará a la primera función pasada; en el caso contrario, o si ocurriera un error de acceso, sería llamada la segunda función pasada como argumento del método.

En el listado que sigue haremos simplemente una simulación del proceso, ya que la llamada nos lleva a una vía muerta -faltan los contenidos funcionales de las respuestas positivas y negativas-, a ello llegaremos seguidamente. Valga como ejemplo.

Geolocalización en mapas Bing. El Bing Maps AJAX Control

Los sitios de Internet oficiales que sugerimos para consulta inicial son:

Bing Maps AJAX Control, Version 6.3
http://msdn.microsoft.com/en-us/library/bb429619.aspx

Bing Maps AJAX Control, Version 7.0
http://msdn.microsoft.com/en-us/library/gg427610.aspx

Getting Started with the Bing Maps AJAX Control
http://msdn.microsoft.com/en-us/library/ee692181.aspx

Loading the AJAX Map Control
http://msdn.microsoft.com/en-us/library/gg427624.aspx

Hardcoded geolocalización

En este apartado nos fijaremos solamente en lo referente al modo de acotar y representar un mapa obtenido del servidor de Bing.

En esencia, este ejemplo, basado en la documentación más elemental de Bing Maps AJAX Control, se realizan las siguientes tareas:

Listado 2: En el listado que sigue, ilustra un mapa -fijado por geolocalización- en el que se pasan las cotas -latitud y longitud- predeterminadas:

<!DOCTYPE html>
<html>
<head>
<title>BING Map Control 6.3</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<script src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3">
</script>

<script>
var map = null;
var LA = new VELatLong(48, 8);

function GetMap()
{
map = new VEMap('myMap');
map.LoadMap(LA);
}
</script>

</head>

<body onload="GetMap();">
<div id='myMap' style="position:relative;
width:800px; height:600px;
border:10px solid #eaeaea;">
</div>
</body>

</html>

Ejemplo completo de geolocalización

Las líneas generales son: Listado 3: En el listado que sigue, se ilustra un mapa -fijado por geolocalización- en el que se pasan las cotas -latitud y longitud- detectadas mediante el API de HTML 5:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" lang="es-es">

<script src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3">
</script><!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" lang="es-es">

<script src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3">
</script>

<script>
var map = null;
var pinPoint = null;
var pinPixel = null;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
alert("Usted ha sido localizado en ("+position.coords.latitude+","
+position.coords.longitude+")"
+" con una exactitud de "
+position.coords.accuracy
+" metros.");
var LA = new VELatLong(position.coords.latitude,
position.coords.longitude);
map = new VEMap('Contenedor');
map.LoadMap(LA, 15, VEMapStyle.Road, false,
VEMapMode.Mode2D, true, 1);
pinPoint = map.GetCenter();
pinPixel = map.LatLongToPixel(pinPoint);
map.AddPushpin(pinPoint);
});
}else {
alert("El explorador NO soporta Goelocalizaci?n.");
}

</script>

</head>
<body>
<div id="Contenedor"></div>
</body>
</html>

<script>
var map = null;
var pinPoint = null;
var pinPixel = null;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
alert("Usted ha sido localizado en ("+position.coords.latitude+","
+position.coords.longitude+")"
+" con una exactitud de "
+position.coords.accuracy
+" metros.");
var LA = new VELatLong(position.coords.latitude,
position.coords.longitude);
map = new VEMap('Contenedor');
map.LoadMap(LA, 15, VEMapStyle.Road, false,
VEMapMode.Mode2D, true, 1);
pinPoint = map.GetCenter();
pinPixel = map.LatLongToPixel(pinPoint);
map.AddPushpin(pinPoint);
});
}else {
alert("El explorador NO soporta Goelocalizaci?n.");
}

</script>

</head>
<body>
<div id="Contenedor"></div>
</body>
</html>

Jaime Peña Tresancos

Escritor. Colaborador habitual de revistas de tecnología y experto en nuevas tec...

Manual