Hoje vamos falar um pouco sobre validacao de tabelas espaciais no Oracle, eu fiz esse estudo ha alguns anos atras e agora compartilho com a comundade Oracle de Plantao. O Banco de dados Oracle quando utilizado para armazenar dados espaciais requer que a tabela possua um campo do tipo sdo_geometry.Esse tipo de campo suporta a insercao de dados no formato Gis, onde sao inseridos, por exemplo, informacoes como:Latitude, Longitude, dimensao, limites, projecao, fuso etc...Baseados nessas informacoes o Oracle monta um modelo de dados baseado em pontos formando a figura geometrica. Podemos desta forma criar desde pontos a polygonos que podem ser usados para representar cursos de rios,areas delimitadas,lagoas e nascentes.Para que seja possivel criar essas representacoes espaciais os dados espaciais contidos nas tabelas devem ser integros e livres de erros geometricos. Como o Oracle nao impede que os dados espaciais inconsistentes sejam inseridos a validacao espacial deve ser feita apos a insercao dos dados. Na imagem abaixo podemos ver alguns dos principais erros geometricos: Ferramentas como o Geomedia e o Arcgis possuem uma validacao nativa que pode serusada pelos usuarios.Ilustracao Geomedia: Em tools->Validate Geometria E possivel escolher uma tabela e verificar se a mesma esta valida segundo as regras basicas de integridade espacial.Contudo as referidas ferramentas possuem precisoes geometricas distintas o que torna sua validacao menos confiavel, o que em alguns casos pode causar uma falsa impressao de dados geometricos validos. Mas ao transportar de uma ferramenta para outra, layers com problemas espaciais causam problemas, sendo exibidas de forma incorretas ou incompletas.Para contornar esse tipo de problema, procedemos da seguinte forma:O primeiro passo e definir a precisao em que trabalharemos, quanto menor fora a precisao menor sera a tolerancia a erros.Utilizar o pacote de validacao Oracle sdo_geom para verificar a integridade dos dados espaciais.Esse pacote do Oracle realiza uma verificacao de consistencia para tipos geometricos validos e retorna de forma textual se a geometria esta valida.Exemplo: select * from ( select 'LOTE_ORIGINAL'TABELA,COD_LOTE CAMPO_ID,desc_erro_geom(sdo_geom.validate_geometry_with_context(GEOMETRIA,0.01001))ERRO from LOTE_ORIGINAL ) where erro!= 'TRUE' Onde Lote_original e o nome da tabela a ser validadaSdo_geom.validate_geometry_with_context e o pacote oracle de validacaoGeometria e o campo sdo_geometry0.01001 e a precisao usada De acordo com a aplicacao deste comando, serao retornados somente os campos onde erro for diferente de TRUE, caso exista alguma ocorrencia sera apresentado com codigo de erro.A funcao sdo_geom verifica a consistencia do tipo de geometria e da geometriaPara consistencia da geometria a funcao checa o seguinte: Se o SDO_GTYPE e valido. Se o valor do SDO_ETYPE e consistente com o valor do SDO_GTYPE .Por exemplo, se o SDO_GTYPE e 2003, ele deve ter no minimo um elemento do tipo POLYGON na geometria. Se o SDO_ELEM_INFO_ARRAY possui valores triplet validos.Para consistencia da geometria, a funcao checa o seguinte: Poligonos devem possuir no minimo quarto pontos, os quais incluem os pontos que fecham o polygono. Polygonos nao se cruzam. Nenhum dos vertices de uma linha ou polygono sao o mesmo. Polygonos sao orientados corretamente. (Os limites do anel exterior devem estar no sentido anti-horario e os limites interior no sentido horario.) O anel interior do polygono toca o polygono