android - Driving direction is not showing in Google Map While all points are getting after fetching them? -
i using sort of code draw driving direction between 2 point map loading , points getting while parsing ...
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; import org.json.jsonobject; import android.graphics.color; import android.os.asynctask; import android.os.bundle; import android.support.v4.app.fragmentactivity; import android.util.log; import android.view.menu; import com.esysolutions.dilosys.map.directionsjsonparser; import com.google.android.gms.maps.cameraupdatefactory; import com.google.android.gms.maps.googlemap; import com.google.android.gms.maps.supportmapfragment; import com.google.android.gms.maps.model.latlng; import com.google.android.gms.maps.model.polylineoptions; public class locationdrivingmap extends fragmentactivity { googlemap map; arraylist<latlng> markerpoints; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.locationdrivingdirection); markerpoints = new arraylist<latlng>(); supportmapfragment fm = (supportmapfragment) getsupportfragmentmanager() .findfragmentbyid(r.id.map); map = fm.getmap(); if (map != null) { map.setmylocationenabled(true); string url = getdirectionsurl(); log.d("............full url...................", url); downloadtask downloadtask = new downloadtask(); downloadtask.execute(url); } } private string getdirectionsurl() { string parameters = "origin=13.687140112679154,100.535258688032630&destination=13.683660045847258,100.53900808095932&sensor=false&units=metric&mode=driving"; string output = "json"; string url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" + parameters; return url; } /** method download json data url */ private string downloadurl(string strurl) throws ioexception { string data = ""; inputstream istream = null; httpurlconnection urlconnection = null; try { url url = new url(strurl); // creating http connection communicate url urlconnection = (httpurlconnection) url.openconnection(); // connecting url urlconnection.connect(); // reading data 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()); } { istream.close(); urlconnection.disconnect(); } return data; } // fetches data url passed private class downloadtask extends asynctask<string, void, string> { // downloading data in non-ui thread @override protected string doinbackground(string... url) { log.d(">>>>>>>inside downloadtask<<<<<<<<<", url[0]); // storing data web service string data = ""; try { // fetching data web service data = downloadurl(url[0]); } catch (exception e) { log.d("background task", e.tostring()); } return data; } // executes in ui thread, after execution of // doinbackground() @override protected void onpostexecute(string result) { super.onpostexecute(result); parsertask parsertask = new parsertask(); // invokes thread parsing json data parsertask.execute(result); } } /** class parse google places in json format */ private class parsertask extends asynctask<string, integer, list<list<hashmap<string, string>>>> { // parsing 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); log.d("++++++++++++++++++++route", "" + routes); } catch (exception e) { e.printstacktrace(); } return routes; } // executes in ui thread, after parsing process @override protected void onpostexecute(list<list<hashmap<string, string>>> result) { arraylist<latlng> points = null; polylineoptions lineoptions = null; // traversing through routes (int = 0; < result.size(); i++) { points = new arraylist<latlng>(); lineoptions = new polylineoptions(); // fetching i-th route list<hashmap<string, string>> path = result.get(i); // fetching points in i-th route (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); log.d("??????????????? points", "" + points); } // adding points in route lineoptions lineoptions.addall(points); log.d("************************* lineoptions", "" + lineoptions); lineoptions.width(2); lineoptions.color(color.red); } // drawing polyline in google map i-th route map.addpolyline(lineoptions); map.movecamera(cameraupdatefactory.newlatlngzoom(new latlng( 13.687140112679154, 100.535258688032630), 2.0f)); } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); return true; } } help please ............
log inside point gets value...but path not showing here
[lat/lng: (13.68719,100.53523), lat/lng: (13.68723,100.53524), lat/lng: (13.68728,100.53526), lat/lng: (13.68728,100.53526), lat/lng: (13.68721,100.5355), lat/lng: (13.68715,100.53573), lat/lng: (13.68709,100.53591), lat/lng: (13.68699,100.53616), lat/lng: (13.68693,100.53629), lat/lng: (13.68689,100.53635), lat/lng: (13.68679,100.5365), lat/lng: (13.68666,100.53666), lat/lng: (13.68656,100.53679), lat/lng: (13.68643,100.53691), lat/lng: (13.68622,100.53707), lat/lng: (13.68554,100.5375), lat/lng: (13.68509,100.5378), lat/lng: (13.68478,100.53804), lat/lng: (13.68469,100.53812), lat/lng: (13.68461,100.53818), lat/lng: (13.68456,100.53823), lat/lng: (13.68449,100.53828), lat/lng: (13.68439,100.53837), lat/lng: (13.68406,100.53868), lat/lng: (13.68381,100.53894), lat/lng: (13.68371,100.53905)]
here got solution question :
package com.esysolutions.dilosys.v2; 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; import org.json.jsonobject; import android.graphics.color; import android.os.asynctask; import android.os.bundle; import android.support.v4.app.fragmentactivity; import android.util.log; import android.view.menu; import com.esysolutions.dilosys.map.directionsjsonparser; import com.google.android.gms.maps.googlemap; 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.polylineoptions; public class locationdrivingmap extends fragmentactivity { googlemap map; arraylist<latlng> markerpoints; markeroptions op; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.locationdrivingdirection); markerpoints = new arraylist<latlng>(); supportmapfragment fm = (supportmapfragment) getsupportfragmentmanager() .findfragmentbyid(r.id.map); map = fm.getmap(); latlng point1 = new latlng(13.687140112679154, 100.535258688032630); latlng point2 = new latlng(14.683660045847258, 105.53900808095932); markerpoints.add(point1); markerpoints.add(point2); if (map != null) { map.setmylocationenabled(true); (int j = 0; j < 2; j++) { op = new markeroptions(); op.position(markerpoints.get(j)); if (markerpoints.size() == 1) { op.icon(bitmapdescriptorfactory .defaultmarker(bitmapdescriptorfactory.hue_green)); } else if (markerpoints.size() == 2) { op.icon(bitmapdescriptorfactory .defaultmarker(bitmapdescriptorfactory.hue_red)); } map.addmarker(op); } if (markerpoints.size() >= 2) { latlng origin = markerpoints.get(0); latlng dest = markerpoints.get(1); // getting url google directions api string url = getdirectionsurl(origin, dest); downloadtask downloadtask = new downloadtask(); 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 parameters web service string parameters = str_origin + "&" + str_dest + "&" + sensor; // output format string output = "json"; // building url web service string url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" + parameters; return url; } /** method download json data url */ private string downloadurl(string strurl) throws ioexception { string data = ""; inputstream istream = null; httpurlconnection urlconnection = null; try { url url = new url(strurl); // creating http connection communicate url urlconnection = (httpurlconnection) url.openconnection(); // connecting url urlconnection.connect(); // reading data 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()); } { istream.close(); urlconnection.disconnect(); } return data; } // fetches data url passed private class downloadtask extends asynctask<string, void, string> { // downloading data in non-ui thread @override protected string doinbackground(string... url) { // storing data web service string data = ""; try { // fetching data web service data = downloadurl(url[0]); } catch (exception e) { log.d("background task", e.tostring()); } return data; } // executes in ui thread, after execution of // doinbackground() @override protected void onpostexecute(string result) { super.onpostexecute(result); parsertask parsertask = new parsertask(); // invokes thread parsing json data parsertask.execute(result); } } /** class parse google places in json format */ private class parsertask extends asynctask<string, integer, list<list<hashmap<string, string>>>> { // parsing 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 parsing process @override protected void onpostexecute(list<list<hashmap<string, string>>> result) { arraylist<latlng> points = null; polylineoptions lineoptions = null; markeroptions markeroptions = new markeroptions(); // traversing through routes (int = 0; < result.size(); i++) { points = new arraylist<latlng>(); lineoptions = new polylineoptions(); // fetching i-th route list<hashmap<string, string>> path = result.get(i); // fetching points in i-th route (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 points in route lineoptions lineoptions.addall(points); lineoptions.width(2); lineoptions.color(color.red); } // drawing polyline in google map i-th route map.addpolyline(lineoptions); } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); return true; } }
Comments
Post a Comment