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); }
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); }
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(); } }