protected override QueryStringParametersList GetQueryStringParameters()
        {
            if (string.IsNullOrWhiteSpace(PlaceId))
            {
                throw new ArgumentException("PlaceId must be provided.");
            }

            if (string.IsNullOrWhiteSpace(ApiKey))
            {
                throw new ArgumentException("ApiKey must be provided");
            }

            QueryStringParametersList parameters = base.GetQueryStringParameters();

            parameters.Add("placeid", PlaceId);

            if (!string.IsNullOrWhiteSpace(Language))
            {
                parameters.Add("language", Language);
            }

            if (!string.IsNullOrWhiteSpace(SessionToken))
            {
                parameters.Add("sessiontoken", SessionToken);
            }

            return(parameters);
        }
        protected override QueryStringParametersList GetQueryStringParameters()
        {
            QueryStringParametersList queryParams = base.GetQueryStringParameters();

            queryParams.Add("key", apiKey);
            return(queryParams);
        }
        protected virtual QueryStringParametersList GetQueryStringParameters()
        {
            QueryStringParametersList parametersList = new QueryStringParametersList();

            parametersList.Add("sensor", Sensor.ToString().ToLower());

            return parametersList;
        }
Example #4
0
        protected virtual QueryStringParametersList GetQueryStringParameters()
        {
            QueryStringParametersList parametersList = new QueryStringParametersList();

            parametersList.Add("sensor", Sensor.ToString().ToLower());

            return(parametersList);
        }
Example #5
0
        protected override QueryStringParametersList GetQueryStringParameters()
        {
            var _parameters = new QueryStringParametersList();

            _parameters.Add("sensor", Sensor.ToString().ToLower());

            return(_parameters);
        }
        public void AddTest()
        {
            const string KEY   = "key";
            const string VALUE = "value";

            var queryStringParametersList = new QueryStringParametersList {
                { KEY, VALUE }
            };

            Assert.IsTrue(queryStringParametersList.Keys.Contains(KEY));
            Assert.AreEqual(VALUE, queryStringParametersList[KEY]);
        }
Example #7
0
        /// <summary>
        /// Get the query string collection of added parameters for the request.
        /// </summary>
        /// <returns></returns>
        protected virtual QueryStringParametersList GetQueryStringParameters()
        {
            var parameters = new QueryStringParametersList();

            if (!string.IsNullOrWhiteSpace(this.Key))
            {
                parameters.Add("key", this.Key);
            }

            parameters.Add("sensor", Sensor.ToString().ToLower());

            return(parameters);
        }
Example #8
0
        /// <summary>
        /// Get the query string collection of added parameters for the request.
        /// </summary>
        /// <returns></returns>
        protected override QueryStringParametersList GetQueryStringParameters()
        {
            if (string.IsNullOrEmpty(this.ClientId))
            {
                return(base.GetQueryStringParameters());
            }

            var parameters = new QueryStringParametersList {
                { "sensor", Sensor.ToString().ToLower() }
            };

            return(parameters);
        }
        public void RemoveTest()
        {
            const string KEY   = "key";
            const string VALUE = "value";

            var queryStringParametersList = new QueryStringParametersList {
                { KEY, VALUE }
            };

            queryStringParametersList.Remove(KEY);

            Assert.AreEqual(0, queryStringParametersList.Count);
        }
        public void AddwhenKeyExistsTest()
        {
            const string KEY       = "key";
            const string VALUE     = "value";
            const string VALUE_NEW = "value_new";

            var queryStringParametersList = new QueryStringParametersList {
                { KEY, VALUE }, { KEY, VALUE_NEW }
            };

            Assert.IsTrue(queryStringParametersList.Keys.Contains(KEY));
            Assert.AreEqual(VALUE_NEW, queryStringParametersList[KEY]);
            Assert.AreEqual(1, queryStringParametersList.Count);
        }
