예제 #1
0
 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);
     }
 }
예제 #2
0
        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);
                }
            }
        }
예제 #3
0
 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)
             {
             }
         }
     });
 }
예제 #4
0
        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;
                    }
                }
            }
        }
예제 #5
0
        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;
 }