コード例 #1
0
        public static LocalizacaoInfo atualizarPosicao(LocalizacaoInfo local)
        {
            var localRetorno = local;

            if (_simulando)
            {
                if (_indexPercuso < _percursoSimulado.Pontos.Count())
                {
                    PercursoPontoInfo ponto = _percursoSimulado.Pontos[_indexPercuso];
                    localRetorno = executarPosicao(new LocalizacaoInfo {
                        Latitude   = ponto.Latitude,
                        Longitude  = ponto.Longitude,
                        Sentido    = ponto.Sentido,
                        Precisao   = ponto.Precisao,
                        Tempo      = ponto.Data,
                        Velocidade = ponto.Velocidade
                    });
                    _indexPercuso++;
                }
                else
                {
                    pararSimulacao();
                }
            }
            else
            {
                localRetorno = executarPosicao(local);
            }
            return(localRetorno);
        }
コード例 #2
0
        public bool executarGravacao(LocalizacaoInfo local, RadarInfo radar = null)
        {
            if (!PercursoUtils.Gravando)
            {
                return(false);
            }
            //TimeSpan tempo = local.Tempo.Subtract(_dataAnterior);
            //if (tempo.TotalSeconds > TEMPO_ATUALIZACAO_PONTO) {

            /*
             * if (local.Velocidade >= VELOCIDADE_MAXIMA_PARADO)
             * {
             *  _ultimoMovimentoReal = local.Tempo;
             *  _emMovimento = true;
             * }
             * else {
             *  TimeSpan tempoMovimento = local.Tempo.Subtract(_ultimoMovimentoReal);
             *  if (_emMovimento && tempoMovimento.TotalSeconds > TEMPO_MINIMO_PARADO)
             *  {
             *      _emMovimento = false;
             *      _ultimoMovimentoReal = local.Tempo;
             *      processarPonto(local, false);
             *  }
             * }
             *
             * //    if (_emMovimento)
             * //     {
             *  processarPonto(local, true);
             *  return true;
             * }
             */
            processarPonto(local, radar);
            return(false);
        }
コード例 #3
0
        private static void avisarRadar(LocalizacaoInfo local, RadarInfo radar)
        {
            var regraAviso = new AvisoSonoroBLL();

            RadarBLL.RadarAtual = radar;
            string mensagem = "Tem um radar a frente, diminua para " + radar.Velocidade.ToString() + "km/h!";

            MensagemUtils.notificar(RADAR_ID, "Radar Club", mensagem, radar.Velocidade);
            if (PreferenciaUtils.BeepAviso)
            {
                regraAviso.play(PreferenciaUtils.SomAlarme);
            }
            if (PreferenciaUtils.VibrarAlerta)
            {
                int tempo = PreferenciaUtils.TempoDuracaoVibracao;
                if (tempo <= 0)
                {
                    tempo = 1;
                }
                tempo = tempo * 1000;
                MensagemUtils.vibrar(tempo);
            }
            if (PreferenciaUtils.HabilitarVoz)
            {
                int distancia = arredondarDistancia(local.Distancia);
                if (distancia != DistanciaOld)
                {
                    regraAviso.play(RadarTipoEnum.RadarFixo, radar.Velocidade, distancia);
                    DistanciaOld = distancia;
                }
            }
        }
コード例 #4
0
 public static void atualizarPosicao(LocalizacaoInfo local)
 {
     if (!_simulando)
     {
         executarPosicao(local);
     }
 }
コード例 #5
0
        public bool radarContinuaAFrente(LocalizacaoInfo local, RadarInfo radar)
        {
            //if (local.Velocidade > radar.Velocidade) {
            double anguloRelacaoRadar = local.Sentido - radar.Direcao;

            if (((Math.Abs(anguloRelacaoRadar) % 360) <= PreferenciaUtils.AnguloRadar) || ((360 - Math.Abs(anguloRelacaoRadar)) % 360) <= PreferenciaUtils.AnguloRadar)
            {
                double anguloRadar = angleFromCoordinate(local.Latitude, local.Longitude, radar.Latitude, radar.Longitude);

                double anguloDiferencial = local.Sentido - anguloRadar;
                if (anguloDiferencial < 0)
                {
                    anguloDiferencial += 360;
                }
                if (anguloDiferencial > 360)
                {
                    anguloDiferencial -= 360;
                }

                if (((Math.Abs(anguloDiferencial) % 360) <= PreferenciaUtils.AnguloCone) || ((360 - Math.Abs(anguloDiferencial)) % 360) <= PreferenciaUtils.AnguloCone)
                {
                    return(true);
                }
                else
                {
                    Debug.WriteLine("Radar não está no cone. Meu angulo (" + Math.Floor(local.Sentido) + ") + eu/radar(" + Math.Floor(anguloRadar) + ").");
                }
            }
            else
            {
                Debug.WriteLine("Radar encontrado mas angulo não bate com o do radar = " + Math.Floor(anguloRelacaoRadar) + ".");
            }
            //}
            return(false);
        }
