使用PostGIS类型为PostgreSQL自定义类型创建输入和输出功能



我已经在我的PostgreSQL数据库中创建了一个复合结构的自定义类型:

CREATE TYPE circle_geo AS (
       box geography(POLYGON,4326), 
       center geography(POINT,4326), 
       radius float8
);

因此,它使用了一些gis类型(点和多边形(。现在,我希望能够为此自定义类型创建输入和输出函数,以便我可以传递一个简单的字符串表示(即(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写成?如果是这样,我该如何在他们内部打电话(例如st_makepoint,st_makepoint,st_makepolygon,st_makepolygon,st_makeline,st_project ...(?任何帮助将不胜感激;(

类型输入和输出功能必须在C中写入,因为它们需要接受或返回类型cstring,这是一个无法在SQL中处理的普通C字符串。p>请参阅显示一个示例的文档。

您可以通过服务器编程接口(SPI(从函数调用PostGis函数,该界面允许您执行SQL语句,或者通过直接调用从PostGIS导出的C函数来更快(在这种情况下,您必须与PostGIS链接(。

最新更新