在已经处于目标srid的几何中调用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),但我不想让调用者进行转换,我更喜欢在函数内部进行处理。

问题是,始终检查ST_Transform是安全的,而不是检查实际的srid 。如果几何已经在目标投影中,该怎么办?

我检查了这样的查询,它看起来很安全,但是如果有人可以确认这一点就很棒了,因为我在文档中没有看到它。

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

Answers:


12

该函数检查是否有相同的输入和输出,如果是,则返回不变,如源代码所示

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

感谢您链接源代码。那是真理的独特来源。
弗朗西斯科·普加
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.