Функция найти расстояние между городами


9

Я работаю с Документами Google и хочу создать электронную таблицу следующего вида:

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

В таблице Mileageавтоматически рассчитывается. Я ищу "пройденное расстояние", а не "как летит ворона".

Есть ли в Google Spreadsheets функция, которая может это сделать?


По мере увеличения расстояния разница между «пройденным расстоянием» и «вороньим полетом» будет соответственно уменьшаться. В любом случае они, вероятно, не будут отличаться более чем на несколько процентов.

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

1
@pnuts согласились, и я не собираюсь защищать свой 4-летний комментарий :)
Лэндон Кун,

Розарх, почему бы тебе не вернуться к веб-приложениям после 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
Похоже, что формула в примере документа больше не работает последовательно. Может ли кто-нибудь отредактировать его, чтобы оно работало? Я ничего не знаю о скриптах (больше, чем копирование и вставка), и я буду рад вашей помощи! Все, что я ищу, это расстояние между почтовыми индексами. Спасибо!
Мелисса

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 Видимо элегантное решение, однако 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 или расширение, чтобы сделать это.

Возможно, вы захотите проверить эту страницу Source Forge: http://zips.sourceforge.net/

  • Он предоставляет набор данных CSV для преобразования почтовых индексов в широту / долготу (предположительно, центральная точка)
  • Он предоставляет код Excel для вычисления расстояния между двумя координатами широты и долготы. (и включает эквивалентный код для 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, Streets & Trips (или MapPoint). Я не знаю, имеет ли какое-либо из этих приложений подходящий API.

... с другой стороны, если вы искали приблизительное и готовое приближение для довольно ограниченного числа городов, вы могли бы искать таблицы пройденного расстояния, которые довольно распространены в картах проезда и атласах. Репликация этого стиля данных в Excel и создание поиска для извлечения их для пар местоположений, безусловно, осуществимы в Excel. Если это будет интересно, ответьте, и я смогу разработать для него функцию.

1
ОП использует Google Spreadsheets.
Джейкоб Ян Туинстра

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


-1

Разработчики Google предлагают очень надежный скрипт для функций, связанных с картой в Google Sheets, который я использовал и которым я действительно наслаждался. Полные инструкции также на веб-странице.


1
Не могли бы вы обобщить некоторые ключевые моменты «полных инструкций», пожалуйста? Ответы должны быть самостоятельными и не зависеть от внешних источников (хотя я понимаю, что менее вероятно, что сайт Google исчезнет). Спасибо!
Йонска

-2

Я не достаточно знаком с API, чтобы точно сказать вам, как это сделать, но я думаю, что это было бы возможно с помощью API Карт Google .

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.