Example #11
0
        protected virtual QueryStringParametersList GetQueryStringParameters()
        {
            QueryStringParametersList parametersList = new QueryStringParametersList();

            if (!string.IsNullOrWhiteSpace(ApiKey))
            {
                if (!this.IsSSL)
                {
                    throw new ArgumentException("When using an ApiKey MUST send the request over SSL [IsSSL = true]");
                }
                parametersList.Add("key", ApiKey);
            }

            return(parametersList);
        }
        public void GetQueryStringPostfixTest()
        {
            var queryStringParametersList = new QueryStringParametersList
            {
                { "1", "1" },
                { "2", "2" },
                { "3", "3" }
            };

            var actual   = queryStringParametersList.GetQueryStringPostfix();
            var expected = string.Join("&", queryStringParametersList.Select(x => Uri.EscapeDataString(x.Key) + "=" + Uri.EscapeDataString(x.Value)));

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected, actual);
        }
        protected virtual QueryStringParametersList GetQueryStringParameters()
        {
            QueryStringParametersList parametersList = new QueryStringParametersList();

            parametersList.Add("sensor", Sensor.ToString().ToLower());

            if (!string.IsNullOrWhiteSpace(ApiKey))
            {
                if (!this.IsSSL)
                {
                    throw new ArgumentException("When using an ApiKey MUST send the request over SSL [IsSSL = true]");
                }
                parametersList.Add("key", ApiKey);
            }

            return parametersList;
        }
Example #14
0
    public string decodeStyle(string styleParamsJSON)
    {
        QueryStringParametersList parametersList = new QueryStringParametersList();

        JArray styleParamsGroupList = JArray.Parse(styleParamsJSON);

        foreach (JObject styleParamsGroup in styleParamsGroupList.Children <JObject>())
        {
            string line = "";

            foreach (JProperty styleParam in styleParamsGroup.Properties())
            {
                JToken value = styleParam.Value;
                string name  = styleParam.Name.ToString();

                if (name == "stylers")
                {
                    foreach (JProperty subParam in value.Children <JProperty>())
                    {
                        JToken subValue = subParam.Value;
                        string subName  = subParam.Name.ToString();

                        subName = subName.Replace("Type", "");
                        line   += subName + ":" + subValue + "|";
                    }
                }
                else
                {
                    name  = name.Replace("Type", "");
                    line += name + ":" + value + "|";
                }
            }

            parametersList.Add("style", line);
        }
        styleParamsGroupList.Clear();

        return(parametersList.GetQueryStringPostfix());
    }
        protected override QueryStringParametersList GetQueryStringParameters()
        {
            if (string.IsNullOrWhiteSpace(Reference))
            {
                throw new ArgumentException("Reference must be provided.");
            }

            if (string.IsNullOrWhiteSpace(ApiKey))
            {
                throw new ArgumentException("ApiKey must be provided");
            }

            QueryStringParametersList parameters = base.GetQueryStringParameters();

            parameters.Add("reference", Reference);

            if (!string.IsNullOrWhiteSpace(Language))
            {
                parameters.Add("language", Language);
            }

            return(parameters);
        }
Example #16
0
        protected override QueryStringParametersList GetQueryStringParameters()
        {
            if (string.IsNullOrWhiteSpace(Query))
            {
                throw new ArgumentException("Query must be provided.");
            }

            if (string.IsNullOrWhiteSpace(ApiKey))
            {
                throw new ArgumentException("ApiKey must be provided");
            }

            QueryStringParametersList parameters = base.GetQueryStringParameters();

            parameters.Add("query", Query);
            parameters.Add("key", ApiKey);

            if (Location != null)
            {
                parameters.Add("location", Location.ToString());
            }
            if (Radius != null)
            {
                parameters.Add("radius", Radius.Value.ToString(CultureInfo.InvariantCulture));
            }
            if (!string.IsNullOrWhiteSpace(Language))
            {
                parameters.Add("language", Language);
            }
            if (!string.IsNullOrWhiteSpace(Types))
            {
                parameters.Add("types", Types);
            }

            return(parameters);
        }
