Geocode Simple: Buscar direcciones (coordenadas a partir de direcciones) con GMaps API v3

Si no tienes mucha experiencia o tienes dudas con respecto a algo que usemos en este post, puedes consultar los demás ejemplos que se han realizado anteriormente aquí.

Ya hemos visto el cómo obtener geolocalización para ubicar el lugar donde nos encontramos, pero, ¿qué pasa cuando buscamos una dirección diferente a donde nos encontramos?, sería necesario escribir y buscar la dirección deseada, bien pues el proceso es relativamente sencillo. (Para esto requeriremos que agregues los scripts de GMaps y de jQuery, consulta los anteriores post si tienes duda de esto).

Lo que haremos se resume en: escribir una dirección, verificar si existe, si existe, colocar un marcador, centrar y dar zoom en el mapa en la región de la dirección obtenida, si no existe la dirección arrojar un error diciendo que no existe.

Ver Demo Geocoding

La parte importante del código es generar un objeto que nos permita comunicarnos con la API  de Google Maps y nos convierta la dirección en latitud y longitud de manera que podamos maniobrarlas a placer.

var geocoder = new google.maps.Geocoder();

Cuando se genera una petición de Geocoding, pueden enviarse varios parámetros para obtener resultados más específicos, un objeto de solicitud completa comprendería:

  • address (obligatorio *): es la dirección que deseas codificar de forma geográfica.
  • latLng (obligatorio *): la latitud y la longitud (LatLng ) para las que deseas obtener la dirección interpretable por humanos más cercana.
  • bounds (opcional): los límites de latitud y de longitud (LatLngBounds) dentro de los que quieres predeterminar los resultados de codificación geográfica con mayor importancia. Para obtener más información, consulta la sección Especificación de la ventana gráfica que encontrarás a continuación.
  • language (opcional): es el idioma en el que se devuelven los resultados.
  • region (opcional): el código de región, especificado como una subetiqueta region del lenguaje IANA. En la mayoría de los casos, estas etiquetas se asignan directamente a valores de dos caracteres ccTLD (“dominio de nivel superior”) ya conocidos. Para obtener más información, consulta la sección Especificación del código de región que encontrarás a continuación.

* Nota: la búsqueda funciona incluyendo solamente el campo address, aunque siempre es requisito incluir un campo address o un campo latLng obligatoriamente, si se coloca un campo latLng, el geocoder realizará el proceso conocido como codificación geográfica inversa, o sea, convertir coordenadas en direcciones, pero, eso lo veremos en otro post.

La solicitud se hace de la siguiente manera:

// Obtenemos la dirección y la asignamos a una variable
var address = $('#address').val();
// Creamos el Objeto Geocoder
var geocoder = new google.maps.Geocoder();
// Hacemos la petición indicando la dirección e invocamos la función
// geocodeResult enviando todo el resultado obtenido
geocoder.geocode({ 'address': address}, geocodeResult);

El objeto que se obtiene de respuesta es un JSON, donde lo manejaríamos como regularmente se hace en javascript, el resultado es algo como esto:

{
  "status": "OK",
  "results": [ {
    "types": [ "street_address" ],
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": [ "street_number" ]
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": [ "route" ]
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "California",
      "short_name": "CA",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United States",
      "short_name": "US",
      "types": [ "country", "political" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": [ "postal_code" ]
    } ],
    "geometry": {
      "location": {
        "lat": 37.4219720,
        "lng": -122.0841430
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188244,
          "lng": -122.0872906
        },
        "northeast": {
          "lat": 37.4251196,
          "lng": -122.0809954
        }
      }
    }
  } ]
}

Lo único que nos faltaría es el código para validar, interpretar y dibujar. Para esto, hay 3 cosas importantes que debemos tomar en cuenta del JSON que tenemos de respuesta:

  • status: contiene la respuesta del estado de la petición, si fue satisfactoria o si hubo algún error y que tipo de error.
  • geometry.location: la ubicación de la dirección solicitada
  • geometry.viewport: los límites recomendados para ajustar el zoom del mapa, haciendo un cuadrante con las esquinas Noreste (superior derecha) y Suroeste (inferior izquierda).