コード例 #6
0
 public virtual void cadastrarRadar(Object sender, EventArgs e)
 {
     if (InternetUtils.estarConectado())
     {
         LocalizacaoInfo local     = GPSUtils.UltimaLocalizacao;
         float           latitude  = (float)local.Latitude;
         float           longitude = (float)local.Longitude;
         GeocoderUtils.pegarAsync(latitude, longitude, (send, ev) =>
         {
             var endereco = ev.Endereco;
             Emagine.Utils.MensagemUtils.avisar(endereco.Logradouro);
         });
     }
     try
     {
         LocalizacaoInfo local = GPSUtils.UltimaLocalizacao;
         if (local != null)
         {
             RadarBLL regraRadar = RadarFactory.create();
             regraRadar.inserir(local);
             MensagemUtils.avisar("Radar incluído com sucesso.");
         }
         else
         {
             MensagemUtils.avisar("Nenhum movimento registrado pelo GPS.");
         }
     }
     catch (Exception e2)
     {
         MensagemUtils.avisar(e2.Message);
     }
 }
コード例 #7
0
 private static void executarPosicao(LocalizacaoInfo local)
 {
     try
     {
         _ultimaLocalizacao = local;
         RadarBLL    regraRadar    = RadarFactory.create();
         PercursoBLL regraPercurso = PercursoFactory.create();
         if (RadarBLL.RadarAtual != null)
         {
             if (!regraRadar.radarContinuaAFrente(local, RadarBLL.RadarAtual))
             {
                 RadarBLL.RadarAtual = null;
             }
         }
         else
         {
             double    distanciaRadar = (local.Velocidade < 90) ? PreferenciaUtils.DistanciaAlertaUrbano : PreferenciaUtils.DistanciaAlertaEstrada;
             RadarInfo radar          = regraRadar.calcularRadar(local, distanciaRadar);
             if (radar != null)
             {
                 local.Distancia = regraRadar.calcularDistancia(local.Latitude, local.Longitude, radar.Latitude, radar.Longitude);
                 if (PreferenciaUtils.AlertaInteligente)
                 {
                     if ((local.Velocidade - 5) > radar.Velocidade)
                     {
                         avisarRadar(local, radar);
                     }
                 }
                 else
                 {
                     avisarRadar(local, radar);
                 }
             }
         }
         var visualPage = GlobalUtils.Visual;
         if (visualPage != null)
         {
             visualPage.VelocidadeAtual = (float)local.Velocidade;
             visualPage.Precisao        = local.Precisao;
             visualPage.Sentido         = local.Sentido;
             RadarInfo radar = RadarBLL.RadarAtual;
             if (radar != null)
             {
                 visualPage.VelocidadeRadar = radar.Velocidade;
                 visualPage.DistanciaRadar  = (float)local.Distancia;
             }
             else
             {
                 visualPage.VelocidadeRadar = 0;
                 visualPage.DistanciaRadar  = 0;
             }
             visualPage.atualizarPosicao(local);
             visualPage.redesenhar();
         }
         regraPercurso.executarGravacao(local);
     }
     catch (Exception e) {
         ErroPage.exibir(e);
     }
 }
コード例 #8
0
 public void atualizarPosicao(LocalizacaoInfo local)
 {
     //if (AoRotacinar != null && _rotacao != value)
     _localAtual = local;
     if (AoAtualizaPosicao != null)
     {
         AoAtualizaPosicao(this, local);
         //this.VisibleRegion = new MapSpan(new Position(local.Latitude, local.Longitude), Configuracao.GPSDeltaPadrao, Configuracao.GPSDeltaPadrao);
     }
 }
コード例 #9
0
 public bool executarGravacao(LocalizacaoInfo local, RadarInfo radar = null)
 {
     if (!PercursoUtils.Gravando)
     {
         return(false);
     }
     if (local.Precisao > 15)
     {
         return(false);
     }
     processarPonto(local, radar);
     return(false);
 }
コード例 #10
0
 private void atualizarMinhaPosicao(LocalizacaoInfo local)
 {
     if (minhaPosicao != null)
     {
         minhaPosicao.Position = (new LatLng(local.Latitude, local.Longitude));
     }
     else
     {
         var marker = new MarkerOptions();
         marker.SetPosition(new LatLng(local.Latitude, local.Longitude));
         marker.SetTitle("Minha Posição");
         minhaPosicao = map.AddMarker(marker);
     }
 }
コード例 #11
0
 private PercursoPontoInfo gerarPonto(LocalizacaoInfo local, RadarInfo radar = null)
 {
     return(new PercursoPontoInfo()
     {
         IdPercurso = PercursoUtils.PercursoAtual.Id,
         Latitude = local.Latitude,
         Longitude = local.Longitude,
         Velocidade = local.Velocidade,
         Sentido = local.Sentido,
         Precisao = local.Precisao,
         Data = local.Tempo,
         IdRadar = (radar != null) ? radar.Id : 0
     });
 }
