別館のPostGISの項目を整理しつつlwpostgis.sqlを見ていて気付いたのですが,AsUKML()という関数があります。確認したバージョンはPostGIS-1.2.1。
定義は
CREATE OR REPLACE FUNCTION AsUKML(geometry, int4, int4)
RETURNS TEXT
AS '$libdir/liblwgeom.so.1.2','LWGEOM_asKML'
LANGUAGE 'C' IMMUTABLE STRICT; -- WITH (isstrict,iscachable);
...
となっていて,これが自分の理解して(思い込んで)いたAsKML()の定義。
AsKML()の定義はどうなっているかというと
-- AsKML(geom, precision, version)
CREATE OR REPLACE FUNCTION AsKML(geometry, int4, int4)
RETURNS TEXT
AS 'SELECT AsUKML(transform($1,4326),$2,$3)'
LANGUAGE 'SQL' IMMUTABLE STRICT; -- WITH (isstrict,iscachable);
...
となっていて,AsUKML()関数の第一引数にtransform($1,4326)を渡しており,WGS84(SRID=4326)へのtransform()を内部で行うようになっています。
処理する元データがWGS84決めうちであれば,AsUKML()を使う方がよいのかもしれません。
もうひとつ。上の定義には引数が三つありますが,最後の引数にはKMLのバージョンを渡せるようになっています。省略した場合には
...
-- AsUKML(geom, precision) / version=2
CREATE OR REPLACE FUNCTION AsUKML(geometry, int4)
RETURNS TEXT
AS '$libdir/liblwgeom.so.1.2','LWGEOM_asKML'
LANGUAGE 'C' IMMUTABLE STRICT; -- WITH (isstrict,iscachable);
...
となっていてversion 2がデフォルト。型がintなので2.1は渡せませんし,ソースコード(lwgeom_kml.c)のLWGEOM_asKML()関数を見ると
if ( version != 2 )
{
elog(ERROR, "Only KML 2 is supported");
PG_RETURN_NULL();
}
となっていて現状では特に意味はもちませんが,今後のKMLのバージョンアップ(3以降)を想定する場合には考慮しておくのも良いかもしれません。
とりあえず別館のページも以上の内容を加筆しておきました。
最近のコメント