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); }
public Dictionary <string, List <Feicao> > Relacao(List <string> feicoes, string wkt) { FonteFeicaoOracleSpatial origem = GetDatabaseFontFeicao(); Dictionary <string, List <Feicao> > lstRetorno = new Dictionary <string, List <Feicao> >(); int srid = Convert.ToInt32(ConfigurationManager.AppSettings["srid"]); origem.Abrir(); LeitorFeicao leitor = null; ClasseFeicao classeFeicao = null; Expressao geometria = new FuncaoOracle("addsrid(mdsys.sdo_util.from_wktgeometry({0}), {1})", wkt, srid); Expressao filtro; List <Feicao> lstGeoAtributos = null; for (int i = 0; i < feicoes.Count; i++) { lstGeoAtributos = new List <Feicao>(); string feicao = feicoes[i]; try { classeFeicao = origem.ObterClasseFeicao(feicao); } catch { classeFeicao = null; } if (classeFeicao == null) { continue; } string campoGeo = classeFeicao.CampoGeometrico; filtro = new ExpressaoRelacionalOracleSpatial(new OperacaoEspacialRelacao(new Campo(campoGeo), geometria, TipoRelacaoEspacial.ANYINTERACT), TipoOperadorRelacional.Igual, new ConstanteOracleSpatial(DbType.String, "TRUE")); try { leitor = origem.ObterLeitorFeicao(feicao, null, filtro); } catch (Exception) { for (int k = 0; k < 5; k++) { try { ExpressaoRelacionalOracleSpatial termoAux = new ExpressaoRelacionalOracleSpatial(new Campo("1"), TipoOperadorRelacional.Igual, new Campo("1")); filtro = new ExpressaoLogicaOracleSpatial(filtro, TipoOperadorLogico.E, termoAux); leitor = origem.ObterLeitorFeicao(feicao, null, filtro); } catch (Exception) { if (k < 4) { continue; } throw; } break; } } while (leitor.Ler()) { if (leitor.Atual.Geometria == null) { continue; } lstGeoAtributos.Add(leitor.Atual); } leitor.Fechar(); if (lstGeoAtributos.Count > 0) { lstRetorno.Add(feicao, lstGeoAtributos); } } origem.Fechar(); return(lstRetorno); }
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); }
public LeitorFeicaoGeo(string classeFeicao, FonteFeicao fonte, OperacaoEspacial operacao, Expressao filtro) : base(classeFeicao, fonte) { if (fonte == null) { throw new Exception("Fonte Nula"); } this._fonte = fonte; this._tabela = fonte.ObterClasseFeicao(classeFeicao); this._atributos = this._tabela.Atributos; string str1 = ""; for (int index = 0; index < this._tabela.Atributos.Count; ++index) { if (this._tabela.Atributos[index].Tipo == DbType.DateTime) { str1 = str1 + "to_char(" + this._tabela.Atributos[index].Nome + ",'dd/mm/yyyy HH24:mi:ss') " + this._tabela.Atributos[index].Nome + ", "; } else { str1 = str1 + this._tabela.Atributos[index].Nome + ", "; } } if (operacao != null) { str1 = str1 + operacao.GerarComando("param") + " "; } string str2 = str1 + this._tabela.CampoGeometrico; string str3 = ""; if (filtro != null) { str3 = " where " + filtro.GerarComando("fparam"); } OracleCommand cmd1 = new OracleCommand("select count(*) from " + this._tabela.Nome + str3, (this.Fonte as FonteFeicaoOracleSpatial).Conexao); filtro?.CarregarParametros(cmd1, "fparam"); int int32 = Convert.ToInt32(cmd1.ExecuteScalar()); this._dr = (XmlTextReader)null; if (int32 <= 0) { return; } OracleCommand cmd2 = new OracleCommand("select " + str2 + " from " + this._tabela.Nome + str3, (this.Fonte as FonteFeicaoOracleSpatial).Conexao); cmd2.XmlCommandType = OracleXmlCommandType.Query; cmd2.FetchSize = 5242880L; cmd2.CommandTimeout = 3600; operacao?.CarregarParametros(cmd2, "param"); filtro?.CarregarParametros(cmd2, "fparam"); if (cmd2.Parameters.Count > 0) { cmd2.BindByName = true; cmd2.AddRowid = true; } else { cmd2.BindByName = false; } this.ComandoSQL = cmd2.CommandText; this._dr = (XmlTextReader)cmd2.ExecuteXmlReader(); this._dr.WhitespaceHandling = WhitespaceHandling.None; do { ; }while (this._dr.Read() && this._dr.Name != "ROWSET"); }
private byte[] GerarZipBaseRef() { string[] featureNameList; string[] featureTypeList; string[] featureAliasList; int sridBase = 0; string connectionKey; Hashtable config = business.ObterConfiguracoesBaseRef(); if (Project.Type == OPERACAO_BASEREF_GEOBASES) { featureNameList = config["GEOBASES_FEATURE_NAMES"].ToString().Split(','); featureTypeList = config["GEOBASES_FEATURE_TYPES"].ToString().Split(','); featureAliasList = config["GEOBASES_FEATURE_ALIASES"].ToString().Split(','); connectionKey = config["GEOBASES_CONNECTION_KEY"].ToString(); sridBase = 31999; } else if (Project.Type == OPERACAO_BASEREF_INTERNA) { featureNameList = config["INTERNO_FEATURE_NAMES"].ToString().Split(','); featureTypeList = config["INTERNO_FEATURE_TYPES"].ToString().Split(','); featureAliasList = config["INTERNO_FEATURE_ALIASES"].ToString().Split(','); connectionKey = config["INTERNO_CONNECTION_KEY"].ToString(); sridBase = Convert.ToInt32(config["SRID_BASE"]); } else { throw new Exception("Operacao Inválida ao gerar Base de Referência"); } List <int> pnts_envelope = business.ObterEnvelope(Project.Id); if (pnts_envelope.Count != 4) { throw new Exception("Envelope da Caracterização " + Project.Id + " inválido"); } FonteFeicaoOracleSpatial origem = GetDatabaseFontFeicao(connectionKey); FonteFeicaoShapeStream destino = new FonteFeicaoShapeStream(); origem.Abrir(); destino.Abrir(); LeitorFeicao leitor = null; ClasseFeicao classeFeicao = null; Expressao envelope = new Campo(String.Format("mdsys.sdo_geometry(2003,{0},null,sdo_elem_info_array(1,1003,3), sdo_ordinate_array({1},{2},{3},{4}))", sridBase, pnts_envelope[0], pnts_envelope[1], pnts_envelope[2], pnts_envelope[3])); OperacaoEspacial operacao; Expressao filtro; List <OperadorFeicaoShape> lstEscritores = new List <OperadorFeicaoShape>(); List <string> srtNames = new List <string>(); for (int i = 0; i < featureNameList.Length; i++) { string alias = featureAliasList[i]; string feicao = featureNameList[i]; TipoGeometria eTipoGeo = (TipoGeometria)Enum.Parse(typeof(TipoGeometria), featureTypeList[i], true); try { classeFeicao = origem.ObterClasseFeicao(feicao); } catch { classeFeicao = null; } if (classeFeicao == null) { continue; } string campoGeo = classeFeicao.CampoGeometrico; operacao = new OperacaoEspacialInterseccao(new Campo(campoGeo), envelope); operacao = new OperacaoEspacialExtracao(operacao, eTipoGeo); operacao = new OperacaoEspacialDensificacao(operacao); filtro = new ExpressaoRelacionalOracleSpatial(new OperacaoEspacialRelacao(new Campo(campoGeo), envelope, TipoRelacaoEspacial.ANYINTERACT), TipoOperadorRelacional.Igual, new ConstanteOracleSpatial(DbType.String, "TRUE")); try { leitor = origem.ObterLeitorFeicao(feicao, operacao, filtro); OperadorFeicaoShape escritor = null; while (leitor.Ler()) { if (leitor.Atual.Geometria == null) { continue; } if (escritor == null) { escritor = (OperadorFeicaoShape)destino.CriarClasseFeicao(alias, eTipoGeo, leitor.Atual.Geometria.Dimensoes, leitor.Atual.Geometria.EhLrs, leitor.Atributos); lstEscritores.Add(escritor); srtNames.Add(alias); } escritor.Inserir(leitor.Atual); } leitor.Fechar(); } catch (Exception exc) { throw new Exception(String.Format("Feicao {0}", feicao), exc); } } byte[] byteReturn = null; if (lstEscritores.Count > 0) { using (MemoryStream ms = new MemoryStream()) { destino.ExportarParaZip(ms); byteReturn = AdicionarArquivosPrj(ms, srtNames.ToArray()); } foreach (OperadorFeicaoShape escritorShp in lstEscritores) { escritorShp.Fechar(); } } origem.Fechar(); destino.Fechar(); if (byteReturn == null) { string message = "Nenhuma Geometria nas Feições a seguir cruza com a Área de Abrangencia selecionada:"; foreach (string featureName in featureAliasList) { message += "\r\n - " + featureName; } byteReturn = GerarZipComMensagem("Nenhuma Geometria Encontrada", message); } return(byteReturn); }
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(); } }
private List <byte[]> GerarZipProcessado() { List <string> prjList = new List <string>(); string[] featureList = null; string[] aliasList = null; switch (Project.Type) { case OPERACAO_DOMINIALIDADE: featureList = "TMP_ATP,TMP_APMP,TMP_AFD,TMP_ROCHA,TMP_VERTICE,TMP_ARL,TMP_RPPN,TMP_AFS,TMP_AVN,TMP_AA,TMP_ACONSTRUIDA,TMP_DUTO,TMP_LTRANSMISSAO,TMP_ESTRADA,TMP_FERROVIA,TMP_NASCENTE,TMP_RIO_LINHA,TMP_RIO_AREA,TMP_LAGOA,TMP_REPRESA,TMP_DUNA,TMP_REST_DECLIVIDADE,TMP_ESCARPA,TMP_AREAS_CALCULADAS".Split(','); aliasList = "ATP,APMP,AFD,ROCHA,VERTICE,ARL,RPPN,AFS,AVN,AA,ACONSTRUIDA,DUTO,LTRANSMISSAO,ESTRADA,FERROVIA,NASCENTE,RIO_LINHA,RIO_AREA,LAGOA,REPRESA,DUNA,REST_DECLIVIDADE,ESCARPA,AREAS_CALCULADAS".Split(','); break; case OPERACAO_ATIVIDADE: featureList = "TMP_PATIV,TMP_LATIV,TMP_AATIV,TMP_AIATIV".Split(','); aliasList = "PATIV,LATIV,AATIV,AIATIV".Split(','); break; } FonteFeicaoOracleSpatial origem = GetDatabaseFontFeicao(); FonteFeicaoShapeStream destino = new FonteFeicaoShapeStream(); FonteFeicaoShapeStream destinoTrackmaker = new FonteFeicaoShapeStream(); origem.Abrir(); destino.Abrir(); destinoTrackmaker.Abrir(); LeitorFeicao leitor = null; ClasseFeicao classeFeicao = null; List <OperadorFeicaoShape> lstEscritores = new List <OperadorFeicaoShape>(); List <OperadorFeicaoShape> lstEscritoresTrackmaker = new List <OperadorFeicaoShape>(); int count = featureList.Length; for (int i = 0; i < count; i++) { string feicao = featureList[i]; string alias = aliasList[i]; classeFeicao = origem.ObterClasseFeicao(feicao); if (classeFeicao == null) { continue; } OperadorFeicaoShape escritor = null; AtributoCollection atributos = null; OperadorFeicaoShape escritorTrackmaker = null; AtributoCollection atributosTrackmaker = null; Expressao filtro = null; Atributo atributo; Feicao data; if (feicao == "TMP_AREAS_CALCULADAS") { string[] tipos = "APP_APMP,APP_AA_USO,APP_AA_REC,APP_AVN,APP_ARL".Split(','); foreach (string tipoArea in tipos) { ExpressaoRelacionalOracleSpatial termo1 = new ExpressaoRelacionalOracleSpatial(new Campo("PROJETO"), TipoOperadorRelacional.Igual, new ParametroOracleSpatial(DbType.Int32, Project.Id)); ExpressaoRelacionalOracleSpatial termo2 = new ExpressaoRelacionalOracleSpatial(new Campo("TIPO"), TipoOperadorRelacional.Igual, new ParametroOracleSpatial(DbType.String, tipoArea, 50)); filtro = new ExpressaoLogicaOracleSpatial(termo1, TipoOperadorLogico.E, termo2); try { leitor = origem.ObterLeitorFeicao(feicao, null, filtro); } catch (Exception exc) { for (int k = 0; k < 5; k++) { try { ExpressaoRelacionalOracleSpatial termoAux = new ExpressaoRelacionalOracleSpatial(new Campo("1"), TipoOperadorRelacional.Igual, new Campo("1")); filtro = new ExpressaoLogicaOracleSpatial(filtro, TipoOperadorLogico.E, termoAux); leitor = origem.ObterLeitorFeicao(feicao, null, filtro); } catch (Exception) { if (k < 4) { continue; } throw new Exception(string.Format("Feicao: {0} / Project.Id: {1} / tipo {2} / where: {3}", feicao, Project.Id, tipoArea, filtro.GerarComando()), exc); } break; } } escritor = null; while (leitor.Ler()) { if (escritor == null) { atributos = new AtributoCollection(); atributos.Adicionar(classeFeicao.Atributos["AREA_M2"]); escritor = (OperadorFeicaoShape)destino.CriarClasseFeicao(tipoArea, leitor.Atual.Geometria.ObterTipo(), 2, false, atributos); prjList.Add(tipoArea); lstEscritores.Add(escritor); //Trackmaker atributo = new Atributo(); atributo.Nome = "NOME"; atributo.Tamanho = 200; atributo.Tipo = DbType.String; atributosTrackmaker = new AtributoCollection(); atributosTrackmaker.Adicionar(atributo); escritorTrackmaker = (OperadorFeicaoShape)destinoTrackmaker.CriarClasseFeicao(tipoArea, leitor.Atual.Geometria.ObterTipo(), 2, false, atributosTrackmaker); lstEscritoresTrackmaker.Add(escritorTrackmaker); } //Normal information data = new Feicao(); data.ID = leitor.Atual.ID; data.Geometria = leitor.Atual.Geometria; data.Atributos = new AtributoCollection(); foreach (Atributo attr in atributos) { atributo = attr.Clonar(); atributo.Valor = leitor.Atual.Atributos[atributo.Nome].Valor; data.Atributos.Adicionar(atributo); } escritor.Inserir(data); //Trackmaker information data = new Feicao(); data.ID = leitor.Atual.ID; data.Geometria = leitor.Atual.Geometria; data.Atributos = new AtributoCollection(); atributo = atributosTrackmaker[0].Clonar(); atributo.Valor = GenerateTrackMakerNameValue("TMP_" + tipoArea, leitor.Atual.Atributos); data.Atributos.Adicionar(atributo); escritorTrackmaker.Inserir(data); } } } else { filtro = new ExpressaoRelacionalOracleSpatial(new Campo("PROJETO"), TipoOperadorRelacional.Igual, new ParametroOracleSpatial(DbType.Int32, Project.Id)); try { leitor = origem.ObterLeitorFeicao(feicao, null, filtro); } catch (Exception) { for (int k = 0; k < 5; k++) { try { ExpressaoRelacionalOracleSpatial termoAux = new ExpressaoRelacionalOracleSpatial(new Campo("1"), TipoOperadorRelacional.Igual, new Campo("1")); filtro = new ExpressaoLogicaOracleSpatial(filtro, TipoOperadorLogico.E, termoAux); leitor = origem.ObterLeitorFeicao(feicao, null, filtro); } catch (Exception) { if (k < 4) { continue; } throw; } break; } } while (leitor.Ler()) { if (escritor == null) { atributos = new AtributoCollection(); atributos.Adicionar(classeFeicao.Atributos["ID"]); if (classeFeicao.Atributos.IndiceDe("LARGURA") >= 0) { atributos.Adicionar(classeFeicao.Atributos["LARGURA"]); } if (classeFeicao.Atributos.IndiceDe("NOME") >= 0) { atributos.Adicionar(classeFeicao.Atributos["NOME"]); } if (classeFeicao.Atributos.IndiceDe("AMORTECIMENTO") >= 0) { atributos.Adicionar(classeFeicao.Atributos["AMORTECIMENTO"]); } if (classeFeicao.Atributos.IndiceDe("COD_APMP") >= 0) { atributos.Adicionar(classeFeicao.Atributos["COD_APMP"]); } if (classeFeicao.Atributos.IndiceDe("COMPENSADA") >= 0) { atributos.Adicionar(classeFeicao.Atributos["COMPENSADA"]); } if (classeFeicao.Atributos.IndiceDe("ESTAGIO") >= 0) { atributos.Adicionar(classeFeicao.Atributos["ESTAGIO"]); } if (classeFeicao.Atributos.IndiceDe("PROJETO") >= 0) { atributos.Adicionar(classeFeicao.Atributos["PROJETO"]); } if (classeFeicao.Atributos.IndiceDe("SITUACAO") >= 0) { atributos.Adicionar(classeFeicao.Atributos["SITUACAO"]); } if (classeFeicao.Atributos.IndiceDe("TIPO") >= 0) { atributos.Adicionar(classeFeicao.Atributos["TIPO"]); } if (classeFeicao.Atributos.IndiceDe("ZONA") >= 0) { atributos.Adicionar(classeFeicao.Atributos["ZONA"]); } if (classeFeicao.Atributos.IndiceDe("AREA_M2") >= 0) { atributos.Adicionar(classeFeicao.Atributos["AREA_M2"]); } if (classeFeicao.Atributos.IndiceDe("CODIGO") >= 0) { atributos.Adicionar(classeFeicao.Atributos["CODIGO"]); } if (classeFeicao.Atributos.IndiceDe("VEGETACAO") >= 0) { atributos.Adicionar(classeFeicao.Atributos["VEGETACAO"]); } escritor = (OperadorFeicaoShape)destino.CriarClasseFeicao(alias, leitor.Atual.Geometria.ObterTipo(), 2, false, atributos); prjList.Add(alias); lstEscritores.Add(escritor); //Trackmaker atributo = new Atributo(); atributo.Nome = "NOME"; atributo.Tamanho = 200; atributo.Tipo = DbType.String; atributosTrackmaker = new AtributoCollection(); atributosTrackmaker.Adicionar(atributo); escritorTrackmaker = (OperadorFeicaoShape)destinoTrackmaker.CriarClasseFeicao(alias, leitor.Atual.Geometria.ObterTipo(), 2, false, atributosTrackmaker); lstEscritoresTrackmaker.Add(escritorTrackmaker); } //Normal information data = new Feicao(); data.ID = leitor.Atual.ID; data.Geometria = leitor.Atual.Geometria; data.Atributos = new AtributoCollection(); foreach (Atributo attr in atributos) { atributo = attr.Clonar(); atributo.Valor = leitor.Atual.Atributos[atributo.Nome].Valor; data.Atributos.Adicionar(atributo); } escritor.Inserir(data); //Trackmaker information data = new Feicao(); data.ID = leitor.Atual.ID; data.Geometria = leitor.Atual.Geometria; data.Atributos = new AtributoCollection(); atributo = atributosTrackmaker[0].Clonar(); atributo.Valor = GenerateTrackMakerNameValue(feicao, leitor.Atual.Atributos); data.Atributos.Adicionar(atributo); escritorTrackmaker.Inserir(data); } } leitor.Fechar(); } byte[] byteReturn = null; byte[] byteTrackmakerReturn = null; if (lstEscritores.Count > 0) { using (MemoryStream ms = new MemoryStream()) { destino.ExportarParaZip(ms); byteReturn = AdicionarArquivosPrj(ms, prjList.ToArray()); } using (MemoryStream ms = new MemoryStream()) { destinoTrackmaker.ExportarParaZip(ms); byteTrackmakerReturn = AdicionarArquivosPrj(ms, prjList.ToArray()); } foreach (OperadorFeicaoShape escritorShp in lstEscritores) { escritorShp.Fechar(); } foreach (OperadorFeicaoShape escritorShp in lstEscritoresTrackmaker) { escritorShp.Fechar(); } } origem.Fechar(); destino.Fechar(); destinoTrackmaker.Fechar(); List <byte[]> result = new List <byte[]>(); result.Add(byteReturn); result.Add(byteTrackmakerReturn); return(result); }
internal ClasseFeicao ObterClasseFeicao(string classeFeicao) { ClasseFeicao classeFeicao1 = new ClasseFeicao(classeFeicao); try { int length = classeFeicao1.Nome.IndexOf("."); string str1; string str2; if (length < 0) { str1 = "IDAFGEO"; str2 = classeFeicao1.Nome; } else { str1 = classeFeicao1.Nome.Substring(0, length); str2 = classeFeicao1.Nome.Substring(length + 1); } string sql = "select count(*) from (select m.owner||'.'|| m.table_name tabela from " + "all_sdo_geom_metadata m) x where x.tabela = upper(:tabela)"; string result; using (Comando comando = this.banco.CriarComando(sql)) { comando.AdicionarParametroEntrada("tabela", (str1 + "." + str2), DbType.String); result = this.banco.ExecutarScalar(comando).ToString(); } if (result == "") { throw new Exception("Tabela " + classeFeicao1.Nome + " não encontrada"); } sql = "select a.column_name, a.data_type, a.char_length, a.data_precision, a.data_scale " + "from all_tab_cols a where a.owner=UPPER(:owner) and a.table_name=UPPER(:tablename) " + "and a.hidden_column='NO' order by a.column_id"; Hashtable list = new Hashtable(); ClasseFeicao classeFeicao2 = new ClasseFeicao(classeFeicao); using (Comando comando = this.banco.CriarComando(sql)) { comando.AdicionarParametroEntrada("owner", str1, DbType.String); comando.AdicionarParametroEntrada("tablename", str2, DbType.String); using (IDataReader reader = banco.ExecutarReader(comando)) { while (reader.Read()) { if (reader["data_type"].ToString() == "SDO_GEOMETRY") { classeFeicao2.CampoGeometrico = reader["column_name"].ToString(); } else { Atributo campo = new Atributo(); campo.Nome = reader["column_name"].ToString(); switch (reader["data_type"].ToString()) { case "DATE": campo.Tipo = DbType.DateTime; break; case "NUMBER": campo.Tipo = DbType.Decimal; if (reader["data_precision"] is DBNull || reader["data_precision"] == null) { if (reader["data_scale"] is DBNull || reader["data_scale"] == null) { campo.Tamanho = -1; campo.CasasDecimais = -1; break; } campo.Tamanho = 38; campo.CasasDecimais = int.Parse(reader["data_scale"].ToString()); break; } campo.Tamanho = int.Parse(reader["data_precision"].ToString()); int num = reader["data_scale"] is DBNull || reader["data_scale"] == null ? 0 : (Convert.ToInt32(reader["data_scale"]) >= 0 ? 1 : 0); campo.CasasDecimais = num != 0 ? int.Parse(reader["data_scale"].ToString()) : 0; break; case "REAL": case "FLOAT": campo.Tipo = DbType.Decimal; campo.Tamanho = -1; campo.CasasDecimais = -1; break; case "INT": case "SMALLINT": case "DECIMAL": case "DEC": case "NUMERIC": case "INTEGER": campo.Tipo = DbType.Decimal; campo.Tamanho = 38; campo.CasasDecimais = 0; break; case "CHAR": case "NCHAR": case "NVARCHAR2": case "STRING": case "VARCHAR2": campo.Tipo = DbType.String; campo.Tamanho = int.Parse(reader["char_length"].ToString()); break; case "LONG": campo.Tipo = DbType.String; campo.Tamanho = 32760; break; case "BLOB": break; default: throw new Exception("Tipo de campo não tratado \"" + reader["data_type"].ToString() + "\""); } classeFeicao2.Atributos.Adicionar(campo); } } return(classeFeicao2); } } } catch { return(null); } }