protected override QueryStringParametersList GetQueryStringParameters()
{
if (string.IsNullOrWhiteSpace(this.Origin))
throw new ArgumentException("Must specify an Origin");
if (string.IsNullOrWhiteSpace(this.Destination))
throw new ArgumentException("Must specify a Destination");
if (!Enum.IsDefined(typeof(AvoidWay), this.Avoid))
throw new ArgumentException("Invalid enumeration value for 'Avoid'");
if (!Enum.IsDefined(typeof(TravelMode), this.TravelMode))
throw new ArgumentException("Invalid enumeration value for 'TravelMode'");
if (this.TravelMode == TravelMode.Transit && this.DepartureTime == default(DateTime) && this.ArrivalTime == default(DateTime))
throw new ArgumentException("You must set either DepatureTime or ArrivalTime when TravelMode = Transit");
var parameters = base.GetQueryStringParameters();
parameters.Add("origin", this.Origin);
parameters.Add("destination", this.Destination);
parameters.Add("units", this.Units.ToString().ToLower());
parameters.Add("mode", this.TransitMode.ToString().ToLower());
if (this.Region != null)
parameters.Add("region", this.Region);
if (this.Alternatives)
parameters.Add("alternatives", "true");
if (this.Avoid != AvoidWay.Nothing)
parameters.Add("avoid", this.Avoid.ToEnumString('|'));
if (!string.IsNullOrWhiteSpace(this.Language))
parameters.Add("language", this.Language);
if (this.Waypoints != null && this.Waypoints.Any())
parameters.Add("waypoints", string.Join("|", this.OptimizeWaypoints ? new[] { "optimize:true" }.Concat(Waypoints) : this.Waypoints));
if (this.TravelMode == TravelMode.Transit)
{
parameters.Add("transit_mode", this.TransitMode.ToEnumString('|'));
if (this.TransitRoutingPreference != TransitRoutingPreference.Nothing)
parameters.Add("transit_routing_preference", this.TransitRoutingPreference.ToEnumString('|'));
if (this.ArrivalTime != default(DateTime))
parameters.Add("arrival_time", this.ArrivalTime.DateTimeToUnixTimestamp().ToString(CultureInfo.InvariantCulture));
if (this.DepartureTime != default(DateTime))
parameters.Add("departure_time", this.DepartureTime.DateTimeToUnixTimestamp().ToString(CultureInfo.InvariantCulture));
}
return parameters;
}