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;

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

Merci de lier le code source. C'est la source unique de vérité.
Francisco Puga
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.