Android How to show route between markers on googlemaps

后端 未结 2 1385
梦如初夏
梦如初夏 2020-12-28 09:17

I\'m creating an App that will show the location of the user and put a marker to that position. After the user moves. The marker would be removed and a new marker would be c

2条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-28 10:00

    @Override
    public void onLocationChanged(Location location) {
    ....
     startPerc.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher));
    
    // Assign your origin and destination
    // These points are your markers coordinates
    LatLng origin = new LatLng(3.214732, 101.747047);
    LatLng dest = new LatLng(3.214507, 101.749697);
    
    // Getting URL to the Google Directions API
    String url = getDirectionsUrl(origin, dest);
    
    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;
    
        // Sensor enabled
        String sensor = "sensor=false";
    
        // Building the parameters to the web service
        String parameters = str_origin+"&"+str_dest+"&"+sensor;
    
        // 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 while downloading url", e.toString());
        }finally{
            iStream.close();
            urlConnection.disconnect();
        }
        return data;
    }
    
    // Fetches data from url passed
    private class DownloadTask extends AsyncTask{
    
        // 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]);
            }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 Places in JSON format */
    private class ParserTask extends AsyncTask>> >{
    
        // Parsing the data in non-ui thread
        @Override
        protected List>> doInBackground(String... jsonData) {
    
            JSONObject jObject;
            List>> 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>> result) {
            ArrayList points = null;
            PolylineOptions lineOptions = null;
            MarkerOptions markerOptions = new MarkerOptions();
    
            // Traversing through all the routes
            for(int i=0;i();
                lineOptions = new PolylineOptions();
    
                // Fetching i-th route
                List> path = result.get(i);
    
                // Fetching all the points in i-th route
                for(int j=0;j 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(2);
                lineOptions.color(Color.RED);
            }
    
            // Drawing polyline in the Google Map for the i-th route
            map.addPolyline(lineOptions);
        }
    }
    

    Have a look at this tutorial,

    Drawing Driving Route Directions Between Two Locations Using Google Directions In Google Map Android Api v2

    It shows how to draw Route map between two points.

提交回复
热议问题