Aprende a utilizar Google geocodificación API

2018-04-19 15:55:50

Ejemplos fáciles para utilizar la api de Google geocodificación y sacar el máximo partido a esta librería. Podrás realizar búsquedas y obtener datos como países , regiónes, ciudades, coordenadas gps, etc.

En los ejemplos utilizamos jquery para enviar la solicitud por ajax al servidor de google maps.

Buscar un sitio, lugar, dirección

$.ajax({ url:'https://maps.googleapis.com/maps/api/geocode/json?address=' + texto_busqueda + '&sensor=true',
    success: function(data){
        callBack(data.results);
    },error : function() {
        callBack(false);
    }
});

Ejemplo para buscar un sitio


Resultado

El resultado de la búsqueda nos devolverá un array en formato JSON. El cual podremos manipular de forma simple

Obtener el país

Para obtener el nombre del país del primer elemento de la búsqueda no es tan sencillo. Para ello debemos obtener el elemento address_components y buscar en él

var pais = "";
var address = data.results[0].address_components;

//recorremos todos los elementos de address
for (var p = address.length-1; p >= 0; p--) {
    //si es un pais
    if(address[p].types.indexOf("country") !== -1) {
        var v = address[p].long_name;
        if(v !== undefined){
            pais = v;
        }
     }
}

Obtener la población o provincia

Para obtener el nombre de la población o provincia es muy similar al de país

var poblacion = "";
var address = data.results[0].address_components;

//recorremos todos los elementos de address
for (var p = address.length-1; p >= 0; p--) {
    //si es una población
    if(address[p].types.indexOf("administrative_area_level_1") !== -1) {
        var v = address[p].long_name;
        if(v !== undefined){
             poblacion = v;
         }
     }
}

Obtener la ciudad

Para obtener el nombre de la ciudad hay que realizar una doble comprobación

var ciudad = "";
var address = data.results[0].address_components;

//recorremos todos los elementos de address
for (var p = address.length-1; p >= 0; p--) {
    //si es una ciudad 
    if(address[p].types.indexOf("locality") !== -1) {
        var v = address[p].long_name;
        if(v !== undefined){
            ciudad = v;
        }
    }

    if(ciudad === ""){
        //si es una ciudad de nivel 2
        if(address[p].types.indexOf("administrative_area_level_2") !== -1) {
            var v = address[p].long_name;
            if(v !== undefined){
                ciudad = v;
            }
        }
    }
}

Obtener las coordenadas gps

Obtener las coordenadas gps (latitud y longitud) es muy sencillo

var lat = data.results[0].geometry.location.lat;
var lng = data.results[0].geometry.location.lng;

La api nos permite realizar búsquedas con otro tipo de información. Por ejemplo con la ubicación podremos obtener la misma información que en el ejemplo anterior. Pero será precisa.

Buscar un lugar por medio de latitud y longitud

$.ajax({ url:'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + latitude + ',' + longitude + '&sensor=true',
    success: function(data){
        callBack(getInfo(data.results));
    },error: function() {
        callBack(false);
    }
});

Opciones al obtener los datos

En la url de la api puedes indicar parámetros opcionales.

  1. bounds
  2. region
  3. language
  4. components

1- Bounds

El parámetro bounds define las coordenadas de latitud/longitud de las esquinas sudoeste y noreste de este cuadro de límite usando un carácter de barra vertical "|" para separar las coordenadas. Por ejemplo:

Solicitud sin bounds
https://maps.googleapis.com/maps/api/geocode/json?address=Winnetka
Respuesta
"results" : [
      {
         "address_components" : [
            {
               "long_name" : "Winnetka",
               "short_name" : "Winnetka",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "New Trier",
               "short_name" : "New Trier",
               "types" : [ "administrative_area_level_3", "political" ]
            },
            {
               "long_name" : "Cook County",
               "short_name" : "Cook County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Illinois",
               "short_name" : "IL",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Winnetka, IL, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 42.1282269,
                  "lng" : -87.7108162
               },
               "southwest" : {
                  "lat" : 42.0886089,
                  "lng" : -87.7708629
               }
            },
            "location" : {
               "lat" : 42.10808340000001,
               "lng" : -87.735895
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 42.1282269,
                  "lng" : -87.7108162
               },
               "southwest" : {
                  "lat" : 42.0886089,
                  "lng" : -87.7708629
               }
            }
         },
         "place_id" : "ChIJW8Va5TnED4gRY91Ng47qy3Q",
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
Solicitud con bounds
https://maps.googleapis.com/maps/api/geocode/json?address=Winnetka&bounds=34.172684,-118.604794|34.236144,-118.500938
Respuesta
"results" : [
      {
         "address_components" : [
            {
               "long_name" : "Winnetka",
               "short_name" : "Winnetka",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Los Angeles",
               "short_name" : "LA",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Los Angeles County",
               "short_name" : "Los Angeles County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Winnetka, Los Angeles, CA, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 34.2355209,
                  "lng" : -118.5534191
               },
               "southwest" : {
                  "lat" : 34.1854649,
                  "lng" : -118.588536
               }
            },
            "location" : {
               "lat" : 34.2048586,
               "lng" : -118.5739621
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 34.2355209,
                  "lng" : -118.5534191
               },
               "southwest" : {
                  "lat" : 34.1854649,
                  "lng" : -118.588536
               }
            }
         },
         "place_id" : "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ",
         "types" : [ "neighborhood", "political" ]
      }
   ],
   "status" : "OK"

