Memanggil ST_Transformasi dalam geometri yang sudah ada di target srid?

11

Saya sedang menulis fungsi yang memiliki geometri sebagai parameter yang dapat di proyeksi berbeda:

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;

Fungsi ini membutuhkan geometri dalam proyeksi tertentu (32737) tetapi saya tidak ingin mewajibkan pemanggil untuk melakukan transformasi, saya lebih suka menanganinya di dalam fungsi.

Pertanyaannya adalah, alih-alih memeriksa srid yang sebenarnya, apakah aman untuk selalu memanggil ST_Transformasi ? Akan melakukan apa pun jika geometri sudah dalam proyeksi target?

Saya memeriksa dengan query seperti ini bahwa tampaknya aman, tetapi akan luar biasa jika seseorang dapat mengkonfirmasi ini karena saya tidak melihatnya di dokumen.

SELECT ST_AsEWKT(geom), ST_AsEWKT(ST_Transform(geom, 32737)) FROM table_in_32737;
Francisco Puga
sumber

Jawaban:

12

Fungsi memeriksa masuk dan keluar yang sama, dan mengembalikan tidak tersentuh jika demikian, seperti yang ditunjukkan oleh kode sumber :

/*
* 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));
Nicklas Avén
sumber
Terima kasih telah menautkan kode sumber. Itulah sumber kebenaran yang unik.
Francisco Puga