public void ChecarVisibilidadeVaga(Vaga vaga) { if ((vaga.Dados["Reserva"].Type != JTokenType.Null) && ((vaga.Dados["Reserva"])["Usuario"].Value <long>("Id") == MainActivity.Usuario.Value <long>("Id"))) { vaga.Marker.Visible = true; } else { vaga.Marker.Visible = (vaga.Dados["Ocupacao"].Type == JTokenType.Null) && (vaga.Dados["Reserva"].Type == JTokenType.Null); } }
private void MostrarVagasNoMapa(long idEstacionamento, JObject ponto, JArray lista) { if (lista != null) { foreach (var vaga in lista) { Vaga _vaga = new Vaga(); var latitude = (vaga["Localizacao"])["Latitude"].Value <double>(); var longitude = (vaga["Localizacao"])["Longitude"].Value <double>(); var altitude = (vaga["Localizacao"])["Altitude"].Value <double>(); LatLng latlng = new LatLng(Convert.ToDouble(latitude), Convert.ToDouble(longitude)); int icone = 0; switch (vaga["Tipo"].Value <int>()) { default: icone = Resource.Drawable.parking_sign; //vaga normal; break; case 1: icone = Resource.Drawable.parking_sign_special_1; //vaga idoso; break; case 2: icone = Resource.Drawable.parking_sign_special_2; //vaga especial; break; } var ocupacao = vaga["Ocupacao"]; MarkerOptions options = new MarkerOptions().SetPosition(latlng).SetTitle(vaga["Numero"].Value <long>().ToString()).SetIcon(BitmapDescriptorFactory.FromResource(icone)); _vaga.Marker = Mapa.AddMarker(options); _vaga.Ponto = ponto; _vaga.Dados = vaga; _vaga.IdEstacionamento = idEstacionamento; VagasColocadas.Add(_vaga); ChecarVisibilidadeVaga(_vaga); var _latitude = (ponto["Localizacao"])["Latitude"].Value <double>(); var _longitude = (ponto["Localizacao"])["Longitude"].Value <double>(); var _altitude = (ponto["Localizacao"])["Altitude"].Value <double>(); PolylineOptions opt = new PolylineOptions(); opt = opt.Add(new LatLng(latitude, longitude), new LatLng(_latitude, _longitude)); opt = opt.InvokeWidth(5); opt = opt.InvokeColor(this.CorLinhaCaminhoEstacionamento); Polyline line = Mapa.AddPolyline(opt); } } }
private async void ReservarVaga(Vaga value) { await Task.Run(() => { string url = ControladorMapa.ParkingManagerServerURL + string.Format("api/VagaModels/{0}/Reservar/{1}", value.Dados.Value <long>("Id"), MainActivity.Usuario.Value <long>("Id")); Uri uri = new Uri(url); using (WebClient wc = new WebClient()) { try { wc.DownloadString(uri); }catch (Exception ex) { } } }); }
private void RecomendarVaga(Vaga v) { int tipoVga = v.Dados.Value <int>("Tipo"); for (int i = 0; i < ControleMapa.VagasColocadas.Count; i++) { if (ControleMapa.VagasColocadas[i].Dados.Value <JToken>("Ocupacao").Type == Newtonsoft.Json.Linq.JTokenType.Null) { if (tipoVga == ControleMapa.VagasColocadas[i].Dados.Value <int>("Tipo")) { VagaEscolhida = ControleMapa.VagasColocadas[i]; MostrarRotaParaVaga(VagaEscolhida); break; } } } }
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)); }
public EventArgsMudancaEstadoVaga(Vaga vaga, JObject dadosNovos, JObject dadosAnteriores) { this.Dados = dadosNovos; this.DadosAnteriores = dadosAnteriores; this.Vaga = vaga; }