Convertir direcciones en latitud y longitud automáticamente en Power BI a través de la API de Google
En este post vamos a aprender como obtener las coordenadas de nuestros clientes atacando la api de Google a partir de una dirección.
Existe un vídeo, en portugués, de Luis Gustavo Serra donde lo explica todo paso a paso y no quería dejar de mencionarlo ya que fue a través de este vídeo como descubrí esta técnica.
https://www.youtube.com/watch?v=QaTlRuBEpfw
Lo primero que hay que hacer es darse de alta en la api de Google para obtener una api key
Entraremos en la web
https://console.developers.google.com
Lo primero que haremos será crear un nuevo proyecto dando a seleccionar proyecto, crear nuevo.
Una vez creado vamos a Enable Apis and Services
Y buscamos Geocoding API
La seleccionamos y presionamos en HABILITAR
Una vez habilitada vamos a Credenciales y presionamos en Crear Credenciales_ Clave de API
Y obtendremos como resultado una Clave alfanumérica.
La petición que tenemos que hacer a la web para obtener las coordenadas a partir de una dirección es la siguiente:
https://maps.googleapis.com/maps/api/geocode/json?key=APIKEY&address=DIRECCION
Por ejemplo si queremos saber las coordenadas de la dirección del Museo Reina Sofía en Madrid, Calle Santa Isabel 52 28018, Madrid, la petición sería la siguiente:
y el resultado que nos devuelve es un archivo json como el que se puede ver en la imagen, que contiene la longitud y la latitud además de los datos completos de la dirección.
Como trasladar esto a Power BI y automatizar la carga de latitud y longitud de nuestros clientes es el siguiente paso.
Abrimos nuestro Power BI Desktop le damos a nuevo origen, web y copiamos la dirección web a la que hemos hecho la petición de los datos con la API KEY incluida
A partir de aquí con una serie de sencillos pasos acabamos obteniendo la latitud y la longitud:
1º Presionamos en lista
2º Presionamos en Record
3º Presionamos en Geometry – Record
4º Presionamos en Location – Record
5º Convertimos en tabla
6º Eliminamos la columna Name
7º Transponemos la columna Value
8º Renombramos la Columna 1 como Latitud y la 2 como longitud
9º Cambiamos el tipo de datos de ambas a decimal
De esta manera obtenemos la latitud y la longitud de nuestra dirección
Pero, ahora bien, como transformamos todos estos pasos en una función para poder aplicarla en masa a nuestra tabla de clientes.
Lo primero que vamos a hacer es convertir nuestra API Key en un parámetro
Y copiamos en el valor actual el valor de nuestra ApiKey
En la tabla que hemos creado con la latitud y longitud, sustituimos la apikey por el parámetro, de manera que quedaría como sigue:
let
Origen = Json.Document(Web.Contents(«https://maps.googleapis.com/maps/api/geocode/json?key=»&(APIKEY)&»&address=Calle Santa Isabel 52 28018, Madrid»)),
results = Origen[results],
results1 = results{0},
geometry = results1[geometry],
location = geometry[location],
#»Convertido en tabla» = Record.ToTable(location),
#»Columnas quitadas» = Table.RemoveColumns(#»Convertido en tabla»,{«Name»}),
#»Tabla transpuesta» = Table.Transpose(#»Columnas quitadas»),
#»Columnas con nombre cambiado» = Table.RenameColumns(#»Tabla transpuesta»,{{«Column1», «Latitud»}, {«Column2», «Longitud»}}),
#»Tipo cambiado» = Table.TransformColumnTypes(#»Columnas con nombre cambiado»,{{«Latitud», type number}, {«Longitud», type number}})
in
#»Tipo cambiado»
Ya tenemos de este modo nuestra APIKEY parametrizada y en segundo lugar vamos a convertir toda esta tabla en una función sustituyendo la dirección por el parámetro de la función quedando de la siguiente manera:
De esta manera nuestra tabla se convierte en una función
Si introducimos la dirección en nuestro parámetro, nos devolverá directamente latitud y longitud tal y como lo teníamos en la tabla que hicimos al principio
Si nos vamos a nuestro modelo y en nuestra tabla Clientes, agregamos una columna invocando función personalizada e invocamos la función que hemos creado, utilizando como parámetro el campo de la dirección del cliente nos traerá la latitud y la longitud para cada línea de nuestra base de datos de clientes.
Recomiendo que el campo que utilicemos como dirección sea lo más detallado posible. Lo mejor es crear una columna concatenada de los campos dirección, localidad, código postal y país, al menos.
Limitaciones….
La API de Google es una api de pago aunque al registrar la cuenta e introducir una tarjeta como medio de pago, te dan un crédito de 300 USD para gastar en las apis que quieras.
No cobran absolutamente nada sin antes cambiar la cuenta a “cuenta premium”
Yo he probado la captura de más de 19000 lineas para una tabla de clientes y el coste que me refleja es el siguiente:
Pero evidentemente no cobran nada al estar dentro del límite de crédito gratuito
Las 19000 peticiones tardaron en ejecutarse aproximadamente 3 horas
Para que no realice esa petición cada vez que queramos actualizar el modelo es necesario guardar los datos devueltos, para lo que podemos, por ejemplo, crear una tabla con el id del cliente, la latitud y la longitud y copiarla en csv con herramientas como dax studio Y una vez guardados los datos, eliminar la invocación de la función del modelo.
HOLA
QUE VALOR LE DISTE AL APIKEY, MUCHAS GRACIAS
Buenas noches, busco información del programa.