Drawing driving route directions between two locations using Google Directions in Google Map Android (2023)

home > Android > Drawing driving route directions between two locations using Google Directions in Google Map Android

In this article, we will develop an Android application which facilitates users to tap two locations in the Google Map. The first tap point in the map will be the source of the route and the second tap point in the map will be the destination of the route. On taping the second point, a driving route will be drawn in the Google Map Android API V2 using Google Directions API.

The output of the application is shown below

(Video) Draw route between two locations in Android - Google Maps Directions API

Drawing driving route directions between two locations using Google Directions in Google Map Android (1)

This application is developed in Android Studio (3.4.1).

1. Create New Android Project

Create a new Android project with Google Maps activity.

(Video) Google Maps Draw Route Between two locations in Android | Shortest Route | 2020 | Source Code

  • Name : RouteBetweenTwoLocations
  • Package name : com.wingsquare.RouteBetweenTwoLocations
  • Language : JavaMinimum
  • API Level : 15
  • Ensure to tick the checkbox Use androidx.* artifacts

2. Get Google Maps Api key

Open the file google_maps_api.xml available in the values folder and follow the link provided in it. At the end, we will get an API key and that can be copied to YOUR_KEY_HERE of google_maps_api.xml file which is shown below :

<resources> <string name="google_maps_key" translatable="false" templateMergeStrategy="preserve"> YOUR_KEY_HERE </string></resources>

3. Run the application

Using Android Studio, run the application in an emulator or in a real device to check whether the map is loading correctly or not. If success, we will get a screen as shown below:

4. Enable Google Directions API

In step2, we got Api key from project which is automatically created in Google cloud platform. In the same project, enable Google Directions API under APIs menu.

5. Create a new class DirectionsJSONParser

Create the class DirectionsJSONParser in the file app/src/main/java/com/wingsquare/routebetweentwolocations/DirectionsJSONParser.java. This class is used to parse the data obtained from Google’s Directions Api.