コード例 #12
0
        /*
         * private void alertar(LocalizacaoInfo local, RadarInfo radar) {
         *  string mensagem = "Tem um radar a frente, diminua para " + radar.Velocidade.ToString() + "km/h!";
         *  MensagemUtils.notificar(RADAR_ID, "Alerta de Radar", mensagem);
         * }
         */

        public bool radarEstaAFrente(LocalizacaoInfo local, RadarInfo radar)
        {
            //if (local.Velocidade > radar.Velocidade) {
            double anguloRelacaoRadar = local.Sentido - radar.Direcao;

            if (((Math.Abs(anguloRelacaoRadar) % 360) <= PreferenciaUtils.AnguloRadar) || ((360 - Math.Abs(anguloRelacaoRadar)) % 360) <= PreferenciaUtils.AnguloRadar)
            {
                string posLatLong = radar.Latitude.ToString() + "|" + radar.Longitude.ToString();
                if ((_radares.ContainsKey(posLatLong) && _radares[posLatLong] == false) || !_radares.ContainsKey(posLatLong))
                {
                    double anguloRadar = angleFromCoordinate(local.Latitude, local.Longitude, radar.Latitude, radar.Longitude);
                    //double meuAngulo = local.Sentido;

                    double anguloDiferencial = local.Sentido - anguloRadar;
                    if (anguloDiferencial < 0)
                    {
                        anguloDiferencial += 360;
                    }
                    if (anguloDiferencial > 360)
                    {
                        anguloDiferencial -= 360;
                    }

                    if (((Math.Abs(anguloDiferencial) % 360) <= PreferenciaUtils.AnguloCone) || ((360 - Math.Abs(anguloDiferencial)) % 360) <= PreferenciaUtils.AnguloCone)
                    {
                        if (!_radares.ContainsKey(posLatLong))
                        {
                            _radares.Add(posLatLong, true);
                        }
                        //alertar(local, radar);
                        return(true);
                    }
                    else
                    {
                        Debug.WriteLine("Radar não está no cone. Meu angulo (" + Math.Floor(local.Sentido) + ") + eu/radar(" + Math.Floor(anguloRadar) + ").");
                    }
                }
                else
                {
                    Debug.WriteLine("Radar encontrado mas já foi alertado.");
                }
            }
            else
            {
                Debug.WriteLine("Radar encontrado mas angulo não bate com o do radar = " + Math.Floor(anguloRelacaoRadar) + ".");
            }
            //}
            return(false);
        }
コード例 #13
0
        private static void avisarRadar(LocalizacaoInfo local, RadarInfo radar)
        {
            var regraAviso = new AvisoSonoroBLL();

            RadarBLL.RadarAtual = radar;
            string titulo   = "Radar+";
            string mensagem = "Tem um radar a frente, diminua para " + radar.Velocidade.ToString() + "km/h!";

            if (PreferenciaUtils.VibrarAlerta)
            {
                int tempo = PreferenciaUtils.TempoDuracaoVibracao;
                if (tempo <= 0)
                {
                    tempo = 1;
                }
                tempo = tempo * 1000;
                MensagemUtils.vibrar(tempo);
            }
            if (PreferenciaUtils.HabilitarVoz)
            {
                MensagemUtils.notificar(RADAR_ID, titulo, mensagem, velocidade: radar.Velocidade);
                int distancia = arredondarDistancia(local.Distancia);
                regraAviso.play(radar.Tipo, radar.Velocidade, distancia);
                DistanciaOld = distancia;
            }
            else
            {
                if (PreferenciaUtils.CanalAudio == AudioCanalEnum.Notificacao)
                {
                    if (PreferenciaUtils.BeepAviso)
                    {
                        string arquivoAlarme = regraAviso.pegarArquivo(PreferenciaUtils.SomAlarme);
                        MensagemUtils.notificar(RADAR_ID, titulo, mensagem, audio: arquivoAlarme, velocidade: radar.Velocidade);
                    }
                    else
                    {
                        MensagemUtils.notificar(RADAR_ID, titulo, mensagem, velocidade: radar.Velocidade);
                    }
                }
                else
                {
                    MensagemUtils.notificar(RADAR_ID, titulo, mensagem, velocidade: radar.Velocidade);
                    if (PreferenciaUtils.BeepAviso)
                    {
                        regraAviso.play(PreferenciaUtils.SomAlarme);
                    }
                }
            }
        }
コード例 #14
0
        private void pegaEndereco()
        {
            if (InternetUtils.estarConectado())
            {
                LocalizacaoInfo localEndereco = GPSUtils.UltimaLocalizacao;
                float           latitude      = (float)localEndereco.Latitude;
                float           longitude     = (float)localEndereco.Longitude;

                GeocoderUtils.pegarAsync(latitude, longitude, async(send, ev) =>
                {
                    var endereco = ev.Endereco;
                    mostraEndereco(endereco.Logradouro);
                });
            }
        }
