Como criar, na forma de um polígono, uma grade regular de polígonos / quadrados de um determinado tamanho, no postgis?
Eu pensei em uma função como Como criar uma grade de pontos regular dentro de um polígono no Postgis? somente para quadrados, de modo que os quadrados possam ter 5m x 5m ou até 10m x 10m. Mas não tem idéia de mudar isso da maneira correta.
Respostas:
Aqui está uma função de retorno definida
ST_CreateFishnet
que cria uma grade 2D de geometrias de polígonos:onde
nrow
encol
são o número de linhas e colunas,xsize
eysize
são os comprimentos do tamanho da célula, são opcionaisx0
ey0
são coordenadas para o canto inferior esquerdo.O resultado é
row
ecol
números, começando em 1 no canto inferior esquerdo egeom
polígonos retangulares para cada célula. Então, por exemplo:Ou para fazer uma única coleção de geometria para a grade completa:
Você pode adicionar os deslocamentos
x0
/y0
origin (esses padrão são zero).fonte
Aqui está uma variante específica de geração, para uma situação em que você precisa criar uma grade para um mapa geográfico com uma etapa métrica constante (as células podem ser usadas para agrupar valores, por exemplo, densidade de raios em uma região).
A função não é muito elegante, mas não encontrei nenhuma solução melhor para essa tarefa (incluindo a função de Mike Toews acima). Portanto, você tem um polígono vinculado (por exemplo, proveniente de uma interface do Google Maps), tem um valor de etapa em metros:
Como usá-lo:
Assim, você pode ver que as linhas formatadas pelos polígonos gerados estão ao longo dos paralelos e meridianos geográficos - isso é muito conveniente.
Conselho: Se você calcular algo como densidade (por exemplo, mapa de descargas atmosféricas por células) e a grade for gerada dinamicamente Para aumentar o desempenho, sugiro o uso de tabelas temporárias para armazenar células como polígonos de geometria, com um índice espacial na coluna que representa a célula.
fonte
ST_GeomFromText
ao criar uma caixa para adicionarsectors
, você pode usarST_MakeEnvelope
e apenas especificar as coordenadas inferior esquerda e superior direita da caixa.Você pode criar uma grade regular simplesmente vetorizando uma varredura vazia:
fonte
Eu criei uma variante da função @ Alexander que não exige a transformação em outro SRID. Isso evita a questão de ter que encontrar uma projeção que use medidores como unidades para uma região específica. Usa-se
ST_Project
para caminhar adequadamente usando a projeção fornecida. Também adicionei umwidth_step
eheight_step
para permitir ladrilhos retangulares em vez de exigir que sejam quadrados.Você pode usá-lo assim:
fonte
Aqui está um algoritmo otimizado e eficiente para criar rede de pesca, grade regular, grade poligonal, grade retangular dentro de qualquer envelope, polígono ou multipolígono. quase lida com qualquer SRID;
Link de repositório do GitHub
Use-o com uma consulta simples; A entrada deve ser um polígono, Multipolígono ou envelope válido.
fonte