我的第一个PL / pgSQL函数旨在将几何列作为输入并输出一个fishnet / grid表(对我来说是一个常见的任务)。
我不确定我在return语句中做错了什么,因为我正在返回伪类型记录而不是具有不同列的表。
我的代码:
CREATE OR REPLACE FUNCTION ST_Fishnet(
nrow integer,
ncol integer,
geo_table varchar,
geom_column varchar)
RETURNS Table( ids text, geom geometry)
AS $$
DECLARE
collected_geom geometry;
xmin numeric;
xmax numeric;
ymin numeric;
ymax numeric;
xsize numeric;
ysize numeric;
BEGIN
EXECUTE 'SELECT st_collect("'||$4||'") FROM "'||$3||'"' INTO collected_geom;
xmax := st_xmin(collected_geom);
xmin := st_xmax(collected_geom);
ymin := st_ymin(collected_geom);
ymax := st_ymax(collected_geom);
xsize := abs(xmax - xmin) / $2;
ysize := abs(ymax - ymin) / $1;
RETURN QUERY
SELECT
i+1||'-'||j+1 as ids,
ST_Translate(cell, j * xsize + xmax, i * ysize + ymin) AS geom
FROM
generate_series(0, $1 - 1) AS i,
generate_series(0, $2 - 1) AS j,
(SELECT ('POLYGON((0 0, 0 '||ysize||', '||xsize||' '||ysize||', '||xsize||' 0,0 0))')::geometry AS cell) AS temp;
END
$$
LANGUAGE plpgsql;
输出应该看起来像一个带有id和geom列的表,但是出来了,而不是伪类型,如下所示: (1-1,01030000 [...] 40)
阅读了文档,我仍然不确定我做错了什么。
欣赏任何指针。
感谢。
答案 0 :(得分:5)
想出来。
调用函数SELECT * FROM ST_Fishnet(rows, columns, geo-table, the_geom)
生成了所需的表。