忍者ブログ
[331] [330] [329] [328] [327] [326] [325] [324] [323] [322] [321]

DATE : 2024/04/19 (Fri)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2007/08/28 (Tue)

LINESTRING オブジェクト(GEOMETRYCOLLECTION の場合は最初の LINESTRING オブジェクト)から最後の点を抽出する ST_EndPoint 関数(EndPoint 関数)を PostGIS 1.3.1 で使用すると、関数が異常終了します(1.2.1 では問題ありません)。例えば、psql 上で ST_EndPoint 関数を使用した SQL 文を実行すると、次のようなエラーが出て PostgreSQL サーバとの接続が切れてしまいます。

サーバとの接続が想定外にクローズされました
        おそらく要求の処理前または処理中にサーバが異常終了
        したことを意味しています。
サーバへの接続が切れました。リセットしています: 失敗。

ユーザ向けのメーリングリストを調べてみると、これはバグのようです。すでにソースコードは修正されたようです。

しかし、ソースコードは修正されたものの、新しいバージョン(1.3.2)は8月28日現在、まだリリースされていません。単純な機能の関数なので、修正されたソースコードを基に関数を定義し直してみました。

CREATE OR REPLACE FUNCTION ST_EndPoint( geom geometry ) RETURNS geometry AS $$
BEGIN
	-- LINESTRING の最後の点を返す
	RETURN ST_PointN( geom, ST_NumPoints( geom ) );
END;
$$ LANGUAGE 'plpgsql' IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION EndPoint( geom geometry ) RETURNS geometry AS $$
BEGIN
	RETURN ST_EndPoint( geom );
END;
$$ LANGUAGE 'plpgsql' IMMUTABLE STRICT;

問題のソースコードは C で書かれているので実行時間は劣りますが、機能は同じだと思います。

(;^ω^)1.3.2のリリースまでは、これを代わりに使うことにします。

参考文献

2007-12-12 追記

2007年12月1日にリリースされた PostGIS 1.3.2 では、この問題は解決しています。

PR
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
ブログ内検索
最近の状況
リンク
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック