public async override Task <MensuracaoRota> obterMensuracaoRota(Local[] locais) { MensuracaoRota m = null; 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("routematrix?key=" + key, new { locations = enderecos, options = new { allToAll = true } }); if (response.IsSuccessStatusCode) { float distanciaTotal = 0; float[] distanciasTrechos = new float[locais.Count() - 1]; dynamic resultado = await response.Content.ReadAsAsync <dynamic>(); JArray matrizDistancias = resultado.distance; int i = 0; foreach (var vetor in matrizDistancias) { if (i < (vetor.Count() - 1)) { float distanciaTrecho = (float)vetor.SelectToken("[" + (i + 1) + "]"); distanciaTrecho *= coeficienteConversãoKm; distanciaTotal += distanciaTrecho; distanciasTrechos[i] = distanciaTrecho; i++; } } m = new MensuracaoRota() { DistanciasTrechos = distanciasTrechos, DistanciaTotal = distanciaTotal }; } } return(m); }
public static RoteiroColetaDTO gerarRoteiroManual(ParadaRoteiroColetaDTO[] paradas, CentroDistribuicao centroDistribuicao) { ConectorRotas conector = new ConectorMapQuest(); RoteiroColetaDTO roteiro = null; Local[] locais = derivarLocais(paradas, centroDistribuicao); MensuracaoRota m = conector.obterMensuracaoRota(locais).Result; float distanciaTotal = m.DistanciaTotal; float[] distanciasTrechos = m.DistanciasTrechos; for (int p = 0; p < paradas.Length; p++) { paradas[p].Distancia = distanciasTrechos[p]; } roteiro = new RoteiroColetaDTO(); roteiro.Distancia = distanciaTotal; roteiro.Paradas = paradas; return(roteiro); }