Chamando ST_Transform na geometria que já está no destino srid?


11

Estou escrevendo uma função que tem uma geometria como parâmetro que pode estar em diferentes projeções:

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;

A função precisa da geometria em uma projeção específica (32737), mas não quero obrigar o chamador a fazer a transformação, prefiro manipulá-la dentro da função.

A questão é que, em vez de verificar o srid real, é seguro chamar sempre ST_Transform ? Fará qualquer coisa se a geometria já estiver na projeção alvo?

Verifico com uma consulta como esta se parece seguro, mas será incrível se alguém puder confirmar isso, pois eu não a vi nos documentos.

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

Respostas:


12

A função verifica o mesmo dentro e fora do srid e retorna intocada, se houver, como mostra o código-fonte :

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

Obrigado pelo link do código fonte. Essa é a fonte única da verdade.
Francisco Puga 29/07
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.