Đây là một hàm trả về được thiết lập ST_CreateFishnet
để tạo ra một lưới 2D của hình học đa giác:
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;
trong đó nrow
và ncol
là số lượng hàng và cột, xsize
và ysize
là độ dài của kích thước ô, và tùy chọn x0
và y0
là tọa độ cho góc dưới bên trái.
Kết quả là row
và các col
số, bắt đầu từ 1 ở góc dưới bên trái và geom
đa giác hình chữ nhật cho mỗi ô. Ví dụ:
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)
Hoặc để tạo một bộ sưu tập hình học duy nhất cho toàn lưới:
SELECT ST_Collect(cells.geom)
FROM ST_CreateFishnet(4, 6, 10, 10) AS cells;
Bạn có thể thêm x0
/ y0
offset gốc (chúng được mặc định là 0).