Ir al contenido principal

Servicio web de geocodificación de Google Maps

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 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 archivo "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.

Descarga todos los archivos realizados hoy día ingresando al siguiente enlace: https://github.com/CodigoComentado/servicio-web-de-geocodificacion/

Comentarios

Entradas más populares de este blog

Calculando el factorial de un número (ejemplo de función recursiva).

Hola, mi nombre es Antonio Alfonso Martínez y en el presente artículo me dispongo a explicar un sencillo método para calcular el factorial de un número haciendo uso del concepto de recursividad. Para empezar, diremos que el factorial de un número natural "n" es el resultado del producto de todos los números desde 1 hasta dicho número "n". Así, para efectuar el calculo del factorial de un número, vamos a emplear una sencilla función a la que daremos el nombre de "factorial". De modo, que, partiendo del hecho de que el factorial de 1 y 0 es 1, construiremos nuestra función (a la que daremos el nombre de "factorial") para realizar el calculo del factorial de 5: Lo que hace esta función, es tomar como argumento un número "n". de modo que si este es 0 o 1 ("if n==0 or n==1:") la función devolverá directamente como resultado el número 1 ("resultado=1"). Sin embargo si dicho número "n" es mayor que...

Sistema Hexadecimal - Sistema de numeración posicional

Sistema Hexadecimal El sistema hexadecimal es un sistema numérico que tiene como base el numero 16, y es una variante de los numero binarios El sistema hexadecimal es utilizado por nuestros ordenadores con el fin de abreviar valores de datos e instrucciones de memoria. Esta es una imagen que muestra el contenido de un archivo con exención 'dll' en un editor de texto, como el editor de texto no reconoce este tipo de archivo, nos lo muestra de esta manera: Como se puede apreciar, en vez de ver una gran cantidad de 0 y 1, vemos que hay grupos de 4 dígitos, y si observamos, vemos que son grupos de dígitos hexadecimales. El archivo cuentan con más de 48 mil lineas, por ello no se me es posible mostrarlo todo. Este es uno de los usos del sistema hexadecimal para abreviar grandes cantidades de 0 y 1. Ustedes mismos pueden hacer la prueba con una imagen o con cualquier otro tipo de texto. El sistema hexadecima, esta conformado por solo 16 dígitos. A continuación te lo...

Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones

PRÓLOGO El libro Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones nace como fruto de años de docencia en materias relacionadas: Algorítmica, Programación, Lenguaje C y Java, entre otros.  Con el paso del tiempo he constatado que aprender un lenguaje de programación es relativamente sencillo y sobre este tema existen muchos y muy buenos textos. Pero aprender a programar es algo totalmente distinto, que necesita de un mayor esfuerzo y abordar el problema desde otra perspectiva. Siempre utilizo la metáfora del pianista para explicar el tándem programar/lenguaje de programación: saber tocar las notas de un piano es relativamente fácil, tan solo debemos anotar en cada una de las teclas a qué nota musical corresponde. Esto sería similar a conocer un lenguaje de programación. Es muy sencillo utilizar un if o entender la mecánica de un while .  Volviendo al piano: una vez que dominamos la relación tecla/nota, un pianista debe aprender muchas ot...