示例#1
0
        public Retorno Cadastrar(FeicaoObjeto feicao)
        {
            LayerFeicao         layerFeicao;
            LayerFeicaoBusiness layerFeicaoBus = new LayerFeicaoBusiness();
            int id = 0;

            try
            {
                Hashtable filtros = new Hashtable();
                filtros.Add("id", feicao.IdLayerFeicao);
                layerFeicao = layerFeicaoBus.Buscar(filtros);
                if (feicao == null)
                {
                    return(new Retorno(false, "Layer Feição inválida", id, feicao.IdLayerFeicao));
                }

                FeicaoGeometria geoFeicao = null;
                string          mensagem;

                mensagem  = string.Empty;
                geoFeicao = InstanciarObjeto(layerFeicao.TipoGeometria, feicao.Vertices, feicao.Atributos, feicao.Aneis);
                id        = da.GerarId(layerFeicao.Sequencia);

                AtributoFeicao atributo = geoFeicao.Atributos.Find(delegate(AtributoFeicao a) { return(a.Nome.ToUpper() == layerFeicao.ColunaPK.ToUpper()); });
                if (atributo != null)
                {
                    atributo.Tipo  = AtributoFeicao.TipoAtributo.Manual;
                    atributo.Valor = id;
                }
                else
                {
                    atributo = new AtributoFeicao(AtributoFeicao.TipoAtributo.Manual, layerFeicao.ColunaPK.ToUpper(), id);
                    geoFeicao.Atributos.Add(atributo);
                }

                if (!da.Cadastrar(geoFeicao, geoFeicao.TabelaRascunho, layerFeicao.Id))
                {
                    return(new Retorno(false, "Erro ao cadastrar geometria", id, feicao.IdLayerFeicao));
                }
                if (!da.ValidarGeometria(id, geoFeicao.TabelaRascunho, layerFeicao.ColunaPK, layerFeicao.Id, feicao.IdProjeto, out mensagem))
                {
                    da.Excluir(geoFeicao.ObjectId, geoFeicao.TabelaRascunho, layerFeicao.ColunaPK);
                    return(new Retorno(false, mensagem, id, feicao.IdLayerFeicao));
                }

                da.Transferir(layerFeicao.Schema, layerFeicao.Tabela, geoFeicao.TabelaRascunho, id);

                da.AtualizarAtributos(geoFeicao.Atributos, layerFeicao.Schema, layerFeicao.Tabela, id, layerFeicao.ColunaPK);

                LayerFeicaoBusiness.LimparCacheLayers(feicao.IdProjeto);
            }
            catch (Exception exc)
            {
                LogDa.Gerar(new { Exc = exc, Feicao = feicao });
                return(new Retorno(false, exc.Message));
            }
            return(new Retorno(true, "Cadastrado com sucesso!", id, feicao.IdLayerFeicao));
        }
示例#2
0
        private FeicaoGeometria InstanciarObjeto(TipoGeometriaFeicao tipo, List <Vertice> vertices, List <AtributoFeicao> atributos, List <List <Vertice> > aneis = null)
        {
            FeicaoGeometria geoFeicao = null;

            switch (tipo)
            {
            case TipoGeometriaFeicao.Linha:
                geoFeicao = new Linha(vertices, atributos);
                break;

            case TipoGeometriaFeicao.Poligono:
                geoFeicao = new Poligono(vertices, atributos, aneis);
                break;

            case TipoGeometriaFeicao.Ponto:
                geoFeicao = new Ponto(vertices, atributos);
                break;
            }
            return(geoFeicao);
        }
