Views

Histats

Vitrine

VBA Excel - Usando a API do Google Maps para retornar a distância em Km entre dois lugares - Google Maps distance function






Qual pode ser a utilidade de uma função que faça isso, retorne a distância em quilômetros, entre 2 pontos geográficos?

Este post pode ser uma ferramenta interessante para acompanhar a distância percorrida pelos materiais de construção da fonte até o local de destino, permitindo calcular o custo do trajeto;

Se você estiver engajado em algum processo ambiental, também poderá utilizar essa funcionalidade para calcular o impacto ambiental em carbono por tonelada km;

Enfim, poderá usar a sua criatividade para torná-la funcional.

Considere este post como sua primeira incursão no mundo Google, fazendo com que a nossa planilha MS Excel retorne informações a partir da API do GMAPS (Google Maps).


GMAPs - Mapa demonstrando a Rota entre Santos-SP e Uberaba-MG


Já lhes adianto: Antes que desejem submeter listas enormes de consulta ao servidor GMAPSSomente são permitidas 2.500 pesquisas ao servidor num período de 24 horas.

A função personalizada para o MS Excel trabalha passando dois nomes de lugar - ou códigos postais - e encontra a rota mais curta entre eles usando o planejador de rotas do Gmaps . Chamaremos de Km_Distance e a sintaxe para usá-la será:

Km_Distance (origem, destino)

Ela retornará um valor da distância entre os dois locais em quilômetros e se qualquer tipo de erro ocorrer então a função retorna 0.

Duas nota de advertência:
1) Os termos de uso do GMaps determinam que só estão autorizados a usar a sua API com o seu mapa. Assim, caso deseje fazê-lo sem seguir tais especificações de uso da API, faça-o por sua conta e risco (por isso demonstro o mapa acima).
2) O Gmaps geralmente lhe dará uma rota com base num caminho que pode não ser o mais adequado ao seu propósito. Caso descubra um modo de acertarmos isso, por favor entre em contato para melhorarmos este post.


Divirta-se:


Function Km_Distance (Origin As String, Destination As String) As Double
    ' Requires a reference to Microsoft XML, v6.0
    ' Draws on the stackoverflow answer at bit.ly/parseXML
    
    Dim myRequest As XMLHTTP60
    Dim myDomDoc As DOMDocument60
    Dim distanceNode As IXMLDOMNode
    
    Let Km_Distance = 0
    
    ' Check and clean inputs
    On Error GoTo exitRoute
    
    Let Origin = Replace(Origin, " ", "%20")
    Let Destination = Replace(Destination, " ", "%20")
    
    ' Lendo os dados XML da API do Google Maps.
    Set myRequest = New XMLHTTP60
    
        & Origin & "&destination=" & Destination & "&sensor=false", False
    myRequest.send
    
    ' Tornando o XML legível por usar o XPath
    Set myDomDoc = New DOMDocument60
    
    myDomDoc.LoadXML myRequest.responseText
    
    ' Obtendo o valor da distância entre os nós.
    Set distanceNode = myDomDoc.SelectSingleNode("//leg/distance/value")
    If Not distanceNode Is Nothing Then Km_Distance = distanceNode.Text / 1000

exitRoute:
    ' Tidy up
    Set distanceNode = Nothing
    Set myDomDoc = Nothing
    Set myRequest = Nothing
End Function

Para que utilize este código com sucesso, certifique-se de colocar o código acima num módulo da planilha.

Defina a referência a biblioteca Microsoft XML, v6.0 Ferramentas / Referências / Microsoft XML, v6.0

Ahhh, e sim, esta função pode ser utilizada com qualquer produto da suíte MS Office.

Leia também
Tags: VBA, Excel, GMAPS, GOOGLE, Google Maps, transport, VBA, API, distance, distância, XML, Reference, Referência



✔ VBA Brazil®

✔ VBA Brazil®
brazilsalesforceeffectiveness@gmail.com
Related Posts Plugin for WordPress, Blogger...
diHITT - Notícias