Servicio web de geocodificación de Google Maps

Índice

Introducción:

La geocodificación es el proceso que convierte direcciones (como la dirección de una calle) en coordenadas geográficas (latitud y longitud) que puedes usar para disponer marcadores en un mapa o posicionar el mapa.


Google tiene un servicio web excelente que nos permite hacer uso de su enorme
base de datos de información geográfica. Podemos enviar una cadena de búsqueda geográfica, como “
1600 Amphitheatre Parkway, Mountain View, CA” a su API de geocodificación y conseguir que Google nos devuelva la situación en un mapa de donde podrıa estar nuestra cadena
de búsqueda, ademas de los puntos de referencia en los alrededores.



Hoy haremos uso de este servicio web para crea un sencillo programa que nos pida una dirección, la cual Google la buscara en su base de datos y nos devolverá sus coordenadas geográfica (latitud y longitud). 


Resultado de imagen para google api

Un ejemplo sencillo:

Muy bien, crearemos un pequeño programa en Python, que nos pida como entrada una cadena de texto, la cual sera la dirección que desea buscar el usuario, luego esperaremos a que google nos envié una respuesta, el contenido de esa respuesta la mostraremos en la consola y la guardaremos en un archivo con formato "json".


Les mostrare el código completo y luego lo explicare linea por linea, así podremos entenderlo mejor.

import requests

address = input("Ingresar ubicación: ")

params = {'address':address}

response = requests.get("https://maps.googleapis.com/maps/api/geocode/json", params=params)

if response.status_code == 200:
 print(response.json())
 with open("Geocodificacion.json", "wb") as f:
  for x in response.iter_content():
   f.write(x)
  f.close()





Muy bien, hora de analizar el código.


Linea 1: En la primera linea estamos importando al modulo requests, el modulo requests no esta en la librería estándar de Python, esto significa que debemos descargarlo, si aun no lo tienes a continuación te dejo un link para poder descargar el modulo: Descargar Modulo Requests.


Linea 2: Ahora, declaramos una variable con el identificador "address", la cual almacenara la entrada del usuario.


Linea 3: Declaramos una variable con el identificador "params", la cual almacenara un diccionario con un elemento, con la llave nombrada "address" con el valor de la entrada del usuario almacenada en la variable "address", este diccionario sera el parámetro de la URL a la cual pediremos los datos geográficos de la dirección dada por el usuario.


Linea 5: Declaramos un variable con el identificador "response", la cual almacenara la repuesta del servidor, con el método get de requests estamos haciendo una petición a la url que le pasamos como primer argumento, el segun argumento como pueden ver son los parámetros de la URI a la cual estamos haciendo la petición, en este caso el parámetro es la dirección que introduce el usuario.


Linea 6: Creamos una sentencia "if" la cula comprobara si el codigo de estatus de la respuesta es igual a 200, recordemos que si el servidor nos devuelve el código 200 significa: "Respuesta estándar para peticiones correctas." (Según wikipedia :D).


Linea 5: Dentro de la sentencia if que comprueba que la petición tuvo éxito, usaremos la función print para imprimir la respuesta en formato json.


En este punto ya estamos aptos para ejecutar nuestro codigo, al hacerlo nos pedira una entrada, la cual sera la dirección que qerramos buscar, yo usare la dirección de GooglePlex, la cual es “1600 Amphitheatre Parkway, Mountain View, CA”, deberíamos ver el siguiente resultado:




Como podemos ver el resultado es un contenido en formato json, podemos ver la información nos proporciona Google con respecto a la dirección que le hemos pasado,
vemos que nos da mucha información sobre la dirección, no dice que se encuentra en Mountain View, Santa Clara, California, nos da el nombre del país en donde se encuentra que en este caso es Estado unidos, y también nos da los nombres cortos como US y CA, nos muestra el id del lugar, que si no me equivoco nos sirve para ver las imágenes es Street View, al final también vemos, el código 200, el cual os dice que la petición fue exitosa, en fin, vemos mucha información interesante, y no se limiten a no introducir tu propia dirección.


La desventaja de ver esta informacion desde la consola, es que esta un poco desordenada, por esto en el codigo de arriba tambien crea un archivo, las cuales explicare.


with open("Geocodificacion.json", "wb") as f:
  for x in response.iter_content():
   f.write(x)
  f.close()

Anteriormente quedamos en la linea 5, así que continuaremos en la linea 6 :D.


Linea 6: En esta linea usamos la funcion open para la creacion de un archivo llamado "Geocodificacion.json".


Linea 7: Declaramos un bucle for en el cual el identificador x iterara todos los elementos de response, la respuesta del servidor se puede iterar con el método iter_content.


Linea 8: En esta linea escribimos toda la iteración de x en el archvivo "Geocodificacion.json".


Linea 9: En la linea final, cerramos nuestro archivo.


Luego de ejecutar e ingresar la dirección que el programa nos pide, el archivo Geocodificacion.json sera creado en el directorio actual del programa, al abrir el archivo, el contenido debería ser algo así:


{
   "results" : [
      {
         "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" : "Santa Clara County",
               "short_name" : "Santa Clara 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" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
         "geometry" : {
            "location" : {
               "lat" : 37.4224764,
               "lng" : -122.0842499
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4238253802915,
                  "lng" : -122.0829009197085
               },
               "southwest" : {
                  "lat" : 37.4211274197085,
                  "lng" : -122.0855988802915
               }
            }
         },
         "place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

Como pueden ver, en el archivo vemos mucho mejor el contenido, de una manera más legible.


Eso a sido todo, te invito a que compartas tu experiencia con nosotros dejando un buen comentario, si tienes dudas con gusto las responderé, y espero que experimentes con este pequeño código, agregándole más funcionalidades. Mi nombre es Luis, y nos vemos la próxima :D.

Puedes ver el código completo desde mi repositorio de GitHub: Código Completo

  1. Antonio Jesús dice:

    Excelente y muchas gracias.

    1. Luis Salcedo dice:

      De nada, estoy aquí para ayudar 😀

  2. Oswaldo Zorrilla dice:

    Excelente y muy buena tu explicación.

    1. Luis Salcedo dice:

      Gracias por apreciar mi trabajo como blogero y programador 😀

  3. Anónimo dice:

    Hola. Muy buena explicación. Pero creo que falta detallar que el servicio web de geolocalizacion de Google te pide que ingreses una api key en la url donde estas haciendo la petición, según la propia documentación de la api

    1. Luis Salcedo dice:

      Como es simplemente una prueba, no nesecitamos una api key, al momento de crear un proyecto comercial en el que se haran muchas peticiones, hay si es necesaria, ya que sin la api key solo puedes hacer una cuantes peticiones, aunque debi explicarlo para dejarlo claro.

  4. Anónimo dice:

    Interesante! Excelente explicacion, gracias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey