查找城市之间距离的功能


9

我正在使用Google文档,并希望创建以下形式的电子表格:

A点B点里程
洛杉矶迈阿密292100
帕洛阿尔托旧金山90

在电子表格中,Mileage是自动计算的。我正在寻找“距离驱动”,而不是“乌鸦飞翔”。

Google Spreadsheets中有可以执行此操作的功能吗?


随着距离的增加,“行车距离”和“乌鸦飞行”之间的差异将相应减小。无论如何,它们之间的差异可能不会超过几个百分点。

1
牛仔,这似乎是一个非常大胆的主张。您是说从波特兰到亚特兰大的飞行里程与飞行大致相同吗?我不这么认为。
Landon Kuhn

1
@pnuts同意,我不会为我4岁的评论辩护:)
Landon Kuhn

Rosarch,为什么在缺席4年后不重新访问Web应用程序并查看所有关于问题的很好答案?
Jacob Jan Tuinstra 2015年

Answers:


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

讲解

建立在Google Apps脚本之上的MAPs API将获得起点终点之间的第一个方向(route [0])。返回的值从逗号中去除,并解析为整数。

屏幕截图

在此处输入图片说明

注意

返回的距离可以以公里英里为单位。我还添加了“乌鸦飞翔”的计算(以英里为单位)。

在电子表格的“ 工具”>“脚本编辑器”下添加脚本。按下脚本编辑器中的错误按钮,即可随时使用!

我为您创建了一个示例文件:获取行驶距离

参考文献


1
似乎示例文档中的公式不再保持一致。有人可以对其进行编辑以使其起作用吗?我对脚本一无所知(除了复制和粘贴外),我将很乐意为您提供帮助!我要寻找的只是邮政编码之间的行驶距离。谢谢!
梅利莎(Melissa)

3

在Google电子表格中:

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

出发A2地和B2目的地在哪里。

您必须从mapquest获取一个API密钥,然后YOUR_KEY_HERE用它替换值。


1
您如何获得API密钥?
雅各布·扬·图因斯特拉

1
@JacobJanTuinstra developer.mapquest.com
Neil McGuigan

尼尔,你还活着!感谢您的分享。
Jacob Jan Tuinstra

+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>(根据谷歌地图,当然)以米为单位。


这很棒!苍蝇的距离如何?
Dustin Kirkland

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
OP使用Google Spreadsheets。
Jacob Jan Tuinstra

+1是因为有趣的公式,但是我认为使用此公式可能不切实际。
尼克·博尔顿


-1

Google Developers 我使用过并且非常喜欢的Google表格中的地图相关功能提供了非常强大的脚本。网页上也有完整的说明。


1
您能否总结一下“完整说明”的一些关键点?答案应该独立存在,而不要依赖外部来源(尽管我知道Google网站消失的可能性较小)。谢谢!
jonsca

-2

我对这些API不够熟悉,无法确切地告诉您如何执行此操作,但是我认为使用Google Maps API是可能的。

当然,Google Maps可以通过其API提供从一点到另一点的路线。这可能很复杂,但可以通过API通过电子表格路由位置并获取行车路线,这将为您提供城市之间的行车距离。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.