Exemple #1
0
        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);
     }
 }
Exemple #3
0
        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);
        }