Piszę funkcję, która ma geometrię jako parametr, który może być w różnych rzutach:
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;
Funkcja wymaga geometrii w konkretnym rzucie (32737), ale nie chcę zobowiązać osoby wywołującej do dokonania transformacji, wolę obsłużyć ją wewnątrz funkcji.
Pytanie polega na tym, że zamiast sprawdzania faktycznego srida, zawsze można bezpiecznie wywołać ST_Transform ? Czy zrobisz coś, jeśli geometria jest już w rzucie docelowym?
Sprawdzam za pomocą takiego zapytania, czy wydaje się bezpieczne, ale będzie niesamowite, jeśli ktoś może to potwierdzić, ponieważ nie widziałem tego w dokumentacji.
SELECT ST_AsEWKT(geom), ST_AsEWKT(ST_Transform(geom, 32737)) FROM table_in_32737;