Hoy vamos a trabajar con la API de Google Maps.
En primer lugar, vamos a montar un mapa en el que, al hacer click, Google de forma automática nos proporcione la dirección de la posición elegida. Ésto dará otra nueva funcionalidad a nuestra página web haciéndola más atractiva y dinámica.
Ya sabéis nuestra teoría, “con lo que cuesta que lleguen, hay que hacer que los usuarios se queden”, y no hay mejor forma que proporcionar al usuario de nuestra página web herramientas para que interaccione con nuestro proyecto.
Para ello, trabajaremos en Java Script (jQuery) y tenemos una función que monta un mapa de Google Maps pasándole como parámetros una latitud, una longitud y un zoom.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var marker = null; function mapaGoogle(latitud,longitud,zoom) { var map; var mapOptions = { zoom: zoom, disableDefaultUI: true, center: new google.maps.LatLng(latitud,longitud), mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById('map_wrapper'), mapOptions); google.maps.event.addListener(map, 'click', function(event) { if (marker) { marker.setMap(null); } marker = new google.maps.Marker({ position: event.latLng, map: map}); autoCompletar(marker); }); } |
A continuación, añadimos la función autocompletar, al que al pasarle un marcador de Google (marker) intenta obtener la dirección física que le corresponde, con todos sus datos (calle, número, código postal, municipio, provincia, comunidad autónoma y país)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function autoCompletar(marcador) { if(marcador) { var pos=marcador.getPosition() var resultado=consultaGoogle(pos.lat()+','+pos.lng(),2); if(resultado) { if(confirm('Desea añadir la siguiente dirección en sus datos personales: '+resultado.completa)) { $('.datos_facturacion').html(JSON.stringify(resultado.address_components)); $('#dir input[name="direccion'+direccion+'"]').val(resultado.calle+' '+resultado.numero); $('#dir input[name="cp'+direccion+'"]').val(resultado.cp); $('#dir input[name="localidad'+direccion+'"]').val(resultado.localidad); $('#dir select[name="pais'+direccion+'"]').val(resultado.pais); } } } } |
Como podéis ver, esta función hace una consulta a la función consultaGoogle. Esta función es bidireccional, y puede obtener la dirección dándole unas coordenadas o viceversa.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function consultaGoogle(consulta,tipo) { resultado=false; $.ajax({ type: "GET", async:false, url: '/frm/ajax/getDireccion.php?tipo='+tipo+'&consulta='+encodeURI(consulta) }).done(function ( res ) { if(res!='ERROR') resultado=JSON.parse(res); }); return resultado; } |
De nuevo, esta función (como no podía ser de otra manera) requiere de un último fragmento de código. Éste es php y es consultado por ajax. Se le envía la consulta y él, según los parámetros recibidos, envía la petición a Google vía CURL, la procesa (es más fácil trabajar con arrays y json en php que en Java Script en mi humilde opinión) y nos devuelve el resultado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
function getDatosGoogle ($dir) { $url = 'http://maps.google.com/maps/api/geocode/json?address='.urlencode($dir).'&sensor=false&language=es'; //set the url, number of POST vars, POST data $defaults = array( CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_URL => $url, CURLOPT_FRESH_CONNECT => 1, CURLOPT_RETURNTRANSFER => 1, CURLOPT_FORBID_REUSE => 1, CURLOPT_TIMEOUT => 4 ); //execute post $ch = curl_init(); curl_setopt_array($ch,$defaults); $result = json_decode(curl_exec($ch),true); curl_close($ch); //close connection return $result; } $resultado=getDatosGoogle($_GET['consulta']); if($resultado['status']=='OK') { switch(intval($_GET['tipo'])) { case 1: // long lat echo json_encode(array('lat'=>$resultado['results'][0]['geometry']['location']['lat'],'lng'=>$resultado['results'][0]['geometry']['location']['lng'])); exit(); case 2: $res_final=array( 'completa'=>$resultado['results'][0]['formatted_address'], 'cp'=>'', 'localidad'=>'', 'provincia'=>'', 'numero'=>'', 'calle'=>'' ); foreach($resultado['results'][0]['address_components'] as $componente) { switch($componente['types'][0]) { case 'postal_code': $res_final['cp']=$componente['long_name']; break; case 'locality': $res_final['localidad']=$componente['long_name']; break; case 'administrative_area_level_2': $res_final['provincia']=$componente['long_name']; break; case 'country': $res_final['pais']=$componente['long_name']; break; case 'street_number': $res_final['numero']=$componente['long_name']; break; case 'route': $res_final['calle']=$componente['long_name']; break; } } echo json_encode($res_final); exit(); default: exit('ERROR'); } }else exit('ERROR'); |
Y es así de sencillo (sobre todo si cogéis estas funciones ya desarrolladas)
¡Esperamos que os sea de utilidad!
Obtener una dirección desde Google Maps,
21 comentarios
shinagawa-hojinkai.or.jp
shinagawa-hojinkai.or.jp en dijo:Special add-ons and options are available to everybody anywhere in the U.S the most.
WASHINGTON Aug thirteen Reuters the U.S Department of Justice charged
five Chinese language citizens. First examine that Whoever issues the cash
stored within the wallet has special safety features in-constructed.
This blog and it’s essential pay special consideration to the movers and.
Associate in Nursing application may be harming the great the unhealthy experience where
you want to search out. This software of blockchain and cryptocurrencies as a trusted third party to carry out.
The expansion being delisted within one currency to a different through integration with third social gathering.
As one among the many CEO of Blockstream Adam again thinks that central financial
institution. Travel is one digital currency that utilizes progressive proprietary technologies to deliver
bitcoins within the virtual wallet. A digital forex introduced as for off-line storage completely different approaches will be taken to minimize your taxes.
Therefore we can folks don’t desire it but locations like craigslist and ask.
interlinkexchange.Com
interlinkexchange.Com en dijo:Hi there, this weekend is nice in support of me, as this point in time i am reading this wonderful educational piece of writing here at my residence.
laman poker absah terpercaya
laman poker absah terpercaya en dijo:Hello to all, it’s actually a fastidious for me to visit this web site, it contains valuable Information.
click aquí
click aquí en dijo:muy buen aporte, muchísimas gracias.
click aquí
click aquí en dijo:Me han gustado mucho vuestros aportes, muchas gracias amig@s.
Jose
Jose en dijo:de mierda
Jose
Jose en dijo:chingen su madre todos, puto codigo ni sirve tu chingadera
Jose
Jose en dijo:No funciona o no he conseguido implementarlo…una ayudita?
Manuel
Manuel en dijo:Esto está bastante mal, obtener la dirección por un curl ¿?
La forma correcta y optima es similar a esta: http://jsfiddle.net/eB2RX/1/
PATHO SOLUTION
PATHO SOLUTION en dijo:Hola tendrán algún ejemplo que nos puedan mostrar. o descargar