public static async Task <List <List <double> > > GetDurationMatrix(List <Coordinate> origins, List <Coordinate> destinations) { MapDistanceMatrixResponse mapDistanceMatrixResponse = await GetDistanceMatrixResponse(origins, destinations); int rowcount = mapDistanceMatrixResponse.rows.Count; List <List <double> > durationmatrix = new List <List <double> >(); for (int i = 0; i < rowcount; i++) { Row row = mapDistanceMatrixResponse.rows[i]; durationmatrix.Add(new List <double>()); foreach (Element element in row.elements) { durationmatrix[i].Add(element.duration.value); } } return(durationmatrix); }
public static List <List <double> > Get_Duration_in_traffic_Matrix(MapDistanceMatrixResponse mapDistanceMatrixResponse) { try { int rowcount = mapDistanceMatrixResponse.rows.Count; List <List <double> > duration_in_traffic_matrix = new List <List <double> >(); for (int i = 0; i < rowcount; i++) { Row row = mapDistanceMatrixResponse.rows[i]; duration_in_traffic_matrix.Add(new List <double>()); foreach (Element element in row.elements) { duration_in_traffic_matrix[i].Add(element.duration_in_traffic.value); } } return(duration_in_traffic_matrix); } catch (Exception e) { return(null); } }
public static async Task <MapDistanceMatrixResponse> GetDistanceMatrixResponse(List <Coordinate> origins, List <Coordinate> destinations) { string str_origin = ""; string str_destination = ""; int OrgCount = origins.Count; int DesCount = destinations.Count; string[] OriginsSets = new string[OrgCount / 10 + (OrgCount % 10 > 0 ? 1 : 0)]; string[] DestinationsSets = new string[DesCount / 10 + (DesCount % 10 > 0 ? 1 : 0)]; for (int i = 0; i < OrgCount; i++) { if (i % 10 == 0) { str_origin = "origins="; } if (i == OrgCount - 1 || i % 10 == 9) { str_origin += origins[i].Latitude + "," + origins[i].Longitude; } else { str_origin += origins[i].Latitude + "," + origins[i].Longitude + "|"; } if ((i + 1) % 10 == 0 || i == OrgCount - 1) { OriginsSets[i / 10] = str_origin; } } for (int i = 0; i < DesCount; i++) { if (i % 10 == 0) { str_destination = "destinations="; } if (i == DesCount - 1 || i % 10 == 9) { str_destination += destinations[i].Latitude + "," + destinations[i].Longitude; } else { str_destination += destinations[i].Latitude + "," + destinations[i].Longitude + "|"; } if ((i + 1) % 10 == 0 || i == DesCount - 1) { DestinationsSets[i / 10] = str_destination; } } string mode = "mode=driving"; //string parameter = str_origin + "&" + str_destination + "&" + mode; string output = "json"; string key = "key=" + Mapkey; MapDistanceMatrixResponse mapDistanceMatrixResponse = new MapDistanceMatrixResponse { destination_addresses = new List <string>(), origin_addresses = new List <string>(), rows = new List <Row>() }; bool have_destination_addresses = false; for (int i = 0; i < OriginsSets.Length; i++) { string OriginsSet = OriginsSets[i]; MapDistanceMatrixResponse mapDistanceMatrixRes = new MapDistanceMatrixResponse { destination_addresses = new List <string>(), origin_addresses = new List <string>(), rows = new List <Row>() }; bool have_origin_addresses = false; for (int j = 0; j < DestinationsSets.Length; j++) { string DestinationsSet = DestinationsSets[j]; string parameter = OriginsSet + "&" + DestinationsSet + "&" + mode; string url = "https://maps.googleapis.com/maps/api/distancematrix/" + output + "?" + parameter + "&" + key; //System.Console.WriteLine("Distance Matrix Request: " + url); string json = await GetJsonAsync(url); MapDistanceMatrixResponse mapDistanceMatrixRes1 = JsonConvert.DeserializeObject <MapDistanceMatrixResponse>(json); if (!have_origin_addresses) { mapDistanceMatrixResponse.origin_addresses.AddRange(mapDistanceMatrixRes1.origin_addresses); have_origin_addresses = true; } if (!have_destination_addresses) { mapDistanceMatrixResponse.destination_addresses.AddRange(mapDistanceMatrixRes1.destination_addresses); } if (j == 0) { mapDistanceMatrixRes.rows.AddRange(mapDistanceMatrixRes1.rows); continue; } for (int k = 0; k < mapDistanceMatrixRes1.rows.Count; k++) { mapDistanceMatrixRes.rows[k].elements.AddRange(mapDistanceMatrixRes1.rows[k].elements); } } have_destination_addresses = true; mapDistanceMatrixResponse.rows.AddRange(mapDistanceMatrixRes.rows); } return(mapDistanceMatrixResponse); }