No último mês, foi lançada oficialmente a versão 3.1 do PostGIS, extensão espacial do PostgreSQL e com ela algumas novidades como a que iremos ver neste post, que são os geradores de grades.

Resumir dados em uma grade fixa é uma maneira comum de preparar dados para análise. As grades fixas têm algumas vantagens sobre os limites naturais e administrativos:

  • Sem apelo às autoridades superiores
  • Áreas de unidade iguais
  • Distâncias iguais entre as células
  • Bom para passar dados do domínio computacional “espacial” para um domínio “não espacial”

Idealmente, queremos ser capazes de gerar grades que tenham alguns recursos-chave:

  • Ponto de origem fixo, de modo que a grade pode ser gerada novamente e não se mover
  • Coordenadas de células fixas para um determinado tamanho de célula, de modo que a mesma célula possa ser referida apenas usando um endereço de célula, sem ter que materializar os limites da célula

A função ST_SquareGrid (tamanho, limites) gera uma grade com uma origem em (0, 0) no plano de coordenadas e preenche os limites dos quadrados da geometria fornecida.

SELECT (ST_SquareGrid(400000, ST_Transform(a.geom, 3857))).* 
FROM admin a  
WHERE name = 'Brazil';

Portanto, uma grade gerada usando a geometria do Brasil como referência tem esta aparência.



A função ST_HexagonGrid (tamanho, limites) funciona da mesma forma que a função de grade quadrada.

Os hexágonos são populares para alguns fins de exibição cartográfica e de modelagem. Surpreendentemente, eles também podem ser indexados usando o mesmo esquema de indexação bidimensional dos quadrados.

A grade do hexágono começa com um hexágono (0, 0) centralizado na origem, e a grade para os limites incluem todos os hexágonos que tocam os limites.



Tal como acontece com a grade quadrada, as coordenadas dos hexágonos são fixas para um tamanho de grade específico.

SELECT (ST_HexagonGrid(100000, ST_Transform(a.geom, 3857))).* 
FROM admin a  
WHERE name = 'Germany';

Aqui está uma grade hexagonal de 100 km da Alemanha:



É possível materializar resumos baseados em grade, sem realmente materializar as grades, usando as funções do gerador para criar as grades desejadas em tempo real.

Aqui está um resumo dos pontos de população, usando uma grade hexadecimal:

SELECT sum(pop_max) as pop_max, hexes.geom
FROM
    ST_HexagonGrid(
        4.0,
        ST_SetSRID(ST_EstimatedExtent('places', 'geom'), 4326)
    ) AS hexes
    INNER JOIN
    places AS p
    ON ST_Intersects(p.geom, hexes.geom)
GROUP BY hexes.geom;

Também é possível unir grades dinâmicas a ferramentas de visualização, para experiências de usuário mais dinâmicas, basta você adicionar essas visões ao seu GeoServer, por exemplo.



Este post foi escrito orignalmente por Paul Ramsey em inglês e foi traduzido e adaptado livremente por este blog.

Fonte: Crunchy Blog