Javascript required
Skip to content Skip to sidebar Skip to footer

Google Maps Drawing Distance Code

  • Updated date Apr 13, 2020
  • 512.6k
  • 24

In this article you will learn how to draw and work with routes on the fly using the Google Maps API V3.

Introduction

This article will help you to solve the following problems:

  1. How to draw a route on the fly.
  2. How to delete a location from a route on the fly.
  3. How to swap the routes on Google Maps using an HTML table.
  4. How to calculate route distance and time with respect to speed.

I have used waypoints to draw the routes. Please note that you can use a maximum of 10 locations at a time. In this article, I have made all necessary JavaScript code comments in the "googlemap.js" JavaScript file. So I am not explaining the JavaScript code. Please download the attachment for more details about code.

Procedure

Use the following procedure to draw a route on the fly:

  1. Run the project.
  2. Double-click on the start location on the Google map.

    MapAVI1.jpg

    Here I have chosen Mumbai as the starting location.
  3. You can choose the second location by double-clicking on another location on the map or drag the "B" icon to the second location.

    MapAVI2.jpg

    Here I have chosen Pune as my second location.
  4. You can choose another location by double-clicking on the map.

    MapAVI3.jpg

    Here I have chosen Hyderabad as my third location.
  5. Notice that when you click on the map, the table will automatically generate the latitude, longitude, distance and time.
  6. Toe calculate the time, you need to enter the speed in the TextBox.

Code

1. Initialize the map on page load

  1. var  directionsService = new  google.maps.DirectionsService();
  2. var  _mapPoints = new  Array();
  3. var  _directionsRenderer = '' ;
  4. function  InitializeMap() {
  5.     _directionsRenderer =new  google.maps.DirectionsRenderer();
  6. var  myOptions = {
  7.         zoom: 6,
  8.         center:new  google.maps.LatLng(21.7679, 78.8718),
  9.         mapTypeId: google.maps.MapTypeId.ROADMAP
  10.     };
  11. var  map = new  google.maps.Map(document.getElementById( "dvMap" ), myOptions);
  12.     _directionsRenderer.setMap(map);
  13.     _directionsRenderer.setOptions({
  14.         draggable:true
  15.     });
  16.     google.maps.event.addListener(map,"dblclick" , function  (event) {
  17. if  ($( "#txtAvgSpeed" ).val() == '' ) {
  18.             alert("Please enter the Average Speed (km/hr)." );
  19.             $("#txtAvgSpeed" ).focus();
  20. return false ;
  21.         }
  22. var  _currentPoints = event.latLng;
  23.         _mapPoints.push(_currentPoints);
  24.         getRoutePointsAndWaypoints();
  25.     });
  26.     google.maps.event.addListener(_directionsRenderer,'directions_changed' , function  () {
  27.         computeTotalDistanceforRoute(_directionsRenderer.directions);
  28.     });
  29. }

2. Get the route points and waypoints

  1. function  getRoutePointsAndWaypoints() {
  2. var  _waypoints = new  Array();
  3. if  (_mapPoints.length > 2)
  4.     {
  5. for  ( var  j = 1; j < _mapPoints.length - 1; j++) {
  6. var  address = _mapPoints[j];
  7. if  (address !== "" ) {
  8.                 _waypoints.push({
  9.                     location: address,
  10.                     stopover:true
  11.                 });
  12.             }
  13.         }
  14.         drawRoute(_mapPoints[0], _mapPoints[_mapPoints.length - 1], _waypoints);
  15.     }else if  (_mapPoints.length > 1) {
  16.         drawRoute(_mapPoints[_mapPoints.length - 2], _mapPoints[_mapPoints.length - 1], _waypoints);
  17.     }else  {
  18.         drawRoute(_mapPoints[_mapPoints.length - 1], _mapPoints[_mapPoints.length - 1], _waypoints);
  19.     }
  20. }

3. Draw the route

The following function is used to draw the route.

  1. function  drawRoute(originAddress, destinationAddress, _waypoints) {
  2. var  _request = '' ;
  3. if  (_waypoints.length > 0) {
  4.             _request = {
  5.                 origin: originAddress,
  6.                 destination: destinationAddress,
  7.                 waypoints: _waypoints,
  8.                 optimizeWaypoints:true ,
  9.                 travelMode: google.maps.DirectionsTravelMode.DRIVING
  10.             };
  11.         }else  {
  12.             _request = {
  13.                 origin: originAddress,
  14.                 destination: destinationAddress,
  15.                 travelMode: google.maps.DirectionsTravelMode.DRIVING
  16.             };
  17.         }
  18.         directionsService.route(_request,function  (_response, _status) {
  19. if  (_status == google.maps.DirectionsStatus.OK) {
  20.                 _directionsRenderer.setDirections(_response);
  21.             }
  22.         });
  23.     }

How to delete a location from the route on the fly

  1. If I want to delete the Pune location form the example above then I click on the "X" image button to delete the location.

    MapAVI4.jpg

  2. When you click on the "Ok" button, the "Pune" or "B" location will be deleted.

    MapAVI5.jpg

Code

