public IDistanceMatrixData GetDistanceMatrix(IEnumerable <string> locations, TravelMode travelMode)
        {
            _activeDistanceMatrixConfiguration.Destinations = _activeDistanceMatrixConfiguration.Origins = locations.ToArray();
            _activeDistanceMatrixConfiguration.TravelMode   = _activeDistanceMatrixConfiguration.TravelMode;

            DistanceMatrixResponse response = new DistanceMatrixResponse()
            {
                Origin_Addresses      = Array.Empty <string>(),
                Destination_Addresses = Array.Empty <string>(),
                Rows = Array.Empty <Row>(),
            };

            if (locations.Count() < MAX_REQUEST_DESTINATIONS_COUNT)
            {
                var requests = BuildRequests(locations, _activeDistanceMatrixConfiguration);
                requests.ForEach(async request =>
                {
                    var res  = await HttpRequest.Post <DistanceMatrixResponse>(request);
                    response = response.Merge(res);
                });
            }
            else
            {
                throw new ArgumentException("MAX_REQUEST_DESTINATIONS_COUNT value exceeded");
            }
            return(new DistanceMatrixData(response));
        }
Exemple #2
0
        public DistanceMatrixResponse Merge(DistanceMatrixResponse response)
        {
            Status           = response.Status;
            Origin_Addresses = Origin_Addresses.Concat(response.Origin_Addresses).ToArray();

            Destination_Addresses = Destination_Addresses.Concat(response.Destination_Addresses).ToArray();
            Rows = Rows.Concat(response.Rows).ToArray();
            return(this);
        }
Exemple #3
0
        public DistanceMatrixData(DistanceMatrixResponse response)
        {
            Waypoints = response.Origin_Addresses;

            var elementsCount = response.Rows.First().Elements.Length;

            DurationMatrix = new int[elementsCount][];
            DistanceMatrix = new int[elementsCount][];
            for (int i = 0; i < elementsCount; i++)
            {
                DurationMatrix[i] = response.Rows[i].Elements.Select(element => element.Duration.Value).ToArray();
                DistanceMatrix[i] = response.Rows[i].Elements.Select(element => element.Distance.Value).ToArray();
            }
        }