Виклик ST_Transform з геометрії, яка вже знаходиться в цільовій сітці?


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

Дякуємо за посилання вихідного коду. Це унікальне джерело істини.
Франциско Пуга
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.