1. Introdução
O armazenamento e a manipulação de dados georreferenciados exigem estruturas que forneçam suporte a geometrias complexas e consultas espaciais eficientes. Contudo temos diversas ferramentas que atendem a essas necessidades, cada uma com suas particularidades. Neste artigo, exploraremos três soluções populares: PostGIS, H2GIS e GeoMesa. Temos o PostGIS, uma extensão do PostgreSQL amplamente adotada para dados espaciais; o H2GIS, uma extensão do banco de dados H2 que oferece portabilidade e facilidade de uso; e o GeoMesa, uma plataforma projetada para lidar com grandes volumes de dados geoespaciais em ambientes distribuídos, a seguir iremos compará-las em termos de funcionalidades, desempenho e casos de uso ideais.
2. PostGIS: A Referência em Bancos Relacionais
O PostGIS é uma extensão do sistema de gerenciamento de banco de dados objeto-relacional PostgreSQL, em que é fortemente consolidada e utilizado como o padrão de mercado para bancos de dados espaciais de código aberto. O PostGIS implementa rigorosamente o padrão Simple Features for SQL do Open Geospatial Consortium (OGC), introduzindo tipos de dados como GEOMETRY (para planos cartesianos) e GEOGRAPHY (para cálculos sobre a esferóide terrestre). Ela pode suportar vários tipos atomicos de geometrias, como Point, LineString e Polygon, além de coleções complexas (MultiPoint, MultiPolygon). Embora opere majoritariamente em modelos bidimensionais, o PostGIS suporta representações tridimensionais (Z) e de medida (M), incluindo superfícies poliédricas, e ainda mais ela se destaca em funções de análise espacial avançadas (como ST_Intersects, ST_Buffer e ST_Distance) e suporte a dados Raster e topologia. Sobre os tipos atomicos de geometrias suportadas pelo PostGIS, temos:
-
Point: Representa um único ponto no espaço.
- O Point como sua respectiva nomenclatura sugere, representa um único ponto no espaço, definido por coordenadas X e Y (e opcionalmente Z e M).
-
LineString: Representa uma linha composta por uma série de pontos conectados.
- LineString é uma geometria unidimensional formada por uma sequência contígua de segmentos de linha. Cada segmento de linha é definido por dois pontos, com o ponto final de um segmento formando o ponto inicial do próximo segmento.
-
Polygon: Representa uma área delimitada por uma série de pontos que formam um polígono.
- Polygon é uma região planar bidimensional, delimitada por uma fronteira externa (a concha) e zero ou mais fronteiras internas (buracos). Cada fronteira é um LinearRing.
-
MultiPoint: Representa uma coleção de pontos.
- MultiPoint é uma coleção de Points.
-
MultiLineString: Representa uma coleção de linhas.
- MultiLineString é uma coleção de LineStrings. Um MultiLineString é fechado se cada um de seus elementos for fechado.
-
MultiPolygon: Representa uma coleção de polígonos.
- MultiPolygon é uma coleção de Polygons não sobrepostos e não adjacentes. Os polígonos na coleção podem tocar apenas em um número finito de pontos.
-
GeometryCollection: Representa uma coleção heterogênea de geometrias.
- GeometryCollection é uma coleção heterogênea (mista) de geometrias.
-
PolyhedralSurface: Representa uma superfície composta por várias faces poligonais.
- PolyhedralSurface é uma coleção contígua de patches ou facetas que compartilham algumas arestas. Cada patch é um Polygon planar. Se as coordenadas do Polygon tiverem ordenadas Z, então a superfície é tridimensional.
-
Triangle: Representa um triângulo definido por três vértices.
- Triangle é um polígono definido por três vértices distintos não colineares
-
TIN: Representa uma rede triangular irregular composta por vários triângulos.
- TIN é uma coleção de Triangles não sobrepostos que representam uma Rede Triangular Irregular.
Também possuem o que podemos chamar de Curves, que não são tão comuns em relação as outras extensões, mas que também são suportadas pelo PostGIS, são elas:
-
CircularString: Representa uma curva circular definida por uma série de pontos.
- CircularString é o tipo básico de curva, semelhante a um LineString no mundo linear. Um único segmento de arco é especificado por três pontos: os pontos inicial e final (primeiro e terceiro) e algum outro ponto no arco.
-
CompoundCurve: Representa uma curva composta por várias curvas simples.
- CompoundCurve é uma única curva contínua que pode conter segmentos de arco circular e segmentos lineares.
-
CurvePolygon: Representa um polígono cujas bordas são definidas por curvas.
- CurvePolygon é como um polígono, com um anel externo e zero ou mais anéis internos. A diferença é que um anel pode ser um CircularString ou CompoundCurve, bem como um LineString.
-
MultiCurve: Representa uma coleção de curvas.
- MultiCurve é uma coleção de curvas que podem incluir LineStrings, CircularStrings ou CompoundCurves.
-
MultiSurface: Representa uma coleção de superfícies.
- MultiSurface é uma coleção de superfícies, que podem ser Polygons ou CurvePolygons.
O padrão Simple Feature Access estabeleceu dois formatos para representar os valores geometricos que são conhecidos como:
-
Well-Known Text (WKT): Fornece uma representação textual padrão dos dados espaciais.
- WKT oferece uma representação textual padrão dos dados espaciais. Exemplos de representações WKT de objetos espaciais incluem:
- POINT(0 0)
- LINESTRING(0 0,1 1,1 2)
- POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))
-
Well-Known Binary (WKB): Fornece uma representação binária portátil dos dados espaciais.
- WKB oferece uma representação portátil e de precisão total dos dados espaciais como dados binários (arrays de bytes). Exemplos de representações WKB de objetos espaciais incluem: -
WKT: POINT(1 1) -> WKB: 0101000000000000000000F03F000000000000F03F
- WKT: LINESTRING (2 2, 9 9) -> WKB: 0102000000020000000000000000000040000000000000004000000000000022400000000000002240
Problemas em relação ao PostGIS e maneiras de contorná-los
Nas atuais versões do PostgreSQL, há um problema em relação ao otimizador de consultas quando utilizamos das tabelas TOAST, que são utilizadas para armazenar valores que não cabem em páginas de dados convencionais, exemplo; textos longos, imagens ou geometrias complexas. O problema acontece quando temos uma tabela com geometrias grandes, mas com poucas linhas, então o otimizador de consultas pode não considerar o uso do índice espacial, resultando em consultas ineficientes. Para resolver esse problema existem duas soluções:
- Forçar o uso do índice desativando a varredura sequencial com o comando "SET enable_seqscan TO off;" antes de executar a consulta.
- Criar uma coluna adicional que armazene o envelope (bounding box) das geometrias, e utilizar essa coluna para consultas espaciais, reduzindo a necessidade de acessar as geometrias completas. Além disso, o PostgreSQL não permite o clustering em índices GIST do PostGIS devido à forma como esses índices lidam com valores NULL. Uma solução para contornar essa situação seria adicionar uma restrição "NOT NULL" à coluna de geometria, claro contanto que a aplicação permita essa mudança. Outra questão é o desempenho ao lidar com geometrias 3D ou 4D quando apenas as dimensões 2D são necessárias, pode-se converter essas geometrias para 2D utilizando o comando "UPDATE mytable SET geom = ST_Force2D(geom);" para melhorar o desempenho das consultas.
O que o PostGIS NÃO tem em relação ao H2GIS
- Portabilidade extrema / banco embarcado
- Simplicidade para ambientes pequenos
- Dependência de Java (vantagem em alguns contextos)
- Configuração mais simples para desenvolvimento rápido
- Menor consumo de recursos para aplicações leves
3. H2GIS: Agilidade e Portabilidade
O H2GIS é uma extensão do banco de dados H2, feita para fornecer suporte a dados geoespaciais. Ele foi desenvolvido para ser leve, fácil de usar e portátil, o que o torna uma escolha interessante para aplicações que exigem um banco de dados embutido ou para desenvolvimento rápido. O H2GIS suporta os tipos de geometria básicos, como Point, LineString e Polygon, semelhante ao PostGIS, mas também inclui suporte para tipos de geometria mais avançados, como MultiPoint, MultiLineString e MultiPolygon. Ele também é compatível com o padrão Simple Feature SQL, facilitando a transição para usuários familiarizados com o PostGIS. O H2GIS é mais adequado em situações de aplicativos que sejam mais leves em relação ao uso do Banco de Dados, ou para desenvolvimento rápido, onde a portabilidade e facilidade de uso são mais importantes do que o desempenho em larga escala. Ele é excelente para aplicativos móveis, prototipagem e cenários onde a simplicidade é uma prioridade.
Os seus tipos são bastante similares aos do PostGIS, com suporte a:
- POINT: Representa um único ponto no espaço.
- LINESTRING: Representa uma linha composta por uma série de pontos conectados.
- POLYGON: Representa uma área delimitada por uma série de pontos que formam um polígono.
- MULTIPOINT: Representa uma coleção de pontos.
- MULTILINESTRING: Representa uma coleção de linhas.
- MULTIPOLYGON: Representa uma coleção de polígonos.
- GEOMETRYCOLLECTION: Representa uma coleção heterogênea de geometrias. Pode se levar em consideração que o funcionamento desses tipos são semelhantes, só mudam na implementação do programa.
O H2GIS suporta as seguintes coordenadas:
- ***2D: X Y***
- ***Z: X Y Z***
- ***M: X Y M***
- ***ZM: X Y Z M***
Ele também permite a gestão de sistemas de referência espacial (SRS) através da especificação de Spatial Reference System Identifier (SRID) em suas geometrias, o que é fundamental para garantir a precisão e a interoperabilidade dos dados geoespaciais.
O H2GIS é compatível com o PostGIS, permitindo que os usuários definam suas geometrias de maneira semelhante, seja com ou sem espaços na nomenclatura dos tipos de geometria. No entanto, para garantir a compatibilidade total com o PostGIS, é recomendado evitar o uso de espaços ao definir as geometrias, seguindo a convenção do PostGIS.
Em relação ao uso 3D e 4D do H2GIS, ele suporta a conversão de geometrias para 2D usando a função ST_Force2D(), o que pode ser útil para melhorar o desempenho em consultas que não exigem as dimensões adicionais, tendo como funções;
- ***ST_Force3D***: Converte uma geometria 2D em 3D.
- ***ST_Force3DM***: Converte uma geometria 2D ou 3D em 3DM.
- ***ST_Force4D***: Converte uma geometria 2D ou 3D em 4D.
O H2GIS inclui uma ampla variedade de funções para manipulação e análise de dados geoespaciais, como funções de criação de geometria, edição, medidas, propriedades, topografia e triangulação. Ele suporta a criação de índices espaciais para otimizar consultas espaciais, utilizando a sintaxe "CREATE SPATIAL INDEX [index_name] ON table_name(geometry_column);". Essas funções e recursos tornam o H2GIS uma opção viável para aplicações que exigem manipulação e análise de dados geoespaciais, especialmente em cenários onde a portabilidade e a facilidade de uso são prioridades.
O que o H2GIS NÃO tem em relação ao PostGIS
- Conjunto completo de funções espaciais
- Alto desempenho para grandes volumes
- Suporte avançado a índices espaciais
- Comunidade, maturidade e produção
- Recursos avançados de validação e correção
- Suporte a tipos de geometria avançados (ex: PolyhedralSurface, Triangle, TIN)
- Suporte a curvas (ex: CircularString, CompoundCurve, CurvePolygon)
- Suporte a dados Raster
4. GeoMesa: Escalabilidade para Big Data
O GeoMesa também é uma plataforma de código aberto que foi projetado para lidar com um alto número de dados geoespaciais, mas com um foco específico em ambientes de Big Data e computação distribuída. Ele foi feito idealmente para trabalhar junto de sistemas distribuídos como Apache Accumulo, Apache HBase, Apache Cassandra, Apache Kafka, Apache Kudu, e Google Bigtable. O GeoMesa é otimizado para consultas espaciais e temporais em grandes volumes de dados, utiliza-se índices espaciais e espaço-temporais distribuídos para garantir consultas eficientes mesmo com bilhões de registros. Ele suporta o padrão OGC Simple Features, permitindo a manipulação de tipos de geometria que são eles:
- POINT: Representa um único ponto no espaço.
- LINESTRING: Representa uma linha composta por uma série de pontos conectados.
- POLYGON: Representa uma área delimitada por uma série de pontos que formam um polígono.
- MULTIPOINT: Representa uma coleção de pontos.
- MULTILINESTRING: Representa uma coleção de linhas.
- MULTIPOLYGON: Representa uma coleção de polígonos.
- GEOMETRYCOLLECTION: Representa uma coleção heterogênea de geometrias.
Os maiores diferenciais do GeoMesa em relação ao PostGIS e H2GIS
- Índices espaço-temporais distribuídos: O GeoMesa utiliza índices que combinam espaço e tempo, distribuídos em cluster, projetados para Big Data, como Z2/Z3, XZ/XZ3 e Space-Time Index, o que o torna altamente eficiente para consultas espaço-temporais em grandes volumes de dados.
- Integração nativa com streaming (Kafka): O GeoMesa suporta a ingestão de dados em tempo real e consultas enquanto os dados ainda estão chegando, o que é ideal para aplicações como rastreamento de veículos, sensores IoT e monitoramento ambiental.
- Escalabilidade horizontal real: O GeoMesa é projetado para escalar horizontalmente adicionando máquinas, o que o torna adequado para lidar com bilhões de registros usando sistemas como HBase, Accumulo e Cassandra.
- Consultas espaço-temporais extremamente rápidas: O GeoMesa é otimizado para responder rapidamente a consultas que combinam espaço e tempo, como "Onde estava X entre tal data e tal hora?" ou "Quais eventos ocorreram nessa área em determinado período?".
- Integração direta com Big Data e Spark: O GeoMesa permite consultas geoespaciais com Apache Spark, análises massivas em lote e machine learning geoespacial, o que o torna uma escolha poderosa para análises avançadas em grandes conjuntos de dados geoespaciais.
O que o GeoMesa não tem em relação ao PostGIS e H2GIS
- Não é um banco relacional completo: O GeoMesa não substitui um SGBD relacional tradicional e não possui recursos como JOIN relacional tradicional, FOREIGN KEY e TRANSACTIONS como no PostgreSQL, pois depende de bancos NoSQL distribuídos.
- Conjunto menor de funções geométricas: O GeoMesa foca em consultas espaciais e espaço-temporais, mas não possui muitas funções topológicas avançadas ou ferramentas completas de validação geométrica, o que pode ser uma limitação para algumas aplicações.
- Menor suporte a operações de edição espacial: O GeoMesa é orientado à consulta e não é ideal para edição interativa, correção geométrica ou operações manuais em SIG, o que pode ser um desafio para usuários que precisam dessas funcionalidades.
- Configuração e uso mais complexos: O GeoMesa exige configuração avançada, incluindo a necessidade de um cluster e ferramentas Big Data, o que pode ser uma barreira para usuários sem experiência em ambientes distribuídos.
- Menor flexibilidade para dados pequenos: Para conjuntos de dados menores, o overhead do GeoMesa pode ser alto e a complexidade desnecessária, tornando o PostGIS e H2GIS opções mais eficientes para pequenos volumes de dados geoespaciais.
5. Conclusão
A escolha entre PostGIS, H2GIS e GeoMesa depende fortemente dos requisitos específicos do projeto, deve ser levando em conta o que a aplicação irá receber de demanda e quais funcionalidades são mais importantes para o desenvolvimento. O PostGIS é a escolha ideal para aplicações que exigem um banco de dados relacional completo e um conjunto robusto de funções espaciais, enquanto o H2GIS é mais adequado para aplicações leves e portáteis. Já o GeoMesa é a melhor opção para lidar com grandes volumes de dados geoespaciais em ambientes distribuídos, especialmente quando consultas espaço-temporais rápidas são necessárias. Avaliar cuidadosamente as necessidades do projeto e as características de cada solução é fundamental para garantir o sucesso do desenvolvimento e a eficiência na manipulação de dados geoespaciais. A comparação entre essas três soluções destaca as diferenças em termos de arquitetura, funcionalidades e casos de uso, permitindo que os desenvolvedores façam escolhas informadas com base nas necessidades específicas de seus projetos geoespaciais.
6. Referências
PostGIS
Site oficial do projeto PostGIS. Disponível em:
https://postgis.net/
Documentação oficial do PostGIS
Manual e referência completa das funções e tipos geométricos. Disponível em:
https://postgis.net/documentation/
H2GIS
Site oficial do projeto H2GIS. Disponível em:
https://www.h2gis.org/
Documentação do H2GIS
Guia de uso, funções espaciais e compatibilidade com Simple Features. Disponível em:
https://www.h2gis.org/docs/dev/
GeoMesa
Site oficial do projeto GeoMesa. Disponível em:
https://www.geomesa.org/
Documentação do GeoMesa
Referência técnica, índices espaço-temporais e integração com Big Data. Disponível em:
https://www.geomesa.org/documentation/
Open Geospatial Consortium (OGC) – Simple Features Specification
Especificação oficial do padrão Simple Features. Disponível em:
https://www.ogc.org/standards/sfa
Top comments (0)