ST_Transform in einer Geometrie aufrufen, die sich bereits im Zielsrid befindet?

11

Ich schreibe eine Funktion mit einer Geometrie als Parameter, die in verschiedenen Projektionen vorliegen kann:

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;

Die Funktion benötigt die Geometrie in einer bestimmten Projektion (32737), aber ich möchte den Aufrufer nicht zur Durchführung der Transformation verpflichten, sondern sie lieber innerhalb der Funktion behandeln.

Die Frage ist, anstatt den tatsächlichen SDR zu überprüfen, ist es sicher, immer ST_Transform aufzurufen . Wird etwas getan, wenn sich die Geometrie bereits in der Zielprojektion befindet?

Ich überprüfe mit einer solchen Abfrage, ob es sicher zu sein scheint, aber es wird großartig sein, wenn jemand dies bestätigen kann, da ich es in den Dokumenten nicht gesehen habe.

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

Antworten:

12

Die Funktion sucht nach demselben In- und Out-Srid und gibt in diesem Fall unberührt zurück, wie der Quellcode zeigt :

/*
* 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
quelle
Danke für den Link des Quellcodes. Das ist die einzigartige Quelle der Wahrheit.
Francisco Puga