Con esto en presente, la función siguiente nos mostrará solamente el primer resultado obtenido, quedando así :

function geocodeResult(results, status) {
    // Verificamos el estatus
    if (status == 'OK') {
        // Si hay resultados encontrados, centramos y repintamos el mapa
        // esto para eliminar cualquier pin antes puesto
        var mapOptions = {
            center: results[0].geometry.location,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map($("#map_canvas").get(0), mapOptions);
        // fitBounds acercará el mapa con el zoom adecuado de acuerdo a lo buscado
        map.fitBounds(results[0].geometry.viewport);
        // Dibujamos un marcador con la ubicación del primer resultado obtenido
        var markerOptions = { position: results[0].geometry.location }
        var marker = new google.maps.Marker(markerOptions);
        marker.setMap(map);
    } else {
        // En caso de no haber resultados o que haya ocurrido un error
        // lanzamos un mensaje con el error
        alert("Geocoding no tuvo éxito debido a: " + status);
    }
}

Y listo con esto tenemos terminado nuestro ejercicio, puedes verificarlo en funcionamiento en la página de demos:

Ver Demo Geocoding

El código completo quedaría así:

$(document).ready(function() {
    load_map();
});

var map;

function load_map() {
    var myLatlng = new google.maps.LatLng(20.68009, -101.35403);
    var myOptions = {
        zoom: 4,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map($("#map_canvas").get(0), myOptions);
}

$('#search').live('click', function() {
    // Obtenemos la dirección y la asignamos a una variable
    var address = $('#address').val();
    // Creamos el Objeto Geocoder
    var geocoder = new google.maps.Geocoder();
    // Hacemos la petición indicando la dirección e invocamos la función
    // geocodeResult enviando todo el resultado obtenido
    geocoder.geocode({ 'address': address}, geocodeResult);
});

function geocodeResult(results, status) {
    // Verificamos el estatus
    if (status == 'OK') {
        // Si hay resultados encontrados, centramos y repintamos el mapa
        // esto para eliminar cualquier pin antes puesto
        var mapOptions = {
            center: results[0].geometry.location,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map($("#map_canvas").get(0), mapOptions);
        // fitBounds acercará el mapa con el zoom adecuado de acuerdo a lo buscado
        map.fitBounds(results[0].geometry.viewport);
        // Dibujamos un marcador con la ubicación del primer resultado obtenido
        var markerOptions = { position: results[0].geometry.location }
        var marker = new google.maps.Marker(markerOptions);
        marker.setMap(map);
    } else {
        // En caso de no haber resultados o que haya ocurrido un error
        // lanzamos un mensaje con el error
        alert("Geocoding no tuvo éxito debido a: " + status);
    }
}

Y en el Body solamente esto:

<div><input type="text" maxlength="100" id="address" placeholder="Dirección" /> <input type="button" id="search" value="Buscar" /></div><br/>
<div id='map_canvas' style="width:600px; height:400px;"></div>

Espero les sirva y cualquier cosa, ya saben cómo contactarme…

Enjoy this Life!

76 comentarios en “Geocode Simple: Buscar direcciones (coordenadas a partir de direcciones) con GMaps API v3”

    • @juan es HTML simple, al momento de que mandas abrir un infowindow, en el contenido tienes que linkear la foto que quieres que aparezca, para wikipedia, es necesario usar el API de Wikipedia vaya, eso es sencillo pero requiere de tiempo y algo más de código para adentrarse a esa API

      Responder
    • En el localhost me muestra el siguiente problema… se ve 5 seg el mapa pero al terminar de cargar la pagina sale esto:
      Se ha producido un error.
      Esta página no ha cargado Google Maps correctamente. Descubre los detalles técnicos del problema en la consola de JavaScript.

      los jquery que pude bajar y tengo son
      jquery.min.js
      jquery-1.11.0.min.js
      jquery-3.1.0.min

      veo que en el encabezado usas un jquery.js el cual no tengo y no lo encontré, si ese es el problema, podrías facilitar el archivo por favor, gracias y excelentes tutoriales, me gustaría que hicieras uno de login con facebook sdk5 y php, por que no le entiendo a la explicación de la pagina :v

      Responder
      • En la página da click derecho y luego en Inspect (o inspeccionar), ahí te mostrará el error preciso que se necesita corregir.
        Si lo que requieres son los scripts que en su momento utilicé, ve el código fuente (de nuevo click derecho, ver código fuente), da click en los enlaces y guarda los archivos en tu aplicación.

  1. lo que pasa es que yo estoy en mi tesis y en ella estoy utilizando sig y he tomado el gogle maps para ello
    y me gustaria poder lograr realizar obtener ytodo el tipo de informaacion que cuando yo le de una direccion el me pueda arrojar el mapa y ademas todas las fotos que se encuentren en panoramica de ese sitio o pais, ciudad y utilizar la informacion de wikipedia te agradesco me ayudes

    Responder
      • si algo asi ,pero quiero agregarle un boton de fotos que al dar click hay me muestre las imagenes como aparece en la pagina oficial de google maps que utilizan panaromico q aparecen todas las fotos que estan publicadas hay y el boton de wikipedia

  2. Hola te agradezco mucho el que compartas tus conocimientos y estoy aqui de nuevo molestandote con una duda, probe este ejemplo y resulto genial, despues queria que la lat y la lng se mostraran en 2 cuadros de texto de un form, crei que solo usando sus propiedades era suficiente pero no se que es toy haciendo mal, no me marca error pero tampoco me da el resultado deseado, me podrias ayudar por favor??

    if (status == ‘OK’ && results.length > 0)
    {
    // Si hay resultados encontrados, centramos y repintamos el mapa
    // esto para eliminar cualquier pin antes puesto
    var mapOptions = {
    zoom: 14,
    center: results[0].geometry.location,
    mapTypeId: google.maps.MapTypeId.ROADMAP

    };
    map = new google.maps.Map($(“#map_canvas”).get(0), mapOptions);
    // fitBounds acercará el mapa con el zoom adecuado de acuerdo a lo buscado
    map.fitBounds(results[0].geometry.viewport);
    // Dibujamos un marcador con la ubicación del primer resultado obtenido
    var markerOptions = { position: results[0].geometry.location,draggable: true}
    var marker = new google.maps.Marker(markerOptions);
    //Obtener Lactitud y Longitud, mostrandolos en cuadros de texto y mostrar un infowindow
    var markerLatLng = marker.getPosition();
    $(‘#x’).val()=markerLatLng.markerLatLng.lat();
    $(‘#y’).val()=markerLatLng.markerLatLng.lng();
    marker.setMap(map);
    }

    Responder
  3. Veo tambien que al agregar estas lineas de codigo:
    //Obtener Lactitud y Longitud, mostrandolos en cuadros de texto y mostrar un infowindow
    var markerLatLng = marker.getPosition();
    $(‘#x’).val()=markerLatLng.lat();
    $(‘#y’).val()=markerLatLng.lng();
    o cualquier otra, como por ejemplo para poner un window info, el marcador que estaba lo desaparece, seguro que algo esta mal, me podrias apoyar?? por favor, de antemano te agradezco mucho y disculpa las molestias

    Responder
  4. Hola, estoy intentando pasar toda mi pagina al API3 pero me encuentro con el siguiente problema. Como cambiar esta instruccion de API 2 a API 3, concretamente me da problemas “point.toURLValue()”, si lo pongo no sale nada en el sidebar, me refiero siempre si migro esta instrucción al API3

     function createMarker(point,name,html,category) {
       html += '<a href="http://maps.google.com/maps?' +
          'saddr=&daddr=' + point.toUrlValue() + 
          'rel="nofollow">Pulsa para llegar hasta aqui';
       var marker = new GMarker(point,gicons[category]);
       marker.mycategory = category;                                 
       marker.myname = name;
       GEvent.addListener(marker, "click", function() {
          marker.openInfoWindowHtml(html); });
       gmarkers.push(marker);
       return marker;} 
    

    Un saludo

    Responder
    • @Joaquin Hola, buscando encontré que la función .toString() devuelve las coordenadas con decimales completos del lugar, y en paréntesis, algo como:
      (60.174391639841424, 24.939823150634766)

      Otra opción que puedes tomar, es por separado extraer el Lat/Lng, algo como:

      myLatlng.lat().toFixed(6) + ',' + myLatlng.lng().toFixed(6) 

      Espero eso ayude, saludos!!!

      Responder
  5. Hola Alex, ante todo gracias por estar ahí ayudando a los demás. Una pregunta rápida: Estoy intentando hacer un ejemplo de mapa con KML, solo copiar y pegar algunos de los ejemplos que hay, y no consigo que funcione ninguno, sale el mapa pero como si no encontrara los datos del klm (con el api2 funciona perfectamente) pero con el api3 no consigo que funcione. Hay algun problema.

    Un abrazo

    Responder
    • @Joaquín pues no se supone que haya problemas, aunque si estás mezclando APIs no va a funcionar, necesitaría ver el código para poder ver si hay algo fuera de lo ordinario que te esté causando conflictos, porque los KML si los muestra en la API v2 es que están bien hechos, entonces no debería haber problema en la v3

      Responder
  6. Hola, gracias a tu blog he solucionado un par de cosas de una página que estoy haciendo, asi que gracias 😀 pero hay algo que no encuentro en ningún lado, quiero obtener la dirección (formatted address) de varios marcadores, a traves de las coordenadas, me resulta como para los primeros 5 pero despues sale OVER_QUERY_LIMIT y no sé que hacer. Ayuda porfa :c
    Saludos

    Responder
    • @Daniel deja me hago un post para hacer geocode inverso, no sé cómo es que lo estés haciendo pero por lo que te arroja, tienes una sobrecarga, mejor, en un comentario quedaría corto, así que deja me pongo a escribir un poco, saludos!

      Responder
      • Si, creo que tengo una sobrecarga por que lo debo hacer para muchos marcadores y lo puse dentro de un for.. bueno, espero tu post y gracias!

      • Hola, lo solucione ! 😀 poniendo el geocode dentro del addListener en vez de en el for, así hace una consulta a la vez y no se sobrecarga. Igual espero el post, saludos!

    • Que tal Daniel,acerca de como hacer la geolocalizacion inversa, tengo algo de tiempo intentando hacerlo y por mas ejemplos que veo, no logro más que obtener mi posisión actual por medio del API HTML5, agradeceria mucho cualquier ayuda de tu parte o de Alex.

      Responder
      • Que tal Alex, el problema se resolvió,resulta que el administrador de la red había bloqueado los puertos (creo) que la API de google trabaja,por ello es que no obtenía ningún resultado.
        Muchas gracias!!

  7. Muy buen post, tengo una duda, en vez de hacer la busqueda por dirección la debo hacer por código postal, perteneciente a un país determinado, cómo sería en este caso ???

    Sds y gracias

    Responder
    • @Lemay El Geocode hace la búsqueda al igual por Código Postal, el detalle es que probablemente necesites concatenar un “, México” para que lo busque en el país correcto, ya que por experiencia, algunos o se repiten o hay lugares que específicamente se llaman por números y elige el más cercano al meridiano 0, sencillo, ¿no? 😉

      Saludos!

      Responder
      • entonces sería algo como esto:

        geocoder.geocode({ ‘address’: pcode+’, España’,’region’:’es’}, geocodeResult);

        ??

        Saludos !

      • Al parecer es un poco tarde mi respuesta, pero de todas maneras la dejaré por acá.. con la api de foursquare se puede hacer una especie de Geocode Inverso al utilizar la “https://api.foursquare.com/v2/venues/trending”
        puedes utilizar el parametro “ll” para buscar por latitud/longitud o el parametro “near” para buscar por ubicación, te devuelve un json con la ciudad, region y pais, ademas de las coordenadas poligonales en latitud, longitud del ará de la ubicación.

        Muy bueno tu blog, lo visito frecuentemente pero de manera pasiva.. saludos!

  8. Hola Alex.

    He intentado mezclar tus dos ejemplos:

    “Geocode: Buscar direcciones con GMaps API v3”

    y

    “Marcador arrastrable y cómo obtener su Lat/Lng GMaps API v3”

    en una sola aplicación pero no lo he logrado. Ya tengo varios días en esto y por más que lo intento no lo logro.
    ¿Podrías ayudarme a hacer esa mezcla en un mismo mapa?

    Muchísimas gracias de antemano por tu ayuda.

    Responder
    • @Henry si lo que quieres es mover la ruta, usa el ejemplo del post de las rutas, y antes de la variable directionsDisplay, coloca y sustituye esa línea por esto:

      var rendererOptions = {
       draggable: true
      };
      var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
      

      Con eso será suficiente para que puedas mover los marcadores.

      Responder
  9. Como puedo Obtener solo las coordenadas? osea colocar la dirección y obtener las coordenadas pero sin mostrar un mapa.
    Lo necesito para un trabajo el en cual tengo que buscar las coordenadas en base a una dirección que se me entrega.

    Que estés muy bien! 🙂

    Responder
    • @Gustavo haces todo el proceso y el código tal cual está pero en la función que despliega el mapa solo pondrás esto:

      function geocodeResult(results, status) {
          // Verificamos el estatus
          if (status == 'OK') {
              var lat = results[0].geometry.location.lat()
              var lng = results[0].geometry.location.lng()
              // Usalos como se ajuste a tus necesidades
          } else {
              // En caso de no haber resultados o que haya ocurrido un error
              alert("Geocoding no tuvo éxito debido a: " + status);
          }
      }
      
      Responder
  10. Hola Alex,
    Estoy intentando hacer una funcion que me sirva para codificar una pequeña base de datos junto con PHP.
    Partiendo de tu ejemplo he modificado el codigo para que en lugar de situar en un mapa muestre un mensaje, pero no funciona. Puedes echarme una mano??? MUCHAS GRACIAS:

    Google Maps JavaScript API v3 Example: Geocoding Simple

    function codeAddress() {
    var address = document.getElementById(‘address’).value;
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode( { ‘address’: address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
    alert(‘HOLA????’);
    });
    } else {
    alert(‘Geocode was not successful for the following reason: ‘ + status);
    }
    });
    }

    Responder
    • @jaume el problema está en esto:

      google.maps.GeocoderStatus.OK

      esto es porque ya has mandado la base del estatus que es google.maps.GeocoderStatus, solamente debes colocar el OK entre comillas, con eso funcionará.

      Responder
  11. Lo que yo estoy intentando hacer es dado un array de direcciones pasárselo al geocoder y que me saque las coordenadas para meterlas en una base de datos. Pero no funciona, solo hace la primera.
    ¿Sabes porqué puede ser? Muchísimas gracias!

    Responder
  12. Hola Alex, oye una pregunta, me queda claro que para una busqueda esta bien, pero cuando se requiere hacer una busqueda en bloque, digamos 50 direcciones, ¿es acosnejable usar este mismo metodo? o se puede usar algun otro.

    Muchas gracias de antemano

    Responder
    • @Mandox Google no permite las búsquedas en bloque, a menos que tengas una cuenta premium de uso de la API (eso significa pagar), no he hecho búsquedas en bloque pero deja investigo y ya lo posteo.

      Responder
    • @Raul Es necesario hacer uso de AJAX para obtener la información desde un lenguaje de servidor, como PHP por ejemplo, generes un XML o un JSON y los trabajes con Javascript, pero como lo he mencionado antes, y si es que pretendes hacer búsquedas en bloque, no estoy seguro del límite de Geocoding que te permita hacer Google.

      Responder
      • Gracias por responder…
        estoy haciendo unos ejemplos y no me funciona
        podrias darme una orientacion de como podria hacerlo…
        genero el Json, pero como lo uso con javascript.

  13. Hola, existiría el modo de obtener el código completo de este ejemplo para estudiarlo? soy nuevo en programación y me cuesta algo entenderlo. Gracias anticipadas

    Responder
  14. Hola,

    He cogido tu código como ejemplo, pero no me está funcionando bien. Por ejemplo, para búsquedas de paises como Francia o Italia el zoom mostrado en tu ejemplo es mayor. ¿Sabes porqué podría ser?, llevo un rato mirando y no doy con ello.

    Gracias!

    Responder
    • @Carlos el zoom depende de la zona y las imágenes disponibles, por ejemplo si buscas en un desierto que no requiere gran calidad en las fotos, el número de zooms que puedes hacer se reduce, en cambio, si ves New York por ejemplo, te da una calidad muy alta, lo que significa muchos niveles de zoom, cuando buscas el geocode, en el resultado te trae algo que se llama bounds, eso te da el cuadro de zoom adecuado para la búsqueda que realizas.

      Responder
    • @RDuuke creo que no entendí bien qué es lo que buscas hacer, solamente puedo recomendarte algo, si tu aplicación es pública, debes tener cuidado con los límites de uso, para una aplicación normal son 2500 peticiones de geocode por día. Si pudieras explicar un poco más a detalle qué buscas hacer, podría orientarte, saludos…

      Responder
  15. Oe Brother deberia de compartir el codigo completo , que ademas google bloquea por que dice sobre una llave sobre la api hermano si seria tan amable de ayudarme con esto te lo agradesco

    Responder
  16. Como puedo hacerle si al buscar por ejemplo una calle (“Niños Heroes”) , esta calle en mi ciudad esta como 3 veces, lo que quiero es que me aparezca el listado de las 3 calles y y al dar click me mande al mapa en esa dirección algo parecido como cuando se busca en https://maps.google.com.mx/ y aparece de la siguiente forma:

    Quizás quisiste decir:
    Niños Heroes, Gil y Sáenz (El Aguila), 86080 Villahermosa, TAB
    Niños Heroes, Río Viejo 1a Sección, TAB
    Niños Heroes, Francisco Villa, 86017 Villahermosa, TAB

    Responder
  17. Hola buena tarde, tengo un listado muy grande de coordenadas en .csv del cual quiero consultar sus direcciones son cerca de 6000 registros. Hay alguna manera o apliacion que facilite tan extensa labor??

    Responder
  18. Muy bueno! voy a utilizar el código para un proyecto en donde tengo que sacar las coordenadas a partir de la búsqueda de una dirección.Tengo un sitio de mapas, el proyecto estaría incluido alli: http://mapa-maps.com.ar/ . Claro que la consulta estaría en el backend. Deberé trabajar en eso. Gracias por ayudarme en el puntapie inicial. Pablo

    Responder
  19. Hola, gracias por el aporte.
    Me podrias dar una sugerencia en cuanto al orden de mis datos para hacer una solicitud más exacta, tengo lo siguiente:
    calle, colonia, del o municipio, ciudad, estado y codigo postal
    Saludos

    Responder
    • Depende de la información disponible que exista en la región, entre más específico llevas más riesgo de no encontrar datos. Lo que yo recomiendo es usar los siguientes campos: calle, colonia (si la ciudad es muy grande ya que puede haber muchas calles con el mismo nombre), ciudad, estado, país.

      Responder
  20. Hola, primero agradecer la gran aportación
    Me surge una duda, (ya que lo necesito para un proyecto) se podría hacer lo mismo pero introduciendo los orígenes y destinos con una tabla y que cree una ruta para pasar por el orden marcado en la tabla
    Muchas gracias de antemano

    Responder
  21. Hola.

    Estoy empezando a hacer pruebas con maps y mi duda es si puedo cargar mas de 100 mil direcciones para que en resume se verifique que cada una existe, si existe, colocar un marcador, centrar y dar zoom en el mapa en la región de la dirección obtenida, si no existe la dirección capturar el error para identificar que direcciones no pudieron ser cargadas.

    De antemano muchas gracias por tu tiempo y comportar tu conocimiento.

    Responder
  22. Buenas, he utilizado tu post para leer direcciones que se incluyen en el Google Calendar y mostrar el mapa.
    Sin embargo, me gustaría saber si hay alguna manera de añadir a éste un enlace de manera que cuando pinchas en el mapa te abre una nueva ventana con el google maps y la dirección, para saber cómo llegar, etc.

    Responder

Responder a Alex FrancoCancelar respuesta