Vous appelez ST_Transform dans une géométrie qui est déjà dans srid cible?

11

J'écris une fonction qui a une géométrie comme paramètre qui peut être dans différentes projections:

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 fonction a besoin de la géométrie dans une projection spécifique (32737) mais je ne veux pas obliger l'appelant à faire la transformation, je préfère la gérer à l'intérieur de la fonction.

La question est, au lieu de vérifier le srid réel, il est sûr d'appeler toujours ST_Transform ? Va faire quoi que ce soit si la géométrie est déjà dans la projection cible?

Je vérifie avec une requête comme celle-ci qu'elle semble être sûre, mais ce sera génial si quelqu'un peut le confirmer car je ne l'ai pas vu dans les documents.

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

Réponses:

12

La fonction vérifie les mêmes srid d'entrée et de sortie et retourne intact si c'est le cas, comme le montre le code source :

/*
* 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
la source
Merci de lier le code source. C'est la source unique de vérité.
Francisco Puga