Fonction pour trouver la distance entre les villes

9

Je travaille avec Google Documents et je souhaite créer une feuille de calcul du formulaire suivant:

Point A Point B Kilométrage
Los Angeles Miami 292100
Palo Alto San Francisco 90

Dans la feuille de calcul, Mileageest calculé automatiquement. Je recherche "à distance", pas "à vol d'oiseau".

Existe-t-il une fonction dans les feuilles de calcul Google qui peut le faire?

Nick Heiner
la source
À mesure que la distance augmente, la différence entre la «distance de conduite» et le «vol du corbeau» diminue en conséquence. En tout cas, ils ne différeront probablement pas de plus de quelques pour cent.
1
cela semble être une affirmation assez audacieuse, cow-boy. est-ce que vous dites que conduire de portland à atlanta est à peu près le même kilométrage que voler? je ne pense pas.
Landon Kuhn
1
@pnuts a accepté, et je ne vais pas défendre mon commentaire de 4 ans :)
Landon Kuhn
Rosarch, pourquoi ne revisitez-vous pas les applications Web après 4 ans d'absence et passez en revue toutes les bonnes réponses que vous avez reçues sur votre question?
Jacob Jan Tuinstra

Réponses:

9

Avec le petit morceau de code suivant, vous pouvez récupérer la distance entre deux points.

Code

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);
}

Expliqué

L'API MAP, construite au-dessus du script Google Apps, obtiendra la première direction ( itinéraires [0] ) entre l' origine et la destination . La valeur retournée est supprimée des virgules et analysée comme un entier.

Capture d'écran

entrez la description de l'image ici

Remarque

La distance renvoyée peut être en kilomètres ou en miles . J'ai également ajouté le calcul pour "à vol d'oiseau" (en miles).

Ajoutez le script sous Outils> Éditeur de script dans la feuille de calcul. Appuyez sur le bouton de bogue dans l'éditeur de script et vous êtes en déplacement !!

Exemple

J'ai créé un fichier d'exemple pour vous: obtenir la distance en voiture

Références

Jacob Jan Tuinstra
la source
1
Il semble que la formule de l'exemple de document ne fonctionne plus de manière cohérente. Quelqu'un pourrait-il le modifier pour le faire fonctionner? Je ne connais rien au script (plus que le copier-coller) et j'aimerais votre aide! Tout ce que je recherche, c'est la distance entre les codes postaux. Je vous remercie!
Melissa
3

Dans les feuilles de calcul Google:

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

A2est l'origine et B2la destination.

Vous devez obtenir une clé API de mapquest et remplacer la valeur YOUR_KEY_HEREpar celle-ci.

Neil McGuigan
la source
1
Comment obtenez-vous la clé API?
Jacob Jan Tuinstra
1
@JacobJanTuinstra developer.mapquest.com
Neil McGuigan
Neil, ton vivant !! Merci de partager ça.
Jacob Jan Tuinstra
+1 Solution apparemment élégante, mais MapQuest est un peu moche. J'ai obtenu cette erreur en essayant d'utiliser la clé qui m'a été donnée: "Cette clé n'est pas autorisée pour ce service. Si vous n'avez pas de clé, vous pouvez obtenir une clé gratuite en vous inscrivant sur developer.mapquest.com ."
Nick Bolton
1

C'est ce qui fonctionne pour moi:

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

Cela donnera la distance parcourue entre <point.A>et <point.B>en mètres (selon Google Maps, bien sûr).

Waldir Leoncio
la source
C'est bien! Que diriez-vous de la distance à vol d'oiseau?
Dustin Kirkland,
0

Je ne pense pas qu'il existe une fonction ou une extension Excel pour ce faire.

Vous voudrez peut-être consulter cette page Source Forge: http://zips.sourceforge.net/

  • Il fournit un ensemble de données CSV pour convertir les codes postaux en lat / long (point central vraisemblablement)
  • Il fournit un code Excel pour calculer la distance "à vol d'oiseau" entre deux coordonnées lat / long. (et inclut un code équivalent pour Java, PHP et Python.

La fonction Excel est

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

La page note que les angles doivent être en radians et qu'Excel a une fonction de conversion des degrés en radians:

=RADIAN(degrees)

Sauf si quelqu'un d'autre a une réponse plus lisse, cela devrait vous donner ce que vous voulez sans trop de travail.

Jacob Jan Tuinstra
la source
oui, mais qu'en est-il de la distance parcourue au lieu de "à vol d'oiseau"?
1
Cela est beaucoup plus difficile et nécessiterait une connaissance de toutes les routes, comme cela se fait dans Mapquest, Google Earth, Streets & Trips (ou MapPoint). Je ne sais pas si l'une de ces applications possède une API appropriée.
... d'autre part, si vous recherchez une approximation approximative et prête pour un nombre assez limité de villes, vous pouvez rechercher les tableaux des distances de conduite qui sont assez courants dans les cartes de conduite et les atlas. Répliquer ce style de données dans Excel et construire une recherche pour le récupérer pour des paires d'emplacements est certainement possible dans Excel. Si cela fait appel, répondez et je pourrais trouver une fonction pour cela.
1
OP utilise des feuilles de calcul Google.
Jacob Jan Tuinstra
+1 en raison de la formule intéressante, mais je pense que son utilisation est probablement peu pratique.
Nick Bolton
-1

Google Developers propose un script très robuste pour les fonctions liées aux cartes dans Google Sheets que j'ai utilisé et que j'ai vraiment apprécié. Des instructions complètes sont également disponibles sur la page Web.

talker90
la source
1
Pourriez-vous résumer certains des points clés des "instructions complètes", s'il vous plaît? Les réponses doivent être autonomes et ne pas dépendre de sources externes (même si je me rends compte qu'il est moins probable qu'un site Google disparaisse). Merci!
jonsca
-2

Je ne connais pas suffisamment les API pour vous dire exactement comment procéder, mais je pense que ce serait possible en utilisant l' API Google Maps .

Google Maps, bien sûr, peut fournir des directions d'un point à un autre via son API. Ce serait compliqué, mais possible de router les emplacements à partir de la feuille de calcul via l'API et d'obtenir des itinéraires, ce qui vous donnerait une distance de conduite entre les villes.

Jared Harley
la source