/// <summary>
        /// Creates the request parameters for the given path.
        /// </summary>
        /// <param name="path">Path to create request parameters for.</param>
        /// <returns>Request parameters for the given path.</returns>
        protected static string CreatePathParameters(MapPath path)
        {
            var parameters = new ParameterListBuilder(":", "|");

            if (path.Style != null)
            {
                if (path.Style.Weight != null) parameters.Add("weight", path.Style.Weight.ToString());
                if (path.Style.Color != null) parameters.Add("color", path.Style.Color.ToLower());
                if (path.Style.FillColor != null) parameters.Add("fillcolor", path.Style.FillColor.ToLower());
            }

            foreach (var location in path.Locations) parameters.Add(location.ToString());

            return parameters.ToString();
        }
        /// <summary>
        /// Creates the url with the settings that have been
        /// specified before.
        /// </summary>
        /// <returns>String containing a url.</returns>
        protected string CreateImageUrl()
        {
            var parameters = new ParameterListBuilder("=", "&");

            parameters.Add("size", String.Format("{0}x{1}", Width, Height));
            parameters.Add("sensor", UsingSensor ? "true" : "false");
            if (MapType != GoogleMapType.Default) parameters.Add("maptype", MapType.ToString().ToLower());
            if (Zoom != null) parameters.Add("zoom", Zoom.ToString());
            if (Scale != null) parameters.Add("scale", Scale.ToString());
            if (Center != null) parameters.Add("center", Center.ToString());

            foreach (var marker in Markers) parameters.Add("markers", CreateMarkerParameters(marker), false);
            foreach (var path in Paths) parameters.Add("path", CreatePathParameters(path), false);

            return String.Format("{0}?{1}",
                UseHttps ? _baseUrlHttps : _baseUrlHttp,
                String.Join("&", parameters));
        }
        /// <summary>
        /// Creates the request parameters for the given marker.
        /// </summary>
        /// <param name="marker">Marker to create request parameters for.</param>
        /// <returns>Request parameters for the given marker.</returns>
        protected static string CreateMarkerParameters(MapMarker marker)
        {
            var parameters = new ParameterListBuilder(":", "|");

            if (marker.Style != null)
            {
                if (marker.Style.Color != null) parameters.Add("color", marker.Style.Color.ToLower());
                if (marker.Style.Icon != null) parameters.Add("icon", marker.Style.Icon);
                if (marker.Style.Label != null) parameters.Add("label", marker.Style.Label);
                if (marker.Style.Size != MapMarkerSize.Default) parameters.Add("size", marker.Style.Size.ToString().ToLower());
                if (!marker.Style.Shadow) parameters.Add("shadow", "false");
            }

            foreach (var location in marker.Locations) parameters.Add(location.ToString());

            return parameters.ToString();
        }