Chiamare ST_Transform in geometria che è già in target srid?


11

Sto scrivendo una funzione che ha una geometria come parametro che può essere in diverse proiezioni:

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;

La funzione ha bisogno della geometria in una proiezione specifica (32737) ma non voglio obbligare il chiamante a effettuare la trasformazione, preferisco gestirla all'interno della funzione.

La domanda è, invece di controllare l'effettivo srid, è sicuro chiamare sempre ST_Transform ? Farà qualcosa se la geometria è già nella proiezione target?

Controllo con una query come questa che sembra essere sicura, ma sarebbe fantastico se qualcuno potesse confermarlo perché non l'ho visto nei documenti.

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

Risposte:


12

La funzione controlla lo stesso dentro e fuori srid e, in tal caso, restituisce intatta, come mostra il codice sorgente :

/*
* 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));

Grazie per il collegamento del codice sorgente. Questa è l'unica fonte di verità.
Francisco Puga,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.