2- Region

Las solicitudes devolverán los resultados dependiendo de la zona desde donde se realizan las mismas. Pero puedes espcificar una zona con el parámetro region. Por ejemplo:

Solicitud sin region
https://maps.googleapis.com/maps/api/geocode/json?address=Toledo
Respuesta
"results" : [
      {
         "address_components" : [
            {
               "long_name" : "Toledo",
               "short_name" : "Toledo",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Lucas County",
               "short_name" : "Lucas County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Ohio",
               "short_name" : "OH",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Toledo, OH, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 41.732844,
                  "lng" : -83.4547053
               },
               "southwest" : {
                  "lat" : 41.580266,
                  "lng" : -83.69423700000002
               }
            },
            "location" : {
               "lat" : 41.6639383,
               "lng" : -83.55521200000001
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 41.732844,
                  "lng" : -83.4547053
               },
               "southwest" : {
                  "lat" : 41.580266,
                  "lng" : -83.69423700000002
               }
            }
         },
         "place_id" : "ChIJeU4e_C2HO4gRRcM6RZ_IPHw",
         "types" : [ "locality", "political" ]
      }
...
Solicitud con region
https://maps.googleapis.com/maps/api/geocode/json?address=Toledo&region=es
Respuesta
"results" : [
      {
         "address_components" : [
            {
               "long_name" : "Toledo",
               "short_name" : "Toledo",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Toledo",
               "short_name" : "Toledo",
               "types" : [ "administrative_area_level_4", "political" ]
            },
            {
               "long_name" : "Vega de Toledo",
               "short_name" : "Vega de Toledo",
               "types" : [ "administrative_area_level_3", "political" ]
            },
            {
               "long_name" : "Toledo",
               "short_name" : "TO",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Castile-La Mancha",
               "short_name" : "CM",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Spain",
               "short_name" : "ES",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Toledo, Toledo, Spain",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 39.88605099999999,
                  "lng" : -3.9192423
               },
               "southwest" : {
                  "lat" : 39.8383676,
                  "lng" : -4.0629256
               }
            },
            "location" : {
               "lat" : 39.8628316,
               "lng" : -4.027323099999999
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 39.88605099999999,
                  "lng" : -3.9192423
               },
               "southwest" : {
                  "lat" : 39.8383676,
                  "lng" : -4.0629256
               }
            }
         },
         "place_id" : "ChIJ8f21C60Lag0R_q11auhbf8Y",
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"

3- Language

Puedes indicar el idioma en que se devolverán los resultados. Por ejemplo:

https://maps.googleapis.com/maps/api/geocode/json?address=Toledo&language=es
Listado de idiomas admintidos
Código de idiomaIdiomaCódigo de idiomaIdioma
arÁrabeknKannada
bgBúlgarokoCoreano
bnBengalíltLituano
caCatalánlvLetón
csChecomlMalayo
daDanésmrMaratí
deAlemánnlHolandés
elGriegonoNoruego
enInglésplPolaco
en-AUInglés (Australia)ptPortugués
en-GBInglés (Gran Bretaña)pt-BRPortugués (Brasil)
esEspañolpt-PTPortugués (Portugal)
euVascoroRumano
euVascoruRuso
faFarsískEslovaco
fiFinlandésslEsloveno
filFilipinosrSerbio
frFrancéssvSueco
glGallegotaTamil
guGujaratiteTelugu
hiHindithTailandés
hrCroatatlTagalo
huHúngarotrTurco
idIndonesioukUcraniano
itItalianoviVietnamita
iwHebreozh-CNChino (simplificado)
jaJaponészh-TWChino (tradicional)

4- Components

Comonents es un filtro que se emplea para restringir los resultados de la búsqueda. Un filtro consiste en una lista de pares component:value separados por una barra vertical (|).

Los components que se pueden filtrar incluyen:

  • route: establece coincidencias con el nombre largo o corto de una calle.
  • locality: establece coincidencias con los tipos locality y sublocality.
  • administrative_area: establece coincidencias con todos los niveles de administrative_area.
  • postal_code: establece coincidencias con postal_code y postal_code_prefix.
  • country: establece coincidencias con el nombre de un país o con un código de país de dos letras.
Ejemplo con components
https://maps.googleapis.com/maps/api/geocode/json?address=santa+cruz&components=country:ES
Ejemplo 2 con components
https://maps.googleapis.com/maps/api/geocode/json?address=Torun&components=administrative_area:TX|country:US

Key

Es recomendable incluir al final de la url el parámetro de la api key. A día de hoy sin la api key devuelve los resultados de la búsqueda pero no exime que a futuro siga funcionando. Además google indica que se introduzca este parámetro.

Ejemplo con el parámetro key
https://maps.googleapis.com/maps/api/geocode/json?address=santa+cruz&key=YOUR_API_KEY

Para conseguir una clave key ve al siguiente link de google apis


Comentar

Para poder realizar comentarios. Primero debes inicar sesión o crear una cuenta.