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)); }
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); }
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(); } }