ST_CreateFishnet
2B çokgen geometrileri ızgarası oluşturan bir set döndürme işlevi :
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;
burada nrow
ve ncol
satır ve sütun sayısıdır, xsize
ve ysize
hücre boyutu uzunlukları ve isteğe bağlı x0
ve y0
alt sol köşesinde koordinatları vardır.
Sonucudur row
ve col
sayılar, sol alt köşede, ve en 1'den başlayarak geom
, her bir hücre için dikdörtgen çokgen. Yani örneğin:
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)
Veya tüm ızgara için tek bir geometri koleksiyonu yapmak için:
SELECT ST_Collect(cells.geom)
FROM ST_CreateFishnet(4, 6, 10, 10) AS cells;
x0
/ y0
Origin ofsetlerini ekleyebilirsiniz (bunlar varsayılan olarak sıfırdır).