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:

eBook: Série DONUT PROJECT 2015: Projetos e Códigos de Visual Basic for Applications - Autor: André Luiz Bernardes

eBook: Série Top 10 Funções: Top 10 Funções VBA para o Microsoft Excel - Autor: André Luiz Bernardes

eBook: Série Funções Poderosas: 13 Funções Poderosas no MS Excel - Autor: André Luiz Bernardes

eBook: Série Visual Basic For Application: Criando Logs de acesso: Dicas e Códigos de Visual Basic for Applications - Autor: André Luiz Bernardes

eBook: Série VBA Tips: Rastrei seus Dashboards, Scorecards, Reports, Relatórios, Planilhas e Aplicações - Dicas e Códigos - Autor: André Luiz Bernardes

eBook: Série Data Science: Big Data, Como? - Autor: André Luiz Bernardes

eBook: Série Smarter Analytic: 5 Previsões de Big Data - Autor: André Luiz Bernardes


Comente e compartilhe este artigo!

brazilsalesforceeffectiveness@gmail.com

✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile Google+  Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets

9 comentários:

  1. Boa tarde,
    Vocês possuem uma VBA que retorne além da distância entre as cidades, os valores dos pedágios?

    Grato,

    ResponderExcluir
  2. Tambem não consigo, não sou programador teria como enviar link de uma montada para baixar?

    ResponderExcluir
  3. Agora o Google Requer que vc obtenha uma API Key. O código é quase o mesmo: basta adicionar após "Destination & &sensor=false" o parâmetro &key=AIzaSxxxxxF5NjIQnryafjyBIis_i9xxxxxmxvA" (alterando a API Key para a sua API Key)

    ResponderExcluir
  4. api esta ativa sim, porem tem q incluir o parametro &key

    ResponderExcluir
  5. fiz o VBA, coloquei minha API KEY porem o resultado esta dando zero, alguem pode ajudar?

    ResponderExcluir
  6. Olá, adicionei a Key da API, mas esta retornando os ZERO nos valores

    ResponderExcluir
  7. Alguém solucionou os problemas de retornar ZERO? Outra coisa, é possível não pegar rota e sim distância em linha reta?

    ResponderExcluir
  8. Olá. Alguém conseguiu usar a função mesmo após colocar a chave API?

    ResponderExcluir

diHITT - Notícias