quinta-feira, 19 de abril de 2012

Procedimento para detectar e corrigir feições inválidas no PostgreSQL


-->
Para atender a expecificação do padrão OGC Simple Feature um polígono deve ter sua topologia verfiricada e validada. Para isto no Postgis é possível verificar utilizando uma conjunto de comandos como por exemplo estes:

1) select st_isValid(the_geom), gid from bioma_UF ;

Neste caso estamos apenas apresentando o resultado da validação e o número do gid de cada polígono.

Agora para facilitar vamos listar apenas os gid dos polígonos não válidos.

2) select gid from bioma_UF where not st_isValid(the_geom);

Sabendo que existe erro nestas features, podemos testar uma opção para tentar corrigir o problema.

3) select st_isValid(st_buffer(the_geom,0.0)), gid from bioma_UF where not st_isValid(the_geom); 

Assim podemos atualizar os dados com o seguinte comando:

UPDATE bioma_UF set the_geom = st_buffer(the_geom, 0.0) where not st_isValid(the_geom);

Outras boas dicas sobre este assunto podem ser encontradas em:


Outra opção:

update table set geomcol = st_multi(st_collectionextract(st_makevalid(geomcol),3))
    where st_isvalid(geomcol) = false;

update dados_brutos_2020.ucstodas set geom = 
st_multi(st_simplifypreservetopology(st_buffer(geom, 0.000001), 0.0001))

quarta-feira, 18 de abril de 2012

Como adicionar um sequencial em uma consulta postgresql.

Uma solução para ter um número sequencial, a fim de ser utilizado como identificador único, por exemplo, é aproveitar a função run_number(). No exemplo:

select row_number() over(order by lin) as id , lin, col from focos_noaa limit 10;

o resultado é:
id;lin;col
1;172;1103
2;173;1383
3;173;1137
4;176;89
5;179;442
6;185;1127
7;187;76
8;192;1417
9;192;778
10;196;932

Uma explicação detalhada e muito boa eu encontrei em 01/mai/2020 em https://www.postgresqltutorial.com/postgresql-row_number/