默认情况下,我们如何从 Google Direction API 获得从 A 点到 B 点的最短距离路线

Posted

技术标签:

【中文标题】默认情况下,我们如何从 Google Direction API 获得从 A 点到 B 点的最短距离路线【英文标题】:How do we get the shortest distance route from point A to B by default from Google Direction API 【发布时间】:2013-01-13 16:41:32 【问题描述】:

默认情况下,我们如何从 Google Direction API 建议的替代路线中获得从 A 点到 B 点的最短距离路线?默认情况下,它会根据当前的交通状况为我们提供最短持续时间的路线。我注意到如果您打开“provideRouteAlternatives=true”,谷歌会响应多个替代路线,我想知道我们是否可以向 Google API 发送一个参数,以便它始终默认返回最短距离路线

【问题讨论】:

【参考方案1】:

正如 Rameshwor 所提到的,Google 返回的建议路线可能会针对行程时间而不是行程距离进行优化。如果指定了一个或多个航路点,那么无论如何只能返回一条路线,但最好通过编程假设始终返回多条路线。

下面的例子展示了一个简单的方法,使用 jQuery 找到最短路程的路线;请注意,这段代码没有经过优化,但应该可以工作:

var route_options = [];

for (var i = 0; i < response.routes.length; i++)

    var route = response.routes[i];
    var distance = 0;

    // Total the legs to find the overall journey distance for each route option
    for (var j = 0; j < route.legs.length; j++)
    
        distance += route.legs[j].distance.value; // metres
    

    route_options.push(
        'route_id': i,
        'distance': distance
    );


/*
route_options = [
    route_id:0, distance:35125,
    route_id:1, distance:22918,
    route_id:2, distance:20561
];
*/

// Sort the route options; shortest to longest distance in ascending order
route_options.sort(function(a, b) 
    return parseInt(a.distance) - parseInt(b.distance);
);

/*
route_options = [
    route_id:2, distance:20561,
    route_id:1, distance:22918,
    route_id:0, distance:35125
];
*/    

var shortest_distance = (route_options[0]['distance'] * 0.001); // convert metres to kilometres

然后您可以访问“route_id”值以访问响应对象中的正确路由。

【讨论】:

【参考方案2】:

默认情况下,Google 会根据当前的交通状况为我们提供持续时间最短的路线。我注意到,如果您打开“provideRouteAlternatives=true”,谷歌会响应多个替代路线。当您不要求备用路线时,默认情况下您会获得最优化的路线,尽管这不一定针对距离进行优化。 如果您试图获得最短的路线,那么这样做的方法是让您的应用程序评估响应中每条路线的总距离,并以编程方式选择距离最短的路线。在请求中没有可以传递给 Google 的查询参数来表示“仅返回最短路线”。

查看此演示http://webavenue.com.au/demo/google-shortest-distance/route.html

【讨论】:

该演示不再可用【参考方案3】:

在实践中使用最短路线而不是最快路线通常不是一个好主意。

当最短路线不是最快时,就时间、燃油效率甚至人身安全而言,它很可能是一条质量较低的路线。这些因素对大多数在路上行驶的司机来说更为重要。

有一些变通办法可能会产生更短的路线,但它们有很大的缺点,所以我不建议这样做:

    请求双向路由。 由于单向街道、转弯限制和高速公路出口位置不同等情况,从 A 到 B 的方向可能无法得出从 B 到 A 的可行路线。请求双向路线并采用最短路线可能会产生一条无法单向使用的路线。

    请求替代路线。 询问替代路线并选择最短的路线可以产生比默认返回的路线更短的路线。但是,替代路线通常不稳定(可能会随着短期路况的变化而变化),也不能保证包括最短的路线。这意味着最短路径可能仍然不可用,而且这种方法找到的最短路径可能会随着时间的推移而变化,给人一种不稳定的印象。

我经常看到对最短路线的请求来自于目标是在一天和一周的特定时间相当现实的驾驶距离的用例,例如上下班的工人。在这些情况下,可以通过将departure_time 设置为一周内(未来,而不是过去)内一天(和一周中的某一天)的相关时间来请求行车路线,以获得受当时典型交通状况影响的路线一天和一周的时间。

注意:这仅在请求包含 API 密钥或 Google Maps APIs Premium Plan 客户端 ID 时可用。

【讨论】:

为什么要花这么多时间来解释最快的路线是更好的路线,而问题明确要求获得最短路线的方法?最快的路线更安全的论点根本不成立,除非你在纽约市或某个非常知名的地方。我经常看到最快的路线带我穿过非常危险的区域!然而,Waze 确实有一个默认情况下请求最短路线的选项。它现在也是 Google 产品,因此可以使用它来获得具有相同地图的最短路线。 同意,有很多正当理由要求最短路线,而不是最快路线,例如,如果您以其他方式旅行(步行、骑自行车等,您会更喜欢最短路线) ,但即使你是开车,如果你按英里付费,你可能更喜欢最短的路线。 对于许多商业应用(特别是在有特定法律要求的情况下),可能必须计算最短路径以用于定价。

以上是关于默认情况下,我们如何从 Google Direction API 获得从 A 点到 B 点的最短距离路线的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 MAC 地址的情况下使用 WiFi Direct p2p_connect 到设备? (树莓派和安卓)

如何在没有 SAME ORIGIN POLICY 的情况下将 Google 结果放入我们的网页

如何将Google Analytics会话与应用会话统一?

如何在 Nuxt/Vuetify 中从头部删除 Google 字体 Roboto?

Ubuntu下安装Google浏览器

如何在没有一年的情况下检索从 Google 通讯录同步的联系人事件?