protected virtual string BuildMapPath(IList <TrackCoordinate> trackCoordinates, int resolution)
        {
            string pathParameter = String.Empty;

            if (trackCoordinates != null && trackCoordinates.Count > 0)
            {
                LapSegment         lapSegment  = null;
                IList <LapSegment> lapSegments = new List <LapSegment>();

                string throttlePathHeader = "&path=color:green|weight:2";
                string brakePathHeader    = "&path=color:red|weight:2";
                string coastPathHeader    = "&path=color:yellow|weight:2";
                string currentState       = "";

                var firsttrackCoordinate = trackCoordinates.FirstOrDefault();
                lapSegment = new LapSegment();

                if (firsttrackCoordinate.Throttle > 0 && firsttrackCoordinate.Throttle > firsttrackCoordinate.Brake)
                {
                    currentState      = "Throttle";
                    lapSegment.Header = throttlePathHeader;
                }
                else if (firsttrackCoordinate.Brake > 0 && firsttrackCoordinate.Brake > firsttrackCoordinate.Throttle)
                {
                    currentState      = "Brake";
                    lapSegment.Header = brakePathHeader;
                }
                else
                {
                    currentState      = "Coast";
                    lapSegment.Header = coastPathHeader;
                }

                foreach (TrackCoordinate trackCoordinate in trackCoordinates.Where((x, i) => i % resolution == 0))
                {
                    lapSegment.Points.Add(trackCoordinate);

                    if (trackCoordinate.Throttle > 0 && trackCoordinate.Throttle > trackCoordinate.Brake)
                    {
                        if (currentState != "Throttle")
                        {
                            lapSegment.EncodedToken = GoogleMapHelper.EncodeCoordinates(lapSegment.Points);
                            lapSegments.Add(lapSegment);
                            lapSegment = new LapSegment()
                            {
                                Header = throttlePathHeader
                            };
                            lapSegment.Points.Add(trackCoordinate);
                            currentState = "Throttle";
                        }
                    }
                    else if (trackCoordinate.Brake > 0 && trackCoordinate.Brake > trackCoordinate.Throttle)
                    {
                        if (currentState != "Brake")
                        {
                            lapSegment.EncodedToken = GoogleMapHelper.EncodeCoordinates(lapSegment.Points);
                            lapSegments.Add(lapSegment);
                            lapSegment = new LapSegment()
                            {
                                Header = brakePathHeader
                            };
                            lapSegment.Points.Add(trackCoordinate);
                            currentState = "Brake";
                        }
                    }
                    else
                    {
                        if (currentState != "Coast")
                        {
                            lapSegment.EncodedToken = GoogleMapHelper.EncodeCoordinates(lapSegment.Points);
                            lapSegments.Add(lapSegment);
                            lapSegment = new LapSegment()
                            {
                                Header = coastPathHeader
                            };
                            lapSegment.Points.Add(trackCoordinate);
                            currentState = "Coast";
                        }
                    }
                }
                // add the last segment
                lapSegment.EncodedToken = GoogleMapHelper.EncodeCoordinates(lapSegment.Points);
                lapSegments.Add(lapSegment);

                StringBuilder sb = new StringBuilder();

                foreach (LapSegment encodedLapSegment in lapSegments)
                {
                    sb.Append(encodedLapSegment.Header);
                    sb.Append("|enc:");
                    sb.Append(encodedLapSegment.EncodedToken);
                }

                pathParameter = sb.ToString();
            }

            return(pathParameter);
        }