internal void Limpar()
 {
     this.Mapa.Clear();
     MarcadoresColocados.Clear();
     VagasColocadas.Clear();
     Polylines.Clear();
     PolylinesCaminhoParaVaga.Clear();
 }
        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);
            }
        }
        public void MostrarEstacionamentosNoMap(JArray lista)
        {
            foreach (Marcador marcador in MarcadoresColocados)
            {
                marcador.Marker.Remove();
                foreach (Polyline linha in marcador.Linhas)
                {
                    linha.Remove();
                }
            }
            MarcadoresColocados.Clear();

            foreach (Polyline linha in Polylines)
            {
                linha.Remove();
            }
            Polylines.Clear();
            foreach (var estacionamento in lista)
            {
                var latitude  = (estacionamento["Localizacao"])["Latitude"].Value <double>();
                var longitude = (estacionamento["Localizacao"])["Longitude"].Value <double>();
                var altitude  = (estacionamento["Localizacao"])["Altitude"].Value <float>();



                LatLng latlng = new LatLng(Convert.ToDouble(latitude), Convert.ToDouble(longitude));


                var           imagemMarcador = BitmapDescriptorFactory.FromResource(Resource.Drawable.parking);
                MarkerOptions options        = new MarkerOptions().SetPosition(latlng).SetTitle("").SetIcon(imagemMarcador);

                Marker ponto = Mapa.AddMarker(options);
                this.Markers.Add(ponto);
                Marcador marcador = new Marcador((JObject)estacionamento, ponto);
                MarcadoresColocados.Add(marcador);
                var pontos = (JArray)estacionamento["Pontos"];
                MostrarPontosNoMapa((JObject)estacionamento, pontos);
                if (!string.IsNullOrEmpty(estacionamento["ImagemBase64"].Value <string>()))
                {
                    try
                    {
                        var swbounds = new LatLng(estacionamento["SWBoundImagem"].Value <double>("Latitude"),
                                                  estacionamento["SWBoundImagem"].Value <double>("Longitude"));
                        var nebounds = new LatLng(estacionamento["NEBoundImagem"].Value <double>("Latitude"),
                                                  estacionamento["NEBoundImagem"].Value <double>("Longitude"));


                        LatLngBounds bounds = new LatLngBounds(swbounds, nebounds);



                        byte[] decodedString = Base64.Decode(estacionamento["ImagemBase64"].Value <string>(), Base64Flags.Default);

                        Bitmap decodedByte = BitmapFactory.DecodeByteArray(decodedString, 0, decodedString.Length);

                        var bitmapDescriptor = BitmapDescriptorFactory.FromBitmap(decodedByte);

                        GroundOverlayOptions newarkMap = new GroundOverlayOptions()
                                                         .InvokeImage(bitmapDescriptor).PositionFromBounds(bounds);

                        var overlay = Mapa.AddGroundOverlay(newarkMap);
                        overlay.Clickable        = true;
                        Mapa.GroundOverlayClick += (obj, args) =>
                        {
                            if (args.GroundOverlay.Id == overlay.Id)
                            {
                                if (STATUS_CONTROLE == StatusGUI.Normal)
                                {
                                    this.EstacionamentoSelecionado = (JObject)estacionamento;
                                    if (this.EstacionamentoSelecionadoEvent != null)
                                    {
                                        (this.EstacionamentoSelecionadoEvent).DynamicInvoke(EstacionamentoSelecionado);
                                    }
                                }
                            }
                            else
                            {
                                if ((Action)this.CliqueNoChaoEvent != null)
                                {
                                    CliqueNoChaoEvent.DynamicInvoke(args.GroundOverlay);
                                }
                            }
                        };
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
        }