コード例 #15
0
ファイル: GPSAndroid.cs プロジェクト: kilikdudu/RadarPlus
        private LocalizacaoInfo converterLocalizacao(Location location)
        {
            LocalizacaoInfo local = new LocalizacaoInfo();

            local.Latitude  = location.Latitude;
            local.Longitude = location.Longitude;
            local.Precisao  = location.Accuracy;
            if (location.HasBearing)
            {
                local.Sentido    = location.Bearing;
                _sentidoAnterior = local.Sentido;
            }
            else
            {
                local.Sentido = _sentidoAnterior;
            }
            local.Tempo      = (new DateTime(1970, 1, 1)).AddMilliseconds(location.Time);
            local.Velocidade = location.Speed * 3.6;
            return(local);
        }
コード例 #16
0
        private void processarPonto(LocalizacaoInfo local, RadarInfo radar = null)
        {
            var  distancia = GPSUtils.calcularDistancia(local.Latitude, local.Longitude, PercursoUtils.Latitude, PercursoUtils.Longitude);
            bool alterado  = false;

            if (distancia >= DISTANCIA_MINIMA_PROCESSAMENTO)
            {
                var ponto = gerarPonto(local, radar);
                gravarPonto(ponto);
                PercursoUtils.PercursoAtual.Pontos.Add(ponto);

                PercursoUtils.Latitude  = (float)local.Latitude;
                PercursoUtils.Longitude = (float)local.Longitude;
                alterado = true;
            }
            if (PercursoUtils.PaginaAtual != null)
            {
                PercursoUtils.PaginaAtual.atualizarGravacao(local, alterado);
            }
        }
コード例 #17
0
        public void atualizarGravacao(LocalizacaoInfo local, bool alterado)
        {
            var percurso = PercursoUtils.PercursoAtual;

            if (percurso != null)
            {
                TimeSpan tempo = TimeSpan.Zero;
                if (percurso.Pontos.Count > 0)
                {
                    tempo = local.Tempo.Subtract(percurso.Pontos[0].Data);
                }

                _tempoCorrendo.Text = "Tempo: " + tempo.ToString(@"hh\:mm\:ss");
                if (alterado)
                {
                    _tempoParado.Text      = "Parado: " + percurso.TempoParadoStr;
                    _paradas.Text          = "Paradas: " + percurso.QuantidadeParadaStr;
                    _velocidadeMedia.Text  = "V Méd: " + percurso.VelocidadeMediaStr;
                    _velocidadeMaxima.Text = "V Max: " + percurso.VelocidadeMaximaStr;
                    _radares.Text          = "Radares: " + percurso.QuantidadeRadarStr;
                }
            }
        }
コード例 #18
0
        public int gravar(LocalizacaoInfo local, bool inativar)
        {
            //DateTime saveNow = DateTime.Now;
            int velocidade = (int)Math.Floor(local.Velocidade);

            velocidade = ((velocidade % 10) > 0) ? (velocidade - (velocidade % 10)) + 10 : velocidade;
            RadarInfo radar = new RadarInfo {
                Latitude     = local.Latitude,
                Longitude    = local.Longitude,
                LatitudeCos  = Math.Cos(local.Latitude * Math.PI / 180),
                LatitudeSin  = Math.Sin(local.Latitude * Math.PI / 180),
                LongitudeCos = Math.Cos(local.Longitude * Math.PI / 180),
                LongitudeSin = Math.Sin(local.Longitude * Math.PI / 180),
                Direcao      = (int)Math.Floor(local.Sentido),
                Velocidade   = velocidade,
                Tipo         = RadarTipoEnum.RadarFixo,
                DataInclusao = DateTime.Now,
                Endereco     = "",
                Usuario      = true
            };

            return(gravar(radar, inativar));
        }
コード例 #19
0
        /// <summary>
        /// Faz todos os calculos referentes a posição do radar referente a posição do usuário
        /// </summary>
        /// <param name="local">Localização enviada pelo GPS.</param>
        public RadarInfo calcularRadar(LocalizacaoInfo local, double distanciaRadar)
        {
            double latitudeOld  = local.Latitude;
            double longitudeOld = local.Longitude;

            /*
             * double latitudeCos = Math.Cos(local.Latitude * Math.PI / 180);
             * double latitudeSin = Math.Sin(local.Latitude * Math.PI / 180);
             * double longitudeCos = Math.Cos(local.Longitude * Math.PI / 180);
             * double longitudeSin = Math.Sin(local.Longitude * Math.PI / 180);
             * double distanciaCos = Math.Cos((PreferenciaUtils.DistanciaRadar / 1000) / DIAMETRO_TERRA);
             */

            var args = new RadarBuscaInfo {
                latitudeCos  = Math.Cos(local.Latitude * Math.PI / 180),
                latitudeSin  = Math.Sin(local.Latitude * Math.PI / 180),
                longitudeCos = Math.Cos(local.Longitude * Math.PI / 180),
                longitudeSin = Math.Sin(local.Longitude * Math.PI / 180),
                distanciaCos = Math.Cos((distanciaRadar / 1000) / GPSUtils.DIAMETRO_TERRA),
                Filtros      = listarRadarTipo()
            };

            limparAlertado(local.Latitude, local.Longitude, distanciaRadar);

            RadarInfo         radarCapturado = null;
            IList <RadarInfo> radares        = _db.listar(args);

            foreach (RadarInfo radar in radares)
            {
                if (radarEstaAFrente(local, radar))
                {
                    radarCapturado = radar;
                    break;
                }
            }
            return(radarCapturado);
        }
