示例#1
0
        public async override Task <OtimizacaoRota> obterOtimizacaoRota(Local[] locais)
        {
            List <String> enderecos = new List <string>();

            foreach (var local in locais)
            {
                enderecos.Add(prepararEndereco(local));
            }

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://www.mapquestapi.com/directions/v2/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var response = await client.PostAsJsonAsync("optimizedroute?key=" + key, new { locations = enderecos });

                if (response.IsSuccessStatusCode)
                {
                    dynamic resultado = await response.Content.ReadAsAsync <dynamic>();

                    float distanciaTotal = ((float)resultado.route.distance) * coeficienteConversãoKm;

                    JArray sequencia           = resultado.route.locationSequence;
                    int[]  sequenciaReordenada = new int[sequencia.Count];
                    int    i = 0;
                    foreach (var indice in sequencia)
                    {
                        sequenciaReordenada[i] = (int)indice;
                        i++;
                    }

                    JArray  trechos           = resultado.route.legs;
                    float[] distanciasTrechos = new float[trechos.Count];

                    for (int t = 0; t < trechos.Count; t++)
                    {
                        float   distanciaTrecho;
                        dynamic trecho = trechos.ElementAt(t);
                        distanciaTrecho      = ((float)trecho.distance) * coeficienteConversãoKm;
                        distanciasTrechos[t] = distanciaTrecho;
                    }

                    OtimizacaoRota o = new OtimizacaoRota()
                    {
                        DistanciasTrechos = distanciasTrechos,
                        DistanciaTotal    = distanciaTotal,
                        SequenciaLocais   = sequenciaReordenada
                    };

                    return(o);
                }
            }

            return(null);
        }
示例#2
0
        public static RoteiroColetaDTO gerarRoteiroAutomatico(ParadaRoteiroColetaDTO[] paradas, CentroDistribuicao centroDistribuicao)
        {
            ConectorRotas    conector = obterConectorRotas();
            RoteiroColetaDTO roteiro  = null;

            Local[] locais = derivarLocais(paradas, centroDistribuicao);

            OtimizacaoRota o = conector.obterOtimizacaoRota(locais).Result;

            float distanciaTotal = o.DistanciaTotal;

            int[]   indicesReordenados = o.SequenciaLocais;
            float[] distanciasTrechos  = o.DistanciasTrechos;

            List <ParadaRoteiroColetaDTO> paradasReordenadas = new List <ParadaRoteiroColetaDTO>();

            foreach (var indice in indicesReordenados)
            {
                int i = indice;
                if ((i != 0) && (i != (indicesReordenados.Count() - 1)))
                {
                    paradasReordenadas.Add(paradas[i - 1]);
                }
            }

            for (int p = 0; p < paradasReordenadas.Count; p++)
            {
                float distanciaTrecho = distanciasTrechos[p];
                paradasReordenadas[p].Distancia = distanciaTrecho;
            }

            roteiro           = new RoteiroColetaDTO();
            roteiro.Distancia = distanciaTotal;
            roteiro.Paradas   = paradasReordenadas.ToArray();

            return(roteiro);
        }