public void DesenharRota(JObject rotaEscolhida) { foreach (Polyline linha in this.PolylinesCaminhoParaVaga) { try { linha.Remove(); } catch { } } RotaAtual = rotaEscolhida; string polylineString = (rotaEscolhida["overview_polyline"])["points"].ToString(); var polyline = GooglePoints.Decode(polylineString); PolylineOptions opt = new PolylineOptions(); foreach (var point in polyline) { opt = opt.Add(point); } ; opt = opt.InvokeWidth(20); opt = opt.InvokeColor(this.CorLinhaEstrada); this.PolylinesCaminhoParaVaga.Add(Mapa.AddPolyline(opt)); }
private void MostrarRotaParaVaga(Vaga vaga) { this.ControleMapa.PolylinesCaminhoParaVaga.ForEach(x => x.Remove()); JObject estacionamento = null; if (ControleMapa.EstacionamentoSelecionado != null && ControleMapa.EstacionamentoSelecionado.Value <long>("Id") == vaga.IdEstacionamento) { estacionamento = ControleMapa.EstacionamentoSelecionado; } else { try { estacionamento = ControleMapa.ObterEstacionamento(vaga.IdEstacionamento); } catch (Exception ex) { return; } } if (estacionamento == null) { return; } JArray pontos = (JArray)estacionamento["Pontos"]; Graph g = new Graph(); /* * g.add_vertex('A', new Dictionary<char, int>() { { 'B', 7 }, { 'C', 8 } }); * g.add_vertex('B', new Dictionary<char, int>() { { 'A', 7 }, { 'F', 2 } }); * g.add_vertex('C', new Dictionary<char, int>() { { 'A', 8 }, { 'F', 6 }, { 'G', 4 } }); * g.add_vertex('D', new Dictionary<char, int>() { { 'F', 8 } }); * g.add_vertex('E', new Dictionary<char, int>() { { 'H', 1 } }); * g.add_vertex('F', new Dictionary<char, int>() { { 'B', 2 }, { 'C', 6 }, { 'D', 8 }, { 'G', 9 }, { 'H', 3 } }); * g.add_vertex('G', new Dictionary<char, int>() { { 'C', 4 }, { 'F', 9 } }); * g.add_vertex('H', new Dictionary<char, int>() { { 'E', 1 }, { 'F', 3 } }); */ JObject entrada = (JObject)pontos.Where(x => x.Value <bool>("Entrada") == true).FirstOrDefault(); foreach (JObject ponto in pontos) { // g.add_vertex('A', new Dictionary<long, int>() { { 'B', 7 }, { 'C', 8 } }); long id = ponto.Value <long>("Id"); Dictionary <string, int> distancias = new Dictionary <string, int>(); LatLng origem = new LatLng(ponto["Localizacao"].Value <double>("Latitude"), ponto["Localizacao"].Value <double>("Longitude")); foreach (var conexao in ponto["ConexoesComplexas"]) { var alvo = pontos.Where(x => x.Value <long>("Id") == conexao.ToObject <long>()).FirstOrDefault(); LatLng destino = new LatLng(alvo["Localizacao"].Value <double>("Latitude"), alvo["Localizacao"].Value <double>("Longitude")); var distancia = (int)(CalculationByDistance(origem, destino) * 1000); distancias.Add(alvo.Value <long>("Id").ToString(), distancia); } g.add_vertex(ponto.Value <long>("Id").ToString(), distancias); } string c_entrada = entrada.Value <long>("Id").ToString(); string c_alvo = vaga.Ponto.Value <long>("Id").ToString(); var shortPath = g.shortest_path(c_entrada, c_alvo); JArray caminho = new JArray(); List <string> demo = new List <string>(); foreach (var no in shortPath) { var ponto = pontos.Where(x => no == x.Value <long>("Id").ToString()).FirstOrDefault(); demo.Add(no); caminho.Add(ponto); } PolylineOptions opt = new PolylineOptions(); double _lat = entrada["Localizacao"].Value <double>("Latitude"); double _lng = entrada["Localizacao"].Value <double>("Longitude"); opt = opt.InvokeWidth(20); opt = opt.InvokeColor(Color.DarkSlateBlue); opt.Add(vaga.Marker.Position); foreach (var no in caminho) { double lat = no["Localizacao"].Value <double>("Latitude"); double lng = no["Localizacao"].Value <double>("Longitude"); opt = opt.Add(new LatLng(lat, lng)); } opt.Add(new LatLng(_lat, _lng)); if (ControleMapa.LocalizacaoAtual == null) { if (!alertadoGpsDesligado) { AlertaServicoLocalizacao(); alertadoGpsDesligado = true; } } else { string origem_s = ControleMapa.LocalizacaoAtual.Latitude.ToString("0.000000", System.Globalization.CultureInfo.InvariantCulture) + "," + ControleMapa.LocalizacaoAtual.Longitude.ToString("0.000000", System.Globalization.CultureInfo.InvariantCulture); string destino_s = estacionamento["Localizacao"].Value <double>("Latitude").ToString("0.000000", System.Globalization.CultureInfo.InvariantCulture) + "," + estacionamento["Localizacao"].Value <double>("Longitude").ToString("0.000000", System.Globalization.CultureInfo.InvariantCulture); JObject direcoes = ControleMapa.ObterDirecoes(origem_s, destino_s, false); string polylineString = ((JObject)(direcoes["routes"]).First["overview_polyline"])["points"].ToString(); var polyline = GooglePoints.Decode(polylineString); for (int i = polyline.Count() - 1; i >= 0; i--) { opt = opt.Add(polyline.ElementAt(i)); } } ControleMapa.PolylinesCaminhoParaVaga.Add(GMap.AddPolyline(opt)); }