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á:
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.= Km_Distance (origem, destino)
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/parseXMLDim myRequest As XMLHTTP60Dim myDomDoc As DOMDocument60Dim distanceNode As IXMLDOMNodeLet Km_Distance = 0' Check and clean inputsOn Error GoTo exitRouteLet Origin = Replace(Origin, " ", "%20")Let Destination = Replace(Destination, " ", "%20")' Lendo os dados XML da API do Google Maps.Set myRequest = New XMLHTTP60myRequest.Open "GET", "http://maps.googleapis.com/maps/api/directions/xml?origin=" _& Origin & "&destination=" & Destination & "&sensor=false", FalsemyRequest.send' Tornando o XML legível por usar o XPathSet myDomDoc = New DOMDocument60myDomDoc.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 / 1000exitRoute:' Tidy upSet distanceNode = NothingSet myDomDoc = NothingSet myRequest = NothingEnd 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.
Boa tarde,
ResponderExcluirVocês possuem uma VBA que retorne além da distância entre as cidades, os valores dos pedágios?
Grato,
Tambem não consigo, não sou programador teria como enviar link de uma montada para baixar?
ResponderExcluirAgora 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)
ResponderExcluircomo faço pra obter uma API Key ?
Excluirapi esta ativa sim, porem tem q incluir o parametro &key
ResponderExcluirfiz o VBA, coloquei minha API KEY porem o resultado esta dando zero, alguem pode ajudar?
ResponderExcluirOlá, adicionei a Key da API, mas esta retornando os ZERO nos valores
ResponderExcluirAlguém solucionou os problemas de retornar ZERO? Outra coisa, é possível não pegar rota e sim distância em linha reta?
ResponderExcluirOlá. Alguém conseguiu usar a função mesmo após colocar a chave API?
ResponderExcluir