Função para encontrar distância entre cidades

9

Estou trabalhando com o Google Docs e quero criar uma planilha do seguinte formulário:

Ponto A Quilometragem do ponto B
Los Angeles Miami 292100
Palo Alto São Francisco 90

Na planilha, Mileageé calculado automaticamente. Estou procurando "distância percorrida", não "como o corvo voa".

Existe uma função nas planilhas do Google que pode fazer isso?

Nick Heiner
fonte
À medida que a distância aumenta, a diferença entre "distância de condução" e "voo do corvo" diminui de acordo. De qualquer forma, eles provavelmente não diferirão mais do que alguns por cento.
11
isso parece uma afirmação bastante ousada, cowboy. você está dizendo que dirigir de portland para atlanta é aproximadamente a mesma milhagem do que voar? Acho que não.
Landon Kuhn
11
@pnuts concordou, e eu não vou defender o meu 4 anos de idade comentário :)
Landon Kuhn
Rosarch, por que você não revisita os aplicativos da Web após quatro anos de ausência e revisa todas as boas respostas que recebeu em sua pergunta?
Jacob Jan Tuinstra

Respostas:

9

Com o pequeno trecho de código a seguir, você pode recuperar a distância entre dois pontos.

Código

function getDirection(city1, city2, unit) {
  var directions = Maps.newDirectionFinder()
    .setOrigin(city1).setDestination(city2)
    .setMode(Maps.DirectionFinder.Mode.DRIVING)
    .getDirections();
  var d = directions.routes[0].legs[0].distance.text;

  var distance, value = d.split(" ")[0].replace(",", ""), text = d.split(" ")[1];
  if(text == unit) {
    distance = value;
  } else if(text == "km" && unit == "mi") {
    distance = value / 1.6;
  } else {
    distance = value * 1.6;
  }
  return Math.round(distance);
}

Explicado

A API do MAPs, construída sobre o script do Google Apps, obterá a primeira direção ( rotas [0] ) entre a origem e o destino . O valor retornado é retirado da vírgula e analisado como um número inteiro.

Captura de tela

insira a descrição da imagem aqui

Nota

A distância retornada pode ser em quilômetros ou milhas . Também adicionei o cálculo para "como o corvo voa" (em milhas).

Adicione o script em Ferramentas> Editor de scripts na planilha. Pressione o botão de bug no editor de scripts e você estará em movimento !!

Exemplo

Criei um arquivo de exemplo para você: obtenha uma distância de carro

Referências

Jacob Jan Tuinstra
fonte
11
Parece que a fórmula no documento de exemplo não está mais funcionando de maneira consistente. Alguém poderia editá-lo para fazê-lo funcionar? Não sei nada sobre scripts (mais do que copiar e colar) e adoraria sua ajuda! Tudo o que estou procurando é a distância entre os códigos postais. Obrigado!
Melissa
3

Nas planilhas do Google:

=importXML("http://mapquestapi.com/directions/v1/route?  
  key=YOUR_KEY_HERE&outFormat=xml&from=" & A2 & "&to=" 
  & B2,"//response/route/distance")

onde A2é a origem e B2o destino.

Você precisa obter uma chave de API do mapquest e substituir o valor YOUR_KEY_HEREpor ela.

Neil McGuigan
fonte
11
Como você obtém a chave da API?
Jacob Jan Tuinstra
11
@JacobJanTuinstra developer.mapquest.com
Neil McGuigan
Neil, você está vivo !! Obrigado por compartilhar isso.
Jacob Jan Tuinstra
+1 Solução aparentemente elegante, no entanto, o MapQuest é um pouco ruim. Eu recebi este erro ao tentar usar a chave que me foi dada: "Esta chave não está autorizada para este serviço. Se você não possui uma chave, pode obter uma chave gratuita registrando-se em developer.mapquest.com ."
Nick Bolton
1

Isto é o que funciona para mim:

=importXML("http://maps.googleapis.com/maps/api/distancematrix/xml?&origins="& <point.A> & "&destinations=" & <point.B>; "//distance/value")

Isso produzirá a distância percorrida entre <point.A>e <point.B>em metros (de acordo com o Google Maps, é claro).

Waldir Leoncio
fonte
Isso é ótimo! Que tal a distância do mosca?
Dustin Kirkland
0

Eu não acho que haja função ou extensão do Excel para fazer isso.

Você pode querer verificar esta página do Source Forge: http://zips.sourceforge.net/

  • Ele fornece um conjunto de dados CSV para converter CEPs em Lat / Long (ponto central presumivelmente)
  • Ele fornece o código do Excel para calcular a distância do "corvo" entre duas coordenadas lat / long. (e inclui código equivalente para Java, PHP e Python.

A função Excel é

=IF(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1 - Long2) > 1,
  RadiusofEarth * ACOS(1), RadiusofEarth *
  ACOS(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1-Long2)))

A página observa que os ângulos devem estar em radianos e que o Excel possui uma função de conversão de graus em radianos:

=RADIAN(degrees)

A menos que alguém tenha uma resposta mais clara, isso deve lhe dar o que você deseja sem muito trabalho.

Jacob Jan Tuinstra
fonte
sim, mas e quanto à distância percorrida em vez de "enquanto o corvo voa"?
11
Isso é consideravelmente mais difícil e exigiria o conhecimento de todas as estradas, como é feito no Mapquest, Google Earth, Streets & Trips (ou MapPoint). Não sei se algum desses aplicativos tem uma API adequada.
... por outro lado, se você estiver procurando uma aproximação aproximada e pronta para um número bastante limitado de cidades, poderá procurar as tabelas de distâncias que são bastante comuns em mapas e atlas de direção. Replicar esse estilo de dados no Excel e construir uma pesquisa para recuperá-lo para pares de locais é certamente viável no Excel. Se isso apelar, responda e eu poderei criar uma função para isso.
11
O OP usa as planilhas do Google.
Jacob Jan Tuinstra
+1 por causa da fórmula interessante, no entanto, acho que usar isso provavelmente não é prático.
Nick Bolton
-1

O Google Developers oferece um script muito robusto para funções relacionadas ao mapa no Planilhas Google que eu usei e realmente gostei. Instruções completas também estão na página da web.

talker90
fonte
11
Você poderia resumir alguns dos pontos principais das "instruções completas", por favor? As respostas devem ser independentes e não depender de fontes externas (embora eu saiba que é menos provável que um site do Google desapareça). Obrigado!
jonsca
-2

Não estou familiarizado o suficiente com as APIs para informar exatamente como fazer isso, mas acho que seria possível usar a API do Google Maps .

O Google Maps, é claro, pode fornecer instruções de um ponto para outro por meio de sua API. Seria complicado, mas possível rotear os locais da planilha pela API e obter instruções de direção, o que proporcionaria uma distância de carro entre as cidades.

Jared Harley
fonte