Funkcja znajdowania odległości między miastami

9

Pracuję z Dokumentami Google i chcę utworzyć arkusz kalkulacyjny w następującym formularzu:

Punkt A Punkt B Przebieg
Los Angeles Miami 292100
Palo Alto San Francisco 90

W arkuszu kalkulacyjnym Mileagejest obliczany automatycznie. Szukam „przejechanego dystansu”, a nie „w linii prostej”.

Czy w arkuszach kalkulacyjnych Google jest dostępna funkcja, która może to zrobić?

Nick Heiner
źródło
Wraz ze wzrostem odległości różnica między „odległością do pokonania” a „lotem wrony” odpowiednio się zmniejszy. W każdym razie prawdopodobnie nie będą się różnić o więcej niż kilka procent.
1
wydaje się to dość śmiałym stwierdzeniem, kowboju. czy mówisz, że jazda z Portland do Atlanty to mniej więcej taki sam przebieg jak latanie? nie sądzę.
Landon Kuhn
1
@pnuts zgodził się i nie będę bronił mojego 4-letniego komentarza :)
Landon Kuhn
Rosarch, dlaczego nie powrócisz do aplikacji internetowych po 4 latach nieobecności i nie przejrzysz wszystkich dobrych odpowiedzi na twoje pytanie?
Jacob Jan Tuinstra

Odpowiedzi:

9

Za pomocą następującego małego fragmentu kodu możesz odczytać odległość między dwoma punktami.

Kod

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

Wyjaśnione

Interfejs API MAP, oparty na skrypcie Google Apps, otrzyma pierwszy kierunek ( trasy [0] ) między miejscem początkowym i docelowym . Zwrócona wartość jest usuwana z przecinków i analizowana jako liczba całkowita.

Zrzut ekranu

wprowadź opis zdjęcia tutaj

Uwaga

Zwrócona odległość może być wyrażona w kilometrach lub milach . Dodałem również obliczenia dla „w linii prostej” (w milach).

Dodaj skrypt w Narzędzia> Edytor skryptów w arkuszu kalkulacyjnym. Naciśnij przycisk błędu w edytorze skryptów i jesteś w podróży !!

Przykład

Stworzyłem dla Ciebie przykładowy plik: uzyskaj odległość do jazdy samochodem

Bibliografia

Jacob Jan Tuinstra
źródło
1
Wygląda na to, że formuła w przykładowym dokumencie nie działa już konsekwentnie. Czy ktoś mógłby go edytować, aby działał? Nic nie wiem o skryptach (więcej niż kopiowanie i wklejanie) i bardzo chciałbym, abyś pomógł! Szukam tylko odległości między kodami pocztowymi. Dziękuję Ci!
Melissa
3

W arkuszach kalkulacyjnych Google:

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

gdzie A2jest pochodzenie i B2miejsce docelowe.

Musisz zdobyć klucz API z mapquest i zastąpić go wartością YOUR_KEY_HERE.

Neil McGuigan
źródło
1
Jak zdobyć klucz API?
Jacob Jan Tuinstra
1
@JacobJanTuinstra developer.mapquest.com
Neil McGuigan
Neil, twój żyje !! Dzięki za udostępnienie tego.
Jacob Jan Tuinstra
+1 Pozornie eleganckie rozwiązanie, jednak MapQuest jest trochę kiepski. Wystąpił błąd podczas próby użycia klucza, który otrzymałem: „Ten klucz nie jest autoryzowany dla tej usługi. Jeśli nie masz klucza, możesz uzyskać bezpłatny klucz, rejestrując się na stronie developer.mapquest.com ”.
Nick Bolton
1

Oto, co działa dla mnie:

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

W ten sposób otrzymano odcinek drogi pomiędzy <point.A>i <point.B>w metrach (według Mapach, oczywiście).

Waldir Leoncio
źródło
To jest świetne! Co powiesz na odległość w linii prostej?
Dustin Kirkland
0

Nie sądzę, aby do tego służyła funkcja Excel lub rozszerzenie.

Możesz sprawdzić tę stronę Source Forge: http://zips.sourceforge.net/

  • Udostępnia zestaw danych CSV do konwersji kodów pocztowych na długość / długość (przypuszczalnie punkt środkowy)
  • Udostępnia kod Excela do obliczania odległości „wrony” między dwiema współrzędnymi szerokości / długości. (i zawiera równoważny kod dla Java, PHP i Python.

Funkcja Excel to

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

Strona zauważa, że ​​kąty muszą być w radianach i że Excel ma funkcję konwersji stopni do radianów:

=RADIAN(degrees)

O ile ktoś inny nie udzieli szybszej odpowiedzi, powinno to zapewnić Ci to, czego chcesz, bez zbytniej pracy.

Jacob Jan Tuinstra
źródło
tak, ale co z przejechaną odległością zamiast „w linii prostej”?
1
Jest to znacznie trudniejsze i wymagałoby znajomości wszystkich dróg, tak jak w Mapquest, Google Earth, Streets & Trips (lub MapPoint). Nie wiem, czy którakolwiek z tych aplikacji ma odpowiedni interfejs API.
... z drugiej strony, jeśli szukasz przybliżonego i gotowego przybliżenia dla dość ograniczonej liczby miast, możesz poszukać tabel odległości dojazdu, które są dość powszechne w mapach jazdy i atlasach. Replikacja tego stylu danych w programie Excel i utworzenie wyszukiwania w celu pobrania ich dla par lokalizacji jest z pewnością możliwe w programie Excel. Jeśli to się odwoła, odpowiedz i ja opracuję dla niego funkcję.
1
OP korzysta z Arkuszy Google.
Jacob Jan Tuinstra
+1 ze względu na interesującą formułę, jednak myślę, że użycie tego jest prawdopodobnie niepraktyczne.
Nick Bolton,
-1

Google Developers oferuje bardzo solidny skrypt dla funkcji związanych z mapami w Arkuszach Google, z których korzystałem i które bardzo mi się podobały. Pełne instrukcje znajdują się również na stronie internetowej.

talker90
źródło
1
Czy mógłbyś streścić niektóre kluczowe punkty „pełnych instrukcji”? Odpowiedzi powinny być samodzielne i nie zależeć od źródeł zewnętrznych (choć zdaję sobie sprawę, że istnieje mniejsze prawdopodobieństwo, że witryna Google zniknie). Dzięki!
jonsca
-2

Nie znam wystarczająco interfejsów API, aby powiedzieć ci dokładnie, jak to zrobić, ale sądzę, że byłoby to możliwe przy użyciu interfejsu API Map Google .

Mapy Google mogą oczywiście przekazywać wskazówki z jednego punktu do drugiego za pośrednictwem interfejsu API. Byłoby to skomplikowane, ale możliwe byłoby kierowanie lokalizacjami z arkusza kalkulacyjnego przez interfejs API i uzyskiwanie wskazówek dojazdu, które dawałyby ci odległość między miastami.

Jared Harley
źródło