¿Llamar a ST_Transform en geometría que ya está en la cuadrícula de destino?

11

Estoy escribiendo una función que tiene una geometría como parámetro que puede estar en diferentes proyecciones:

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 función necesita la geometría en una proyección específica (32737) pero no quiero obligar a la persona que llama a realizar la transformación, prefiero manejarla dentro de la función.

La pregunta es, en lugar de verificar la cuadrícula real, ¿es seguro llamar siempre a ST_Transform ? ¿Hará algo si la geometría ya está en la proyección de destino?

Compruebo con una consulta como esta que parece ser segura, pero será increíble si alguien puede confirmar esto, ya que no lo vi en los documentos.

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

Respuestas:

12

La función verifica la misma cuadrícula de entrada y salida, y devuelve intacta si es así, como muestra el código fuente :

/*
* 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
fuente
Gracias por vincular el código fuente. Esa es la fuente única de la verdad.
Francisco Puga