既にターゲットsridにあるジオメトリでST_Transformを呼び出しますか?


11

私は、さまざまな投影法で使用できるパラメーターとしてジオメトリを持つ関数を作成しています。

CREATE OR REPLACE FUNCTION foo(in geometry) RETURNS boolean AS $$
DECLARE
    transformed_geom geometry := in;
BEGIN
    IF ST_SRID(transformed_geom) != 32737 THEN
        transformed_geom := ST_Transform(transformed_geom, 32737);
    END IF;
    [ ... ]
END;
$$ language plpgsql;

この関数は特定の投影法(32737)でジオメトリを必要としますが、変換を行うために呼び出し側に義務を負わせたくありません。関数内で処理することを好みます。

問題は、実際のsridをチェックする代わりに、常にST_Transformを呼び出すのが安全ですか?ジオメトリがすでにターゲット投影にある場合、何をしますか?

このようなクエリを使用して、安全であるように確認しますが、ドキュメントで確認できなかったため、誰かがこれを確認できれば素晴らしいでしょう。

SELECT ST_AsEWKT(geom), ST_AsEWKT(ST_Transform(geom, 32737)) FROM table_in_32737;

回答:


12

関数は、ソースコードが示すように、同じinおよびout sridをチェックし、もしそうであればそのまま返します:

/*
* If input SRID and output SRID are equal, return geometry
* without transform it
*/
if ( input_srid == output_srid )
    PG_RETURN_POINTER(PG_GETARG_DATUM(0));

ソースコードをリンクしていただきありがとうございます。それが唯一の真実の源です。
フランシスコプガ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.