public Mapa()
        {
            InitializeComponent();
            BuildLocalizedApplicationBar();

            this.txtNomeLinha.Text = string.Format("Linha {0} - {1}", App.LinhaSelecionada.Codigo, App.LinhaSelecionada.Nome);

            this.LayerPosicaoOnibus    = new MapLayer();
            this.LayerMinhaLocalizacao = new MapLayer();

            mapOnibus.MapElements.Clear();
            mapOnibus.MapElements.Add(App.ItinerarioViewModel.ShapeRota);

            mapOnibus.Layers.Clear();
            mapOnibus.Layers.Add(LayerPosicaoOnibus);

            MinhaPosicao                = new MapOverlay();
            MinhaPosicao.Content        = PinMaker.Usuario();
            MinhaPosicao.PositionOrigin = new Point(0.5, 0.5);

            webBrowser = new WebBrowser();
            webBrowser.IsScriptEnabled = true;
            webBrowser.ScriptNotify   += webBrowser_ScriptNotify;
            webBrowser.Navigate(new Uri("/App_Files/HtmlMapa.html#" + App.LinhaSelecionada.Codigo, UriKind.Relative));
        }
        public void CarregarDados(Int32 pLinhaId)
        {
            this.LayerPontosOnibus = new MapLayer();
            this.ShapeRota         = new MapPolyline();

            App.LinhaSelecionada = LinhaFacade.Instance.ObterPorId(pLinhaId);

            #region Shape da linha

            var listaRotas = RotaFacade.Instance.ListarRotaPorLinha(App.LinhaSelecionada.Codigo);

            var CoordenadasRota  = new GeoCoordinateCollection();
            var listaCoordenadas = listaRotas.Select(rota => new GeoCoordinate(Convert.ToDouble(rota.Latitude), Convert.ToDouble(rota.Longitude))).ToList();
            foreach (var item in listaCoordenadas)
            {
                CoordenadasRota.Add(item);
            }
            ShapeRota.StrokeColor     = App.LinhaSelecionada.ObjetoCor;
            ShapeRota.StrokeThickness = 4;
            ShapeRota.Path            = CoordenadasRota;

            LayoutRota = LocationRectangle.CreateBoundingRectangle(CoordenadasRota);
            #endregion

            #region Pontos da linha
            //Desenha os pontos da linha no layer

            var listaPontos = PontoFacade.Instance.ListarPontosPorLinha(App.LinhaSelecionada.Codigo);
            foreach (var ponto in listaPontos)
            {
                double latitude = 0, longitude = 0;

                Double.TryParse(ponto.Latitude, out latitude);
                Double.TryParse(ponto.Longitude, out longitude);

                var coordenada = new GeoCoordinate(latitude, longitude);

                var imgPontoOnibus = PinMaker.PontoDeOnibus(ponto) as Image;
                imgPontoOnibus.Tap += (sender, e) =>
                {
                    MessageBox.Show(ponto.Nome);
                };

                var mapOver = new MapOverlay();
                mapOver.GeoCoordinate  = coordenada;
                mapOver.Content        = imgPontoOnibus;
                mapOver.PositionOrigin = new Point(0.5, 1);

                LayerPontosOnibus.Add(mapOver);
            }
            #endregion

            if (CarregamentoCompleto != null)
            {
                CarregamentoCompleto(this, null);
            }
        }
        private void webBrowser_ScriptNotify(object sender, NotifyEventArgs e)
        {
            try
            {
                var json = e.Value;
                if (String.IsNullOrEmpty(json) || json.ToUpper().Equals("NULL"))
                {
                    LayerPosicaoOnibus.Clear();
                    ucToastMessage.ShowToast("Não existem veículos desta linha em funcionamento no momento.");
                }
                else
                {
                    var lista = JsonConvert.DeserializeObject <List <Coordenada> >(json);

                    LayerPosicaoOnibus.Clear();
                    var corLinha = App.LinhaSelecionada.ObjetoCor;

                    foreach (var item in lista)
                    {
                        Double latitude  = Convert.ToDouble(item.latitude);
                        Double longitude = Convert.ToDouble(item.longitude);

                        var coordenada = new GeoCoordinate(latitude, longitude);

                        var mapOver = new MapOverlay();
                        mapOver.GeoCoordinate  = coordenada;
                        mapOver.Content        = PinMaker.Onibus(corLinha, item.hora);
                        mapOver.PositionOrigin = new Point(0.5, 0.5);

                        LayerPosicaoOnibus.Add(mapOver);
                    }
                }
            }
            catch (Exception ex0)
            {
            }
        }