Вызов ST_Transform в геометрии, которая уже находится в целевом srid?

11

Я пишу функцию с геометрией в качестве параметра, которая может быть в разных проекциях:

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;

Функция нуждается в геометрии в определенной проекции (32737), но я не хочу обязывать вызывающую функцию выполнять преобразование, я предпочитаю обрабатывать ее внутри функции.

Вопрос в том, чтобы вместо проверки фактического srid безопасно всегда вызывать ST_Transform ? Будет ли что-нибудь делать, если геометрия уже находится в целевой проекции?

С помощью такого запроса я проверяю, что он кажется безопасным, но будет здорово, если кто-то сможет это подтвердить, поскольку я не видел его в документации.

SELECT ST_AsEWKT(geom), ST_AsEWKT(ST_Transform(geom, 32737)) FROM table_in_32737;
Франциско Пуга
источник

Ответы:

12

Функция проверяет один и тот же входящий и исходящий srid и возвращает нетронутым, если это так, как показывает исходный код :

/*
* 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));
Никлас Авен
источник
Спасибо за ссылку на исходный код. Это единственный источник правды.
Франциско Пуга