コード例 #1
0
        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 += "&region=" + RegionInfo.CurrentRegion.ThreeLetterISORegionName;

            return($"https://maps.googleapis.com/maps/api/distancematrix/json?{requestParameters}");
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public GoogleMapsService(IDistanceMatrixRequestConfiguration activeDistanceMatrixConfiguration)
 {
     _activeDistanceMatrixConfiguration = activeDistanceMatrixConfiguration;
 }