[pgsql-jp: 38652] Re: 列からのポリゴン作成(PostGIS)

ITAGAKI Takahiro itagaki.takahiro @ oss.ntt.co.jp
2007年 8月 13日 (月) 15:52:59 JST


North <forml @ north.serio.jp> wrote:

> ex) select astext(PolyFromText('POLYGON((0 0, 100 0, 50 50, 0 0))'))
> 
> が、この座標をテーブル列から取得する方法が判りません。
> 例えば、x1,y1,x2,y2,x3,y3というように3点のxY座標がそれぞれ列に入っている
> として、その点を頂点とするPOLYGONを定義したいのです

美しくは無いですが、座標をいったんテキストに変換してはいかがでしょう。
"||" は文字列の連結です。
PolyFromText() を使うのであれば、連結方法をそれに合わせて書き換えてください。

CREATE TABLE tri (x1 float, y1 float, x2 float, y2 float, x3 float, y3 float);
INSERT INTO tri VALUES(0, 0, 100, 0, 50, 50);
SELECT polygon(x1||','||y1||','||x2||','||y2||','||x3||','||y3||','||x1||','||y1) FROM tri;
            polygon
-------------------------------
 ((0,0),(100,0),(50,50),(0,0))
(1 row)


そういえば、可変長引数関数は無いのですね。
  CREATE FUNCTION polygon(params float[]);
  SELECT polygon(x1, y1, x2, y2, x3, y3, x1, y1);
などと書ければ、もうすこしスッキリするのですけれど。




pgsql-jp メーリングリストの案内