Hier ist eine Set-Return-Funktion ST_CreateFishnet
, die ein 2D-Gitter aus Polygongeometrien erstellt:
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;
wo nrow
und ncol
die Anzahl der Zeilen und Spalten, xsize
und ysize
die Längen der Zellengröße, und optional x0
und y0
sind Koordinaten der unteren linken Ecke.
Das Ergebnis ist row
und col
Zahlen, beginnend mit 1 in der unteren linken Ecke, und geom
rechteckige Polygone für jede Zelle. Also zum Beispiel:
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)
Oder erstellen Sie eine einzelne Geometriesammlung für das gesamte Raster:
SELECT ST_Collect(cells.geom)
FROM ST_CreateFishnet(4, 6, 10, 10) AS cells;
Sie können die x0
/ y0
origin-Offsets hinzufügen (diese sind standardmäßig auf Null gesetzt).