コード例 #20
0
        public GPSiOS()
        {
            this.locMgr = new CLLocationManager();
            this.locMgr.PausesLocationUpdatesAutomatically = false;

            if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
            {
                locMgr.RequestAlwaysAuthorization(); // works in background
                                                     //locMgr.RequestWhenInUseAuthorization (); // only in foreground
            }
            if (UIDevice.CurrentDevice.CheckSystemVersion(9, 0))
            {
                locMgr.AllowsBackgroundLocationUpdates = true;
            }

            LocationUpdated += (sender, e) => {
                CLLocation      location = e.Location;
                LocalizacaoInfo local    = new LocalizacaoInfo();
                local.Latitude  = location.Coordinate.Latitude;
                local.Longitude = location.Coordinate.Longitude;
                local.Precisao  = (float)((location.HorizontalAccuracy + location.VerticalAccuracy) / 2);
                if (location.Course == -1)
                {
                    local.Sentido = _sentidoAntigo;
                }
                else
                {
                    local.Sentido  = (float)location.Course;
                    _sentidoAntigo = local.Sentido;
                }

                local.Tempo      = NSDateToDateTime(location.Timestamp);
                local.Velocidade = location.Speed * 3.6;

                GPSUtils.atualizarPosicao(local);
            };
        }
コード例 #21
0
 public abstract void atualizarPosicao(LocalizacaoInfo local);