1. The following is the code to delete the required location:

  1. function  deleteLocation(trid) {
  2. if  (confirm( "Are you sure want to delete this location?" ) == true ) {
  3. var  _temPoint = new  Array();
  4. for  ( var  w = 0; w < _mapPoints.length; w++) {
  5. if  (trid != w + 1) {
  6.                     _temPoint.push(_mapPoints[w]);
  7.                 }
  8.             }
  9.             _mapPoints =new  Array();
  10. for  ( var  y = 0; y < _temPoint.length; y++) {
  11.                 _mapPoints.push(_temPoint[y]);
  12.             }
  13.             getRoutePointsAndWaypoints();
  14.         }else  {
  15. return false ;
  16.         }
  17.     }

2. I have called the deleteLocation() method on image click on click event.

  1. htmlhtml = html + "<td style=\"width: 60px;\"><img alt=\"DeleteLocation\" src=\"Images/Delete.jpg\" onclick=\"return deleteLocation("  + _htmlTrCount + ");\" /></td>" ;

How to swap the routes on Google map using HTML table

1. In the example above, I have created three locations, they are Mumbai, Pune, and Hyderabad.

MapAVI6.jpg

2. Now I want to swap the locations, in other words, my start locations will be Hyderabad, then Pune, then Mumbai.

3. Put the mouse on the third row of the table or the "Location Name: C" table row and then drag and drop to the first row, in other words the first row or "Location Name: A".

MapAVI7.jpg

4. So my start location is "A", in other words, Hyderabad. Now the second location will be Pune. Right now it is showing Mumbai. Do the same for Mumbai.

MapAVI8.jpg

Code

1. The following code will help you to move the locations from the HTML table:

  1. function  draganddrophtmltablerows() {
  2. var  _tempPoints = new  Array();
  3.         $("#HtmlTable" ).tableDnD();
  4.         $("#HtmlTable" ).tableDnD({
  5.             onDrop:function  (table, row) {
  6. var  rows = table.tBodies[0].rows;
  7. for  ( var  q = 0; q < rows.length; q++) {
  8.                     _tempPoints.push(_mapPoints[rows[q].id - 1]);
  9.                 }
  10.                 _mapPoints =new  Array();
  11. for  ( var  y = 0; y < _tempPoints.length; y++) {
  12.                     _mapPoints.push(_tempPoints[y]);
  13.                 }
  14.                 getRoutePointsAndWaypoints();
  15.             }
  16.         });

2. I have used the Scripts/jquery.tablednd.js for this table swap.

Calculate route distance and time with respect to speed

The following procedure will calculate the route distance and time with respect to speed.

1. When you create a location on the map, the distance and speed will automatically be calculated.

MapAVI9.jpg

2. For speed, you need to enter the "Average Speed (km/hr)" in the text box.

Code

  1. function  CreateHTMTable(_latlng, _distance) {
  2. var  _Speed = $( "#txtAvgSpeed" ).val();
  3. var  _Time = parseInt(((_distance / 1000) / _Speed) * 60);;
  4. if  (_htmlTrCount - 1 == 0) {
  5.             _Time = 0;
  6.             _distance = 0;
  7.         }
  8. var  html = '' ;
  9. var  title = new  Array( "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" );
  10.         html = html +"<tr id=\""  + _htmlTrCount + "\">" ;
  11.         html = html +"<td style=\"width: 80px;\">"  + _htmlTrCount + "</td>" ;
  12.         html = html +"<td style=\"width: 80px;\"><span id=\"Title_"  + _htmlTrCount + "\">"  + title[_htmlTrCount - 1] + "</span></td>" ;
  13.         html = html +"<td style=\"width: 100px;\"><span id=\"lat_"  + _htmlTrCount + "\">"  + parent.String(_latlng).split( "," )[0].substring(1, 8) + "</span></td>" ;
  14.         html = html +"<td style=\"width: 100px;\"><span id=\"lng_"  + _htmlTrCount + "\">"  + parent.String(_latlng).split( "," )[1].substring(1, 8) + "</span></td>" ;
  15.         html = html +"<td style=\"width: 100px;\"><span id=\"dir_"  + _htmlTrCount + "\">"  + _distance + "</span></td>" ;
  16.         html = html +"<td style=\"width: 70px;\"><span id=\"time_"  + _htmlTrCount + "\">"  + _Time + "</span></td>" ;
  17.         html = html +"<td style=\"width: 60px;\"><img alt=\"DeleteLocation\" src=\"Images/Delete.jpg\" onclick=\"return deleteLocation("  + _htmlTrCount + ");\" /></td>" ;
  18.         html = html +"</tr>" ;
  19.         $("#HtmlTable" ).append(html);
  20.         draganddrophtmltablerows();
  21.     }

The following code will help you to calculate distance and speed.

NOTE:

  1. As I already mentioned at the top of this article, I have used the waypoints to plot the route. So you can use a maximum of 10 waypoints with the free one.
  2. To better understand, download the source code in the attachment and run it to test it.
  3. I have used the Google map API v3 for this article.
  4. Please comment on this article for better improvement and I hope you enjoy the article.

Google Maps Drawing Distance Code

Source: https://www.c-sharpcorner.com/UploadFile/8911c4/how-to-draw-routes-and-calculate-route-time-and-distance-on/