public Uri ToUri()
{
EnsureSensor(true);
string formatStr = null;
switch(this.Format)
{
case GMapsImageFormats.Unspecified: break;
case GMapsImageFormats.JPGbaseline: formatStr = "jpg-baseline"; break;
default: formatStr = this.Format.ToString().ToLower(); break;
}
string maptypeStr = null;
switch(this.MapType)
{
case MapTypes.Unspecified: break;
default:
maptypeStr = this.MapType.ToString().ToLower();
break;
}
string zoomStr = null;
if(this.Zoom != null)
zoomStr = this.Zoom.ToString();
string centerStr = null;
if(this.Center != null)
centerStr = this.Center.GetAsUrlParameter();
QueryStringBuilder qs = new QueryStringBuilder()
.Append("center", centerStr)
.Append("zoom", zoomStr)
.Append("size", string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}x{1}", Size.Width, Size.Height))
.Append("scale", Scale == null ? (string)null : Scale.Value.ToString())
.Append("format", formatStr)
.Append("maptype", maptypeStr)
.Append("language", Language)
.Append("region", this.Region)
.Append(GetMarkersStr())
.Append(GetPathsStr())
.Append("visible", GetVisibleStr())
.Append("sensor", (Sensor == true ? "true" : "false"));
var url = "staticmap?" + qs.ToString();
return new Uri(BaseUri, new Uri(url, UriKind.Relative));
}
public void Markers_ShouldNotUseExtraZeros_BecauseUrlLengthIsLimited() { StaticMapRequest map = new StaticMapRequest(); map.Markers.Add(new LatLng(40.0, -60.0)); map.Markers.Add(new LatLng(41.1, -61.1)); map.Markers.Add(new LatLng(42.22, -62.22)); map.Markers.Add(new LatLng(44.444, -64.444)); map.Markers.Add(new LatLng(45.5555, -65.5555)); map.Markers.Add(new LatLng(46.66666, -66.66666)); map.Markers.Add(new LatLng(47.777777, -67.777777)); map.Markers.Add(new LatLng(48.8888888, -68.8888888)); // based on this http://gis.stackexchange.com/a/8674/15274, // I'm not too concerned about more than 7 decimals of precision. string actual = map.ToUri().Query; StringAssert.Contains("markers=40,-60&", actual); StringAssert.Contains("markers=41.1,-61.1&", actual); StringAssert.Contains("markers=42.22,-62.22&", actual); StringAssert.Contains("markers=44.444,-64.444&", actual); StringAssert.Contains("markers=45.5555,-65.5555&", actual); StringAssert.Contains("markers=46.66666,-66.66666&", actual); StringAssert.Contains("markers=47.777777,-67.777777&", actual); StringAssert.Contains("markers=48.8888888,-68.8888888", actual); }