Ejemplo n.º 1
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);
        }
        private void GravarFeicoesShape(FonteFeicaoShapeStream fonte, FonteFeicaoOracleSpatial destino, string shapeName, StringCollection relatorio)
        {
            ClasseFeicao classeFonte = fonte.ObterClasseFeicao(shapeName);

            if (classeFonte == null)
            {
                return;
            }

            ClasseFeicao classeDestino = destino.ObterClasseFeicao("TMP_RASC_TRACKMAKER");

            if (classeDestino == null)
            {
                return;
            }

            FeicaoAdapter adpt = new FeicaoAdapter(classeDestino);

            if (!adpt.EhTransformavel(classeDestino, relatorio))
            {
                relatorio.Add("Arquivo " + shapeName + " desconsiderado por causa das observações acima");
                return;
            }

            LeitorFeicao leitorFeicao = fonte.ObterLeitorFeicao(shapeName);
            OperadorFeicaoOracleSpatial escritorFeicao = (OperadorFeicaoOracleSpatial)destino.ObterOperadorFeicao("TMP_RASC_TRACKMAKER");

            if (leitorFeicao == null)
            {
                return;
            }
            if (escritorFeicao == null)
            {
                return;
            }

            adpt.Adaptadores["PROJETO"].Origem = TipoOrigem.Manual;
            adpt.Adaptadores["PROJETO"].Valor  = Project.Id;

            int cont = 0;

            try
            {
                while (true)
                {
                    try
                    {
                        if (!leitorFeicao.Ler())
                        {
                            return;
                        }

                        cont++;

                        if (leitorFeicao.Atual.Atributos.IndiceDe("NOME") >= 0)
                        {
                            Atributo atributo = leitorFeicao.Atual.Atributos["NOME"];
                            leitorFeicao.Atual.Atributos.Clear();
                            leitorFeicao.Atual.Atributos.Adicionar(atributo);
                        }
                        else if (leitorFeicao.Atual.Atributos.IndiceDe("NAME") >= 0)
                        {
                            Atributo atributo = leitorFeicao.Atual.Atributos["NAME"];
                            atributo.Nome = "NOME";
                            leitorFeicao.Atual.Atributos.Clear();
                            leitorFeicao.Atual.Atributos.Adicionar(atributo);
                        }

                        Feicao otherFeicao = adpt.Transformar(leitorFeicao.Atual);

                        escritorFeicao.Inserir(otherFeicao);
                    }
                    catch
                    {
                        relatorio.Add(String.Format("A geometria {0} da feição {1} é inválida ou nula, deve ser redesenhada ou removida.", cont, shapeName));
                    }
                }
            }
            catch (TecnoGeoException exc)
            {
                throw new Exception(string.Format("Erro ao transportar geometria {0}/{1} da feição {2}. Erro subjacente era: {3}", cont, Project.Id, shapeName, exc.Message));
            }
            finally
            {
                escritorFeicao.Fechar();
                leitorFeicao.Fechar();
            }
        }