API GEOLOCALIZACIÓN EN VBA CON FORMATO XML

La semana pasada escribí un post sobre la geolocalización y cómo podemos adaptar el API de Maps a Excel mediante VBA: API GEOLOCALIZACIÓN EN VBA. En ese ejemplo trabajábamos con un formato de datos de salida de Maps denominado jSON y en el que utilizábamos varias funciones para extraer información de una cadena de datos alfanumérica.

En en mismo post comentaba que en breve realizaría el mismo ejemplo pero utilizando datos de salida XML. Esto implica modificar programación en la función principal y utilizar una única función secundaría.

Antes de mostrar estas funciones os dejo el ejemplo de la respuesta a una consulta a Maps con formato XML:

api-geolocalizacion-vba-con-formato-xml

Como podéis observar existen diferencias significativas en ambos formatos (jSON y XML). Sin embargo, a la hora de programar este tipo de formato nos ayudará a reducir la función, además la he implementado de tal forma que no es necesario el tener que acudir a las referencias a activar la casilla de Microsoft XML, V6.0 dado que la función crea los objetos necesarios para realizar la consulta.

Al igual que en el post anterior conservaremos la función que modifica los caracteres especiales. Haremos referencia a la segunda hoja, que es el lugar en el que los he colocado:

Private Function Caracter_a(ByVal Destino) As String
Dim i As Integer, fin As Integer
With Sheets(2)
fin = Application.CountA(.Range("A:A"))
'Aplicamos un bucle para sustituir caracteres especiales
For i = 1 To fin
Destino = Replace(Destino, .Cells(i, 1), .Cells(i, 2))
Next
Caracter_a = Destino
End With
End Function

Ahora ya podemos insertar la función que nos traerá las coordenadas de latitud y longitud a nuestra hoja, función GeocodingXML

Function GeocodingXML(Destino As String) As String
'Declaramos las variables
Dim Consulta As String
Dim Peticion As Object
Dim Respuesta As Object
Dim iNodos As Object
'Indicamos parámetros de la consulta
Consulta = "http://maps.googleapis.com/maps/api/geocode/xml?" _
& "&address=" & Caracter_a(Destino) & "&sensor=false"
'Creamos los objetos (evitando así tener que marcar referencias en la biblioteca)
Set Peticion = CreateObject("Microsoft.XMLHTTP")
Set Respuesta = CreateObject("Msxml2.DOMDocument.6.0")
Set iNodos = Respuesta.createNode(1, "xml", "")
'Realizamos la consulta
Peticion.Open "GET", Consulta, False
Peticion.send
Respuesta.LoadXML (Peticion.responseText)
'Extraemos las coordenadas
Set iNodos = Respuesta.getElementsByTagName("location")
For i = 0 To iNodos.Length - 1
'Reemplazamos el espacio en blanco entre latitud y longitud por una coma
GeocodingXML = Replace(iNodos(i).Text, " ", ",")
Next
End Function

Si comparáis este código y el del post anterior, veréis que es mucho más corto y que el método para extraer los datos los realizamos mediante el método “getElementsByTadName” lo que nos permite extraer los datos alojados en los nodos del nombre al que hacemos referencia (“location”). Es decir latitud y longitud.

Personalmente suelo utilizamos esta función (y método) cuando trabajo realizando consultas web, es mucho más sencillo.

El resultado es el mismo que en el post anterior:

api-geolocalizacion-vba-con-formato-xml1

Pues eso ha sido todo. Ya tenemos dos UDF listas para extraer las coordenadas de cuaquier lugar que necesitemos.

Saludos 🙂

Descarga el archivo de ejemplo pulsando en: API GEOLOCALIZACIÓN EN VBA CON FORMATO XML

 

Anuncios

¿Te ha gustado?. Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s