private bool VerificarCoordenada(Coordenada coordenada, string prefixo)
        {
            CoordenadaMsg msg = new CoordenadaMsg(prefixo);

            if (coordenada.LocalColeta.GetValueOrDefault() <= 0)
            {
                Validacao.Add(msg.LocalColetaObrigatorio);
            }

            if (coordenada.FormaColeta.GetValueOrDefault() <= 0)
            {
                Validacao.Add(msg.FormaColetaObrigatorio);
            }

            CoordenadaBus.Validar(coordenada, prefixo, true);

            if (!Validacao.EhValido)
            {
                return(false);
            }

            if (_da.PontoForaMBR(coordenada.EastingUtm.GetValueOrDefault(), coordenada.NorthingUtm.GetValueOrDefault()))
            {
                Validacao.Add(Mensagem.Sistema.CoordenadaForaMBR);
                return(false);
            }

            return(Validacao.EhValido);
        }
        public static bool Validar(Coordenada coordenada, string prefixo, bool isObrigatorio = false)
        {
            CoordenadaMsg msg = new CoordenadaMsg(prefixo);

            if (isObrigatorio && (coordenada == null || coordenada.Tipo.Id <= 0))
            {
                Validacao.Add(msg.CoordenadaObrigatoria);
                return(false);
            }

            if (coordenada.Tipo.Id > 0)
            {
                if (coordenada.Datum.Id <= 0)
                {
                    Validacao.Add(msg.DatumObrigatorio);
                }

                if (coordenada.Tipo.Id == 1)                 // GMS
                {
                    decimal?gdecLongitude = Gms2DGdec(coordenada.LongitudeGms);
                    decimal?gdecLatitude  = Gms2DGdec(coordenada.LatitudeGms);

                    if (gdecLongitude == null || String.IsNullOrWhiteSpace(coordenada.LongitudeGms))
                    {
                        Validacao.Add(msg.LongitudeGmsObrigatorio);
                    }

                    if (gdecLatitude == null || String.IsNullOrWhiteSpace(coordenada.LatitudeGms))
                    {
                        Validacao.Add(msg.LatitudeGmsObrigatorio);
                    }

                    if (!Validacao.EhValido)
                    {
                        return(false);
                    }

                    if (!ValidarFormatoGMS(coordenada.LongitudeGms))
                    {
                        Validacao.Add(msg.LongitudeGmsFormato);
                    }
                    else if (gdecLongitude == null || gdecLongitude < -180 || gdecLongitude > 180)
                    {
                        Validacao.Add(msg.LongitudeGmsInvalida);
                    }

                    if (!ValidarFormatoGMS(coordenada.LatitudeGms))
                    {
                        Validacao.Add(msg.LatitudeGmsFormato);
                    }
                    else if (gdecLatitude == null || gdecLatitude < -90 || gdecLatitude > 90)
                    {
                        Validacao.Add(msg.LatitudeGmsInvalida);
                    }
                }
                else if (coordenada.Tipo.Id == 2)                 // GDEC
                {
                    if (coordenada.LongitudeGdec == null && String.IsNullOrEmpty(coordenada.LongitudeGdecTexto))
                    {
                        Validacao.Add(msg.LongitudeGdecObrigatorio);
                    }

                    if (coordenada.LatitudeGdec == null && String.IsNullOrEmpty(coordenada.LatitudeGdecTexto))
                    {
                        Validacao.Add(msg.LatitudeGdecObrigatorio);
                    }

                    if (!Validacao.EhValido)
                    {
                        return(false);
                    }

                    if (!ValidarDouble(coordenada.LongitudeGdecTexto))
                    {
                        Validacao.Add(msg.LongitudeGdecInvalida);
                    }

                    if (!ValidarDouble(coordenada.LatitudeGdecTexto))
                    {
                        Validacao.Add(msg.LatitudeGdecInvalida);
                    }

                    if (coordenada.LongitudeGdec < -180 || coordenada.LongitudeGdec > 180)
                    {
                        Validacao.Add(msg.LongitudeGdecForaDoEscopo);
                    }

                    if (coordenada.LatitudeGdec < -90 || coordenada.LatitudeGdec > 90)
                    {
                        Validacao.Add(msg.LatitudeGdecForaDoEscopo);
                    }
                }
                else if (coordenada.Tipo.Id == 3)                 // UTM
                {
                    if (coordenada.EastingUtm.GetValueOrDefault() <= 0 && String.IsNullOrEmpty(coordenada.EastingUtmTexto))
                    {
                        Validacao.Add(msg.EastingUtmObrigatorio);
                    }

                    if (coordenada.NorthingUtm.GetValueOrDefault() <= 0 && String.IsNullOrEmpty(coordenada.NorthingUtmTexto))
                    {
                        Validacao.Add(msg.NorthingUtmObrigatorio);
                    }

                    if (coordenada.FusoUtm == 0)
                    {
                        Validacao.Add(msg.FusoUtmObrigatorio);
                    }

                    if (coordenada.HemisferioUtm == 0)
                    {
                        Validacao.Add(msg.HemisferioUtmObrigatorio);
                    }

                    if (!Validacao.EhValido)
                    {
                        return(false);
                    }

                    if (!ValidarDouble(coordenada.EastingUtmTexto))
                    {
                        Validacao.Add(msg.EastingUtmInvalido);
                    }

                    if (!ValidarDouble(coordenada.NorthingUtmTexto))
                    {
                        Validacao.Add(msg.NorthingUtmInvalido);
                    }

                    if (coordenada.EastingUtm < 0.0001 || coordenada.EastingUtm > 9999999.99999)
                    {
                        Validacao.Add(msg.EastingUtmForaDoEscopo);
                    }

                    if (coordenada.NorthingUtm < 0.0001 || coordenada.NorthingUtm > 9999999.99999)
                    {
                        Validacao.Add(msg.NorthingUtmForaDoEscopo);
                    }
                }
            }

            return(Validacao.EhValido);
        }
        public static bool EstaNaAbrangencia(Coordenada coord, string prefixo)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
            {
                CoordenadaMsg msg = new CoordenadaMsg(prefixo);

                #region validar se está na abrangência

                Comando comando;

                #region Geometria

                comando = bancoDeDados.CriarComando(@"declare"
                                                    + " v_x number;"
                                                    + " v_y number;"
                                                    + " v_fuso number;"
                                                    + " v_hemi number;"
                                                    + " v_count number :=0;"
                                                    + " geo mdsys.sdo_geometry;"
                                                    + " begin"
                                                    + " case :tipo"
                                                    + " when 1 then /*Grau, minuto e Segundo : Geografico*/"
                                                    + " {0}coordenada.gms2utm(:datum_sigla, {0}coordenada.formatagms(:x), {0}coordenada.formatagms(:y), v_x, v_y, v_fuso, v_hemi);"
                                                    + " when 2 then /*Grau decimal: Geografico*/"
                                                    + " {0}coordenada.gdec2utm(:datum_sigla, :x, :y, v_x, v_y, v_fuso, v_hemi);"
                                                    + " when 3 then /*UTM: Projetado*/"
                                                    + " v_x := :x;"
                                                    + " v_y := :y;"
                                                    + " end case;"
                                                    + " v_count := {0}coordenada.EstaNaAbrangencia(v_x, v_y, :abrangencia);"
                                                    + " :resultado := v_count;"
                                                    + " end;", UsuarioGeo);

                comando.AdicionarParametroEntrada("tipo", coord.Tipo.Id, DbType.Int32);
                comando.AdicionarParametroEntrada("abrangencia", coord.Abrangencia ?? 1, DbType.Int32);
                comando.AdicionarParametroEntrada("datum_sigla", coord.Datum.Sigla, DbType.String);
                comando.AdicionarParametroSaida("resultado", DbType.Int32);

                if (coord.Tipo.Id == 1)
                {
                    comando.AdicionarParametroEntrada("x", coord.LongitudeGms, DbType.String);
                    comando.AdicionarParametroEntrada("y", coord.LatitudeGms, DbType.String);
                }
                else if (coord.Tipo.Id == 2)
                {
                    comando.AdicionarParametroEntrada("x", coord.LongitudeGdec, DbType.Double);
                    comando.AdicionarParametroEntrada("y", coord.LatitudeGdec, DbType.Double);
                }
                else
                {
                    comando.AdicionarParametroEntrada("x", coord.EastingUtm, DbType.Double);
                    comando.AdicionarParametroEntrada("y", coord.NorthingUtm, DbType.Double);
                }

                #endregion

                bancoDeDados.ExecutarNonQuery(comando);

                if (comando.ObterValorParametro("resultado").ToString() == "0")
                {
                    Validacao.Add(msg.CoordenadaForaAbrangencia);
                }

                #endregion
            }

            return(Validacao.EhValido);
        }