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 ColocarNovoPontoMapa(LatLng latlngOrigem, LatLng latlngDest, JObject estacionamento)
        {
            MarkerOptions options = new MarkerOptions().SetPosition(latlngOrigem).SetTitle("").SetIcon(BitmapDescriptorFactory.FromResource(Resource.Drawable.placeholder_point));

            Marker ponto = Mapa.AddMarker(options);

            Marcador marcador = new Marcador(estacionamento, ponto);

            if (latlngDest != null)
            {
                var _latitude  = latlngDest.Latitude;
                var _longitude = latlngDest.Longitude;
                //var _altitude = (ponto["Localizacao"])["Altitude"].Value<double>();
                PolylineOptions opt = new PolylineOptions();
                opt = opt.Add(latlngOrigem, new LatLng(_latitude, _longitude));
                opt = opt.InvokeWidth(5);
                opt = opt.InvokeColor(this.CorLinhaCaminhoEstacionamento);

                Polyline line = Mapa.AddPolyline(opt);
                marcador.Linhas.Add(line);
            }
            if (UltimoPontoInteracao != null)
            {
                marcador.Conexoes.Add(long.Parse(UltimoPontoInteracao.Title));
            }
            marcador             = SalvarPontoInserido(marcador);
            UltimoPontoInteracao = marcador.Marker;
            this.MarcadoresColocados.Add(marcador);
            if ((Action)this.MarcadorColocadoEvent != null)
            {
                MarcadorColocadoEvent.Invoke();
            }
        }
        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 void MostrarPontosNoMapa(JObject estacionamento, JArray lista)
        {
            foreach (var ponto in lista)
            {
                var           latitude  = (ponto["Localizacao"])["Latitude"].Value <double>();
                var           longitude = (ponto["Localizacao"])["Longitude"].Value <double>();
                var           altitude  = (ponto["Localizacao"])["Altitude"].Value <double>();
                LatLng        latlng    = new LatLng(Convert.ToDouble(latitude), Convert.ToDouble(longitude));
                MarkerOptions options   = new MarkerOptions().SetPosition(latlng).SetTitle(ponto["Id"].Value <long>().ToString()).SetIcon(BitmapDescriptorFactory.FromResource(Resource.Drawable.placeholder_point));
                Marker        marker    = Mapa.AddMarker(options);
                marker.Visible = false;
                var      vagas    = (JArray)ponto["VagasConectadas"];
                Marcador marcador = new Marcador(estacionamento, marker)
                {
                    Id = ponto["Id"].Value <long>()
                };

                foreach (var conexao in ponto["Conexoes"])
                {
                    foreach (var _ponto in lista)
                    {
                        if (_ponto["Id"].Value <long>() == conexao.Value <long>())
                        {
                            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(latlng, new LatLng(_latitude, _longitude));
                            opt = opt.InvokeWidth(5);
                            opt = opt.InvokeColor(this.CorLinhaCaminhoEstacionamento);

                            Polyline line = Mapa.AddPolyline(opt);
                            marcador.Linhas.Add(line);
                        }
                    }
                }
                MarcadoresColocados.Add(marcador);


                MostrarVagasNoMapa(estacionamento.Value <long>("Id"), (JObject)ponto, vagas);
            }
        }