Funzione per trovare la distanza tra le città


9

Sto lavorando con Google Documenti e voglio creare un foglio di calcolo con il seguente modulo:

Punto A Punto B Chilometraggio
Los Angeles Miami 292100
Palo Alto San Francisco 90

Nel foglio di calcolo, Mileageviene calcolato automaticamente. Sto cercando "distanza percorsa", non "in linea d'aria".

Esiste una funzione in Google Spreadsheets che può fare questo?


All'aumentare della distanza, la differenza tra "distanza di guida" e "volo di corvo" diminuirà di conseguenza. In ogni caso probabilmente non differiranno di oltre il qualche percento.

1
sembra un'affermazione piuttosto audace, cowboy. stai dicendo che guidare da Portland ad Atlanta è all'incirca lo stesso chilometraggio del volo? io non la penso così.
Landon Kuhn,

1
@pnuts ha accettato, e non difenderò il mio commento di 4 anni :)
Landon Kuhn

Rosarch, perché non rivisiti le applicazioni Web dopo 4 anni di assenza e rivedi tutte le belle risposte che hai ricevuto sulla tua domanda?
Jacob Jan Tuinstra,

Risposte:


9

Con il seguente piccolo pezzo di codice, è possibile recuperare la distanza tra due punti.

Codice

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

spiegato

L'API MAPs, basata sullo script di Google Apps, otterrà la prima direzione ( rotte [0] ) tra l' origine e la destinazione . Il valore restituito viene rimosso dalla virgola e analizzato come intero.

Immagine dello schermo

inserisci qui la descrizione dell'immagine

Nota

La distanza restituita può essere in chilometri o miglia . Ho aggiunto anche il calcolo per "in linea d'aria" (in miglia).

Aggiungi lo script in Strumenti> Editor di script nel foglio di calcolo. Premi il pulsante bug nell'editor di script e sei in viaggio !!

Esempio

Ho creato un file di esempio per te: ottieni la distanza di guida

Riferimenti


1
Sembra che la formula nel documento di esempio non funzioni più in modo coerente. Qualcuno potrebbe modificarlo per farlo funzionare? Non so nulla di scripting (più di copiare e incollare) e mi piacerebbe il tuo aiuto! Tutto quello che cerco è la distanza di guida tra i codici postali. Grazie!
Melissa,

3

Nei fogli di lavoro Google:

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

dove A2è l'origine ed B2è la destinazione.

Devi ottenere una chiave API da mapquest e sostituirne il valore YOUR_KEY_HERE.


1
Come si ottiene la chiave API?
Jacob Jan Tuinstra,

1
@JacobJanTuinstra developer.mapquest.com
Neil McGuigan

Neil, sei vivo !! Grazie per averlo condiviso.
Jacob Jan Tuinstra,

+1 Soluzione apparentemente elegante, tuttavia MapQuest è un po 'schifoso. Ho riscontrato questo errore durante il tentativo di utilizzare la chiave che mi è stata fornita: "Questa chiave non è autorizzata per questo servizio. Se non si dispone di una chiave, è possibile ottenere una chiave gratuita registrandosi su developer.mapquest.com ."
Nick Bolton,

1

Questo è ciò che funziona per me:

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

Ciò produrrà la distanza percorsa tra <point.A>e <point.B>in metri (secondo Google Maps, ovviamente).


Questo è fantastico! Che ne dici della distanza in linea d'aria?
Dustin Kirkland,

0

Non penso che ci sia costruito nella funzione Excel, o estensione, per fare questo.

Potresti voler dare un'occhiata a questa pagina di Source Forge: http://zips.sourceforge.net/

  • Fornisce un set di dati CSV per convertire i codici postali in Lat / Long (presumibilmente punto centrale)
  • Fornisce il codice Excel per calcolare la distanza "mosche" tra due coordinate lat / long. (e include codice equivalente per Java, PHP e Python.

La funzione 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)))

La pagina osserva che gli angoli devono essere in radianti e che Excel ha una funzione di conversione da gradi a radianti:

=RADIAN(degrees)

A meno che qualcun altro non abbia una risposta più semplice, questo dovrebbe offrirti quello che vuoi senza troppo lavoro.


sì, ma per quanto riguarda la distanza percorsa anziché "in linea d'aria"?

1
Ciò è molto più difficile e richiederebbe la conoscenza di tutte le strade, come avviene in Mapquest, Google Earth, Streets & Trips (o MapPoint). Non so se nessuna di queste app abbia un'API adatta.

... d'altra parte, se stavi cercando un'approssimazione approssimativa e pronta per un numero abbastanza limitato di città, potresti cercare le tabelle delle distanze di guida che sono abbastanza comuni nella guida di mappe e atlanti. La replica di quello stile di dati in Excel e la costruzione di una ricerca per recuperarli per coppie di posizioni è certamente fattibile in Excel. Se questo fa appello, rispondi e io potrei elaborare una funzione per esso.

1
OP utilizza i fogli di calcolo di Google.
Jacob Jan Tuinstra,

+1 a causa della formula interessante, tuttavia penso che l'utilizzo di questo sia probabilmente poco pratico.
Nick Bolton,


-1

Google Developers offre uno script molto robusto per le funzioni relative alle mappe in Fogli Google che ho usato e che mi è davvero piaciuto. Le istruzioni complete si trovano anche sulla pagina web.


1
Potresti riassumere alcuni dei punti chiave delle "istruzioni complete", per favore? Le risposte dovrebbero essere indipendenti e non dipendere da fonti esterne (anche se mi rendo conto che è meno probabile che un sito di Google scompaia). Grazie!
jonsca

-2

Non ho abbastanza familiarità con le API per dirti esattamente come farlo, ma penso che sarebbe possibile utilizzare l' API di Google Maps .

Google Maps, ovviamente, può fornire indicazioni da un punto all'altro attraverso la loro API. Sarebbe complicato, ma possibile instradare le posizioni dal foglio di calcolo attraverso l'API e ottenere indicazioni stradali, che ti darebbero una distanza di guida tra le città.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.