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)