Voici une fonction de retour d'ensemble ST_CreateFishnet
qui crée une grille 2D de géométries de polygones:
CREATE OR REPLACE FUNCTION ST_CreateFishnet(
nrow integer, ncol integer,
xsize float8, ysize float8,
x0 float8 DEFAULT 0, y0 float8 DEFAULT 0,
OUT "row" integer, OUT col integer,
OUT geom geometry)
RETURNS SETOF record AS
$$
SELECT i + 1 AS row, j + 1 AS col, ST_Translate(cell, j * $3 + $5, i * $4 + $6) AS geom
FROM generate_series(0, $1 - 1) AS i,
generate_series(0, $2 - 1) AS j,
(
SELECT ('POLYGON((0 0, 0 '||$4||', '||$3||' '||$4||', '||$3||' 0,0 0))')::geometry AS cell
) AS foo;
$$ LANGUAGE sql IMMUTABLE STRICT;
où nrow
et ncol
sont le nombre de lignes et de colonnes, xsize
et ysize
sont les longueurs de la taille de la cellule, et sont facultatives x0
et y0
sont les coordonnées du coin inférieur gauche.
Le résultat est row
et des col
chiffres, à partir de 1 dans le coin inférieur gauche, et des geom
polygones rectangulaires pour chaque cellule. Donc par exemple:
SELECT *
FROM ST_CreateFishnet(4, 6, 10, 10) AS cells;
row | col | geom
-----+-----+--------------------------------
1 | 1 | 0103000000010000000500000000...
2 | 1 | 0103000000010000000500000000...
3 | 1 | 0103000000010000000500000000...
4 | 1 | 0103000000010000000500000000...
1 | 2 | 0103000000010000000500000000...
2 | 2 | 0103000000010000000500000000...
...
3 | 6 | 0103000000010000000500000000...
4 | 6 | 0103000000010000000500000000...
(24 rows)
Ou pour créer une seule collection de géométrie pour la grille complète:
SELECT ST_Collect(cells.geom)
FROM ST_CreateFishnet(4, 6, 10, 10) AS cells;
Vous pouvez ajouter les décalages x0
/ y0
origine (leur valeur par défaut est zéro).