使用路点时的最短路线
shortest route when using waypoints
我可以使用完美的路点。但我无法获得最短的方向。我尝试使用替代路线,但不起作用。我需要这样的东西:http://i58.tinypic.com/2vjbt6d.jpg
有办法吗?
我的代码
function codeAddress(adres) {
var address = adres;
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
}
});
}
function calcRoute() {
var grid = document.getElementById('GridView1');
var start = document.getElementById('DropDownList_ilce').value + "," + document.getElementById('DropDownList_il').value;
var end = document.getElementById('GridView1').rows[grid.rows.length - 1].cells[4].innerHTML + "," + document.getElementById('GridView1').rows[grid.rows.length - 1].cells[3].innerHTML;
var waypts = [];
for (var i = 0; i < grid.rows.length - 2; i++) {
waypts.push({
location: document.getElementById('GridView1').rows[i+1].cells[4].innerHTML + "," + document.getElementById('GridView1').rows[i+1].cells[3].innerHTML,
stopover: true
});
}
var request = {
origin: start,
destination: end,
waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
正如我在评论中所说的,API似乎没有给出默认返回最短路由的选项参数。
这里的关键是使用provideRouteAlternatives: true
作为DirectionsRequest属性:
var request = {
origin: 'cerkeş,çankırı',
destination: 'diyarbakır',
travelMode: google.maps.DirectionsTravelMode.DRIVING,
provideRouteAlternatives: true
};
对于给定的始发地和目的地,这将返回2条单独的路线。970公里和1137公里中的一个。
然后你必须计算哪条路线最短。你可以这样做:
directionsService.route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
var distance = null;
var routeIndex = 0;
// Loop through the routes to find the shortest one
for (var i=0; i<response['routes'].length; i++) {
var routeDistance = response['routes'][i].legs[0].distance.value;
if (distance === null) {
distance = routeDistance;
routeIndex = i;
}
if (routeDistance < distance) {
distance = routeDistance;
routeIndex = i;
}
}
directionsDisplay.setDirections(response);
// Set route index
directionsDisplay.setOptions({
routeIndex: routeIndex
});
}
});
请注意,当您有多个路由时,关键是设置要显示的路由的索引。
// Set route index
directionsDisplay.setOptions({
routeIndex: routeIndex
});
此示例不使用路点。我相信,如果你使用路点,你最终会得到多个DirectionsLeg
腿。在这种情况下,您将不得不进行更多的计算,将每条腿的距离相加,以找到总路线距离。
希望这能有所帮助!
相关文章:
- 用嵌套函数和默认函数定义函数
- 用程序搜索JQuery数据表中的文本
- ExtJS 5用程序点击actioncolumn gridview
- 如何更改<svg>标记为<img>用js标记
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 用Javascript更改我网站上的字体大小
- 用与线条相同的颜色填充多折线图上的点
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 三元对短路
- 用空格替换下划线PHP
- 用我的json数据填充JQuery DataTable
- 用chart.js绘制条形图
- 用玉石编写书法和手写笔
- 用Javascript修改内部标记的CSS规则
- 为什么$.brower被弃用?还有什么更好的替代方案
- 可以用'吗/'在相对路径中
- 每天用javascript包含不同的php文件
- javascript函数内部的代码用逗号而不是分号分隔
- 用传单路由机在两个标记之间找到路
- JavaScript/HTML5 Canvas寻路复用问题