[GIS] Computing Shortest Distance using Google Map v3 and Openlayers

google mapsgoogle-maps-apiopenlayers-2routing

How to compute shortest route between two points in google map that user selects and provide all routes from source to destination in Transport system?

Best Answer

you can achieve this with Google Maps JavaScript API v3 - Directions Service. There is a doc here. and you can see stand-alone google example here.

and in this doc. you can get information about Travel Modes.

When you calculate directions, you need to specify which transportation mode to use. The following travel modes are currently supported:

TravelMode.DRIVING indicates standard driving directions using the road network.
TravelMode.WALKING requests walking directions via pedestrian paths & sidewalks 
(where available).
New! TravelMode.BICYCLING requests bicycling directions via bicycle paths & preferred
streets (currently only available in the US).

the Directions Service code:

var directionDisplay;
  var directionsService = new google.maps.DirectionsService();
  var map;

  function initialize() {
    directionsDisplay = new google.maps.DirectionsRenderer();
    var chicago = new google.maps.LatLng(41.850033, -87.6500523);
    var myOptions = {
      zoom:7,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: chicago
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    directionsDisplay.setMap(map);
  }

  function calcRoute() {
    var start = document.getElementById("start").value;
    var end = document.getElementById("end").value;
    var request = {
        origin:start, 
        destination:end,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    directionsService.route(request, function(response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        routePath = result.routes[0].overview_path;
        for(var a = 0; a< routePath.length; a++){
          // Your vector layer to render points with line
        }
        directionsDisplay.setDirections(response);
      }
    });
  }

The above code was taken from google api, i added some code there for you which you should have use used for your app.. main code for you is here:

directionsService.route(request, function(response, status) {
          if (status == google.maps.DirectionsStatus.OK) {
            routePath = result.routes[0].overview_path;
            for(var a = 0; a< routePath.length; a++){
              // Your vector layer to render points with line
            }
            directionsDisplay.setDirections(response);
          }
        });

i hope it helps you

Related Question