Embora o PostGIS inclua muitos algoritmos e funcionalidades próprias, ele também adiciona inteligência geoespacial ao PostgreSQL, vinculando bibliotecas especializadas para lidar com problemas específicos:

  • Proj para suporte ao sistema de referência de coordenadas;
  • GDAL para funções e formatos raster;
  • GEOS para geometria computacional (operações básicas);
  • CGAL para mais geometria computacional (operações 3D); e para suporte ao formato libxml2, libjsonc, libprotobuf-c

Muitas das funções padrão de processamento de geometria no PostGIS são realmente avaliadas na biblioteca do GEOS; portanto, as atualizações no GEOS são muito importantes para o PostGIS – elas adicionam novas funcionalidades ou suavizam o comportamento das funções existentes. As funções apoiadas pelo GEOS incluem:

Essas funções são todas funções de “operação de sobreposição” – elas recebem argumentos de geometria e constroem novas geometrias para saída. Embora as “operações de sobreposição” no GEOS sejam muito confiáveis, elas não são 100% confiáveis. Quando as operações falham, a biblioteca lança o temido TopologyException, o que indica que existe algo inconsistente e inutilizável.

Como existem muitos usuários do PostGIS que gerenciam muitos dados, há um pequeno número de casos que causam TopologyExceptionse e incomodam os usuários, porém o objetivo da equipe de desenvolvimento do PostGIS é reduzir esse número a zero.

Infelizmente o desenvolvimento das operações de sobreposição mais robustas não ficaram prontas para a versão 3.8 do GEOS, apesar do esforço do desenvolvedor Martin Davis que passou o verão (no hemisfério norte) trabalhando neste novo mecanismo de sobreposição, porém ele estará disponível na versão 3.9.

As falhas de sobreposição são causadas quando interseções entre arestas resultam em inconsistências no grafo de sobreposição. Mesmo usando números de precisão dupla, os sistemas têm apenas 51 bits de precisão para representar coordenadas, e essa precisão fixa pode resultar em grafos que não refletem corretamente suas entradas.

A solução está construindo um sistema que pode operar com qualquer precisão fixa e manter a geometria válida. Como exemplo, aqui o novo mecanismo constrói representações válidas da Europa com qualquer precisão, até ridiculamente grosseiras.



Na prática, o mecanismo será usado com uma tolerância próxima à precisão dupla, mas ainda oferece folga suficiente para lidar com casos difíceis de maneira que os usuários considerem visualmente “aceitáveis”. Inicialmente, a nova funcionalidade deve se encaixar sob as funções existentes do PostGIS sem alterações, mas no futuro pode-se expor botões para permitir que os usuários definam explicitamente o domínio de precisão em que desejam trabalhar.

Além do novo mecanismo de sobreposição, muito trabalho foi feito para tornar a base de código mais limpa, usando expressões C ++ mais “modernas” e portando novas correções para os algoritmos existentes no GEOS.

Fonte: Clever Elephant Blog