Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Drawing multiple route Google Map

I would like to draw multiple routes based on the directions service in Google, the code goes below

p/s:Data is a list I obtained from my json call

for (i = 0; i < 20; i++) {
route = data[i];

start = new google.maps.LatLng(route.from_lat,route.from_lng);
end = new google.maps.LatLng(route.to_lat,route.to_lng);

var request = {
origin:start,
destination:end,
travelMode: google.maps.TravelMode.DRIVING
};

var rendererOptions = {
preserveViewport: true,         
suppressMarkers:true,
routeIndex:i
};


directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);                
directionsDisplay.setMap(map);

var directionsService = new google.maps.DirectionsService();
directionsService.route(request, function(result, status) {
    console.log(result);

if (status == google.maps.DirectionsStatus.OK) {
    directionsDisplay.setDirections(result);
}});

I can't seems to find much relevant information from forums, is my best bet to obtain all the individual traffic information and draw again using polyline? And also, how do I make sure the loop carries on only when my directionDisplay.setDirections is done?

Regards, Andy

like image 979
drhanlau Avatar asked May 18 '11 06:05

drhanlau


People also ask

Can you have multiple routes on Google Maps?

Alternate routes appear as gray lines on the map. Tap one of the gray lines to get directions. You can further customize your route on Google Maps by tapping and dragging along the blue line.


1 Answers

You need separate google.maps.DirectionsRenderer object for each route. Something like that:

var routes = [{origin: ..., destination: ...}, {origin: ..., destination: ...}, {origin: ..., destination: ...}];
var rendererOptions = {
    preserveViewport: true,         
    suppressMarkers:true,
    routeIndex:i
};
var directionsService = new google.maps.DirectionsService();

routes.each(function(route){
    var request = {
        origin: route.origin,
        destination: route.destination,
        travelMode: google.maps.TravelMode.DRIVING
    };

    var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
    directionsDisplay.setMap(map);

    directionsService.route(request, function(result, status) {
        console.log(result);

        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(result);
        }
    });
});

I'm using prototype.js, so your method of array walking may differ.

like image 100
dmmd Avatar answered Oct 13 '22 02:10

dmmd