Um dos novos recursos que vem no PostGIS 3.1 é o suporte à precisão fixa. Este novo recurso faz parte das novas implementações da biblioteca GEOS 3.9.

Já existem algumas funções que possuem esse novo recurso, são elas: ST_Subdivide, ST_SymDifference, ST_Union e ST_UnaryUnion. O recurso no ST_Union, por exemplo, deve melhorar muitos casos em que as pessoas encontram exceções topológicas. Para uma primeira visão, vamos ver como o suporte de precisão fixa afeta a função ST_Subdivide.

Vou dar uma rápida demonstração de como isso funciona cortando o estado de Massachusetts, que faz parte do arquivo de limites estaduais do censo americano. A geometria original se parece com isto:

SELECT geom 
FROM states 
WHERE stusps = 'MA';



1. Subdivisão de precisão dupla

Se utilizarmos a maneira antiga, usando o sistema de coordenadas de precisão dupla – isso resultará em 39 linhas numeradas, e será visualizado conforme a imagem abaixo:

SELECT f.ord, f.sd_geom
FROM states, 
  ST_Subdivide(states.geom, 300) WITH ORDINALITY AS f(sd_geom,ord) 
WHERE stusps = 'MA';



2. Subdivisão de precisão fixa

Agora vamos tentar isso usando uma precisão de escala fixa de 0,001 graus. Como acontece com a maioria das coisas PostGIS, as unidades são conforme o sistema de referência espacial. Neste caso, temos NAD 83 (long/lat), então estamos definindo a precisão fixa em 0,001 graus. Se fosse uma camada do Brasil, com SIRGAS 2000, SAD69, WGS 84 baseadas em coordenadas geográficas (lat/long) também utilizaríamos a mesma lógica em graus. Isso só seria diferente se a informações estivesse em UTM ao invés de Lat/Long, nesse caso ao invés de graus utilizaríamos como unidade de medida, o metro.

SELECT f.ord, f.sd_geom
FROM states ,
 ST_Subdivide(states.geom, 300,0.001) WITH ORDINALITY AS f(sd_geom,ord) 
WHERE stusps = 'MA';



O resultado é que acabamos com 10 linhas em vez de 39. Você pode perceber que as bordas são um pouco mais suaves do que a imagem anterior. Isso ocorre porque em uma precisão fixa, quando a geometria é sobreposta na grade fixa, os pontos menores do que o tamanho da grade se tornam um, resultando em menos pontos, portanto, maior extensão da área antes de atingir um limite de 300 pontos subdivididos e também uma imagem mais uniforme.

Conforme você aumenta o tamanho da grade, você obtém um resultado mais “pixelado”. Aqui aumentamos nosso tamanho de grade para 0,1 grau e acabamos com a fidelidade do PacMan. O resultado são 2 linhas de geometrias muito “pixeladas”, veja:

SELECT f.ord, f.sd_geom
FROM states, 
 ST_Subdivide(states.geom, 300,0.1) WITH ORDINALITY AS f(sd_geom,ord) 
WHERE stusps = 'MA';



Este post foi escrito originalmente por Regina Obe e foi traduzido e adaptado livremente por este blog.

Fonte: Boston GIS