category: データベース
DATE : 2007/08/28 (Tue)
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のリリースまでは、これを代わりに使うことにします。
参考文献
- [postgis-users] Problem with st_endpoint in postgis 1.3.1 for windows
- [postgis-users] Problem with st_endpoint in postgis 1.3.1 for windows(返信)
- /trunk/lwgeom/lwgeom_ogc.cC で書かれた ST_EndPoint 関数(LWGEOM_endpoint_linestring 関数)
2007-12-12 追記
2007年12月1日にリリースされた PostGIS 1.3.2 では、この問題は解決しています。
PR
忍者ブログ [PR]