Функція пошуку відстані між містами


9

Я працюю з Google Документами і хочу створити електронну таблицю такої форми:

Точка А Пробіг Б в точці
Лос-Анджелес Маямі 292100
Пало Альто Сан-Франциско 90

У таблиці Mileageрозраховується автоматично. Я шукаю "пробіг на відстань", а не "як ворона летить".

Чи є в електронних таблицях Google функція, яка може це зробити?


Зі збільшенням відстані різниця між "дистанцією руху" та "рейсом ворони" зменшиться відповідно. У будь-якому випадку вони, ймовірно, не будуть відрізнятися більш ніж на кілька відсотків.

1
це здається досить сміливою претензією, ковбой. Ви кажете, що їхати з Портленда до Атланти - це приблизно такий же пробіг, як і політ? я не думаю, що так.
Ландон Кун

1
@pnuts погодився, і я не буду захищати свій 4-річний коментар :)
Ландон Кун

Rosarch, чому ви не переглянете веб-програми після 4 років відсутності і не перегляньте всі приємні відповіді, отримані на ваше запитання?
Яків Ян Туїнстра

Відповіді:


9

За допомогою наступного невеликого фрагмента коду ви можете отримати відстань між двома точками.

Код

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

Пояснив

API MAP, побудований на версії сценарію Google Apps, отримає перший напрямок ( маршрути [0] ) між початком та пунктом призначення . Повернене значення знімається з коми і аналізується як ціле число.

Знімок екрана

введіть тут опис зображення

Примітка

Повернута відстань може бути або в кілометрі, або в милях . Я також додав розрахунок для "як ворона літає" також (у милях).

Додайте скрипт у розділі Інструменти> Редактор сценаріїв у таблиці. Натисніть кнопку помилки в редакторі сценаріїв, і ви вже в дорозі !!

Приклад

Я створив для вас файл прикладу: пройдіть відстань

Список літератури


1
Схоже, формула в зразку doc вже не працює послідовно. Може хтось, будь ласка, відредагував його, щоб він працював? Я нічого не знаю про сценарії (більше, ніж копіювання та вклеювання), і я б дуже любив вашу допомогу! Я лише шукаю відстань між поштовими індексами. Дякую!
Меліса

3

У електронних таблицях Google:

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

де A2походження та B2місце призначення.

Ви повинні отримати ключ API від mapquest і замінити його на значення YOUR_KEY_HERE.


1
Як отримати ключ API?
Яків Ян Туінстра

1
@JacobJanTuinstra developer.mapquest.com
Neil McGuigan

Ніл, твій живий !! Дякуємо, що поділилися цим.
Яків Ян Туінстра

+1 Мабуть, елегантне рішення, проте MapQuest трохи паршивий. Я отримав цю помилку при спробі використовувати ключ, який мені дали: "Цей ключ не авторизований для цієї послуги. Якщо у вас немає ключа, ви можете отримати безкоштовний ключ, зареєструвавшись на сайті developer.mapquest.com ."
Нік Болтон

1

Ось що для мене працює:

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

Це призведе до пробігу відстані між <point.A>і <point.B>в метрах (звичайно, згідно з Google Maps).


Це чудово! Як щодо відстані мух?
Дастін Кіркланд

0

Я не думаю, що для цього є вбудована функція Excel або розширення.

Ви можете перевірити цю сторінку Forge Source: http://zips.sourceforge.net/

  • Він надає набір даних CSV для перетворення поштових індексів у Lat / Long (імовірно, центральна точка)
  • Він надає код Excel для обчислення відстані "ворон летить" між двома координатами lat / long. (і включає еквівалентний код для Java, PHP та Python.

Функція 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)))

На сторінці зазначається, що кути повинні бути в радіанах і що у Excel є ступінь функції перетворення радіан:

=RADIAN(degrees)

Якщо хтось не має відповіді химерніший, це повинно отримати вам те, що ви хочете, без зайвої роботи.


так, але як бути з пробігом на відстані замість "як ворона летить"?

1
Це набагато складніше і вимагає знання всіх проїжджих шляхів, як це робиться в Mapquest, Google Earth, Вулицях і Поїздках (або MapPoint). Я не знаю, чи має якийсь із цих додатків відповідний API.

... з іншого боку, якщо ви шукали грубе і готове наближення для досить обмеженої кількості міст, ви можете шукати таблиці проїзду, які досить поширені у картах та атласах водіння. Реплікація цього стилю даних в Excel та побудова пошуку для отримання його для пар локацій, безумовно, здійснені в Excel. Якщо це звернеться, дайте відповідь, і я можу розробити функцію для цього.

1
ОП використовує електронні таблиці Google.
Яків Ян Туінстра

+1 через цікаву формулу, проте я думаю, що використовувати це, мабуть, недоцільно.
Нік Болтон


-1

Google Developers пропонує дуже надійний скрипт для функцій, пов’язаних з картою в Google Таблицях, якими я користувався і дуже сподобався. Повні інструкції також є на веб-сторінці.


1
Не могли б ви підсумувати деякі ключові моменти "повних інструкцій", будь ласка? Відповіді мають бути окремими, а не залежати від зовнішніх джерел (хоча я розумію, що менше шансів, що сайт Google зникне). Дякую!
jonsca

-2

Я недостатньо знайомий з API, щоб точно сказати, як це зробити, але я думаю, що це можливо за допомогою API Google Maps .

Карти Google, звичайно, можуть надавати напрямки від однієї точки до іншої через їх API. Було б складно, але можливо маршрутизувати місця з електронної таблиці через API та отримувати вказівки щодо руху, що дасть вам відстань між містами.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.