默认情况下,我们如何从 Google Direction API 建议的替代路线中获得从 A 点到 B 点的最短距离路线?默认情况下,它会根据当前的交通状况为我们提供最短持续时间的路线。我注意到如果您打开“provideRouteAlternatives = true”,谷歌会响应多个替代路线,我想知道我们是否可以向 Google API 发送一个参数,以便默认情况下它总是返回最短距离路线
3 回答
正如 Rameshwor 所提到的,谷歌返回的建议路线可能会针对行程时间而不是行程距离进行优化。如果指定了一个或多个航路点,那么无论如何只能返回一条路线,但最好以编程方式假设始终返回多条路线。
下面的例子展示了一个简单的方法,使用 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”值以访问响应对象中的正确路由。
默认情况下,Google 会根据当前的交通状况为我们提供持续时间最短的路线。我注意到,如果您打开“provideRouteAlternatives=true”,谷歌会响应多个替代路线。当您不要求备用路线时,默认情况下您会获得最优化的路线,尽管这不一定针对距离进行优化。如果您试图获得最短的路线,那么执行此操作的方法是让您的应用程序评估响应中每条路线的总距离,并以编程方式选择距离最短的路线。在请求中没有可以传递给 Google 的查询参数来表示“仅返回最短路径”。
检查此演示http://webavenue.com.au/demo/google-shortest-distance/route.html
在实践中,使用最短路线而不是最快路线通常不是一个好主意。
当最短的路线不是最快的时候,就时间、燃油效率,有时甚至是人身安全而言,它很可能是一条质量较低的路线。这些因素对大多数在路上的司机来说更为重要。
有一些解决方法可能会产生更短的路线,但它们有很大的缺点,所以我建议不要使用它们:
请求双向路由。由于单向街道、转弯限制和高速公路出口位置不同等情况,从 A 到 B 的方向可能无法得出从 B 到 A 的可行路线。在两个方向上请求路线并采用最短路线可能会产生一条在一个方向上不可用的路线。
请求替代路线。询问替代路线并选择最短路线可以产生比默认返回的路线更短的路线。但是,替代路线通常不稳定(可能会随着短期路况的变化而变化),也不能保证包括最短的路线。这意味着最短路径可能仍然不可用,而且这种方法找到的最短路径可能会随着时间的推移而改变,给人一种不稳定的印象。
我经常看到对最短路线的请求来自于目标是在一天和一周的特定时间相当现实的驾驶距离的用例,例如上班/下班的工人。在这些情况下,可以通过departure_time
设置为一周内(未来,而不是过去)内一天中的相关时间(和一周中的某天)来请求行车路线,以获得受当时典型交通状况影响的路线一天和一周。
注意:这仅在请求包含 API 密钥或 Google Maps API 高级计划客户端 ID 时可用。