我已经在浏览器/JavaScript中使用Google Maps V3方向API实现了从起点到终点的路线查询。现在,我想在路线部分仅显示如下快照中所示的交通情况(来自Google Maps)。
这是我的输出快照: 我希望这可以帮助你理解我的问题。如果需要其他信息,请告诉我。
是否有一种方法可以针对不同的交通状况级别使用不同的折线颜色?
如果无法使用方向 API 或交通图层,我是否可以利用定向矩阵或道路 API 的高级版本来实现这一点?
以下是我目前为止所做的以及相应的输出:
var map;
var directionsService;
var polyline;
var directionsDisplay;
function initMap() {
directionsDisplay = new google.maps.DirectionsRenderer({
polylineOptions:{
strokeOpacity:1,
strokeWeight:5,
strokeColor: 'green'
},
draggable: true
});
directionsService = new google.maps.DirectionsService;
map = new google.maps.Map(document.getElementById('map'), {
zoom: 14,
center: {lat: 37.77, lng: -122.447}
});
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById('directionsPanel'));
directionsDisplay.addListener('directions_changed', function() {
DistanceOut(directionsDisplay.getDirections());
});
polyline = new google.maps.Polyline({
map:map
});
calculateAndDisplayRoute(directionsService, directionsDisplay);
}
function calculateAndDisplayRoute(directionsService, directionsDisplay) {
directionsService.route({
origin: 'Whitefield, Bangalore',
destination: 'Indira nagar, Bangalore',
provideRouteAlternatives: true,
travelMode: 'DRIVING',
drivingOptions: {
departureTime: new Date(Date.now()),
trafficModel: 'bestguess'
},
unitSystem: google.maps.UnitSystem.METRIC
}, function(response, status) { console.log(response);
if (status == 'OK') {
directionsDisplay.setDirections(response);
DistanceOut(response);
changeStepColor(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
function DistanceOut(response){
document.getElementById("travelDetail").innerHTML = "Distance:"+response.routes[0].legs[0].distance.text+
"<br> Duration::"+response.routes[0].legs[0].duration.text+
"<br> Duration in traffic::"+response.routes[0].legs[0].duration_in_traffic.text;
}
// Here I want to change the polyline color according to the traffic condition.
// Can I? Or if any other way to do so?!
function changeStepColor(res){
var steps = res.routes[0].legs[0].steps;
for(i=0; i<steps.length; i++){
if((steps[i].distance.value/steps[i].duration_in_traffic.value) > 5) {
//steps[i].polyline.strokeColor='blue';
//directionsDisplay.setOptions({polylineOptions: {path: steps[i].path ,strokeColor: 'red'}});
} else {
//directionsDisplay.setOptions({polylineOptions: {path: steps[i].path ,strokeColor: 'yellow'}});
//steps[i].polyline.strokeColor='red'
}
}
}
这是我的输出快照: 我希望这可以帮助你理解我的问题。如果需要其他信息,请告诉我。