【发布时间】:2017-11-01 20:26:25
【问题描述】:
我在我的 postgresql 数据库中创建了一个具有这种复合结构的自定义类型:
CREATE TYPE circle_geo AS (
box geography(POLYGON,4326),
center geography(POINT,4326),
radius float8
);
所以它使用了一些 postgis 类型(POINT 和 POLYGON)。 现在我希望能够为这个自定义类型创建一个 INPUT 和 OUTPUT 函数,以便我可以传递一个简单的字符串表示(即 (x,y),c 就像 postgresql 本机几何圆类型)来创建一个它的实例
我的输入伪函数如下所示:
input_function(cstring) where cstring is of the form (x,y),r:
radius = r;
center = ST_MakePoint(x,y);
pdist = sqrt(2*radius*radius);
box = ST_MakePolygon(ST_MakeLine(ARRAY[
ST_Project(center, pdist, radians(45.0)),
ST_Project(center, pdist, radians(135.0)),
ST_Project(center, pdist, radians(-135.0)),
ST_Project(center, pdist, radians(-45.0)),
ST_Project(center, pdist, radians(45.0))
]))
我的 output_function 应该只返回一个由
组成的 cstring(center.x_lon,center.y_lat),radius
我的问题是我不知道如何编写这些输入和输出函数。它们可以用 PLPgSQL 编写还是必须用 C 编写?如果是这样,我如何在其中调用 postgis 函数(如 ST_MakePoint、ST_MakePolygon、ST_MakeLine、ST_Project ......)? 任何帮助将不胜感激;)
【问题讨论】:
标签: postgresql postgis plpgsql custom-type