Example #17
0
        public string GenerateStaticMapURL(StaticMapRequest request)
        {
            string scheme = request.IsSSL ? "https://" : "http://";

            var parametersList = new QueryStringParametersList();

            if (!string.IsNullOrEmpty(request.ApiKey))
            {
                string apiKey = request.ApiKey;
                parametersList.Add("key", apiKey);
            }

            if (request.Center != null)
            {
                ILocationString center = request.Center;

                string centerLocation = center.LocationString;

                parametersList.Add("center", centerLocation);
            }

            if (request.Zoom != default(int))
            {
                parametersList.Add("zoom", request.Zoom.ToString());
            }

            if (request.Scale != default(int))
            {
                if (!ValidScales.Contains(request.Scale))
                {
                    throw new ArgumentException("Scale is invalid; must be a value of 1, 2 or 4");
                }

                parametersList.Add("scale", request.Scale.ToString());
            }

            if (request.Size.Width != default(int) || request.Size.Height != default(int))
            {
                ImageSize imageSize = request.Size;

                parametersList.Add("size", string.Format("{0}x{1}", imageSize.Width, imageSize.Height));
            }
            else
            {
                throw new ArgumentException("Size is invalid");
            }

            if (request.ImageFormat != default(ImageFormat))
            {
                string format;

                switch (request.ImageFormat)
                {
                case ImageFormat.PNG8:
                    format = "png8";
                    break;

                case ImageFormat.PNG32:
                    format = "png32";
                    break;

                case ImageFormat.GIF:
                    format = "gif";
                    break;

                case ImageFormat.JPG:
                    format = "jpg";
                    break;

                case ImageFormat.JPG_baseline:
                    format = "jpg-baseline";
                    break;

                default:
                    throw new ArgumentOutOfRangeException("ImageFormat");
                }

                parametersList.Add("format", format);
            }

            if (request.MapType != null)
            {
                string type;

                switch (request.MapType)
                {
                case MapType.Roadmap:
                    type = "roadmap";
                    break;

                case MapType.Satellite:
                    type = "satellite";
                    break;

                case MapType.Terrain:
                    type = "terrain";
                    break;

                case MapType.Hybrid:
                    type = "hybrid";
                    break;

                default:
                    throw new ArgumentOutOfRangeException("MapType");
                }

                parametersList.Add("maptype", type);
            }

            if (request.Style != null)
            {
                MapStyle style = request.Style;

                var styleComponents = new List <string>();

                if (style.MapFeature != default(MapFeature))
                {
                    string mapFeature;

                    switch (style.MapFeature)
                    {
                    case MapFeature.All:
                        mapFeature = "all";
                        break;

                    case MapFeature.Road:
                        mapFeature = "road";
                        break;

                    case MapFeature.Landscape:
                        mapFeature = "landscape";
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    styleComponents.Add("feature:" + mapFeature);
                }

                if (style.MapElement != default(MapElement))
                {
                    string element;

                    switch (style.MapElement)
                    {
                    case MapElement.All:
                        element = "all";
                        break;

                    case MapElement.Geometry:
                        element = "geometry";
                        break;

                    case MapElement.Labels:
                        element = "lables";
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    styleComponents.Add("element:" + element);
                }

                string hue = style.HUE;
                if (hue != null)
                {
                    styleComponents.Add("hue:" + hue);
                }

                float?lightness = style.Lightness;
                if (lightness != null)
                {
                    styleComponents.Add("lightness:" + lightness);
                }


                float?saturation = style.Saturation;
                if (saturation != null)
                {
                    styleComponents.Add("saturation:" + saturation);
                }

                float?gamma = style.Gamma;
                if (gamma != null)
                {
                    styleComponents.Add("gamma:" + gamma);
                }

                bool inverseLightness = style.InverseLightness;
                if (inverseLightness)
                {
                    styleComponents.Add("inverse_lightnes:true");
                }

                MapVisibility mapVisibility = style.MapVisibility;

                if (mapVisibility != default(MapVisibility))
                {
                    string visibility;

                    switch (mapVisibility)
                    {
                    case MapVisibility.On:
                        visibility = "on";
                        break;

                    case MapVisibility.Off:
                        visibility = "off";
                        break;

                    case MapVisibility.Simplified:
                        visibility = "simplified";
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    styleComponents.Add("visibility:" + visibility);
                }

                parametersList.Add("style", string.Join("|", styleComponents));
            }

            IList <Marker> markers = request.Markers;

            if (markers != null)
            {
                foreach (Marker marker in markers)
                {
                    var markerStyleParams = new List <string>();

                    MarkerStyle markerStyle = marker.Style;
                    if (markerStyle != null)
                    {
                        if (string.IsNullOrWhiteSpace(markerStyle.Color))
                        {
                            throw new ArgumentException("Marker style color can't be empty");
                        }

                        markerStyleParams.Add("color:" + markerStyle.Color);

                        if (!string.IsNullOrWhiteSpace(markerStyle.Label))
                        {
                            markerStyleParams.Add("label:" + markerStyle.Label);
                        }

                        if (markerStyle.Size != default(MarkerSize))
                        {
                            switch (markerStyle.Size)
                            {
                            case MarkerSize.Mid:
                                markerStyleParams.Add("size:mid");
                                break;

                            case MarkerSize.Tiny:
                                markerStyleParams.Add("size:tiny");
                                break;

                            case MarkerSize.Small:
                                markerStyleParams.Add("size:small");
                                break;

                            default:
                                throw new ArgumentOutOfRangeException();
                            }
                        }
                    }

                    string styleString = string.Join("|", markerStyleParams);

                    string locations = string.Join("|", marker.Locations.Select(location => location.LocationString));

                    parametersList.Add("markers", string.Format("{0}|{1}", styleString, locations));
                }
            }

            IList <Path> pathes = request.Pathes;

            if (pathes != null)
            {
                foreach (Path path in pathes)
                {
                    var pathStyleParams = new List <string>();

                    PathStyle pathStyle = path.Style;

                    if (pathStyle != null)
                    {
                        if (string.IsNullOrWhiteSpace(pathStyle.Color))
                        {
                            throw new ArgumentException("Path style color can't be empty");
                        }

                        pathStyleParams.Add("color:" + pathStyle.Color);

                        if (!string.IsNullOrWhiteSpace(pathStyle.FillColor))
                        {
                            pathStyleParams.Add("fillcolor:" + pathStyle.FillColor);
                        }

                        if (pathStyle.Weight != default(int))
                        {
                            pathStyleParams.Add("weight:" + pathStyle.Weight);
                        }
                    }

                    string styleString = string.Join("|", pathStyleParams);

                    string locations = string.Join("|", path.Locations.Select(location => location.LocationString));

                    parametersList.Add("path", string.Format("{0}|{1}", styleString, locations));
                }
            }

            return(scheme + BaseUrl + "?" + parametersList.GetQueryStringPostfix());
        }
		public string GenerateStaticMapURL(StaticMapRequest request)
		{
			string scheme = request.IsSSL ? "https://" : "http://";

			var parametersList = new QueryStringParametersList();
			
			if (request.Center != null)
			{
				ILocationString center = request.Center;

				string centerLocation = center.LocationString;

				parametersList.Add("center", centerLocation);
			}

			if (request.Zoom != default(int))
			{
				parametersList.Add("zoom", request.Zoom.ToString());
			}

			if (request.Size.Width != default(int) || request.Size.Height != default(int))
			{
				ImageSize imageSize = request.Size;

				parametersList.Add("size", string.Format("{0}x{1}", imageSize.Width, imageSize.Height));
			}
			else
			{
				throw new ArgumentException("Size is invalid");
			}

			if (request.ImageFormat != default(ImageFormat))
			{
				string format;

				switch (request.ImageFormat)
				{
					case ImageFormat.PNG8:
						format = "png8";
						break;
					case ImageFormat.PNG32:
						format = "png32";
						break;
					case ImageFormat.GIF:
						format = "gif";
						break;
					case ImageFormat.JPG:
						format = "jpg";
						break;
					case ImageFormat.JPG_baseline:
						format = "jpg-baseline";
						break;
					default:
						throw new ArgumentOutOfRangeException("ImageFormat");
				}

				parametersList.Add("format", format);
			}

			if (request.MapType != null)
			{
				string type;

				switch (request.MapType)
				{
					case MapType.Roadmap:
						type = "roadmap";
						break;
					case MapType.Satellite:
						type = "satellite";
						break;
					case MapType.Terrain:
						type = "terrain";
						break;
					case MapType.Hybrid:
						type = "hybrid";
						break;
					default:
						throw new ArgumentOutOfRangeException("MapType");
				}

				parametersList.Add("maptype", type);
			}

			if (request.Style != null)
			{
				MapStyle style = request.Style;

				var styleComponents = new List<string>();

				if (style.MapFeature != default(MapFeature))
				{
					string mapFeature;

					switch (style.MapFeature)
					{
						case MapFeature.All:
							mapFeature = "all";
							break;
						case MapFeature.Road:
							mapFeature = "road";
							break;
						case MapFeature.Landscape:
							mapFeature = "landscape";
							break;
						default:
							throw new ArgumentOutOfRangeException();
					}

					styleComponents.Add("feature:" + mapFeature);
				}

				if (style.MapElement != default(MapElement))
				{
					string element;

					switch (style.MapElement)
					{
						case MapElement.All:
							element = "all";
							break;
						case MapElement.Geometry:
							element = "geometry";
							break;
						case MapElement.Labels:
							element = "lables";
							break;
						default:
							throw new ArgumentOutOfRangeException();
					}

					styleComponents.Add("element:" + element);
				}

				string hue = style.HUE;
				if (hue != null)
				{
					styleComponents.Add("hue:" + hue);
				}

				float? lightness = style.Lightness;
				if (lightness != null)
				{
					styleComponents.Add("lightness:" + lightness);
				}


				float? saturation = style.Saturation;
				if (saturation != null)
				{
					styleComponents.Add("saturation:" + saturation);
				}

				float? gamma = style.Gamma;
				if (gamma != null)
				{
					styleComponents.Add("gamma:" + gamma);
				}

				bool inverseLightness = style.InverseLightness;
				if (inverseLightness)
				{
					styleComponents.Add("inverse_lightnes:true");
				}

				MapVisibility mapVisibility = style.MapVisibility;

				if (mapVisibility != default(MapVisibility))
				{
					string visibility;

					switch (mapVisibility)
					{
						case MapVisibility.On:
							visibility = "on";
							break;
						case MapVisibility.Off:
							visibility = "off";
							break;
						case MapVisibility.Simplified:
							visibility = "simplified";
							break;
						default:
							throw new ArgumentOutOfRangeException();
					}

					styleComponents.Add("visibility:" + visibility);
				}

				parametersList.Add("style", string.Join("|", styleComponents));
			}

			IList<Marker> markers = request.Markers;

			if (markers != null)
			{
				foreach (Marker marker in markers)
				{
					var markerStyleParams = new List<string>();

					MarkerStyle markerStyle = marker.Style;
					if (markerStyle != null)
					{
						if (string.IsNullOrWhiteSpace(markerStyle.Color))
						{
							throw new ArgumentException("Marker style color can't be empty");
						}

						markerStyleParams.Add("color:" + markerStyle.Color);

						if (!string.IsNullOrWhiteSpace(markerStyle.Label))
						{
							markerStyleParams.Add("label:" + markerStyle.Label);
						}

						if (markerStyle.Size != default(MarkerSize))
						{
							switch (markerStyle.Size)
							{
								case MarkerSize.Mid:
									markerStyleParams.Add("size:mid");
									break;
								case MarkerSize.Tiny:
									markerStyleParams.Add("size:tiny");
									break;
								case MarkerSize.Small:
									markerStyleParams.Add("size:small");
									break;
								default:
									throw new ArgumentOutOfRangeException();
							}
						}
					}

					string styleString = string.Join("|", markerStyleParams);

					string locations = string.Join("|", marker.Locations.Select(location => location.LocationString));

					parametersList.Add("markers", string.Format("{0}|{1}", styleString, locations));
				}
			}

			IList<Path> pathes = request.Pathes;

			if (pathes != null)
			{
				foreach (Path path in pathes)
				{
					var pathStyleParams = new List<string>();

					PathStyle pathStyle = path.Style;

					if (pathStyle != null)
					{
						if (string.IsNullOrWhiteSpace(pathStyle.Color))
						{
							throw new ArgumentException("Path style color can't be empty");
						}

						pathStyleParams.Add("color:" + pathStyle.Color);

						if (!string.IsNullOrWhiteSpace(pathStyle.FillColor))
						{
							pathStyleParams.Add("fillcolor:" + pathStyle.FillColor);
						}

						if (pathStyle.Weight != default(int))
						{
							pathStyleParams.Add("weight:" + pathStyle.Weight);
						}
					}

					string styleString = string.Join("|", pathStyleParams);

					string locations = string.Join("|", path.Locations.Select(location => location.LocationString));

					parametersList.Add("path", string.Format("{0}|{1}", styleString, locations));
				}
			}

			parametersList.Add("sensor", request.Sensor ? "true" : "false");

			return scheme + BaseUrl + "?" + parametersList.GetQueryStringPostfix();
		}
Example #19
0
        /// <summary>Generates the static map URL.</summary>
        /// <param name="request">The request.</param>
        /// <returns>The <see cref="string"/></returns>
        /// <exception cref="System.ArgumentException">
        /// Size is invalid
        /// or
        /// Marker style color can't be empty
        /// or
        /// Path style color can't be empty
        /// </exception>
        /// <exception cref="System.ArgumentOutOfRangeException">
        /// Request image format is unknown.
        /// </exception>
        public string GenerateStaticMapUrl(StaticMapRequest request)
        {
            var scheme = request.IsSSL ? "https://" : "http://";

            var parametersList = new QueryStringParametersList();

            if (request.Center != null)
            {
                var center = request.Center;

                var centerLocation = center.LocationString;

                parametersList.Add("center", centerLocation);
            }

            if (request.Zoom != default(byte))
            {
                parametersList.Add("zoom", request.Zoom.ToString());
            }

            if (request.Size.Width != default(int) || request.Size.Height != default(int))
            {
                var imageSize = request.Size;

                parametersList.Add("size", $"{imageSize.Width}x{imageSize.Height}");
            }
            else
            {
                throw new ArgumentException("Size is invalid");
            }

            if (request.ImageFormat != default(ImageFormat))
            {
                string format;
                switch (request.ImageFormat)
                {
                    case ImageFormat.Png8:
                        format = "png8";
                        break;
                    case ImageFormat.Png32:
                        format = "png32";
                        break;
                    case ImageFormat.Gif:
                        format = "gif";
                        break;
                    case ImageFormat.Jpg:
                        format = "jpg";
                        break;
                    case ImageFormat.JpgBaseline:
                        format = "jpg-baseline";
                        break;
                    default:
                        throw new ArgumentOutOfRangeException(nameof(request.ImageFormat));
                }

                parametersList.Add("format", format);
            }

            if (request.MapType != null)
            {
                string type;
                switch (request.MapType)
                {
                    case MapType.Roadmap:
                        type = "roadmap";
                        break;
                    case MapType.Satellite:
                        type = "satellite";
                        break;
                    case MapType.Terrain:
                        type = "terrain";
                        break;
                    case MapType.Hybrid:
                        type = "hybrid";
                        break;
                    default:
                        throw new ArgumentOutOfRangeException(nameof(request.MapType));
                }

                parametersList.Add("maptype", type);
            }

            if (request.Style != null)
            {
                foreach (var style in request.Style)
                {
                    var styleComponents = new List<string>();

                    if (style.MapFeature != default(MapFeature))
                    {
                        string mapFeature;

                        switch (style.MapFeature)
                        {
                            case MapFeature.All:
                                mapFeature = "all";
                                break;
                            case MapFeature.Administrative:
                                mapFeature = "administrative";
                                break;
                            case MapFeature.AdministrativeCountry:
                                mapFeature = "administrative.country";
                                break;
                            case MapFeature.AdministrativeLandParcel:
                                mapFeature = "administrative.land_parcel";
                                break;
                            case MapFeature.AdministrativeLocality:
                                mapFeature = "administrative.locality";
                                break;
                            case MapFeature.AdministrativeNeighborhood:
                                mapFeature = "administrative.neighborhood";
                                break;
                            case MapFeature.AdministrativeProvince:
                                mapFeature = "administrative.province";
                                break;
                            case MapFeature.Landscape:
                                mapFeature = "landscape";
                                break;
                            case MapFeature.LandscapeManMade:
                                mapFeature = "landscape.man_made";
                                break;
                            case MapFeature.LandscapeNatural:
                                mapFeature = "landscape.natural";
                                break;
                            case MapFeature.LandscapeNaturalLandcover:
                                mapFeature = "landscape.natural.landcover";
                                break;
                            case MapFeature.LandscapeNaturalTerrain:
                                mapFeature = "landscape.natural.terrain";
                                break;
                            case MapFeature.Poi:
                                mapFeature = "poi";
                                break;
                            case MapFeature.PoiAttraction:
                                mapFeature = "poi.attraction";
                                break;
                            case MapFeature.PoiBusiness:
                                mapFeature = "poi.business";
                                break;
                            case MapFeature.PoiGovernment:
                                mapFeature = "poi.government";
                                break;
                            case MapFeature.PoiMedical:
                                mapFeature = "poi.medical";
                                break;
                            case MapFeature.PoiPark:
                                mapFeature = "poi.park";
                                break;
                            case MapFeature.PoiPlaceOfWorship:
                                mapFeature = "poi.place_of_worship";
                                break;
                            case MapFeature.PoiSchool:
                                mapFeature = "poi.school";
                                break;
                            case MapFeature.PoiSportsComplex:
                                mapFeature = "poi.sports_complex";
                                break;
                            case MapFeature.Road:
                                mapFeature = "road";
                                break;
                            case MapFeature.RoadArterial:
                                mapFeature = "road.arterial";
                                break;
                            case MapFeature.RoadHighway:
                                mapFeature = "road.highway";
                                break;
                            case MapFeature.RoadHighwayControlledAccess:
                                mapFeature = "road.highway.controlled_access";
                                break;
                            case MapFeature.RoadLocal:
                                mapFeature = "road.local";
                                break;
                            case MapFeature.Transit:
                                mapFeature = "transit";
                                break;
                            case MapFeature.TransitLine:
                                mapFeature = "transit.line";
                                break;
                            case MapFeature.TransitStation:
                                mapFeature = "transit.station";
                                break;
                            case MapFeature.TransitStationAirport:
                                mapFeature = "transit.station.airport";
                                break;
                            case MapFeature.TransitStationBus:
                                mapFeature = "transit.station.bus";
                                break;
                            case MapFeature.TransitStationRail:
                                mapFeature = "transit.station.rail";
                                break;
                            case MapFeature.Water:
                                mapFeature = "water";
                                break;
                            default:
                                throw new ArgumentOutOfRangeException(nameof(style.MapFeature));
                        }

                        styleComponents.Add("feature:" + mapFeature);
                    }

                    if (style.MapElement != default(MapElement))
                    {
                        string element;

                        switch (style.MapElement)
                        {
                            case MapElement.All:
                                element = "all";
                                break;
                            case MapElement.Geometry:
                                element = "geometry";
                                break;
                            case MapElement.GeometryFill:
                                element = "geometry.fill";
                                break;
                            case MapElement.GeometryStroke:
                                element = "geometry.stroke";
                                break;
                            case MapElement.Labels:
                                element = "lables";
                                break;
                            case MapElement.LabelsIcon:
                                element = "labels.icon";
                                break;
                            case MapElement.LabelsText:
                                element = "labels.text";
                                break;
                            case MapElement.LabelsTextFill:
                                element = "labels.text.fill";
                                break;
                            case MapElement.LabelsTextStroke:
                                element = "labels.text.stroke";
                                break;
                            default:
                                throw new ArgumentOutOfRangeException(nameof(style.MapElement));
                        }

                        styleComponents.Add("element:" + element);
                    }

                    if (style.HUE != default(Color))
                    {
                        styleComponents.Add("hue:0x" + ColorToHexConverter(style.HUE));
                    }

                    var lightness = style.Lightness;
                    if (lightness != null)
                    {
                        if (lightness < -100 || lightness > 100)
                        {
                            throw new ArgumentOutOfRangeException(nameof(style.Lightness));
                        }

                        styleComponents.Add("lightness:" + lightness);
                    }

                    var saturation = style.Saturation;
                    if (saturation != null)
                    {
                        if (saturation < -100 || saturation > 100)
                        {
                            throw new ArgumentOutOfRangeException(nameof(style.Saturation));
                        }

                        styleComponents.Add("saturation:" + saturation);
                    }

                    var gamma = style.Gamma;
                    if (gamma != null && gamma != 1.0)
                    {
                        if (gamma < 0.01 || gamma > 10.0)
                        {
                            throw new ArgumentOutOfRangeException(nameof(style.Gamma));
                        }

                        styleComponents.Add("gamma:" + gamma);
                    }

                    var inverseLightness = style.InvertLightness;
                    if (inverseLightness)
                    {
                        styleComponents.Add("inverse_lightnes:true");
                    }

                    if (style.Weight != default(int))
                    {
                        if (style.Weight < 0)
                        {
                            throw new ArgumentOutOfRangeException(nameof(style.Weight));
                        }

                        styleComponents.Add("weight:" + style.Weight);
                    }

                    if (style.Color != default(Color))
                    {
                        styleComponents.Add("color:0x" + ColorToHexConverter(style.Color));
                    }

                    var mapVisibility = style.Visibility;

                    if (mapVisibility != default(MapVisibility))
                    {
                        string visibility;

                        switch (mapVisibility)
                        {
                            case MapVisibility.On:
                                visibility = "on";
                                break;
                            case MapVisibility.Off:
                                visibility = "off";
                                break;
                            case MapVisibility.Simplified:
                                visibility = "simplified";
                                break;
                            default:
                                throw new ArgumentOutOfRangeException(nameof(style.Visibility));
                        }

                        styleComponents.Add("visibility:" + visibility);
                    }

                    parametersList.Add("style", string.Join("|", styleComponents));
                }
            }

            var markers = request.Markers;

            if (markers != null)
            {
                foreach (var marker in markers)
                {
                    var markerStyleParams = new List<string>();

                    var markerStyle = marker.Style;
                    if (markerStyle != null)
                    {
                        if (string.IsNullOrWhiteSpace(markerStyle.Color))
                        {
                            throw new ArgumentException("Marker style color can't be empty");
                        }

                        markerStyleParams.Add("color:" + markerStyle.Color);

                        if (!string.IsNullOrWhiteSpace(markerStyle.Label))
                        {
                            markerStyleParams.Add("label:" + markerStyle.Label);
                        }

                        if (markerStyle.Size != default(MarkerSize))
                        {
                            switch (markerStyle.Size)
                            {
                                case MarkerSize.Mid:
                                    markerStyleParams.Add("size:mid");
                                    break;
                                case MarkerSize.Tiny:
                                    markerStyleParams.Add("size:tiny");
                                    break;
                                case MarkerSize.Small:
                                    markerStyleParams.Add("size:small");
                                    break;
                                default:
                                    throw new ArgumentOutOfRangeException();
                            }
                        }
                    }

                    var styleString = string.Join("|", markerStyleParams);

                    var locations = string.Join("|", marker.Locations.Select(location => location.LocationString));

                    parametersList.Add("markers", $"{styleString}|{locations}");
                }
            }

            var pathes = request.Pathes;

            if (pathes != null)
            {
                foreach (var path in pathes)
                {
                    var pathStyleParams = new List<string>();

                    var pathStyle = path.Style;

                    if (pathStyle != null)
                    {
                        if (string.IsNullOrWhiteSpace(pathStyle.Color))
                        {
                            throw new ArgumentException("Path style color can't be empty");
                        }

                        pathStyleParams.Add("color:" + pathStyle.Color);

                        if (!string.IsNullOrWhiteSpace(pathStyle.FillColor))
                        {
                            pathStyleParams.Add("fillcolor:" + pathStyle.FillColor);
                        }

                        if (pathStyle.Weight != default(int))
                        {
                            pathStyleParams.Add("weight:" + pathStyle.Weight);
                        }
                    }

                    var styleString = string.Join("|", pathStyleParams);

                    var locations = string.Join("|", path.Locations.Select(location => location.LocationString));

                    parametersList.Add("path", $"{styleString}|{locations}");
                }
            }

            parametersList.Add("sensor", request.Sensor ? "true" : "false");

            return scheme + BaseUrl + "?" + parametersList.GetQueryStringPostfix();
        }