package com.wingsquare.routebetweentwolocations;import com.google.android.gms.maps.model.LatLng;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class DirectionsJSONParser { /** Receives a JSONObject and returns a list of lists containing latitude and longitude */ public List<List<HashMap<String,String>>> parse(JSONObject jObject){ List<List<HashMap<String, String>>> routes = new ArrayList<>() ; JSONArray jRoutes = null; JSONArray jLegs = null; JSONArray jSteps = null; try { jRoutes = jObject.getJSONArray("routes"); /** Traversing all routes */ for(int i=0;i<jRoutes.length();i++){ jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs"); List path = new ArrayList<HashMap<String, String>>(); /** Traversing all legs */ for(int j=0;j<jLegs.length();j++){ jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps"); /** Traversing all steps */ for(int k=0;k<jSteps.length();k++){ String polyline = ""; polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points"); List<LatLng> list = decodePoly(polyline); /** Traversing all points */ for(int l=0;l<list.size();l++){ HashMap<String, String> hm = new HashMap<String, String>(); hm.put("lat", Double.toString(((LatLng)list.get(l)).latitude) ); hm.put("lng", Double.toString(((LatLng)list.get(l)).longitude) ); path.add(hm); } } routes.add(path); } } } catch (JSONException e) { e.printStackTrace(); }catch (Exception e){ } return routes; } /** * Method to decode polyline points * Courtesy : jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java * */ private List<LatLng> decodePoly(String encoded) { List<LatLng> poly = new ArrayList<LatLng>(); int index = 0, len = encoded.length(); int lat = 0, lng = 0; while (index < len) { int b, shift = 0, result = 0; do { b = encoded.charAt(index++) - 63; result |= (b &amp; 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlat = ((result &amp; 1) != 0 ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = encoded.charAt(index++) - 63; result |= (b &amp; 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlng = ((result &amp; 1) != 0 ? ~(result >> 1) : (result >> 1)); lng += dlng; LatLng p = new LatLng((((double) lat / 1E5)), (((double) lng / 1E5))); poly.add(p); } return poly; }}

6. Update MapsActivity.java

package com.wingsquare.routebetweentwolocations;import androidx.fragment.app.FragmentActivity;import android.Manifest;import android.content.pm.PackageManager;import android.graphics.Color;import android.location.Criteria;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.AsyncTask;import android.os.Build;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Toast;import com.google.android.gms.maps.CameraUpdateFactory;import com.google.android.gms.maps.GoogleMap;import com.google.android.gms.maps.OnMapReadyCallback;import com.google.android.gms.maps.SupportMapFragment;import com.google.android.gms.maps.model.BitmapDescriptorFactory;import com.google.android.gms.maps.model.LatLng;import com.google.android.gms.maps.model.MarkerOptions;import com.google.android.gms.maps.model.Polyline;import com.google.android.gms.maps.model.PolylineOptions;import org.json.JSONObject;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class MapsActivity extends FragmentActivity implements OnMapReadyCallback{ private GoogleMap mMap; private LatLng mOrigin; private LatLng mDestination; private Polyline mPolyline; ArrayList<LatLng> mMarkerPoints; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); mMarkerPoints = new ArrayList<>(); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { @Override public void onMapClick(LatLng point) { // Already two locations if(mMarkerPoints.size()>1){ mMarkerPoints.clear(); mMap.clear(); } // Adding new item to the ArrayList mMarkerPoints.add(point); // Creating MarkerOptions MarkerOptions options = new MarkerOptions(); // Setting the position of the marker options.position(point); /** * For the start location, the color of marker is GREEN and * for the end location, the color of marker is RED. */ if(mMarkerPoints.size()==1){ options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); }else if(mMarkerPoints.size()==2){ options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); } // Add new marker to the Google Map Android API V2 mMap.addMarker(options); // Checks, whether start and end locations are captured if(mMarkerPoints.size() >= 2){ mOrigin = mMarkerPoints.get(0); mDestination = mMarkerPoints.get(1); drawRoute(); } } }); } private void drawRoute(){ // Getting URL to the Google Directions API String url = getDirectionsUrl(mOrigin, mDestination); DownloadTask downloadTask = new DownloadTask(); // Start downloading json data from Google Directions API downloadTask.execute(url); } private String getDirectionsUrl(LatLng origin,LatLng dest){ // Origin of route String str_origin = "origin="+origin.latitude+","+origin.longitude; // Destination of route String str_dest = "destination="+dest.latitude+","+dest.longitude; // Key String key = "key=" + getString(R.string.google_maps_key); // Building the parameters to the web service String parameters = str_origin+"&amp;"+str_dest+"&amp;"+key; // Output format String output = "json"; // Building the url to the web service String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters; return url; } /** A method to download json data from url */ private String downloadUrl(String strUrl) throws IOException { String data = ""; InputStream iStream = null; HttpURLConnection urlConnection = null; try{ URL url = new URL(strUrl); // Creating an http connection to communicate with url urlConnection = (HttpURLConnection) url.openConnection(); // Connecting to url urlConnection.connect(); // Reading data from url iStream = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); StringBuffer sb = new StringBuffer(); String line = ""; while( ( line = br.readLine()) != null){ sb.append(line); } data = sb.toString(); br.close(); }catch(Exception e){ Log.d("Exception on download", e.toString()); }finally{ iStream.close(); urlConnection.disconnect(); } return data; } /** A class to download data from Google Directions URL */ private class DownloadTask extends AsyncTask<String, Void, String> { // Downloading data in non-ui thread @Override protected String doInBackground(String... url) { // For storing data from web service String data = ""; try{ // Fetching the data from web service data = downloadUrl(url[0]); Log.d("DownloadTask","DownloadTask : " + data); }catch(Exception e){ Log.d("Background Task",e.toString()); } return data; } // Executes in UI thread, after the execution of // doInBackground() @Override protected void onPostExecute(String result) { super.onPostExecute(result); ParserTask parserTask = new ParserTask(); // Invokes the thread for parsing the JSON data parserTask.execute(result); } } /** A class to parse the Google Directions in JSON format */ private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{ // Parsing the data in non-ui thread @Override protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) { JSONObject jObject; List<List<HashMap<String, String>>> routes = null; try{ jObject = new JSONObject(jsonData[0]); DirectionsJSONParser parser = new DirectionsJSONParser(); // Starts parsing data routes = parser.parse(jObject); }catch(Exception e){ e.printStackTrace(); } return routes; } // Executes in UI thread, after the parsing process @Override protected void onPostExecute(List<List<HashMap<String, String>>> result) { ArrayList<LatLng> points = null; PolylineOptions lineOptions = null; // Traversing through all the routes for(int i=0;i<result.size();i++){ points = new ArrayList<LatLng>(); lineOptions = new PolylineOptions(); // Fetching i-th route List<HashMap<String, String>> path = result.get(i); // Fetching all the points in i-th route for(int j=0;j<path.size();j++){ HashMap<String,String> point = path.get(j); double lat = Double.parseDouble(point.get("lat")); double lng = Double.parseDouble(point.get("lng")); LatLng position = new LatLng(lat, lng); points.add(position); } // Adding all the points in the route to LineOptions lineOptions.addAll(points); lineOptions.width(8); lineOptions.color(Color.RED); } // Drawing polyline in the Google Map for the i-th route if(lineOptions != null) { if(mPolyline != null){ mPolyline.remove(); } mPolyline = mMap.addPolyline(lineOptions); }else Toast.makeText(getApplicationContext(),"No route is found", Toast.LENGTH_LONG).show(); } }}

7. Run the application

Run the application from Android studio. Then we will get a screen as shown in the screen below :

(Video) How to Get directions between two locations using Google direction API in Android Studio

Drawing driving route directions between two locations using Google Directions in Google Map Android (3)

8. Download the source

Source code for this application is available at https://github.com/Wingsquare/RouteBetweenTwoLocations


How do I map a route between two places on Google Maps? ›

Add multiple destinations
  1. On your computer, open Google Maps.
  2. Click Directions .
  3. Add a starting point and a destination.
  4. On the left, below the destinations you entered, click Add .
  5. To add a stop, choose another destination. You can add up to 9 stops.
  6. Click on a route to get the directions.

How do I draw a route on Google Maps Android? ›

How to draw a line or shape on Google Maps on a mobile device
  1. Open My Maps in a browser on your mobile device.
  2. If necessary, tap Get Started.
  3. Tap Create a New Map or tap an existing map to edit.
  4. Under the search field at the top of the page, click Draw a line (the button looks like three lines and three dots).
30 Sept 2021

Can you manually draw a route on Google Maps? ›

Add line or shape.

Select a layer and click where to start drawing. A layer can have 2,000 lines, shapes or places. Click each corner or bend of your line or shape. To move the map, click and hold the mouse.

How do I draw a route along an existing road between two points? ›

Now go to Android studio open Gradle file which is at right corner side click that. There we can see two points. Now we can see the SHA-1 Certificate, copy that SHA-1 and paste in SHA-1 fingerprint box as shown in above image. At last click the Save button.

Can you make a route with multiple stops on Google Maps? ›

Once you find what you're looking for, tap on the Directions button. Now, tap on the three dots on the top right and select 'Add stop'. Enter the details and the stop will be automatically added in your list. You can add up to nine stops at a time.

Is there an app that lets you create your own route? ›

HERE WeGo route creator app

This free navigation app lets you save common stops in a collection, or use shortcuts to get directions to them in one click. It lets you add waypoints to your routes if you need to make an extra stop or want to take a specific route.

How do I create a running route in Google Maps? ›

One of the simplest ways to plan a quick running circuit of your own is to enter your starting point and destination on Google Maps. Once you have that beginning and end point on your Google Map, you can then use your mouse to drag the route around to make it more or less direct as a running route.

Which system can be used to know route between two points? ›

Android Google Maps Drawing Route Code

It's used to set a marker on the clicked location and store that location in an ArrayList. The ArrayList is used to store the source and destination markers only.

How do I track a route on Google Maps app? ›

Enter the address of your starting point or use the map controls to navigate to your chosen location to prepare for tracing the route. To start drawing your route simply doubleclick on the map to set the starting pinpoint, then continue to click each of the points along the route you wish to follow.

What is Google map in android? ›

Android provides facility to integrate Google map in our application. Google map displays your current location, navigate location direction, search location etc. We can also customize Google map according to our requirement.

Does Google have a route planner? ›

Google Maps has a route planning capability. You can even plan a route for many locations using Google Maps. It can serve a variety of purposes aside from driving, such as walking and biking.

What's the best route planner? ›

Best Driving Route Planner
  • Waze.
  • MapQuest.
  • Roadtrippers.
  • My Route Online.
  • RouteXL.
  • Speedy Route.
  • Flightmap.
  • Maps.me.

How do I add a marker on Google Maps Android? ›

For adding a custom marker to Google Maps navigate to the app > res > drawable > Right-Click on it > New > Vector Assets and select the icon which we have to show on your Map. You can change the color according to our requirements. After creating this icon now we will move towards adding this marker to our Map.

Where do I get Google Map API key? ›

Go to the Google Maps Platform > Credentials page. On the Credentials page, click Create credentials > API key. The API key created dialog displays your newly created API key.

How can I play audio and video on Android? ›

Android provides many ways to control playback of audio/video files and streams. One of this way is through a class called MediaPlayer. MediaPlayer mediaPlayer = MediaPlayer.

How do you make a simple map direction? ›

Open Google Maps and click the menu button in the top left corner. Click Your Places > Maps > Create Map. Name your map and enter in a description. Add markers for your desired locations.

Can you draw on Google Maps? ›

Select the Draw a Line tool. Select Add Driving Route. Click on your starting point to begin drawing the route, and then double-click on your ending point to stop drawing. My Maps will create your route.

What is Android route? ›

Starting with Android 11, your app's routing options also appear in the system media player. This helps to give the user a seamless journey when moving between devices as they change their viewing and listening contexts, such as watching video in the kitchen versus on a phone, or listening to audio in the home or car.

How do I create a map in Google Maps app? ›

Creating a Custom Map in Google Maps

However, once completed, you can view your custom map on the Android or iOS apps. To start, click open the Menu in the top left corner of the screen and click Your Places. From there, select Maps on the far right tab and then click Create Map at the bottom of the list.

How do you record a travel route? ›

Record a tour
  1. Open Google Earth.
  2. Click Add Tour, or, in the bar above the globe, click Record .
  3. To start recording, go to the lower left corner in the media player and click Record/Stop .
  4. To record audio, click Microphone .

How do I create a route on Google Maps on my iPhone? ›

How to Create Routes in Google Maps on the iPhone
  1. Tap the map icon on your iPhone home screen to launch the native Google Maps application.
  2. Tap the “Directions” button on the bottom of the map. ...
  3. Enter a starting point in the Start field.
  4. Enter an ending point in the End field.

How do I create a custom route on Google Maps? ›

Customize your route
  1. On your Android phone or tablet, open the Google Maps app .
  2. Search for your destination or tap it on the map.
  3. In the bottom left, tap Directions .
  4. At the top, tap Driving .
  5. In the top right, tap More. Route options.
  6. Turn on Avoid tolls or Avoid highways.

What is the best way to plan a route with multiple stops? ›

How to Plan a Route with Multiple Stops on Google Maps (In-depth Guide)
  1. Plan a route with multiple stops on Google Maps. ...
  2. #1: Add your first stop. ...
  3. #2: Press “directions” ...
  4. #3: Add all your stops. ...
  5. #4: Press the start button. ...
  6. How many stops can you add?
27 Jul 2021

How do I create a running route on Google Maps? ›

Plan a route

Click or tap points on the map to create a route. Drag points to move them, or drag segments to insert a new point. You can also undo or redo changes to your route. To remove a point, shift-click or drag it to the trash button that appears while dragging.

How do I plan a trip with Google Maps? ›

How to plan a road trip on Google Maps
  1. Go to Google Maps. ...
  2. To create an itinerary, click 'Menu' on the top left button > click 'Your Places' > click 'Maps' on the 4th tab > click 'Create Map'.
17 Jul 2016

How can I make my own route? ›

Customize Your Route on Google Maps
  1. To begin, select Add directions under the search bar. ...
  2. Select your transportation mode by clicking the Driving icon under the new map layer. ...
  3. Enter your departure point in the A text box.
  4. Enter your destination point in the B text box. ...
  5. Google will automatically plot a route.
11 Apr 2022

How do I create a custom route? ›

How to Create a Custom Route on Google Maps
  1. Go to Google Maps.
  2. In the top-left, select Menu (hamburger icon).
  3. Click Your places.
  4. Switch to the Maps tab.
  5. Click Create Map. Your map opens in a new window.
  6. In the top-left, click Untitled map.
  7. Here, give your map a title and description (optional) and click Save.
17 Jul 2022

How do I create a route? ›

How to Make a Custom Route in Google Maps - YouTube

Does Google have a route planner? ›

Google Maps has a route planning capability. You can even plan a route for many locations using Google Maps. It can serve a variety of purposes aside from driving, such as walking and biking.

Is there an app for mapping a route? ›

The most popular route planner in the world is Google Maps. It's reliable, easy to use — and free. But while it works great for casual traveling and road trips, the Google Maps route planner does not always meet the specific and evolving needs of professionals like salespeople and delivery drivers.

Is there an app where you can plan your own route? ›

Route4Me route planner app

Route4Me offers services on a website as well as iPhone, iPad, and Android apps. It lets you enter up to thousands of stops, and then gives an optimized route listing, a map with route lines, and turn-by-turn driving or walking directions.

How do you record a travel route? ›

Record a tour
  1. Open Google Earth.
  2. Click Add Tour, or, in the bar above the globe, click Record .
  3. To start recording, go to the lower left corner in the media player and click Record/Stop .
  4. To record audio, click Microphone .

How do I create a route on Google Maps on my iPhone? ›

How to Create Routes in Google Maps on the iPhone
  1. Tap the map icon on your iPhone home screen to launch the native Google Maps application.
  2. Tap the “Directions” button on the bottom of the map. ...
  3. Enter a starting point in the Start field.
  4. Enter an ending point in the End field.

How do I find a running route? ›

Join PodiumRunner
  1. gmap-pedometer.com. On Google Maps, click on the bike icon and set your to and from destinations. ...
  2. www.mapmyrun.com. Click on “Runs” and then “Search Runs.” You can search through running routes by city or zip code that other runners have run and mapped out. ...
  3. www.usatf.org/routes.
13 Aug 2013


1. Android Tutorial Part 12 : Draw Routes on Map Using Google Directions API
(Benni Nugroho)
2. Android tutorial: How to get directions between 2 points using Google Map API
(tori san)
3. How to Get distance between 2 locations using Google direction API in Android Studio|Game App Studio
(Game App Studio)
4. How to draw polyline between two points on google maps in android || Draw route between two points
(Proglabs Official)
5. Draw route using google directions api | Part 3
6. Make an Android App Like UBER - Part 22 - Draw Route Between Two Points (Google Maps)
Top Articles
Latest Posts
Article information

Author: Nathanael Baumbach

Last Updated: 11/27/2022

Views: 5783

Rating: 4.4 / 5 (55 voted)

Reviews: 86% of readers found this page helpful

Author information

Name: Nathanael Baumbach

Birthday: 1998-12-02

Address: Apt. 829 751 Glover View, West Orlando, IN 22436

Phone: +901025288581

Job: Internal IT Coordinator

Hobby: Gunsmithing, Motor sports, Flying, Skiing, Hooping, Lego building, Ice skating

Introduction: My name is Nathanael Baumbach, I am a fantastic, nice, victorious, brave, healthy, cute, glorious person who loves writing and wants to share my knowledge and understanding with you.