2017-05-31 13 views
0

を使用してPostgreSQLのカスタムタイプの入力および出力関数を作成する私は、この複合構造を持つ私のPostgreSQLデータベースでカスタムタイプを作成しました:は、PostGISのタイプに

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

ので、それはいくつかのPostGISのタイプ(POINTとPOLYGON)を使用しています。 今、このカスタムタイプのINPUTとOUTPUT関数を作成して、単純な文字列表現(postgresqlのネイティブなジオメトリサークルタイプのような(x、y))を渡すことができるようにしたいと思います

私の入力擬似関数は次のようになり、それのインスタンス:

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)) 
    ])) 

と単に

(center.x_lon,center.y_lat),radius 

私の問題で構成さのCStringを返す必要があり、私のoutput_functionはこの私がいないということですこれらの入力を書き込む方法を知っている出力関数を出力します。彼らはPLPgSQLで書かれることができますか、またはCで書かれている必要がありますか?もしそうなら、どうすればそれらの中にPostgis関数(ST_MakePoint、ST_MakePolygon、ST_MakeLine、ST_Projectなど)を呼び出すことができますか?

答えて

0

タイプ入力および出力関数は、SQLで処理できないプレーンなC文字列のタイプcstringを受け入れるか返す必要があるため、Cで記述する必要があります。

例を示すthe documentationを参照してください。

PostGIS関数は、Server Programming Interface(SPI)(SQL文を実行できる)またはPostGISからエクスポートされたC関数を直接呼び出して呼び出すことができます(PostGISとリンクする必要があります) 。