private string BuildSingleRequest(IDistanceMatrixRequestConfiguration configuration) { if (configuration.Destinations == null || string.IsNullOrEmpty(configuration.Origin)) { throw new ArgumentException("Invalid request configuration"); } if (string.IsNullOrEmpty((Application.Current as App).ApiKey)) { throw new Exception("Missing API key"); } configuration.Origins = new[] { configuration.Origin }; var requestParameters = ""; requestParameters += $"&key={(Application.Current as App).ApiKey}"; requestParameters += "&origins=" + string.Join("|", configuration.Origins.Select(x => x.ToString())); requestParameters += "&destinations=" + string.Join("|", configuration.Destinations.Select(x => x.ToString())); if (configuration.DepartureTime != null && configuration.DepartureTime != DateTime.MinValue) { requestParameters += "&departure_time=" + ((int)(((DateTime)configuration.DepartureTime).Subtract(new DateTime(1970, 1, 1))).TotalSeconds).ToString(); } else { requestParameters += "&departure_time=" + ((int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds).ToString(); } if (configuration.ArrivalTime != null && configuration.ArrivalTime != DateTime.MinValue) { requestParameters += "&arrival_time=" + ((int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds).ToString(); } if (configuration.Restriction != Restriction.Undefined) { var flags = (configuration.Restriction as Enum).GetFlags(); if (flags != null && flags.Count() > 0) { requestParameters += "&avoid=" + string.Join("|", flags.Select(flag => (flag as Enum).GetDescription())); } else { requestParameters += "&avoid=" + (configuration.Restriction as Enum).GetDescription(); } } if (configuration.TrafficModel != TrafficModel.Undefined) { requestParameters += "&traffic_model=" + (configuration.TrafficModel as Enum).GetDescription(); } if (configuration.TravelMode != TravelMode.Undefined) { requestParameters += "&mode=" + (configuration.TravelMode as Enum).GetDescription(); } requestParameters += "&units=" + UnitSystem.Metric.GetDescription(); requestParameters += "®ion=" + RegionInfo.CurrentRegion.ThreeLetterISORegionName; return($"https://maps.googleapis.com/maps/api/distancematrix/json?{requestParameters}"); }
private List <string> BuildRequests(IEnumerable <string> locations, IDistanceMatrixRequestConfiguration configuration) { var count = locations.Count(); var retval = new List <string>(); for (int i = 0; i < count; i++) { var config = configuration.Copy(); config.Origin = locations.ElementAt(i); retval.Add(BuildSingleRequest(config)); } return(retval); }
public GoogleMapsService(IDistanceMatrixRequestConfiguration activeDistanceMatrixConfiguration) { _activeDistanceMatrixConfiguration = activeDistanceMatrixConfiguration; }