Tinha uns polígonos com geometria inválida aqui (uma pá deles, uns 5k), e estava há algum tempo procurando uma forma de corrigí-los. Não é nada grave, eles têm “Self-intersection”, você descobre isso quando usa a função STIsValidReason do PostGIS, já que a STIsValid só diz se é válida ou não. Queria um jeito de corrigir dentro do próprio PostgreSQL e não usando outra ferramenta.
Baixei o gvsig, porque pretendo aprender a usá-lo, inclusive para corrigir esse tipo de problema, mas hoje, lendo o Introduction to PostGIS do OpenGeo, achei uma dica que poderia funcionar para o meu caso, e funcionou. 🙂
Bastou usar a função ST_Buffer, com um offset 0 (é, zero mesmo), assim, a função vai gerar uma nova geometria, idêntica à original, de acordo com as regras de topologia daOGC e ela será válida. Simples assim.
Lindo, né? 🙂
Exemplo: SELECT STBuffer(thegeom, 0) FROM table WHERE NOT STIsValid(thegeom)