Sanjuu, el Blog Rotating Header Image

tecnología

Creando un directorio con el API de Google Maps

El API de Google Maps nos permite infinidad de posibilidades para construir nuestros propios mapas e incrustarlos en nuestra web o blog. Sólo se requieren ciertos conocimientos de codificación en JavaScript y estar familiarizado con la Programación Orientada a Objetos. El uso de este API es totalmente gratuito y lo único que requieren es un registro de una clave de API para poder usarla.

Una de las posibilidades más genericas, sencillas y útiles puede ser la creación de un directorio que muestre comercios, locales, restaurantes, bares, teatros, cines... en una determinada ciudad y los localice en el mapa. Dicho directorio constaría de 2 ficheros, un html para el mapa y un xml con la información de los locales:

El fichero HTML es el que genera el mapa mediante JavaScript

HTML:
  1. <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">
  2. <title>Ejemplo de Google Maps API</title>
  3. <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key={AQUI TU API KEY DE GMAPS}&sensor=false"
  4.             type="text/javascript"></script>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.    
  8.     var cm_mapMarkers = [];
  9.     var cm_mapHTMLS = [];
  10.     var map;
  11.    
  12.     function cm_markerClicked(markerNum) {
  13.         cm_mapMarkers[markerNum].openInfoWindowHtml(cm_mapHTMLS[markerNum]);
  14.         //SI QUEREMOS CENTRAR EL MAPA EN EL PUNTO EN EL CUAL HACEMOS CLICK DESCOMENTAMOS LA SIGUIENTE LINEA
  15.         //map.setCenter(cm_mapMarkers[markerNum].getLatLng(), 12);
  16.     }
  17.  
  18.  
  19.     function cm_createMarker(punto,nombre,html) {
  20.         var markerOpts = {};       
  21.         markerOpts = {
  22.             "clickable": true,
  23.             "labelText": nombre
  24.         };
  25.       var newPoint = punto;
  26.       var marker = new GMarker(newPoint, markerOpts);
  27.         GEvent.addListener(marker, "click", function() {
  28.             marker.openInfoWindowHtml(html);
  29.            
  30.         });
  31.         return marker;
  32.     }
  33.  
  34.  
  35.  
  36.     function load(){
  37.           map = new GMap2(document.getElementById("map"));   
  38.           map.setCenter(new GLatLng(37.173452, -3.600104), 12);   
  39.           map.addControl(new GLargeMapControl());
  40.         
  41.          GDownloadUrl("markers.xml", function(data){
  42.             var xml = GXml.parse(data);
  43.             var markers = xml.documentElement.getElementsByTagName("marker");
  44.             var divR = document.getElementById("marcas");
  45.             var marcas = new Array(markers.length);
  46.             for (var i = 0; i <markers.length; i++){
  47.                 var name = markers[i].getAttribute("nombre");
  48.                 var address = markers[i].getAttribute("direccion");
  49.                 var city = markers[i].getAttribute("localidad");
  50.                 var html = "<b>" + name + "</b><br/>" + address + "<br/>" + city;
  51.                 var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
  52.                                       parseFloat(markers[i].getAttribute("lng")));
  53.                                       
  54.                 var marker = new cm_createMarker(latlng,name,html); //, {icon: newIcon});   
  55.                 map.addOverlay(marker);
  56.                 cm_mapMarkers.push(marker);
  57.                 cm_mapHTMLS.push(html);
  58.                
  59.                 var markerA = document.createElement("a");
  60.                 markerA.setAttribute("href","javascript:cm_markerClicked('" + i +"')");
  61.                 var sidebarText= name;
  62.                 markerA.appendChild(document.createTextNode(sidebarText));
  63.                 divR.appendChild(markerA);
  64.                 divR.appendChild(document.createElement("br"));   
  65.             }
  66.         });   
  67.    }
  68. //]]>
  69. </script>
  70. </head>
  71. <body onload="load()" onunload="GUnload()">
  72. <div id="map" style="float:left;border: 1px black solid; width: 700px; height: 500px"></div>
  73. <div id="marcas" style="margin-left:720px;text-align:left"><b>Lista de Locales</b>:<br></div>
  74.  
  75. </body>
  76. </html>

El siguiente fichero XML (markers.xml) guarda la información de los puntos a representar en el mapa, hay que respetar la estructura.

XML:
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2.  
  3. <markers>
  4.     <marker nombre="Sugarpop" direccion="Gran Capitán 25" localidad="18002, Granada" lat="37.1774" lng="-3.60538"/>
  5.     <marker nombre="Sala El Tren" direccion="Ctra. Antigüa de Málaga s/n" localidad="18015, Granada" lat="37.190859" lng="-3.635616"/>
  6.     <marker nombre="Booga Club" direccion="C/ Santa Bárbara, 3" localidad="18001, Granada" lat="37.182939" lng="-3.603344"/>
  7.     <marker nombre="Los Nogales" direccion="Camino Puente Palo s/n" localidad="181894, Granada" lat="37.148603" lng="-3.633707"/>
  8.     <marker nombre="Planta Baja" direccion="C/ Horno Abad 11" localidad="18002, Granada" lat="37.176400" lng="-3.604213"/>
  9.     <marker nombre="Organ Jazz" direccion="Carretera de Sierra Nevada 100" localidad="18190, Cenes de la Vega" lat="37.1584" lng="-3.5359"/>
  10.     <marker nombre="La Telonera" direccion="C/ Londres" localidad="18100, Armilla" lat="37.148" lng="-3.62272"/>
  11.     <marker nombre="Pub Warhol" direccion="C/ San José, 69" localidad="18650, Dúrcal" lat="36.9921" lng="-3.57021"/>
  12.     <marker nombre="Sala Who" direccion="C/ Dr. Guirao Gea" localidad="18012, Granada" lat="37.186401" lng="-3.604975"/>
  13. </markers>

Finalmente aquí tenemos el resultado. Como se puede ver con pocas líneas de código se consiguen cosas bastante interesantes. Guiándonos con la referencia completa del API y con un poco de imaginación será muy fácil conseguir lo que queramos.

Comparte esta entrada:
  • Facebook
  • Google Bookmarks
  • Twitter
  • Live
  • Yahoo! Bookmarks
  • Digg
  • Tumblr
  • del.icio.us
  • Technorati
  • LinkedIn
  • email
  • RSS
  • Print