示例#3
0
        internal bool AtualizarRascunho(FeicaoGeometria geoFeicao, int objectid, string tabelaRascunho, string primaryKey, int idLayerFeicao)
        {
            OracleConnection         connection  = null;
            OracleTransaction        transaction = null;
            OracleCommand            comando     = null;
            FonteFeicaoOracleSpatial destino     = null;

            try
            {
                if (geoFeicao == null)
                {
                    throw new ApplicationException("Referência nula do objeto");
                }
                string schemaUsuario = ConfigurationManager.AppSettings["SchemaUsuarioGeo"].ToUpper();

                BancoDeDados bancoDeDados = BancoDeDadosFactory.CriarBancoDeDados("StringConexaoGeo");

                destino = GetConexao(bancoDeDados);
                destino.Abrir();

                connection = destino.Conexao;
                if (connection != null)
                {
                    transaction = connection.BeginTransaction();
                }

                comando = new OracleCommand("delete from " + tabelaRascunho + " t where t." + primaryKey + " = :objectid and t.feicao = :feicao ", connection);
                comando.Parameters.Add("objectid", OracleDbType.Int32);
                comando.Parameters["objectid"].Value = objectid;
                comando.Parameters.Add("feicao", OracleDbType.Int32);
                comando.Parameters["feicao"].Value = idLayerFeicao;
                comando.ExecuteNonQuery();

                ClasseFeicao  classeDestino          = destino.ObterClasseFeicao(tabelaRascunho);
                FeicaoAdapter adpt                   = new FeicaoAdapter(classeDestino);
                OperadorFeicaoOracleSpatial operador = (OperadorFeicaoOracleSpatial)destino.ObterOperadorFeicao(tabelaRascunho);
                TecnoGeo.Geografico.Feicao  feicao   = classeDestino.CriarFeicao();
                decimal          srid                = GetSrid();
                OperacaoEspacial operacao            = new OperacaoEspacialTransformacao(new CampoGeometrico(), srid, srid);

                feicao.Geometria = geoFeicao.RetornarGeometria();

                if (feicao.Geometria == null)
                {
                    throw new ApplicationException("Referência nula da geometria");
                }

                foreach (AtributoFeicao a in geoFeicao.Atributos)
                {
                    if (feicao.Atributos.IndiceDe(a.Nome.ToUpper()) < 0)
                    {
                        continue;
                    }
                    switch (a.Tipo)
                    {
                    case AtributoFeicao.TipoAtributo.Manual:
                        feicao.Atributos[a.Nome.ToUpper()].Valor = a.Valor;
                        break;

                    case AtributoFeicao.TipoAtributo.Sequencia:
                        adpt.Adaptadores[a.Nome.ToUpper()].Origem = TipoOrigem.Sequencia;
                        adpt.Adaptadores[a.Nome.ToUpper()].Valor  = a.Valor.ToString();
                        break;
                    }
                }

                feicao.Atributos["FEICAO"].Valor = idLayerFeicao;

                operador.Inserir(adpt.Transformar(feicao), operacao);
                transaction.Commit();
            }
            catch
            {
                if (transaction != null)
                {
                    transaction.Rollback();
                }
                throw;
            }
            finally
            {
                if (transaction != null)
                {
                    transaction.Dispose();
                }
                if (destino != null)
                {
                    destino.Fechar();
                }
                if (connection != null)
                {
                    connection.Close();
                    connection.Dispose();
                }
            }
            return(true);
        }
示例#4
0
        internal bool Cadastrar(FeicaoGeometria geoFeicao, string tabelaRascunho, int idLayerFeicao)
        {
            BancoDeDados bancoDeDados = null;

            if (geoFeicao == null)
            {
                throw new ApplicationException("Referência nula do objeto");
            }

            string schemaUsuario = ConfigurationManager.AppSettings["SchemaUsuarioGeo"].ToUpper();

            bancoDeDados = BancoDeDadosFactory.CriarBancoDeDados("StringConexaoGeo");
            FonteFeicaoOracleSpatial    destino  = GetConexao(bancoDeDados);
            OperadorFeicaoOracleSpatial operador = null;

            try
            {
                destino.Abrir();

                ClasseFeicao  classeDestino = destino.ObterClasseFeicao(tabelaRascunho);
                FeicaoAdapter adpt          = new FeicaoAdapter(classeDestino);

                operador = (OperadorFeicaoOracleSpatial)destino.ObterOperadorFeicao(schemaUsuario + "." + tabelaRascunho);
                Tecnomapas.TecnoGeo.Geografico.Feicao feicao = classeDestino.CriarFeicao();

                feicao.Geometria = geoFeicao.RetornarGeometria();

                if (feicao.Geometria == null)
                {
                    throw new ApplicationException("Referência nula da geometria");
                }

                foreach (AtributoFeicao a in geoFeicao.Atributos)
                {
                    if (feicao.Atributos.IndiceDe(a.Nome.ToUpper()) < 0)
                    {
                        continue;
                    }
                    switch (a.Tipo)
                    {
                    case AtributoFeicao.TipoAtributo.Manual:
                        feicao.Atributos[a.Nome.ToUpper()].Valor = a.Valor;
                        break;

                    case AtributoFeicao.TipoAtributo.Sequencia:
                        adpt.Adaptadores[a.Nome.ToUpper()].Origem = TipoOrigem.Sequencia;
                        adpt.Adaptadores[a.Nome.ToUpper()].Valor  = a.Valor.ToString();
                        break;
                    }
                }
                feicao.Atributos["FEICAO"].Valor = idLayerFeicao;

                decimal          srid     = GetSrid();
                OperacaoEspacial operacao = new OperacaoEspacialTransformacao(new CampoGeometrico(), srid, srid);

                operador.Inserir(adpt.Transformar(feicao), operacao);

                operador.Fechar();
            }
            finally
            {
                destino.Fechar();
            }
            return(true);
        }