コード例 #22
0
        protected virtual void inicializarComponente()
        {
            _GPSSentidoLabel = new Label
            {
                Text     = "0º",
                FontSize = 16,
                HorizontalTextAlignment = TextAlignment.Center,
                VerticalTextAlignment   = TextAlignment.Center
            };
            AbsoluteLayout.SetLayoutBounds(_GPSSentidoLabel, new Rectangle(0.9, 0.12, 0.15, 0.15));
            //AbsoluteLayout.SetLayoutBounds(_PrecisaoLabel, new Rectangle(0.11, 0.12, 0.15, 0.15));
            AbsoluteLayout.SetLayoutFlags(_GPSSentidoLabel, AbsoluteLayoutFlags.All);

            _VelocidadeRadarLabel = new Label
            {
                Text     = "Velocidade",
                FontSize = 16,
                HorizontalTextAlignment = TextAlignment.Center,
                VerticalTextAlignment   = TextAlignment.Center
            };
            if (Device.OS == TargetPlatform.iOS)
            {
            }
            AbsoluteLayout.SetLayoutBounds(_VelocidadeRadarLabel, new Rectangle(1, 0.950, 1, 0.1));
            AbsoluteLayout.SetLayoutFlags(_VelocidadeRadarLabel, AbsoluteLayoutFlags.All);

            _DistanciaRadarLabel = new Label
            {
                Text     = "0 m",
                FontSize = 16,
                //HorizontalTextAlignment = TextAlignment.Center,
                //VerticalTextAlignment = TextAlignment.Center
            };
            //AbsoluteLayout.SetLayoutBounds(_DistanciaRadarLabel, new Rectangle(1, 0.975, 1, 0.1));
            //AbsoluteLayout.SetLayoutFlags(_DistanciaRadarLabel, AbsoluteLayoutFlags.All);


            if (PreferenciaUtils.ExibirBotaoRemover)
            {
                _RemoverRadarButton = new Image
                {
                    Aspect        = Aspect.AspectFit,
                    Source        = ImageSource.FromFile("menos.png"),
                    WidthRequest  = 180,
                    HeightRequest = 180
                };
                AbsoluteLayout.SetLayoutBounds(_RemoverRadarButton, new Rectangle(0.93, 0.975, 0.2, 0.2));
                AbsoluteLayout.SetLayoutFlags(_RemoverRadarButton, AbsoluteLayoutFlags.All);

                _RemoverRadarButton.GestureRecognizers.Add(
                    new TapGestureRecognizer()
                {
                    Command = new Command(() =>
                    {
                        //var regraAviso = new AvisoSonoroBLL();
                        //regraAviso.play(RadarTipoEnum.RadarFixo, 40, 300);
                        //AudioUtils.play(AudioEnum.Alarm001);
                        //MensagemUtils.avisar("teste");
                        //var downloader = new DownloaderAtualizacao();
                        //downloader.download();

                        if (InternetUtils.estarConectado())
                        {
                            LocalizacaoInfo local = GPSUtils.UltimaLocalizacao;
                            float latitude        = (float)local.Latitude;
                            float longitude       = (float)local.Longitude;
                            GeocoderUtils.pegarAsync(latitude, longitude, (sender, e) =>
                            {
                                var endereco = e.Endereco;
                                ClubManagement.Utils.MensagemUtils.avisar(endereco.Logradouro);
                            });
                        }



                        try
                        {
                            LocalizacaoInfo local = GPSUtils.UltimaLocalizacao;
                            if (local != null)
                            {
                                RadarBLL regraRadar = RadarFactory.create();
                                regraRadar.gravar(local, false);
                                MensagemUtils.avisar("Radar incluído com sucesso.");
                            }
                            else
                            {
                                MensagemUtils.avisar("Nenhum movimento registrado pelo GPS.");
                            }
                        }
                        catch (Exception e)
                        {
                            MensagemUtils.avisar(e.Message);
                        }
                    }
                                          )
                });
            }
            if (PreferenciaUtils.ExibirBotaoAdicionar)
            {
                _AdicionarRadarButton = new Image
                {
                    Aspect        = Aspect.AspectFit,
                    Source        = ImageSource.FromFile("mais.png"),
                    WidthRequest  = 180,
                    HeightRequest = 180
                };
                AbsoluteLayout.SetLayoutBounds(_AdicionarRadarButton, new Rectangle(0.93, 0.975, 0.2, 0.2));
                AbsoluteLayout.SetLayoutFlags(_AdicionarRadarButton, AbsoluteLayoutFlags.All);


                if (TelaUtils.Orientacao == "Landscape")
                {
                    AbsoluteLayout.SetLayoutBounds(_AdicionarRadarButton, new Rectangle(1, 0.5, 0.2, 0.2));
                    AbsoluteLayout.SetLayoutFlags(_AdicionarRadarButton, AbsoluteLayoutFlags.All);
                }
                _AdicionarRadarButton.GestureRecognizers.Add(
                    new TapGestureRecognizer()
                {
                    Command = new Command(() =>
                    {
                        //var regraAviso = new AvisoSonoroBLL();
                        //regraAviso.play(RadarTipoEnum.RadarFixo, 40, 300);
                        //AudioUtils.play(AudioEnum.Alarm001);
                        //MensagemUtils.avisar("teste");
                        //var downloader = new DownloaderAtualizacao();
                        //downloader.download();

                        if (InternetUtils.estarConectado())
                        {
                            LocalizacaoInfo local = GPSUtils.UltimaLocalizacao;
                            float latitude        = (float)local.Latitude;
                            float longitude       = (float)local.Longitude;
                            GeocoderUtils.pegarAsync(latitude, longitude, (sender, e) =>
                            {
                                var endereco = e.Endereco;
                                ClubManagement.Utils.MensagemUtils.avisar(endereco.Logradouro);
                            });
                        }



                        try
                        {
                            LocalizacaoInfo local = GPSUtils.UltimaLocalizacao;
                            if (local != null)
                            {
                                RadarBLL regraRadar = RadarFactory.create();
                                regraRadar.gravar(local, false);
                                MensagemUtils.avisar("Radar incluído com sucesso.");
                            }
                            else
                            {
                                MensagemUtils.avisar("Nenhum movimento registrado pelo GPS.");
                            }
                        }
                        catch (Exception e)
                        {
                            MensagemUtils.avisar(e.Message);
                        }
                    }
                                          )
                });
            }


            _BussolaFundo = new Image
            {
                Aspect        = Aspect.AspectFit,
                Source        = ImageSource.FromFile("bussolacorpo.png"),
                WidthRequest  = 180,
                HeightRequest = 180
            };
            AbsoluteLayout.SetLayoutBounds(_BussolaFundo, new Rectangle(0.93, 0, 0.2, 0.2));
            AbsoluteLayout.SetLayoutFlags(_BussolaFundo, AbsoluteLayoutFlags.All);

            _BussolaAgulha = new Image
            {
                Aspect        = Aspect.AspectFit,
                Source        = ImageSource.FromFile("bussolaagulha.png"),
                WidthRequest  = 180,
                HeightRequest = 180
            };
            AbsoluteLayout.SetLayoutBounds(_BussolaAgulha, new Rectangle(0.93, 0, 0.2, 0.2));
            AbsoluteLayout.SetLayoutFlags(_BussolaAgulha, AbsoluteLayoutFlags.All);

            _PrecisaoFundoImage = new Image
            {
                Aspect        = Aspect.AspectFit,
                Source        = ImageSource.FromFile("bussolacorpo.png"),
                WidthRequest  = 180,
                HeightRequest = 180
            };
            AbsoluteLayout.SetLayoutBounds(_PrecisaoFundoImage, new Rectangle(0.07, 0, 0.2, 0.2));
            AbsoluteLayout.SetLayoutFlags(_PrecisaoFundoImage, AbsoluteLayoutFlags.All);

            _PrecisaoImage = new Image
            {
                Aspect        = Aspect.AspectFit,
                Source        = ImageSource.FromFile("sat04.png"),
                WidthRequest  = 180,
                HeightRequest = 180
            };
            AbsoluteLayout.SetLayoutBounds(_PrecisaoImage, new Rectangle(0.11, 0.04, 0.15, 0.15));
            AbsoluteLayout.SetLayoutFlags(_PrecisaoImage, AbsoluteLayoutFlags.All);

            _PrecisaoLabel = new Label
            {
                Text     = "0 m",
                FontSize = 16,
                HorizontalTextAlignment = TextAlignment.Center,
                VerticalTextAlignment   = TextAlignment.Center
            };
            //AbsoluteLayout.SetLayoutBounds(_PrecisaoLabel, new Rectangle(0.1, 0.025, 0.1, 0.1));
            AbsoluteLayout.SetLayoutBounds(_PrecisaoLabel, new Rectangle(0.11, 0.12, 0.15, 0.15));
            AbsoluteLayout.SetLayoutFlags(_PrecisaoLabel, AbsoluteLayoutFlags.All);
        }
