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).

Já lhes adianto: 

Antes que desejem submeter listas enormes de consulta ao servidor GMAPS

Somente 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.

Dois nota de advertência:
1) Os termos de uso do GMaps determinam que só estão autorizados a usar a sua API usando o seu mapa. Assim, caso deseje fazer sem seguir tais especificações de uso da API, isso será 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.
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

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



LinkWithinBrazilVBAExcelSpecialist

Related Posts Plugin for WordPress, Blogger...