public IEnumerable<LatLng> GetGeoRouteDirectionsPoints(GmapObject root)
		{
			var stepslist = new List<Step> ();
			var geoPointList = new List<LatLng> ();

			var leglist = GetLeg (root); //Get LegSteps from the route
			stepslist = leglist.steps; //Get Steps from the leg;

			if (stepslist != null && stepslist.Count > 0) {
				//Check actually there are steps

				//iterate through steps and collect route points
				foreach (var step in stepslist) {
				
					var startlocationNode = step.start_location;
					//Add Start points
					geoPointList.Add (new LatLng(startlocationNode.lat,startlocationNode.lng));

					var polylinePoints = step.polyline.points;
					var coordinateEntity = GooglePoints.Decode (polylinePoints);
					foreach (var val in coordinateEntity) {
						geoPointList.Add (new LatLng (val.Latitude, val.Longitude));
					}

					var endLocationNode = step.end_location;
					//Add End points
					geoPointList.Add (new LatLng(endLocationNode.lat,endLocationNode.lng));
				}
			}

			return geoPointList;
		}
	    public Leg GetLeg(GmapObject root)
	    {
	        if (root != null)
	        {
	            var legs = root.routes.FirstOrDefault() != null ? root.routes.FirstOrDefault().legs : null;
	            if (legs != null)
	            {
	                return legs.FirstOrDefault();
	            }
	        }
	        return null;
	    }
        public GmapObject GetDistaceRoute(LatLng start, LatLng end, string mode)
        {
            var rootobject = new GmapObject();
            var baseAddress = "http://maps.googleapis.com/maps/";
            var Url = this.GetGeoMapUrl(start.Latitude, start.Longitude, end.Latitude, end.Longitude);

            var client = new RestClient(baseAddress);
            var request = new RestRequest(Url);
            var response = client.Execute(request);
            try
            {
                var responseclass = client.Execute<GmapObject>(request);
                if (responseclass.ResponseStatus == ResponseStatus.Completed)
                {
                    var result = responseclass.Data;
                    rootobject =result;
                }
            }
            catch (Exception ex)
            {
                var errorMsg = ex.Message;
            }
            return rootobject;
        }
		public GmapObject GetRouteByAddress(string fromAddress, string toAddress, string mode)
		{
			var rootobject = new GmapObject();
			var baseAddress = "http://maps.googleapis.com/maps/";
			string url = string.Format("api/directions/json?origin={0}&destination={1}&sensor=false&units=metric&mode=driving", fromAddress,toAddress);
			var Url = url;
			var client = new RestClient(baseAddress);
			var request = new RestRequest(Url);
			var response = client.Execute(request);
			try
			{
				var responseclass = client.Execute<GmapObject>(request);
				if (responseclass.ResponseStatus == ResponseStatus.Completed)
				{
					var result = responseclass.Data;
					rootobject =result;
				}
			}
			catch (Exception ex)
			{
				var errorMsg = ex.Message;
			}
			return rootobject;
		}
		public async Task<IEnumerable<LatLng>> FindDirections(LatLng start, LatLng end, string mode)
		{
			var mc = new GMapDirection ();
			rootObject = mc.GetDistaceRoute(start, end, "driving");

			var leg = mc.GetLeg(rootObject);
			GeoStartAddress = leg!=null? leg.start_address:"";
			GeoEndAddress = leg != null ? leg.end_address : "";

			var duration = mc.GetGeoDuration(leg);
			var distance = mc.GetGeoDistance(leg);
			var pointsList = mc.GetGeoRouteDirectionsPoints (rootObject);
            

			return pointsList;
		}
		public async Task<IEnumerable<LatLng>> FindDirectionsByAddress(string start, string end, string mode)
		{
			var mc = new GMapDirection ();
			rootObject = mc.GetRouteByAddress(start, end, "driving");

			var leg = mc.GetLeg(rootObject);
			GeoStartAddress = leg!=null? leg.start_address:"";
			GeoEndAddress = leg != null ? leg.end_address : "";

			var duration = mc.GetGeoDuration(leg);
			var distance = mc.GetGeoDistance(leg);
			Duration = string.Format ("{0} Time: {1} Mins ", distance.value, duration.value);
			_startLocation = new LatLng (leg.start_location.lat, leg.start_location.lng);
			_endLocation = new LatLng (leg.end_location.lat, leg.end_location.lng);

			var pointsList = mc.GetGeoRouteDirectionsPoints (rootObject);
			return pointsList;
		}