コード例 #23
0
        public static bool simularPercurso(int idPercurso)
        {
            if (_simulando)
            {
                ClubManagement.Utils.MensagemUtils.avisar("Já existe uma simulação em andamento.");
                return(false);
            }
            PercursoBLL regraPercurso = PercursoFactory.create();

            _percursoSimulado = regraPercurso.pegar(idPercurso);
            _simulando        = true;
            _indexPercuso     = 0;
            _ultimoPonto      = DateTime.MinValue;
            if (_percursoSimulado == null)
            {
                ClubManagement.Utils.MensagemUtils.avisar("Percurso não encontrado.");
                return(false);
            }
            if (_percursoSimulado.Pontos.Count() == 0)
            {
                ClubManagement.Utils.MensagemUtils.avisar("Nenhum movimento registrado nesse percurso.");
                return(false);
            }
            //MensagemUtils.notificarPermanente(NOTIFICACAO_SIMULACAO_ID, "Simulando percurso!", string.Empty);
            ClubManagement.Utils.MensagemUtils.notificarPermanente(
                PercursoBLL.NOTIFICACAO_SIMULACAO_PERCURSO_ID,
                "Radar Club", "Simulando percurso...",
                PercursoBLL.NOTIFICACAO_SIMULACAO_PARAR_PERCURSO_ID,
                "Parar",
                PercursoBLL.ACAO_PARAR_SIMULACAO
                );
            ClubManagement.Utils.MensagemUtils.avisar("Iniciando simulação!");
            var task = Task.Factory.StartNew(() =>
            {
                while (_simulando)
                {
                    if (_indexPercuso < _percursoSimulado.Pontos.Count())
                    {
                        PercursoPontoInfo ponto = _percursoSimulado.Pontos[_indexPercuso];

                        LocalizacaoInfo local = new LocalizacaoInfo
                        {
                            Latitude   = ponto.Latitude,
                            Longitude  = ponto.Longitude,
                            Sentido    = ponto.Sentido,
                            Precisao   = ponto.Precisao,
                            Tempo      = ponto.Data,
                            Velocidade = ponto.Velocidade
                        };
                        //executarPosicao(local);
                        ThreadUtils.RunOnUiThread(() => {
                            executarPosicao(local);
                        });

                        if (_ultimoPonto != DateTime.MinValue)
                        {
                            TimeSpan delay = ponto.Data.Subtract(_ultimoPonto);
                            Task.Delay((int)delay.TotalMilliseconds).Wait();
                            //_ultimoPonto = ponto.Data;
                        }
                        _ultimoPonto = ponto.Data;
                        _indexPercuso++;
                    }
                    else
                    {
                        pararSimulacao();
                        break;
                    }
                }
            });

            return(true);
        }
コード例 #24
0
 private static LocalizacaoInfo executarPosicao(LocalizacaoInfo local)
 {
     try
     {
         var regraPercurso = PercursoFactory.create();
         if (PreferenciaUtils.SalvarPercurso && !PercursoUtils.Gravando && local.Velocidade > 20)
         {
             var inicializou = regraPercurso.iniciarGravacao();
         }
         _ultimaLocalizacao = local;
         RadarBLL regraRadar = RadarFactory.create();
         if (RadarBLL.RadarAtual != null)
         {
             if (regraRadar.radarContinuaAFrente(local, RadarBLL.RadarAtual))
             {
                 RadarInfo radar = RadarBLL.RadarAtual;
                 local.Distancia = calcularDistancia(local.Latitude, local.Longitude, radar.Latitude, radar.Longitude);
             }
             else
             {
                 RadarBLL.RadarAtual = null;
             }
         }
         else
         {
             double    distanciaRadar = (local.Velocidade < 90) ? PreferenciaUtils.DistanciaAlertaUrbano : PreferenciaUtils.DistanciaAlertaEstrada;
             RadarInfo radar          = regraRadar.calcularRadar(local, distanciaRadar);
             if (radar != null)
             {
                 local.Distancia = calcularDistancia(local.Latitude, local.Longitude, radar.Latitude, radar.Longitude);
                 if (PreferenciaUtils.AlertaInteligente)
                 {
                     if ((local.Velocidade - 5) > radar.Velocidade)
                     {
                         avisarRadar(local, radar);
                     }
                 }
                 else
                 {
                     if (local.Velocidade > 15)
                     {
                         avisarRadar(local, radar);
                     }
                 }
             }
         }
         regraPercurso.executarGravacao(local, RadarBLL.RadarAtual);
         var visualPage = GlobalUtils.Visual;
         if (visualPage != null)
         {
             visualPage.VelocidadeAtual = (float)local.Velocidade;
             visualPage.Precisao        = local.Precisao;
             visualPage.Sentido         = local.Sentido;
             RadarInfo radar = RadarBLL.RadarAtual;
             if (radar != null)
             {
                 visualPage.VelocidadeRadar = radar.Velocidade;
                 visualPage.DistanciaRadar  = (float)local.Distancia;
             }
             else
             {
                 visualPage.VelocidadeRadar = 0;
                 visualPage.DistanciaRadar  = 0;
             }
             visualPage.atualizarPosicao(local);
             visualPage.redesenhar();
         }
         //regraPercurso.executarGravacao(local, RadarBLL.RadarAtual);
         //MensagemUtils.avisar(MemoryUtils.getInfo().ToString());
     }
     catch (Exception e) {
         ErroPage.exibir(e);
     }
     return(local);
 }
コード例 #25
0
 public override void atualizarPosicao(LocalizacaoInfo posicao)
 {
     _map.atualizarPosicao(posicao);
 }
コード例 #26
0
ファイル: GPSAndroid.cs プロジェクト: kilikdudu/RadarPlus
        public void OnLocationChanged(Location location)
        {
            if (desativando)
            {
                return;
            }
            LocalizacaoInfo local = converterLocalizacao(location);

            /*
             * local.Velocidade = 20;
             * local.Latitude = -16.620743;
             * local.Longitude = -49.356621;
             * local.Sentido = 324;
             */
            if (Situacao == GPSSituacaoEnum.Ativo)
            {
                if (Xamarin.Forms.Forms.IsInitialized)
                {
                    local = GPSUtils.atualizarPosicao(local);
                    RadarInfo radar = RadarBLL.RadarAtual;
                    if (radar != null)
                    {
                        //var velocidadeImagem = mRootLayout.FindViewById<ImageView>(Resource.Id.velocidadeImagem);
                        atualizarVelocidadeRadar(radar.Velocidade);
                        var distanciaRadar = mRootLayout.FindViewById <TextView>(Resource.Id.distanciaRadar);
                        int distancia      = Convert.ToInt32(Math.Floor(local.Distancia));
                        //velocidadeImagem.SetImageResource(Resource.Drawable.radar_20);
                        //velocidadeRadar.Text = radar.VelocidadeStr;
                        distanciaRadar.Text = distancia.ToString() + " m";
                        if (mRootLayout.Visibility != ViewStates.Visible)
                        {
                            mRootLayout.Visibility = ViewStates.Visible;
                        }
                    }
                    else
                    {
                        if (mRootLayout.Visibility == ViewStates.Visible)
                        {
                            mRootLayout.Visibility = ViewStates.Invisible;
                        }
                    }
                }
            }
            else if (Situacao == GPSSituacaoEnum.Espera)
            {
                var regraPreferencia = new PreferenciaBLL();
                if (regraPreferencia.pegar("ligarDesligar", "") == "1" && local.Precisao <= 30)
                {
                    if (local.Velocidade >= 15)
                    {
                        Situacao = GPSSituacaoEnum.Ativo;
                        if (!Xamarin.Forms.Forms.IsInitialized)
                        {
                            Intent intent = new Intent(this, typeof(MainActivity));
                            intent.AddFlags(ActivityFlags.NewTask);
                            StartActivity(intent);
                        }
                        else if (MainActivity.Situacao != JanelaSituacaoEnum.Aberta)
                        {
                            Intent intent = new Intent(this, typeof(MainActivity));
                            intent.AddFlags(ActivityFlags.NewTask);
                            StartActivity(intent);
                        }
                    }
                    else
                    {
                        desativarGPS();
                        new Handler().PostDelayed(() => { ativarGPS(); }, 30000);
                    }
                }
            }
        }
コード例 #27
0
 public void atualizarLocalizacao(LocalizacaoInfo local)
 {
 }